From a55a646de973aa280513c8f4a1294b0912c7a730 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Sun, 28 Jul 2024 17:22:36 -0400 Subject: [PATCH 001/165] Fix world manager access stalling for the main thread --- .../geyser/platform/mod/world/GeyserModWorldManager.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/world/GeyserModWorldManager.java b/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/world/GeyserModWorldManager.java index db1768737..524087e86 100644 --- a/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/world/GeyserModWorldManager.java +++ b/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/world/GeyserModWorldManager.java @@ -33,8 +33,10 @@ import net.minecraft.core.component.DataComponents; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.Component; import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerChunkCache; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BannerBlockEntity; @@ -43,7 +45,6 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.DecoratedPotBlockEntity; import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.level.chunk.LevelChunkSection; -import net.minecraft.world.level.chunk.status.ChunkStatus; import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3i; import org.geysermc.geyser.level.GeyserWorldManager; @@ -89,7 +90,8 @@ public class GeyserModWorldManager extends GeyserWorldManager { return 0; } - ChunkAccess chunk = level.getChunkSource().getChunk(x >> 4, z >> 4, ChunkStatus.FULL, false); + // Only loads active chunks, and doesn't delegate to main thread + ChunkAccess chunk = ((ServerChunkCache) level.getChunkSource()).chunkMap.getChunkToSend(ChunkPos.asLong(x >> 4, z >> 4)); if (chunk == null) { return 0; } From e2f40569f8e07b7ec4502a056ad64454e26c8952 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Sat, 19 Oct 2024 22:38:04 -0400 Subject: [PATCH 002/165] Get some bits going --- .../geyser/entity/type/LivingEntity.java | 31 +- .../type/living/animal/horse/CamelEntity.java | 2 +- .../type/player/SessionPlayerEntity.java | 4 +- .../entity/vehicle/VehicleComponent.java | 4 +- .../geyser/inventory/item/Potion.java | 2 +- .../java/org/geysermc/geyser/item/Items.java | 214 +- .../geysermc/geyser/level/block/Blocks.java | 3502 +++++++++-------- .../level/block/property/Properties.java | 2 + .../geyser/level/physics/CollisionResult.java | 34 + .../geyser/session/GeyserSession.java | 5 +- .../inventory/InventoryTranslator.java | 8 +- .../JavaClientboundRecipesTranslator.java | 82 - ....java => JavaLoginFinishedTranslator.java} | 12 +- .../java/JavaRecipeBookAddTranslator.java | 81 + .../java/JavaUpdateRecipesTranslator.java | 913 +++-- ...or.java => JavaSetHeldSlotTranslator.java} | 8 +- .../JavaContainerSetSlotTranslator.java | 4 +- gradle/libs.versions.toml | 2 +- 18 files changed, 2528 insertions(+), 2382 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/level/physics/CollisionResult.java delete mode 100644 core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaClientboundRecipesTranslator.java rename core/src/main/java/org/geysermc/geyser/translator/protocol/java/{JavaGameProfileTranslator.java => JavaLoginFinishedTranslator.java} (91%) create mode 100644 core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java rename core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/{JavaSetCarriedItemTranslator.java => JavaSetHeldSlotTranslator.java} (86%) 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 626ceca5c..33064edfe 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 @@ -25,11 +25,6 @@ package org.geysermc.geyser.entity.type; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Optional; -import java.util.UUID; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; @@ -71,6 +66,12 @@ import org.geysermc.mcprotocollib.protocol.data.game.level.particle.EntityEffect import org.geysermc.mcprotocollib.protocol.data.game.level.particle.Particle; import org.geysermc.mcprotocollib.protocol.data.game.level.particle.ParticleType; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + @Getter @Setter public class LivingEntity extends Entity { @@ -445,35 +446,35 @@ public class LivingEntity extends Entity { protected void updateAttribute(Attribute javaAttribute, List<AttributeData> newAttributes) { if (javaAttribute.getType() instanceof AttributeType.Builtin type) { switch (type) { - case GENERIC_MAX_HEALTH -> { + case MAX_HEALTH -> { // Since 1.18.0, setting the max health to 0 or below causes the entity to die on Bedrock but not on Java // See https://github.com/GeyserMC/Geyser/issues/2971 this.maxHealth = Math.max((float) AttributeUtils.calculateValue(javaAttribute), 1f); newAttributes.add(createHealthAttribute()); } - case GENERIC_MOVEMENT_SPEED -> { + case MOVEMENT_SPEED -> { AttributeData attributeData = calculateAttribute(javaAttribute, GeyserAttributeType.MOVEMENT_SPEED); newAttributes.add(attributeData); if (this instanceof ClientVehicle clientVehicle) { clientVehicle.getVehicleComponent().setMoveSpeed(attributeData.getValue()); } } - case GENERIC_STEP_HEIGHT -> { + case STEP_HEIGHT -> { if (this instanceof ClientVehicle clientVehicle) { clientVehicle.getVehicleComponent().setStepHeight((float) AttributeUtils.calculateValue(javaAttribute)); } } - case GENERIC_GRAVITY -> { + case GRAVITY -> { if (this instanceof ClientVehicle clientVehicle) { clientVehicle.getVehicleComponent().setGravity(AttributeUtils.calculateValue(javaAttribute)); } } - case GENERIC_ATTACK_DAMAGE -> newAttributes.add(calculateAttribute(javaAttribute, GeyserAttributeType.ATTACK_DAMAGE)); - case GENERIC_FLYING_SPEED -> newAttributes.add(calculateAttribute(javaAttribute, GeyserAttributeType.FLYING_SPEED)); - case GENERIC_FOLLOW_RANGE -> newAttributes.add(calculateAttribute(javaAttribute, GeyserAttributeType.FOLLOW_RANGE)); - case GENERIC_KNOCKBACK_RESISTANCE -> newAttributes.add(calculateAttribute(javaAttribute, GeyserAttributeType.KNOCKBACK_RESISTANCE)); - case GENERIC_JUMP_STRENGTH -> newAttributes.add(calculateAttribute(javaAttribute, GeyserAttributeType.HORSE_JUMP_STRENGTH)); - case GENERIC_SCALE -> { + case ATTACK_DAMAGE -> newAttributes.add(calculateAttribute(javaAttribute, GeyserAttributeType.ATTACK_DAMAGE)); + case FLYING_SPEED -> newAttributes.add(calculateAttribute(javaAttribute, GeyserAttributeType.FLYING_SPEED)); + case FOLLOW_RANGE -> newAttributes.add(calculateAttribute(javaAttribute, GeyserAttributeType.FOLLOW_RANGE)); + case KNOCKBACK_RESISTANCE -> newAttributes.add(calculateAttribute(javaAttribute, GeyserAttributeType.KNOCKBACK_RESISTANCE)); + case JUMP_STRENGTH -> newAttributes.add(calculateAttribute(javaAttribute, GeyserAttributeType.HORSE_JUMP_STRENGTH)); + case SCALE -> { // Attribute on Java, entity data on Bedrock setAttributeScale((float) AttributeUtils.calculateValue(javaAttribute)); updateBedrockMetadata(); 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 3c0bf1a70..b83a85bfb 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 @@ -141,7 +141,7 @@ public class CamelEntity extends AbstractHorseEntity implements ClientVehicle { @Override protected AttributeData calculateAttribute(Attribute javaAttribute, GeyserAttributeType type) { AttributeData attributeData = super.calculateAttribute(javaAttribute, type); - if (javaAttribute.getType() == AttributeType.Builtin.GENERIC_JUMP_STRENGTH) { + if (javaAttribute.getType() == AttributeType.Builtin.JUMP_STRENGTH) { vehicleComponent.setHorseJumpStrength(attributeData.getValue()); } return attributeData; 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 f427b001a..a8b0765f3 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 @@ -247,9 +247,9 @@ public class SessionPlayerEntity extends PlayerEntity { @Override protected void updateAttribute(Attribute javaAttribute, List<AttributeData> newAttributes) { - if (javaAttribute.getType() == AttributeType.Builtin.GENERIC_ATTACK_SPEED) { + if (javaAttribute.getType() == AttributeType.Builtin.ATTACK_SPEED) { session.setAttackSpeed(AttributeUtils.calculateValue(javaAttribute)); - } else if (javaAttribute.getType() == AttributeType.Builtin.PLAYER_BLOCK_INTERACTION_RANGE) { + } else if (javaAttribute.getType() == AttributeType.Builtin.BLOCK_INTERACTION_RANGE) { this.blockInteractionRange = AttributeUtils.calculateValue(javaAttribute); } else { super.updateAttribute(javaAttribute, newAttributes); diff --git a/core/src/main/java/org/geysermc/geyser/entity/vehicle/VehicleComponent.java b/core/src/main/java/org/geysermc/geyser/entity/vehicle/VehicleComponent.java index db703a3cb..4f4a46dc9 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/vehicle/VehicleComponent.java +++ b/core/src/main/java/org/geysermc/geyser/entity/vehicle/VehicleComponent.java @@ -76,8 +76,8 @@ public class VehicleComponent<T extends LivingEntity & ClientVehicle> { public VehicleComponent(T vehicle, float stepHeight) { this.vehicle = vehicle; this.stepHeight = stepHeight; - this.moveSpeed = (float) AttributeType.Builtin.GENERIC_MOVEMENT_SPEED.getDef(); - this.gravity = AttributeType.Builtin.GENERIC_GRAVITY.getDef(); + this.moveSpeed = (float) AttributeType.Builtin.MOVEMENT_SPEED.getDef(); + this.gravity = AttributeType.Builtin.GRAVITY.getDef(); double width = vehicle.getBoundingBoxWidth(); double height = vehicle.getBoundingBoxHeight(); 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 129c365a9..21de6394e 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 @@ -99,7 +99,7 @@ public enum Potion { } public PotionContents toComponent() { - return new PotionContents(this.ordinal(), -1, Collections.emptyList()); + return new PotionContents(this.ordinal(), -1, Collections.emptyList(), null); } public static Potion getByJavaIdentifier(String javaIdentifier) { 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 462e98d19..ba4b37ff5 100644 --- a/core/src/main/java/org/geysermc/geyser/item/Items.java +++ b/core/src/main/java/org/geysermc/geyser/item/Items.java @@ -25,9 +25,39 @@ package org.geysermc.geyser.item; -import org.geysermc.geyser.item.components.Rarity; import org.geysermc.geyser.item.components.ToolTier; -import org.geysermc.geyser.item.type.*; +import org.geysermc.geyser.item.type.ArmorItem; +import org.geysermc.geyser.item.type.ArrowItem; +import org.geysermc.geyser.item.type.AxolotlBucketItem; +import org.geysermc.geyser.item.type.BannerItem; +import org.geysermc.geyser.item.type.BlockItem; +import org.geysermc.geyser.item.type.BoatItem; +import org.geysermc.geyser.item.type.CompassItem; +import org.geysermc.geyser.item.type.CrossbowItem; +import org.geysermc.geyser.item.type.DecoratedPotItem; +import org.geysermc.geyser.item.type.DyeItem; +import org.geysermc.geyser.item.type.DyeableArmorItem; +import org.geysermc.geyser.item.type.ElytraItem; +import org.geysermc.geyser.item.type.EnchantedBookItem; +import org.geysermc.geyser.item.type.FilledMapItem; +import org.geysermc.geyser.item.type.FireworkRocketItem; +import org.geysermc.geyser.item.type.FireworkStarItem; +import org.geysermc.geyser.item.type.FishingRodItem; +import org.geysermc.geyser.item.type.GoatHornItem; +import org.geysermc.geyser.item.type.Item; +import org.geysermc.geyser.item.type.MaceItem; +import org.geysermc.geyser.item.type.MapItem; +import org.geysermc.geyser.item.type.PlayerHeadItem; +import org.geysermc.geyser.item.type.PotionItem; +import org.geysermc.geyser.item.type.ShieldItem; +import org.geysermc.geyser.item.type.ShulkerBoxItem; +import org.geysermc.geyser.item.type.SpawnEggItem; +import org.geysermc.geyser.item.type.TieredItem; +import org.geysermc.geyser.item.type.TippedArrowItem; +import org.geysermc.geyser.item.type.TropicalFishBucketItem; +import org.geysermc.geyser.item.type.WolfArmorItem; +import org.geysermc.geyser.item.type.WritableBookItem; +import org.geysermc.geyser.item.type.WrittenBookItem; import org.geysermc.geyser.level.block.Blocks; import org.geysermc.geyser.registry.Registries; @@ -81,6 +111,7 @@ public final class Items { public static final Item ACACIA_PLANKS = register(new BlockItem(builder(), Blocks.ACACIA_PLANKS)); public static final Item CHERRY_PLANKS = register(new BlockItem(builder(), Blocks.CHERRY_PLANKS)); public static final Item DARK_OAK_PLANKS = register(new BlockItem(builder(), Blocks.DARK_OAK_PLANKS)); + public static final Item PALE_OAK_PLANKS = register(new BlockItem(builder(), Blocks.PALE_OAK_PLANKS)); public static final Item MANGROVE_PLANKS = register(new BlockItem(builder(), Blocks.MANGROVE_PLANKS)); public static final Item BAMBOO_PLANKS = register(new BlockItem(builder(), Blocks.BAMBOO_PLANKS)); public static final Item CRIMSON_PLANKS = register(new BlockItem(builder(), Blocks.CRIMSON_PLANKS)); @@ -93,6 +124,7 @@ public final class Items { public static final Item ACACIA_SAPLING = register(new BlockItem(builder(), Blocks.ACACIA_SAPLING)); public static final Item CHERRY_SAPLING = register(new BlockItem(builder(), Blocks.CHERRY_SAPLING)); public static final Item DARK_OAK_SAPLING = register(new BlockItem(builder(), Blocks.DARK_OAK_SAPLING)); + public static final Item PALE_OAK_SAPLING = register(new BlockItem(builder(), Blocks.PALE_OAK_SAPLING)); public static final Item MANGROVE_PROPAGULE = register(new BlockItem(builder(), Blocks.MANGROVE_PROPAGULE)); public static final Item BEDROCK = register(new BlockItem(builder(), Blocks.BEDROCK)); public static final Item SAND = register(new BlockItem(builder(), Blocks.SAND)); @@ -123,7 +155,7 @@ public final class Items { public static final Item RAW_IRON_BLOCK = register(new BlockItem(builder(), Blocks.RAW_IRON_BLOCK)); public static final Item RAW_COPPER_BLOCK = register(new BlockItem(builder(), Blocks.RAW_COPPER_BLOCK)); public static final Item RAW_GOLD_BLOCK = register(new BlockItem(builder(), Blocks.RAW_GOLD_BLOCK)); - public static final Item HEAVY_CORE = register(new BlockItem(builder().rarity(Rarity.EPIC), Blocks.HEAVY_CORE)); + public static final Item HEAVY_CORE = register(new BlockItem(builder(), Blocks.HEAVY_CORE)); public static final Item AMETHYST_BLOCK = register(new BlockItem(builder(), Blocks.AMETHYST_BLOCK)); public static final Item BUDDING_AMETHYST = register(new BlockItem(builder(), Blocks.BUDDING_AMETHYST)); public static final Item IRON_BLOCK = register(new BlockItem(builder(), Blocks.IRON_BLOCK)); @@ -176,6 +208,7 @@ public final class Items { public static final Item JUNGLE_LOG = register(new BlockItem(builder(), Blocks.JUNGLE_LOG)); public static final Item ACACIA_LOG = register(new BlockItem(builder(), Blocks.ACACIA_LOG)); public static final Item CHERRY_LOG = register(new BlockItem(builder(), Blocks.CHERRY_LOG)); + public static final Item PALE_OAK_LOG = register(new BlockItem(builder(), Blocks.PALE_OAK_LOG)); public static final Item DARK_OAK_LOG = register(new BlockItem(builder(), Blocks.DARK_OAK_LOG)); public static final Item MANGROVE_LOG = register(new BlockItem(builder(), Blocks.MANGROVE_LOG)); public static final Item MANGROVE_ROOTS = register(new BlockItem(builder(), Blocks.MANGROVE_ROOTS)); @@ -190,6 +223,7 @@ public final class Items { public static final Item STRIPPED_ACACIA_LOG = register(new BlockItem(builder(), Blocks.STRIPPED_ACACIA_LOG)); public static final Item STRIPPED_CHERRY_LOG = register(new BlockItem(builder(), Blocks.STRIPPED_CHERRY_LOG)); public static final Item STRIPPED_DARK_OAK_LOG = register(new BlockItem(builder(), Blocks.STRIPPED_DARK_OAK_LOG)); + public static final Item STRIPPED_PALE_OAK_LOG = register(new BlockItem(builder(), Blocks.STRIPPED_PALE_OAK_LOG)); public static final Item STRIPPED_MANGROVE_LOG = register(new BlockItem(builder(), Blocks.STRIPPED_MANGROVE_LOG)); public static final Item STRIPPED_CRIMSON_STEM = register(new BlockItem(builder(), Blocks.STRIPPED_CRIMSON_STEM)); public static final Item STRIPPED_WARPED_STEM = register(new BlockItem(builder(), Blocks.STRIPPED_WARPED_STEM)); @@ -200,6 +234,7 @@ public final class Items { public static final Item STRIPPED_ACACIA_WOOD = register(new BlockItem(builder(), Blocks.STRIPPED_ACACIA_WOOD)); public static final Item STRIPPED_CHERRY_WOOD = register(new BlockItem(builder(), Blocks.STRIPPED_CHERRY_WOOD)); public static final Item STRIPPED_DARK_OAK_WOOD = register(new BlockItem(builder(), Blocks.STRIPPED_DARK_OAK_WOOD)); + public static final Item STRIPPED_PALE_OAK_WOOD = register(new BlockItem(builder(), Blocks.STRIPPED_PALE_OAK_WOOD)); public static final Item STRIPPED_MANGROVE_WOOD = register(new BlockItem(builder(), Blocks.STRIPPED_MANGROVE_WOOD)); public static final Item STRIPPED_CRIMSON_HYPHAE = register(new BlockItem(builder(), Blocks.STRIPPED_CRIMSON_HYPHAE)); public static final Item STRIPPED_WARPED_HYPHAE = register(new BlockItem(builder(), Blocks.STRIPPED_WARPED_HYPHAE)); @@ -210,6 +245,7 @@ public final class Items { public static final Item JUNGLE_WOOD = register(new BlockItem(builder(), Blocks.JUNGLE_WOOD)); public static final Item ACACIA_WOOD = register(new BlockItem(builder(), Blocks.ACACIA_WOOD)); public static final Item CHERRY_WOOD = register(new BlockItem(builder(), Blocks.CHERRY_WOOD)); + public static final Item PALE_OAK_WOOD = register(new BlockItem(builder(), Blocks.PALE_OAK_WOOD)); public static final Item DARK_OAK_WOOD = register(new BlockItem(builder(), Blocks.DARK_OAK_WOOD)); public static final Item MANGROVE_WOOD = register(new BlockItem(builder(), Blocks.MANGROVE_WOOD)); public static final Item CRIMSON_HYPHAE = register(new BlockItem(builder(), Blocks.CRIMSON_HYPHAE)); @@ -221,6 +257,7 @@ public final class Items { public static final Item ACACIA_LEAVES = register(new BlockItem(builder(), Blocks.ACACIA_LEAVES)); public static final Item CHERRY_LEAVES = register(new BlockItem(builder(), Blocks.CHERRY_LEAVES)); public static final Item DARK_OAK_LEAVES = register(new BlockItem(builder(), Blocks.DARK_OAK_LEAVES)); + public static final Item PALE_OAK_LEAVES = register(new BlockItem(builder(), Blocks.PALE_OAK_LEAVES)); public static final Item MANGROVE_LEAVES = register(new BlockItem(builder(), Blocks.MANGROVE_LEAVES)); public static final Item AZALEA_LEAVES = register(new BlockItem(builder(), Blocks.AZALEA_LEAVES)); public static final Item FLOWERING_AZALEA_LEAVES = register(new BlockItem(builder(), Blocks.FLOWERING_AZALEA_LEAVES)); @@ -283,9 +320,12 @@ public final class Items { public static final Item TWISTING_VINES = register(new BlockItem(builder(), Blocks.TWISTING_VINES)); public static final Item SUGAR_CANE = register(new BlockItem(builder(), Blocks.SUGAR_CANE)); public static final Item KELP = register(new BlockItem(builder(), Blocks.KELP)); - public static final Item MOSS_CARPET = register(new BlockItem(builder(), Blocks.MOSS_CARPET)); public static final Item PINK_PETALS = register(new BlockItem(builder(), Blocks.PINK_PETALS)); + public static final Item MOSS_CARPET = register(new BlockItem(builder(), Blocks.MOSS_CARPET)); public static final Item MOSS_BLOCK = register(new BlockItem(builder(), Blocks.MOSS_BLOCK)); + public static final Item PALE_MOSS_CARPET = register(new BlockItem(builder(), Blocks.PALE_MOSS_CARPET)); + public static final Item PALE_HANGING_MOSS = register(new BlockItem(builder(), Blocks.PALE_HANGING_MOSS)); + public static final Item PALE_MOSS_BLOCK = register(new BlockItem(builder(), Blocks.PALE_MOSS_BLOCK)); public static final Item HANGING_ROOTS = register(new BlockItem(builder(), Blocks.HANGING_ROOTS)); public static final Item BIG_DRIPLEAF = register(new BlockItem(builder(), Blocks.BIG_DRIPLEAF, Blocks.BIG_DRIPLEAF_STEM)); public static final Item SMALL_DRIPLEAF = register(new BlockItem(builder(), Blocks.SMALL_DRIPLEAF)); @@ -297,6 +337,7 @@ public final class Items { public static final Item ACACIA_SLAB = register(new BlockItem(builder(), Blocks.ACACIA_SLAB)); public static final Item CHERRY_SLAB = register(new BlockItem(builder(), Blocks.CHERRY_SLAB)); public static final Item DARK_OAK_SLAB = register(new BlockItem(builder(), Blocks.DARK_OAK_SLAB)); + public static final Item PALE_OAK_SLAB = register(new BlockItem(builder(), Blocks.PALE_OAK_SLAB)); public static final Item MANGROVE_SLAB = register(new BlockItem(builder(), Blocks.MANGROVE_SLAB)); public static final Item BAMBOO_SLAB = register(new BlockItem(builder(), Blocks.BAMBOO_SLAB)); public static final Item BAMBOO_MOSAIC_SLAB = register(new BlockItem(builder(), Blocks.BAMBOO_MOSAIC_SLAB)); @@ -337,6 +378,7 @@ public final class Items { public static final Item PURPUR_PILLAR = register(new BlockItem(builder(), Blocks.PURPUR_PILLAR)); public static final Item PURPUR_STAIRS = register(new BlockItem(builder(), Blocks.PURPUR_STAIRS)); public static final Item SPAWNER = register(new BlockItem(builder(), Blocks.SPAWNER)); + public static final Item CREAKING_HEART = register(new BlockItem(builder(), Blocks.CREAKING_HEART)); public static final Item CHEST = register(new BlockItem(builder(), Blocks.CHEST)); public static final Item CRAFTING_TABLE = register(new BlockItem(builder(), Blocks.CRAFTING_TABLE)); public static final Item FARMLAND = register(new BlockItem(builder(), Blocks.FARMLAND)); @@ -356,6 +398,7 @@ public final class Items { public static final Item ACACIA_FENCE = register(new BlockItem(builder(), Blocks.ACACIA_FENCE)); public static final Item CHERRY_FENCE = register(new BlockItem(builder(), Blocks.CHERRY_FENCE)); public static final Item DARK_OAK_FENCE = register(new BlockItem(builder(), Blocks.DARK_OAK_FENCE)); + public static final Item PALE_OAK_FENCE = register(new BlockItem(builder(), Blocks.PALE_OAK_FENCE)); public static final Item MANGROVE_FENCE = register(new BlockItem(builder(), Blocks.MANGROVE_FENCE)); public static final Item BAMBOO_FENCE = register(new BlockItem(builder(), Blocks.BAMBOO_FENCE)); public static final Item CRIMSON_FENCE = register(new BlockItem(builder(), Blocks.CRIMSON_FENCE)); @@ -417,7 +460,7 @@ public final class Items { public static final Item END_PORTAL_FRAME = register(new BlockItem(builder(), Blocks.END_PORTAL_FRAME)); public static final Item END_STONE = register(new BlockItem(builder(), Blocks.END_STONE)); public static final Item END_STONE_BRICKS = register(new BlockItem(builder(), Blocks.END_STONE_BRICKS)); - public static final Item DRAGON_EGG = register(new BlockItem(builder().rarity(Rarity.EPIC), Blocks.DRAGON_EGG)); + public static final Item DRAGON_EGG = register(new BlockItem(builder(), Blocks.DRAGON_EGG)); public static final Item SANDSTONE_STAIRS = register(new BlockItem(builder(), Blocks.SANDSTONE_STAIRS)); public static final Item ENDER_CHEST = register(new BlockItem(builder(), Blocks.ENDER_CHEST)); public static final Item EMERALD_BLOCK = register(new BlockItem(builder(), Blocks.EMERALD_BLOCK)); @@ -428,13 +471,14 @@ public final class Items { public static final Item ACACIA_STAIRS = register(new BlockItem(builder(), Blocks.ACACIA_STAIRS)); public static final Item CHERRY_STAIRS = register(new BlockItem(builder(), Blocks.CHERRY_STAIRS)); public static final Item DARK_OAK_STAIRS = register(new BlockItem(builder(), Blocks.DARK_OAK_STAIRS)); + public static final Item PALE_OAK_STAIRS = register(new BlockItem(builder(), Blocks.PALE_OAK_STAIRS)); public static final Item MANGROVE_STAIRS = register(new BlockItem(builder(), Blocks.MANGROVE_STAIRS)); public static final Item BAMBOO_STAIRS = register(new BlockItem(builder(), Blocks.BAMBOO_STAIRS)); public static final Item BAMBOO_MOSAIC_STAIRS = register(new BlockItem(builder(), Blocks.BAMBOO_MOSAIC_STAIRS)); public static final Item CRIMSON_STAIRS = register(new BlockItem(builder(), Blocks.CRIMSON_STAIRS)); public static final Item WARPED_STAIRS = register(new BlockItem(builder(), Blocks.WARPED_STAIRS)); - public static final Item COMMAND_BLOCK = register(new BlockItem(builder().rarity(Rarity.EPIC), Blocks.COMMAND_BLOCK)); - public static final Item BEACON = register(new BlockItem(builder().rarity(Rarity.RARE), Blocks.BEACON)); + public static final Item COMMAND_BLOCK = register(new BlockItem(builder(), Blocks.COMMAND_BLOCK)); + public static final Item BEACON = register(new BlockItem(builder(), Blocks.BEACON)); public static final Item COBBLESTONE_WALL = register(new BlockItem(builder(), Blocks.COBBLESTONE_WALL)); public static final Item MOSSY_COBBLESTONE_WALL = register(new BlockItem(builder(), Blocks.MOSSY_COBBLESTONE_WALL)); public static final Item BRICK_WALL = register(new BlockItem(builder(), Blocks.BRICK_WALL)); @@ -481,8 +525,8 @@ public final class Items { public static final Item GREEN_TERRACOTTA = register(new BlockItem(builder(), Blocks.GREEN_TERRACOTTA)); public static final Item RED_TERRACOTTA = register(new BlockItem(builder(), Blocks.RED_TERRACOTTA)); public static final Item BLACK_TERRACOTTA = register(new BlockItem(builder(), Blocks.BLACK_TERRACOTTA)); - public static final Item BARRIER = register(new BlockItem(builder().rarity(Rarity.EPIC), Blocks.BARRIER)); - public static final Item LIGHT = register(new BlockItem(builder().rarity(Rarity.EPIC), Blocks.LIGHT)); + public static final Item BARRIER = register(new BlockItem(builder(), Blocks.BARRIER)); + public static final Item LIGHT = register(new BlockItem(builder(), Blocks.LIGHT)); public static final Item HAY_BLOCK = register(new BlockItem(builder(), Blocks.HAY_BLOCK)); public static final Item WHITE_CARPET = register(new BlockItem(builder(), Blocks.WHITE_CARPET)); public static final Item ORANGE_CARPET = register(new BlockItem(builder(), Blocks.ORANGE_CARPET)); @@ -552,14 +596,14 @@ public final class Items { public static final Item CHISELED_RED_SANDSTONE = register(new BlockItem(builder(), Blocks.CHISELED_RED_SANDSTONE)); public static final Item CUT_RED_SANDSTONE = register(new BlockItem(builder(), Blocks.CUT_RED_SANDSTONE)); public static final Item RED_SANDSTONE_STAIRS = register(new BlockItem(builder(), Blocks.RED_SANDSTONE_STAIRS)); - public static final Item REPEATING_COMMAND_BLOCK = register(new BlockItem(builder().rarity(Rarity.EPIC), Blocks.REPEATING_COMMAND_BLOCK)); - public static final Item CHAIN_COMMAND_BLOCK = register(new BlockItem(builder().rarity(Rarity.EPIC), Blocks.CHAIN_COMMAND_BLOCK)); + public static final Item REPEATING_COMMAND_BLOCK = register(new BlockItem(builder(), Blocks.REPEATING_COMMAND_BLOCK)); + public static final Item CHAIN_COMMAND_BLOCK = register(new BlockItem(builder(), Blocks.CHAIN_COMMAND_BLOCK)); public static final Item MAGMA_BLOCK = register(new BlockItem(builder(), Blocks.MAGMA_BLOCK)); public static final Item NETHER_WART_BLOCK = register(new BlockItem(builder(), Blocks.NETHER_WART_BLOCK)); public static final Item WARPED_WART_BLOCK = register(new BlockItem(builder(), Blocks.WARPED_WART_BLOCK)); public static final Item RED_NETHER_BRICKS = register(new BlockItem(builder(), Blocks.RED_NETHER_BRICKS)); public static final Item BONE_BLOCK = register(new BlockItem(builder(), Blocks.BONE_BLOCK)); - public static final Item STRUCTURE_VOID = register(new BlockItem(builder().rarity(Rarity.EPIC), Blocks.STRUCTURE_VOID)); + public static final Item STRUCTURE_VOID = register(new BlockItem(builder(), Blocks.STRUCTURE_VOID)); public static final Item SHULKER_BOX = register(new ShulkerBoxItem(builder().stackSize(1), Blocks.SHULKER_BOX)); public static final Item WHITE_SHULKER_BOX = register(new ShulkerBoxItem(builder().stackSize(1), Blocks.WHITE_SHULKER_BOX)); public static final Item ORANGE_SHULKER_BOX = register(new ShulkerBoxItem(builder().stackSize(1), Blocks.ORANGE_SHULKER_BOX)); @@ -658,7 +702,7 @@ public final class Items { public static final Item DEAD_FIRE_CORAL_FAN = register(new BlockItem(builder(), Blocks.DEAD_FIRE_CORAL_FAN, Blocks.DEAD_FIRE_CORAL_WALL_FAN)); public static final Item DEAD_HORN_CORAL_FAN = register(new BlockItem(builder(), Blocks.DEAD_HORN_CORAL_FAN, Blocks.DEAD_HORN_CORAL_WALL_FAN)); public static final Item BLUE_ICE = register(new BlockItem(builder(), Blocks.BLUE_ICE)); - public static final Item CONDUIT = register(new BlockItem(builder().rarity(Rarity.RARE), Blocks.CONDUIT)); + public static final Item CONDUIT = register(new BlockItem(builder(), Blocks.CONDUIT)); public static final Item POLISHED_GRANITE_STAIRS = register(new BlockItem(builder(), Blocks.POLISHED_GRANITE_STAIRS)); public static final Item SMOOTH_RED_SANDSTONE_STAIRS = register(new BlockItem(builder(), Blocks.SMOOTH_RED_SANDSTONE_STAIRS)); public static final Item MOSSY_STONE_BRICK_STAIRS = register(new BlockItem(builder(), Blocks.MOSSY_STONE_BRICK_STAIRS)); @@ -729,6 +773,7 @@ public final class Items { public static final Item ACACIA_BUTTON = register(new BlockItem(builder(), Blocks.ACACIA_BUTTON)); public static final Item CHERRY_BUTTON = register(new BlockItem(builder(), Blocks.CHERRY_BUTTON)); public static final Item DARK_OAK_BUTTON = register(new BlockItem(builder(), Blocks.DARK_OAK_BUTTON)); + public static final Item PALE_OAK_BUTTON = register(new BlockItem(builder(), Blocks.PALE_OAK_BUTTON)); public static final Item MANGROVE_BUTTON = register(new BlockItem(builder(), Blocks.MANGROVE_BUTTON)); public static final Item BAMBOO_BUTTON = register(new BlockItem(builder(), Blocks.BAMBOO_BUTTON)); public static final Item CRIMSON_BUTTON = register(new BlockItem(builder(), Blocks.CRIMSON_BUTTON)); @@ -744,6 +789,7 @@ public final class Items { public static final Item ACACIA_PRESSURE_PLATE = register(new BlockItem(builder(), Blocks.ACACIA_PRESSURE_PLATE)); public static final Item CHERRY_PRESSURE_PLATE = register(new BlockItem(builder(), Blocks.CHERRY_PRESSURE_PLATE)); public static final Item DARK_OAK_PRESSURE_PLATE = register(new BlockItem(builder(), Blocks.DARK_OAK_PRESSURE_PLATE)); + public static final Item PALE_OAK_PRESSURE_PLATE = register(new BlockItem(builder(), Blocks.PALE_OAK_PRESSURE_PLATE)); public static final Item MANGROVE_PRESSURE_PLATE = register(new BlockItem(builder(), Blocks.MANGROVE_PRESSURE_PLATE)); public static final Item BAMBOO_PRESSURE_PLATE = register(new BlockItem(builder(), Blocks.BAMBOO_PRESSURE_PLATE)); public static final Item CRIMSON_PRESSURE_PLATE = register(new BlockItem(builder(), Blocks.CRIMSON_PRESSURE_PLATE)); @@ -756,6 +802,7 @@ public final class Items { public static final Item ACACIA_DOOR = register(new BlockItem(builder(), Blocks.ACACIA_DOOR)); public static final Item CHERRY_DOOR = register(new BlockItem(builder(), Blocks.CHERRY_DOOR)); public static final Item DARK_OAK_DOOR = register(new BlockItem(builder(), Blocks.DARK_OAK_DOOR)); + public static final Item PALE_OAK_DOOR = register(new BlockItem(builder(), Blocks.PALE_OAK_DOOR)); public static final Item MANGROVE_DOOR = register(new BlockItem(builder(), Blocks.MANGROVE_DOOR)); public static final Item BAMBOO_DOOR = register(new BlockItem(builder(), Blocks.BAMBOO_DOOR)); public static final Item CRIMSON_DOOR = register(new BlockItem(builder(), Blocks.CRIMSON_DOOR)); @@ -776,6 +823,7 @@ public final class Items { public static final Item ACACIA_TRAPDOOR = register(new BlockItem(builder(), Blocks.ACACIA_TRAPDOOR)); public static final Item CHERRY_TRAPDOOR = register(new BlockItem(builder(), Blocks.CHERRY_TRAPDOOR)); public static final Item DARK_OAK_TRAPDOOR = register(new BlockItem(builder(), Blocks.DARK_OAK_TRAPDOOR)); + public static final Item PALE_OAK_TRAPDOOR = register(new BlockItem(builder(), Blocks.PALE_OAK_TRAPDOOR)); public static final Item MANGROVE_TRAPDOOR = register(new BlockItem(builder(), Blocks.MANGROVE_TRAPDOOR)); public static final Item BAMBOO_TRAPDOOR = register(new BlockItem(builder(), Blocks.BAMBOO_TRAPDOOR)); public static final Item CRIMSON_TRAPDOOR = register(new BlockItem(builder(), Blocks.CRIMSON_TRAPDOOR)); @@ -795,6 +843,7 @@ public final class Items { public static final Item ACACIA_FENCE_GATE = register(new BlockItem(builder(), Blocks.ACACIA_FENCE_GATE)); public static final Item CHERRY_FENCE_GATE = register(new BlockItem(builder(), Blocks.CHERRY_FENCE_GATE)); public static final Item DARK_OAK_FENCE_GATE = register(new BlockItem(builder(), Blocks.DARK_OAK_FENCE_GATE)); + public static final Item PALE_OAK_FENCE_GATE = register(new BlockItem(builder(), Blocks.PALE_OAK_FENCE_GATE)); public static final Item MANGROVE_FENCE_GATE = register(new BlockItem(builder(), Blocks.MANGROVE_FENCE_GATE)); public static final Item BAMBOO_FENCE_GATE = register(new BlockItem(builder(), Blocks.BAMBOO_FENCE_GATE)); public static final Item CRIMSON_FENCE_GATE = register(new BlockItem(builder(), Blocks.CRIMSON_FENCE_GATE)); @@ -811,7 +860,8 @@ public final class Items { public static final Item HOPPER_MINECART = register(new Item("hopper_minecart", builder().stackSize(1))); public static final Item CARROT_ON_A_STICK = register(new Item("carrot_on_a_stick", builder().stackSize(1).maxDamage(25))); public static final Item WARPED_FUNGUS_ON_A_STICK = register(new Item("warped_fungus_on_a_stick", builder().stackSize(1).maxDamage(100))); - public static final Item ELYTRA = register(new ElytraItem("elytra", builder().stackSize(1).maxDamage(432).rarity(Rarity.UNCOMMON))); + public static final Item PHANTOM_MEMBRANE = register(new Item("phantom_membrane", builder())); + public static final Item ELYTRA = register(new ElytraItem("elytra", builder().stackSize(1).maxDamage(432))); public static final Item OAK_BOAT = register(new BoatItem("oak_boat", builder().stackSize(1))); public static final Item OAK_CHEST_BOAT = register(new BoatItem("oak_chest_boat", builder().stackSize(1))); public static final Item SPRUCE_BOAT = register(new BoatItem("spruce_boat", builder().stackSize(1))); @@ -826,12 +876,14 @@ public final class Items { public static final Item CHERRY_CHEST_BOAT = register(new BoatItem("cherry_chest_boat", builder().stackSize(1))); public static final Item DARK_OAK_BOAT = register(new BoatItem("dark_oak_boat", builder().stackSize(1))); public static final Item DARK_OAK_CHEST_BOAT = register(new BoatItem("dark_oak_chest_boat", builder().stackSize(1))); + public static final Item PALE_OAK_BOAT = register(new BoatItem("pale_oak_boat", builder().stackSize(1))); + public static final Item PALE_OAK_CHEST_BOAT = register(new BoatItem("pale_oak_chest_boat", builder().stackSize(1))); public static final Item MANGROVE_BOAT = register(new BoatItem("mangrove_boat", builder().stackSize(1))); public static final Item MANGROVE_CHEST_BOAT = register(new BoatItem("mangrove_chest_boat", builder().stackSize(1))); public static final Item BAMBOO_RAFT = register(new BoatItem("bamboo_raft", builder().stackSize(1))); public static final Item BAMBOO_CHEST_RAFT = register(new BoatItem("bamboo_chest_raft", builder().stackSize(1))); - public static final Item STRUCTURE_BLOCK = register(new BlockItem(builder().rarity(Rarity.EPIC), Blocks.STRUCTURE_BLOCK)); - public static final Item JIGSAW = register(new BlockItem(builder().rarity(Rarity.EPIC), Blocks.JIGSAW)); + public static final Item STRUCTURE_BLOCK = register(new BlockItem(builder(), Blocks.STRUCTURE_BLOCK)); + public static final Item JIGSAW = register(new BlockItem(builder(), Blocks.JIGSAW)); public static final Item TURTLE_HELMET = register(new ArmorItem("turtle_helmet", ArmorMaterial.TURTLE, builder().stackSize(1).maxDamage(275))); public static final Item TURTLE_SCUTE = register(new Item("turtle_scute", builder())); public static final Item ARMADILLO_SCUTE = register(new Item("armadillo_scute", builder())); @@ -922,8 +974,8 @@ public final class Items { public static final Item PORKCHOP = register(new Item("porkchop", builder())); public static final Item COOKED_PORKCHOP = register(new Item("cooked_porkchop", builder())); public static final Item PAINTING = register(new Item("painting", builder())); - public static final Item GOLDEN_APPLE = register(new Item("golden_apple", builder().rarity(Rarity.RARE))); - public static final Item ENCHANTED_GOLDEN_APPLE = register(new Item("enchanted_golden_apple", builder().rarity(Rarity.EPIC))); + public static final Item GOLDEN_APPLE = register(new Item("golden_apple", builder())); + public static final Item ENCHANTED_GOLDEN_APPLE = register(new Item("enchanted_golden_apple", builder())); public static final Item OAK_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.OAK_SIGN, Blocks.OAK_WALL_SIGN)); public static final Item SPRUCE_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.SPRUCE_SIGN, Blocks.SPRUCE_WALL_SIGN)); public static final Item BIRCH_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.BIRCH_SIGN, Blocks.BIRCH_WALL_SIGN)); @@ -931,6 +983,7 @@ public final class Items { public static final Item ACACIA_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.ACACIA_SIGN, Blocks.ACACIA_WALL_SIGN)); public static final Item CHERRY_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.CHERRY_SIGN, Blocks.CHERRY_WALL_SIGN)); public static final Item DARK_OAK_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.DARK_OAK_SIGN, Blocks.DARK_OAK_WALL_SIGN)); + public static final Item PALE_OAK_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.PALE_OAK_SIGN, Blocks.PALE_OAK_WALL_SIGN)); public static final Item MANGROVE_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.MANGROVE_SIGN, Blocks.MANGROVE_WALL_SIGN)); public static final Item BAMBOO_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.BAMBOO_SIGN, Blocks.BAMBOO_WALL_SIGN)); public static final Item CRIMSON_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.CRIMSON_SIGN, Blocks.CRIMSON_WALL_SIGN)); @@ -942,6 +995,7 @@ public final class Items { public static final Item ACACIA_HANGING_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.ACACIA_HANGING_SIGN, Blocks.ACACIA_WALL_HANGING_SIGN)); public static final Item CHERRY_HANGING_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.CHERRY_HANGING_SIGN, Blocks.CHERRY_WALL_HANGING_SIGN)); public static final Item DARK_OAK_HANGING_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.DARK_OAK_HANGING_SIGN, Blocks.DARK_OAK_WALL_HANGING_SIGN)); + public static final Item PALE_OAK_HANGING_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.PALE_OAK_HANGING_SIGN, Blocks.PALE_OAK_WALL_HANGING_SIGN)); public static final Item MANGROVE_HANGING_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.MANGROVE_HANGING_SIGN, Blocks.MANGROVE_WALL_HANGING_SIGN)); public static final Item BAMBOO_HANGING_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.BAMBOO_HANGING_SIGN, Blocks.BAMBOO_WALL_HANGING_SIGN)); public static final Item CRIMSON_HANGING_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.CRIMSON_HANGING_SIGN, Blocks.CRIMSON_WALL_HANGING_SIGN)); @@ -969,6 +1023,22 @@ public final class Items { public static final Item COMPASS = register(new CompassItem("compass", builder())); public static final Item RECOVERY_COMPASS = register(new Item("recovery_compass", builder())); public static final Item BUNDLE = register(new Item("bundle", builder().stackSize(1))); + public static final Item WHITE_BUNDLE = register(new Item("white_bundle", builder().stackSize(1))); + public static final Item ORANGE_BUNDLE = register(new Item("orange_bundle", builder().stackSize(1))); + public static final Item MAGENTA_BUNDLE = register(new Item("magenta_bundle", builder().stackSize(1))); + public static final Item LIGHT_BLUE_BUNDLE = register(new Item("light_blue_bundle", builder().stackSize(1))); + public static final Item YELLOW_BUNDLE = register(new Item("yellow_bundle", builder().stackSize(1))); + public static final Item LIME_BUNDLE = register(new Item("lime_bundle", builder().stackSize(1))); + public static final Item PINK_BUNDLE = register(new Item("pink_bundle", builder().stackSize(1))); + public static final Item GRAY_BUNDLE = register(new Item("gray_bundle", builder().stackSize(1))); + public static final Item LIGHT_GRAY_BUNDLE = register(new Item("light_gray_bundle", builder().stackSize(1))); + public static final Item CYAN_BUNDLE = register(new Item("cyan_bundle", builder().stackSize(1))); + public static final Item PURPLE_BUNDLE = register(new Item("purple_bundle", builder().stackSize(1))); + public static final Item BLUE_BUNDLE = register(new Item("blue_bundle", builder().stackSize(1))); + public static final Item BROWN_BUNDLE = register(new Item("brown_bundle", builder().stackSize(1))); + public static final Item GREEN_BUNDLE = register(new Item("green_bundle", builder().stackSize(1))); + public static final Item RED_BUNDLE = register(new Item("red_bundle", builder().stackSize(1))); + public static final Item BLACK_BUNDLE = register(new Item("black_bundle", builder().stackSize(1))); public static final Item FISHING_ROD = register(new FishingRodItem("fishing_rod", builder().stackSize(1).maxDamage(64))); public static final Item CLOCK = register(new Item("clock", builder())); public static final Item SPYGLASS = register(new Item("spyglass", builder().stackSize(1))); @@ -1036,14 +1106,14 @@ public final class Items { public static final Item GHAST_TEAR = register(new Item("ghast_tear", builder())); public static final Item GOLD_NUGGET = register(new Item("gold_nugget", builder())); public static final Item NETHER_WART = register(new BlockItem(builder(), Blocks.NETHER_WART)); - public static final Item POTION = register(new PotionItem("potion", builder().stackSize(1))); public static final Item GLASS_BOTTLE = register(new Item("glass_bottle", builder())); + public static final Item POTION = register(new PotionItem("potion", builder().stackSize(1))); public static final Item SPIDER_EYE = register(new Item("spider_eye", builder())); public static final Item FERMENTED_SPIDER_EYE = register(new Item("fermented_spider_eye", builder())); public static final Item BLAZE_POWDER = register(new Item("blaze_powder", builder())); public static final Item MAGMA_CREAM = register(new Item("magma_cream", builder())); public static final Item BREWING_STAND = register(new BlockItem(builder(), Blocks.BREWING_STAND)); - public static final Item CAULDRON = register(new BlockItem(builder(), Blocks.CAULDRON, Blocks.WATER_CAULDRON, Blocks.POWDER_SNOW_CAULDRON, Blocks.LAVA_CAULDRON)); + public static final Item CAULDRON = register(new BlockItem(builder(), Blocks.CAULDRON, Blocks.LAVA_CAULDRON, Blocks.WATER_CAULDRON, Blocks.POWDER_SNOW_CAULDRON)); public static final Item ENDER_EYE = register(new Item("ender_eye", builder())); public static final Item GLISTERING_MELON_SLICE = register(new Item("glistering_melon_slice", builder())); public static final Item ARMADILLO_SPAWN_EGG = register(new SpawnEggItem("armadillo_spawn_egg", builder())); @@ -1122,16 +1192,18 @@ public final class Items { public static final Item WITHER_SKELETON_SPAWN_EGG = register(new SpawnEggItem("wither_skeleton_spawn_egg", builder())); public static final Item WOLF_SPAWN_EGG = register(new SpawnEggItem("wolf_spawn_egg", builder())); public static final Item ZOGLIN_SPAWN_EGG = register(new SpawnEggItem("zoglin_spawn_egg", builder())); + public static final Item CREAKING_SPAWN_EGG = register(new SpawnEggItem("creaking_spawn_egg", builder())); public static final Item ZOMBIE_SPAWN_EGG = register(new SpawnEggItem("zombie_spawn_egg", builder())); public static final Item ZOMBIE_HORSE_SPAWN_EGG = register(new SpawnEggItem("zombie_horse_spawn_egg", builder())); public static final Item ZOMBIE_VILLAGER_SPAWN_EGG = register(new SpawnEggItem("zombie_villager_spawn_egg", builder())); public static final Item ZOMBIFIED_PIGLIN_SPAWN_EGG = register(new SpawnEggItem("zombified_piglin_spawn_egg", builder())); - public static final Item EXPERIENCE_BOTTLE = register(new Item("experience_bottle", builder().rarity(Rarity.UNCOMMON))); + public static final Item EXPERIENCE_BOTTLE = register(new Item("experience_bottle", builder())); public static final Item FIRE_CHARGE = register(new Item("fire_charge", builder())); public static final Item WIND_CHARGE = register(new Item("wind_charge", builder())); public static final Item WRITABLE_BOOK = register(new WritableBookItem("writable_book", builder().stackSize(1))); public static final Item WRITTEN_BOOK = register(new WrittenBookItem("written_book", builder().stackSize(16))); - public static final Item MACE = register(new MaceItem("mace", builder().stackSize(1).maxDamage(500).rarity(Rarity.EPIC))); + public static final Item BREEZE_ROD = register(new Item("breeze_rod", builder())); + public static final Item MACE = register(new MaceItem("mace", builder().stackSize(1).maxDamage(500))); public static final Item ITEM_FRAME = register(new Item("item_frame", builder())); public static final Item GLOW_ITEM_FRAME = register(new Item("glow_item_frame", builder())); public static final Item FLOWER_POT = register(new BlockItem(builder(), Blocks.FLOWER_POT)); @@ -1141,18 +1213,18 @@ public final class Items { public static final Item POISONOUS_POTATO = register(new Item("poisonous_potato", builder())); public static final Item MAP = register(new MapItem("map", builder())); public static final Item GOLDEN_CARROT = register(new Item("golden_carrot", builder())); - public static final Item SKELETON_SKULL = register(new BlockItem(builder().rarity(Rarity.UNCOMMON), Blocks.SKELETON_SKULL, Blocks.SKELETON_WALL_SKULL)); - public static final Item WITHER_SKELETON_SKULL = register(new BlockItem(builder().rarity(Rarity.UNCOMMON), Blocks.WITHER_SKELETON_SKULL, Blocks.WITHER_SKELETON_WALL_SKULL)); - public static final Item PLAYER_HEAD = register(new PlayerHeadItem(builder().rarity(Rarity.UNCOMMON), Blocks.PLAYER_HEAD, Blocks.PLAYER_WALL_HEAD)); - public static final Item ZOMBIE_HEAD = register(new BlockItem(builder().rarity(Rarity.UNCOMMON), Blocks.ZOMBIE_HEAD, Blocks.ZOMBIE_WALL_HEAD)); - public static final Item CREEPER_HEAD = register(new BlockItem(builder().rarity(Rarity.UNCOMMON), Blocks.CREEPER_HEAD, Blocks.CREEPER_WALL_HEAD)); - public static final Item DRAGON_HEAD = register(new BlockItem(builder().rarity(Rarity.UNCOMMON), Blocks.DRAGON_HEAD, Blocks.DRAGON_WALL_HEAD)); - public static final Item PIGLIN_HEAD = register(new BlockItem(builder().rarity(Rarity.UNCOMMON), Blocks.PIGLIN_HEAD, Blocks.PIGLIN_WALL_HEAD)); - public static final Item NETHER_STAR = register(new Item("nether_star", builder().rarity(Rarity.UNCOMMON))); + public static final Item SKELETON_SKULL = register(new BlockItem(builder(), Blocks.SKELETON_SKULL, Blocks.SKELETON_WALL_SKULL)); + public static final Item WITHER_SKELETON_SKULL = register(new BlockItem(builder(), Blocks.WITHER_SKELETON_SKULL, Blocks.WITHER_SKELETON_WALL_SKULL)); + public static final Item PLAYER_HEAD = register(new PlayerHeadItem(builder(), Blocks.PLAYER_HEAD, Blocks.PLAYER_WALL_HEAD)); + public static final Item ZOMBIE_HEAD = register(new BlockItem(builder(), Blocks.ZOMBIE_HEAD, Blocks.ZOMBIE_WALL_HEAD)); + public static final Item CREEPER_HEAD = register(new BlockItem(builder(), Blocks.CREEPER_HEAD, Blocks.CREEPER_WALL_HEAD)); + public static final Item DRAGON_HEAD = register(new BlockItem(builder(), Blocks.DRAGON_HEAD, Blocks.DRAGON_WALL_HEAD)); + public static final Item PIGLIN_HEAD = register(new BlockItem(builder(), Blocks.PIGLIN_HEAD, Blocks.PIGLIN_WALL_HEAD)); + public static final Item NETHER_STAR = register(new Item("nether_star", builder())); public static final Item PUMPKIN_PIE = register(new Item("pumpkin_pie", builder())); public static final Item FIREWORK_ROCKET = register(new FireworkRocketItem("firework_rocket", builder())); public static final Item FIREWORK_STAR = register(new FireworkStarItem("firework_star", builder())); - public static final Item ENCHANTED_BOOK = register(new EnchantedBookItem("enchanted_book", builder().stackSize(1).rarity(Rarity.UNCOMMON))); + public static final Item ENCHANTED_BOOK = register(new EnchantedBookItem("enchanted_book", builder().stackSize(1))); public static final Item NETHER_BRICK = register(new Item("nether_brick", builder())); public static final Item PRISMARINE_SHARD = register(new Item("prismarine_shard", builder())); public static final Item PRISMARINE_CRYSTALS = register(new Item("prismarine_crystals", builder())); @@ -1162,13 +1234,13 @@ public final class Items { public static final Item RABBIT_FOOT = register(new Item("rabbit_foot", builder())); public static final Item RABBIT_HIDE = register(new Item("rabbit_hide", builder())); public static final Item ARMOR_STAND = register(new Item("armor_stand", builder().stackSize(16))); - public static final Item IRON_HORSE_ARMOR = register(new ArmorItem("iron_horse_armor", ArmorMaterial.IRON, builder().stackSize(1))); - public static final Item GOLDEN_HORSE_ARMOR = register(new ArmorItem("golden_horse_armor", ArmorMaterial.GOLD, builder().stackSize(1))); - public static final Item DIAMOND_HORSE_ARMOR = register(new ArmorItem("diamond_horse_armor", ArmorMaterial.DIAMOND, builder().stackSize(1))); - public static final Item LEATHER_HORSE_ARMOR = register(new DyeableArmorItem("leather_horse_armor", ArmorMaterial.LEATHER, builder().stackSize(1))); + public static final Item IRON_HORSE_ARMOR = register(new Item("iron_horse_armor", builder().stackSize(1))); + public static final Item GOLDEN_HORSE_ARMOR = register(new Item("golden_horse_armor", builder().stackSize(1))); + public static final Item DIAMOND_HORSE_ARMOR = register(new Item("diamond_horse_armor", builder().stackSize(1))); + public static final Item LEATHER_HORSE_ARMOR = register(new Item("leather_horse_armor", builder().stackSize(1))); public static final Item LEAD = register(new Item("lead", builder())); public static final Item NAME_TAG = register(new Item("name_tag", builder())); - public static final Item COMMAND_BLOCK_MINECART = register(new Item("command_block_minecart", builder().stackSize(1).rarity(Rarity.EPIC))); + public static final Item COMMAND_BLOCK_MINECART = register(new Item("command_block_minecart", builder().stackSize(1))); public static final Item MUTTON = register(new Item("mutton", builder())); public static final Item COOKED_MUTTON = register(new Item("cooked_mutton", builder())); public static final Item WHITE_BANNER = register(new BannerItem(builder().stackSize(16), Blocks.WHITE_BANNER, Blocks.WHITE_WALL_BANNER)); @@ -1187,7 +1259,7 @@ public final class Items { public static final Item GREEN_BANNER = register(new BannerItem(builder().stackSize(16), Blocks.GREEN_BANNER, Blocks.GREEN_WALL_BANNER)); public static final Item RED_BANNER = register(new BannerItem(builder().stackSize(16), Blocks.RED_BANNER, Blocks.RED_WALL_BANNER)); public static final Item BLACK_BANNER = register(new BannerItem(builder().stackSize(16), Blocks.BLACK_BANNER, Blocks.BLACK_WALL_BANNER)); - public static final Item END_CRYSTAL = register(new Item("end_crystal", builder().rarity(Rarity.RARE))); + public static final Item END_CRYSTAL = register(new Item("end_crystal", builder())); public static final Item CHORUS_FRUIT = register(new Item("chorus_fruit", builder())); public static final Item POPPED_CHORUS_FRUIT = register(new Item("popped_chorus_fruit", builder())); public static final Item TORCHFLOWER_SEEDS = register(new BlockItem("torchflower_seeds", builder(), Blocks.TORCHFLOWER_CROP)); @@ -1195,52 +1267,53 @@ public final class Items { public static final Item BEETROOT = register(new Item("beetroot", builder())); public static final Item BEETROOT_SEEDS = register(new BlockItem("beetroot_seeds", builder(), Blocks.BEETROOTS)); public static final Item BEETROOT_SOUP = register(new Item("beetroot_soup", builder().stackSize(1))); - public static final Item DRAGON_BREATH = register(new Item("dragon_breath", builder().rarity(Rarity.UNCOMMON))); + public static final Item DRAGON_BREATH = register(new Item("dragon_breath", builder())); public static final Item SPLASH_POTION = register(new PotionItem("splash_potion", builder().stackSize(1))); public static final Item SPECTRAL_ARROW = register(new Item("spectral_arrow", builder())); public static final Item TIPPED_ARROW = register(new TippedArrowItem("tipped_arrow", builder())); public static final Item LINGERING_POTION = register(new PotionItem("lingering_potion", builder().stackSize(1))); public static final Item SHIELD = register(new ShieldItem("shield", builder().stackSize(1).maxDamage(336))); - public static final Item TOTEM_OF_UNDYING = register(new Item("totem_of_undying", builder().stackSize(1).rarity(Rarity.UNCOMMON))); + public static final Item TOTEM_OF_UNDYING = register(new Item("totem_of_undying", builder().stackSize(1))); public static final Item SHULKER_SHELL = register(new Item("shulker_shell", builder())); public static final Item IRON_NUGGET = register(new Item("iron_nugget", builder())); - public static final Item KNOWLEDGE_BOOK = register(new Item("knowledge_book", builder().stackSize(1).rarity(Rarity.EPIC))); - public static final Item DEBUG_STICK = register(new Item("debug_stick", builder().stackSize(1).rarity(Rarity.EPIC).glint(true))); - public static final Item MUSIC_DISC_13 = register(new Item("music_disc_13", builder().stackSize(1).rarity(Rarity.RARE))); - public static final Item MUSIC_DISC_CAT = register(new Item("music_disc_cat", builder().stackSize(1).rarity(Rarity.RARE))); - public static final Item MUSIC_DISC_BLOCKS = register(new Item("music_disc_blocks", builder().stackSize(1).rarity(Rarity.RARE))); - public static final Item MUSIC_DISC_CHIRP = register(new Item("music_disc_chirp", builder().stackSize(1).rarity(Rarity.RARE))); - public static final Item MUSIC_DISC_CREATOR = register(new Item("music_disc_creator", builder().stackSize(1).rarity(Rarity.RARE))); - public static final Item MUSIC_DISC_CREATOR_MUSIC_BOX = register(new Item("music_disc_creator_music_box", builder().stackSize(1).rarity(Rarity.RARE))); - public static final Item MUSIC_DISC_FAR = register(new Item("music_disc_far", builder().stackSize(1).rarity(Rarity.RARE))); - public static final Item MUSIC_DISC_MALL = register(new Item("music_disc_mall", builder().stackSize(1).rarity(Rarity.RARE))); - public static final Item MUSIC_DISC_MELLOHI = register(new Item("music_disc_mellohi", builder().stackSize(1).rarity(Rarity.RARE))); - public static final Item MUSIC_DISC_STAL = register(new Item("music_disc_stal", builder().stackSize(1).rarity(Rarity.RARE))); - public static final Item MUSIC_DISC_STRAD = register(new Item("music_disc_strad", builder().stackSize(1).rarity(Rarity.RARE))); - public static final Item MUSIC_DISC_WARD = register(new Item("music_disc_ward", builder().stackSize(1).rarity(Rarity.RARE))); - public static final Item MUSIC_DISC_11 = register(new Item("music_disc_11", builder().stackSize(1).rarity(Rarity.RARE))); - public static final Item MUSIC_DISC_WAIT = register(new Item("music_disc_wait", builder().stackSize(1).rarity(Rarity.RARE))); - public static final Item MUSIC_DISC_OTHERSIDE = register(new Item("music_disc_otherside", builder().stackSize(1).rarity(Rarity.RARE))); - public static final Item MUSIC_DISC_RELIC = register(new Item("music_disc_relic", builder().stackSize(1).rarity(Rarity.RARE))); - public static final Item MUSIC_DISC_5 = register(new Item("music_disc_5", builder().stackSize(1).rarity(Rarity.RARE))); - public static final Item MUSIC_DISC_PIGSTEP = register(new Item("music_disc_pigstep", builder().stackSize(1).rarity(Rarity.RARE))); - public static final Item MUSIC_DISC_PRECIPICE = register(new Item("music_disc_precipice", builder().stackSize(1).rarity(Rarity.RARE))); + public static final Item KNOWLEDGE_BOOK = register(new Item("knowledge_book", builder().stackSize(1))); + public static final Item DEBUG_STICK = register(new Item("debug_stick", builder().stackSize(1))); + public static final Item MUSIC_DISC_13 = register(new Item("music_disc_13", builder().stackSize(1))); + public static final Item MUSIC_DISC_CAT = register(new Item("music_disc_cat", builder().stackSize(1))); + public static final Item MUSIC_DISC_BLOCKS = register(new Item("music_disc_blocks", builder().stackSize(1))); + public static final Item MUSIC_DISC_CHIRP = register(new Item("music_disc_chirp", builder().stackSize(1))); + public static final Item MUSIC_DISC_CREATOR = register(new Item("music_disc_creator", builder().stackSize(1))); + public static final Item MUSIC_DISC_CREATOR_MUSIC_BOX = register(new Item("music_disc_creator_music_box", builder().stackSize(1))); + public static final Item MUSIC_DISC_FAR = register(new Item("music_disc_far", builder().stackSize(1))); + public static final Item MUSIC_DISC_MALL = register(new Item("music_disc_mall", builder().stackSize(1))); + public static final Item MUSIC_DISC_MELLOHI = register(new Item("music_disc_mellohi", builder().stackSize(1))); + public static final Item MUSIC_DISC_STAL = register(new Item("music_disc_stal", builder().stackSize(1))); + public static final Item MUSIC_DISC_STRAD = register(new Item("music_disc_strad", builder().stackSize(1))); + public static final Item MUSIC_DISC_WARD = register(new Item("music_disc_ward", builder().stackSize(1))); + public static final Item MUSIC_DISC_11 = register(new Item("music_disc_11", builder().stackSize(1))); + public static final Item MUSIC_DISC_WAIT = register(new Item("music_disc_wait", builder().stackSize(1))); + public static final Item MUSIC_DISC_OTHERSIDE = register(new Item("music_disc_otherside", builder().stackSize(1))); + public static final Item MUSIC_DISC_RELIC = register(new Item("music_disc_relic", builder().stackSize(1))); + public static final Item MUSIC_DISC_5 = register(new Item("music_disc_5", builder().stackSize(1))); + public static final Item MUSIC_DISC_PIGSTEP = register(new Item("music_disc_pigstep", builder().stackSize(1))); + public static final Item MUSIC_DISC_PRECIPICE = register(new Item("music_disc_precipice", builder().stackSize(1))); public static final Item DISC_FRAGMENT_5 = register(new Item("disc_fragment_5", builder())); - public static final Item TRIDENT = register(new Item("trident", builder().stackSize(1).maxDamage(250).attackDamage(9.0).rarity(Rarity.EPIC))); - public static final Item PHANTOM_MEMBRANE = register(new Item("phantom_membrane", builder())); + public static final Item TRIDENT = register(new Item("trident", builder().stackSize(1).maxDamage(250).attackDamage(9.0))); public static final Item NAUTILUS_SHELL = register(new Item("nautilus_shell", builder())); - public static final Item HEART_OF_THE_SEA = register(new Item("heart_of_the_sea", builder().rarity(Rarity.UNCOMMON))); + public static final Item HEART_OF_THE_SEA = register(new Item("heart_of_the_sea", builder())); public static final Item CROSSBOW = register(new CrossbowItem("crossbow", builder().stackSize(1).maxDamage(465))); public static final Item SUSPICIOUS_STEW = register(new Item("suspicious_stew", builder().stackSize(1))); public static final Item LOOM = register(new BlockItem(builder(), Blocks.LOOM)); public static final Item FLOWER_BANNER_PATTERN = register(new Item("flower_banner_pattern", builder().stackSize(1))); - public static final Item CREEPER_BANNER_PATTERN = register(new Item("creeper_banner_pattern", builder().stackSize(1).rarity(Rarity.UNCOMMON))); - public static final Item SKULL_BANNER_PATTERN = register(new Item("skull_banner_pattern", builder().stackSize(1).rarity(Rarity.UNCOMMON))); - public static final Item MOJANG_BANNER_PATTERN = register(new Item("mojang_banner_pattern", builder().stackSize(1).rarity(Rarity.EPIC))); + public static final Item CREEPER_BANNER_PATTERN = register(new Item("creeper_banner_pattern", builder().stackSize(1))); + public static final Item SKULL_BANNER_PATTERN = register(new Item("skull_banner_pattern", builder().stackSize(1))); + public static final Item MOJANG_BANNER_PATTERN = register(new Item("mojang_banner_pattern", builder().stackSize(1))); public static final Item GLOBE_BANNER_PATTERN = register(new Item("globe_banner_pattern", builder().stackSize(1))); - public static final Item PIGLIN_BANNER_PATTERN = register(new Item("piglin_banner_pattern", builder().stackSize(1).rarity(Rarity.UNCOMMON))); - public static final Item FLOW_BANNER_PATTERN = register(new Item("flow_banner_pattern", builder().stackSize(1).rarity(Rarity.RARE))); - public static final Item GUSTER_BANNER_PATTERN = register(new Item("guster_banner_pattern", builder().stackSize(1).rarity(Rarity.RARE))); + public static final Item PIGLIN_BANNER_PATTERN = register(new Item("piglin_banner_pattern", builder().stackSize(1))); + public static final Item FLOW_BANNER_PATTERN = register(new Item("flow_banner_pattern", builder().stackSize(1))); + public static final Item GUSTER_BANNER_PATTERN = register(new Item("guster_banner_pattern", builder().stackSize(1))); + public static final Item FIELD_MASONED_BANNER_PATTERN = register(new Item("field_masoned_banner_pattern", builder().stackSize(1))); + public static final Item BORDURE_INDENTED_BANNER_PATTERN = register(new Item("bordure_indented_banner_pattern", builder().stackSize(1))); public static final Item GOAT_HORN = register(new GoatHornItem("goat_horn", builder().stackSize(1))); public static final Item COMPOSTER = register(new BlockItem(builder(), Blocks.COMPOSTER)); public static final Item BARREL = register(new BlockItem(builder(), Blocks.BARREL)); @@ -1369,8 +1442,7 @@ public final class Items { public static final Item TRIAL_KEY = register(new Item("trial_key", builder())); public static final Item OMINOUS_TRIAL_KEY = register(new Item("ominous_trial_key", builder())); public static final Item VAULT = register(new BlockItem(builder(), Blocks.VAULT)); - public static final Item OMINOUS_BOTTLE = register(new OminousBottleItem("ominous_bottle", builder())); - public static final Item BREEZE_ROD = register(new Item("breeze_rod", builder())); + public static final Item OMINOUS_BOTTLE = register(new Item("ominous_bottle", builder())); public static final int AIR_ID = AIR.javaId(); diff --git a/core/src/main/java/org/geysermc/geyser/level/block/Blocks.java b/core/src/main/java/org/geysermc/geyser/level/block/Blocks.java index 735c1f6c4..5db38c559 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/Blocks.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/Blocks.java @@ -49,11 +49,11 @@ public final class Blocks { public static final Block ANDESITE = register(new Block("andesite", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block POLISHED_ANDESITE = register(new Block("polished_andesite", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block GRASS_BLOCK = register(new Block("grass_block", builder().destroyTime(0.6f) - .booleanState(SNOWY))); + .booleanState(SNOWY))); public static final Block DIRT = register(new Block("dirt", builder().destroyTime(0.5f))); public static final Block COARSE_DIRT = register(new Block("coarse_dirt", builder().destroyTime(0.5f))); public static final Block PODZOL = register(new Block("podzol", builder().destroyTime(0.5f) - .booleanState(SNOWY))); + .booleanState(SNOWY))); public static final Block COBBLESTONE = register(new Block("cobblestone", builder().requiresCorrectToolForDrops().destroyTime(2.0f))); public static final Block OAK_PLANKS = register(new Block("oak_planks", builder().destroyTime(2.0f))); public static final Block SPRUCE_PLANKS = register(new Block("spruce_planks", builder().destroyTime(2.0f))); @@ -62,40 +62,45 @@ public final class Blocks { public static final Block ACACIA_PLANKS = register(new Block("acacia_planks", builder().destroyTime(2.0f))); public static final Block CHERRY_PLANKS = register(new Block("cherry_planks", builder().destroyTime(2.0f))); public static final Block DARK_OAK_PLANKS = register(new Block("dark_oak_planks", builder().destroyTime(2.0f))); + public static final Block PALE_OAK_WOOD = register(new Block("pale_oak_wood", builder().destroyTime(2.0f) + .enumState(AXIS, Axis.VALUES))); + public static final Block PALE_OAK_PLANKS = register(new Block("pale_oak_planks", builder().destroyTime(2.0f))); public static final Block MANGROVE_PLANKS = register(new Block("mangrove_planks", builder().destroyTime(2.0f))); public static final Block BAMBOO_PLANKS = register(new Block("bamboo_planks", builder().destroyTime(2.0f))); public static final Block BAMBOO_MOSAIC = register(new Block("bamboo_mosaic", builder().destroyTime(2.0f))); public static final Block OAK_SAPLING = register(new Block("oak_sapling", builder().pushReaction(PistonBehavior.DESTROY) - .intState(STAGE))); + .intState(STAGE))); public static final Block SPRUCE_SAPLING = register(new Block("spruce_sapling", builder().pushReaction(PistonBehavior.DESTROY) - .intState(STAGE))); + .intState(STAGE))); public static final Block BIRCH_SAPLING = register(new Block("birch_sapling", builder().pushReaction(PistonBehavior.DESTROY) - .intState(STAGE))); + .intState(STAGE))); public static final Block JUNGLE_SAPLING = register(new Block("jungle_sapling", builder().pushReaction(PistonBehavior.DESTROY) - .intState(STAGE))); + .intState(STAGE))); public static final Block ACACIA_SAPLING = register(new Block("acacia_sapling", builder().pushReaction(PistonBehavior.DESTROY) - .intState(STAGE))); + .intState(STAGE))); public static final Block CHERRY_SAPLING = register(new Block("cherry_sapling", builder().pushReaction(PistonBehavior.DESTROY) - .intState(STAGE))); + .intState(STAGE))); public static final Block DARK_OAK_SAPLING = register(new Block("dark_oak_sapling", builder().pushReaction(PistonBehavior.DESTROY) - .intState(STAGE))); + .intState(STAGE))); + public static final Block PALE_OAK_SAPLING = register(new Block("pale_oak_sapling", builder().pushReaction(PistonBehavior.DESTROY) + .intState(STAGE))); public static final Block MANGROVE_PROPAGULE = register(new Block("mangrove_propagule", builder().pushReaction(PistonBehavior.DESTROY) - .intState(AGE_4) - .booleanState(HANGING) - .intState(STAGE) - .booleanState(WATERLOGGED))); + .intState(AGE_4) + .booleanState(HANGING) + .intState(STAGE) + .booleanState(WATERLOGGED))); public static final Block BEDROCK = register(new Block("bedrock", builder().destroyTime(-1.0f))); public static final Block WATER = register(new WaterBlock("water", builder().destroyTime(100.0f).pushReaction(PistonBehavior.DESTROY) - .intState(LEVEL))); + .intState(LEVEL))); public static final Block LAVA = register(new Block("lava", builder().destroyTime(100.0f).pushReaction(PistonBehavior.DESTROY) - .intState(LEVEL))); + .intState(LEVEL))); public static final Block SAND = register(new Block("sand", builder().destroyTime(0.5f))); public static final Block SUSPICIOUS_SAND = register(new Block("suspicious_sand", builder().setBlockEntity(BlockEntityType.BRUSHABLE_BLOCK).destroyTime(0.25f).pushReaction(PistonBehavior.DESTROY) - .intState(DUSTED))); + .intState(DUSTED))); public static final Block RED_SAND = register(new Block("red_sand", builder().destroyTime(0.5f))); public static final Block GRAVEL = register(new Block("gravel", builder().destroyTime(0.6f))); public static final Block SUSPICIOUS_GRAVEL = register(new Block("suspicious_gravel", builder().setBlockEntity(BlockEntityType.BRUSHABLE_BLOCK).destroyTime(0.25f).pushReaction(PistonBehavior.DESTROY) - .intState(DUSTED))); + .intState(DUSTED))); public static final Block GOLD_ORE = register(new Block("gold_ore", builder().requiresCorrectToolForDrops().destroyTime(3.0f))); public static final Block DEEPSLATE_GOLD_ORE = register(new Block("deepslate_gold_ore", builder().requiresCorrectToolForDrops().destroyTime(4.5f))); public static final Block IRON_ORE = register(new Block("iron_ore", builder().requiresCorrectToolForDrops().destroyTime(3.0f))); @@ -104,117 +109,127 @@ public final class Blocks { public static final Block DEEPSLATE_COAL_ORE = register(new Block("deepslate_coal_ore", builder().requiresCorrectToolForDrops().destroyTime(4.5f))); public static final Block NETHER_GOLD_ORE = register(new Block("nether_gold_ore", builder().requiresCorrectToolForDrops().destroyTime(3.0f))); public static final Block OAK_LOG = register(new Block("oak_log", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block SPRUCE_LOG = register(new Block("spruce_log", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block BIRCH_LOG = register(new Block("birch_log", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block JUNGLE_LOG = register(new Block("jungle_log", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block ACACIA_LOG = register(new Block("acacia_log", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block CHERRY_LOG = register(new Block("cherry_log", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block DARK_OAK_LOG = register(new Block("dark_oak_log", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); + public static final Block PALE_OAK_LOG = register(new Block("pale_oak_log", builder().destroyTime(2.0f) + .enumState(AXIS, Axis.VALUES))); public static final Block MANGROVE_LOG = register(new Block("mangrove_log", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block MANGROVE_ROOTS = register(new Block("mangrove_roots", builder().destroyTime(0.7f) - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block MUDDY_MANGROVE_ROOTS = register(new Block("muddy_mangrove_roots", builder().destroyTime(0.7f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block BAMBOO_BLOCK = register(new Block("bamboo_block", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block STRIPPED_SPRUCE_LOG = register(new Block("stripped_spruce_log", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block STRIPPED_BIRCH_LOG = register(new Block("stripped_birch_log", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block STRIPPED_JUNGLE_LOG = register(new Block("stripped_jungle_log", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block STRIPPED_ACACIA_LOG = register(new Block("stripped_acacia_log", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block STRIPPED_CHERRY_LOG = register(new Block("stripped_cherry_log", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block STRIPPED_DARK_OAK_LOG = register(new Block("stripped_dark_oak_log", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); + public static final Block STRIPPED_PALE_OAK_LOG = register(new Block("stripped_pale_oak_log", builder().destroyTime(2.0f) + .enumState(AXIS, Axis.VALUES))); public static final Block STRIPPED_OAK_LOG = register(new Block("stripped_oak_log", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block STRIPPED_MANGROVE_LOG = register(new Block("stripped_mangrove_log", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block STRIPPED_BAMBOO_BLOCK = register(new Block("stripped_bamboo_block", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block OAK_WOOD = register(new Block("oak_wood", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block SPRUCE_WOOD = register(new Block("spruce_wood", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block BIRCH_WOOD = register(new Block("birch_wood", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block JUNGLE_WOOD = register(new Block("jungle_wood", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block ACACIA_WOOD = register(new Block("acacia_wood", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block CHERRY_WOOD = register(new Block("cherry_wood", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block DARK_OAK_WOOD = register(new Block("dark_oak_wood", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block MANGROVE_WOOD = register(new Block("mangrove_wood", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block STRIPPED_OAK_WOOD = register(new Block("stripped_oak_wood", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block STRIPPED_SPRUCE_WOOD = register(new Block("stripped_spruce_wood", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block STRIPPED_BIRCH_WOOD = register(new Block("stripped_birch_wood", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block STRIPPED_JUNGLE_WOOD = register(new Block("stripped_jungle_wood", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block STRIPPED_ACACIA_WOOD = register(new Block("stripped_acacia_wood", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block STRIPPED_CHERRY_WOOD = register(new Block("stripped_cherry_wood", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block STRIPPED_DARK_OAK_WOOD = register(new Block("stripped_dark_oak_wood", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); + public static final Block STRIPPED_PALE_OAK_WOOD = register(new Block("stripped_pale_oak_wood", builder().destroyTime(2.0f) + .enumState(AXIS, Axis.VALUES))); public static final Block STRIPPED_MANGROVE_WOOD = register(new Block("stripped_mangrove_wood", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block OAK_LEAVES = register(new Block("oak_leaves", builder().destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .intState(DISTANCE) - .booleanState(PERSISTENT) - .booleanState(WATERLOGGED))); + .intState(DISTANCE) + .booleanState(PERSISTENT) + .booleanState(WATERLOGGED))); public static final Block SPRUCE_LEAVES = register(new Block("spruce_leaves", builder().destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .intState(DISTANCE) - .booleanState(PERSISTENT) - .booleanState(WATERLOGGED))); + .intState(DISTANCE) + .booleanState(PERSISTENT) + .booleanState(WATERLOGGED))); public static final Block BIRCH_LEAVES = register(new Block("birch_leaves", builder().destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .intState(DISTANCE) - .booleanState(PERSISTENT) - .booleanState(WATERLOGGED))); + .intState(DISTANCE) + .booleanState(PERSISTENT) + .booleanState(WATERLOGGED))); public static final Block JUNGLE_LEAVES = register(new Block("jungle_leaves", builder().destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .intState(DISTANCE) - .booleanState(PERSISTENT) - .booleanState(WATERLOGGED))); + .intState(DISTANCE) + .booleanState(PERSISTENT) + .booleanState(WATERLOGGED))); public static final Block ACACIA_LEAVES = register(new Block("acacia_leaves", builder().destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .intState(DISTANCE) - .booleanState(PERSISTENT) - .booleanState(WATERLOGGED))); + .intState(DISTANCE) + .booleanState(PERSISTENT) + .booleanState(WATERLOGGED))); public static final Block CHERRY_LEAVES = register(new Block("cherry_leaves", builder().destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .intState(DISTANCE) - .booleanState(PERSISTENT) - .booleanState(WATERLOGGED))); + .intState(DISTANCE) + .booleanState(PERSISTENT) + .booleanState(WATERLOGGED))); public static final Block DARK_OAK_LEAVES = register(new Block("dark_oak_leaves", builder().destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .intState(DISTANCE) - .booleanState(PERSISTENT) - .booleanState(WATERLOGGED))); + .intState(DISTANCE) + .booleanState(PERSISTENT) + .booleanState(WATERLOGGED))); + public static final Block PALE_OAK_LEAVES = register(new Block("pale_oak_leaves", builder().destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) + .intState(DISTANCE) + .booleanState(PERSISTENT) + .booleanState(WATERLOGGED))); public static final Block MANGROVE_LEAVES = register(new Block("mangrove_leaves", builder().destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .intState(DISTANCE) - .booleanState(PERSISTENT) - .booleanState(WATERLOGGED))); + .intState(DISTANCE) + .booleanState(PERSISTENT) + .booleanState(WATERLOGGED))); public static final Block AZALEA_LEAVES = register(new Block("azalea_leaves", builder().destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .intState(DISTANCE) - .booleanState(PERSISTENT) - .booleanState(WATERLOGGED))); + .intState(DISTANCE) + .booleanState(PERSISTENT) + .booleanState(WATERLOGGED))); public static final Block FLOWERING_AZALEA_LEAVES = register(new Block("flowering_azalea_leaves", builder().destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .intState(DISTANCE) - .booleanState(PERSISTENT) - .booleanState(WATERLOGGED))); + .intState(DISTANCE) + .booleanState(PERSISTENT) + .booleanState(WATERLOGGED))); public static final Block SPONGE = register(new Block("sponge", builder().destroyTime(0.6f))); public static final Block WET_SPONGE = register(new Block("wet_sponge", builder().destroyTime(0.6f))); public static final Block GLASS = register(new Block("glass", builder().destroyTime(0.3f))); @@ -222,104 +237,104 @@ public final class Blocks { public static final Block DEEPSLATE_LAPIS_ORE = register(new Block("deepslate_lapis_ore", builder().requiresCorrectToolForDrops().destroyTime(4.5f))); public static final Block LAPIS_BLOCK = register(new Block("lapis_block", builder().requiresCorrectToolForDrops().destroyTime(3.0f))); public static final Block DISPENSER = register(new Block("dispenser", builder().setBlockEntity(BlockEntityType.DISPENSER).requiresCorrectToolForDrops().destroyTime(3.5f) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) - .booleanState(TRIGGERED))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) + .booleanState(TRIGGERED))); public static final Block SANDSTONE = register(new Block("sandstone", builder().requiresCorrectToolForDrops().destroyTime(0.8f))); public static final Block CHISELED_SANDSTONE = register(new Block("chiseled_sandstone", builder().requiresCorrectToolForDrops().destroyTime(0.8f))); public static final Block CUT_SANDSTONE = register(new Block("cut_sandstone", builder().requiresCorrectToolForDrops().destroyTime(0.8f))); public static final Block NOTE_BLOCK = register(new Block("note_block", builder().destroyTime(0.8f) - .enumState(NOTEBLOCK_INSTRUMENT) - .intState(NOTE) - .booleanState(POWERED))); + .enumState(NOTEBLOCK_INSTRUMENT) + .intState(NOTE) + .booleanState(POWERED))); public static final Block WHITE_BED = register(new BedBlock("white_bed", 0, builder().setBlockEntity(BlockEntityType.BED).destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(OCCUPIED) - .enumState(BED_PART))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(OCCUPIED) + .enumState(BED_PART))); public static final Block ORANGE_BED = register(new BedBlock("orange_bed", 1, builder().setBlockEntity(BlockEntityType.BED).destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(OCCUPIED) - .enumState(BED_PART))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(OCCUPIED) + .enumState(BED_PART))); public static final Block MAGENTA_BED = register(new BedBlock("magenta_bed", 2, builder().setBlockEntity(BlockEntityType.BED).destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(OCCUPIED) - .enumState(BED_PART))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(OCCUPIED) + .enumState(BED_PART))); public static final Block LIGHT_BLUE_BED = register(new BedBlock("light_blue_bed", 3, builder().setBlockEntity(BlockEntityType.BED).destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(OCCUPIED) - .enumState(BED_PART))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(OCCUPIED) + .enumState(BED_PART))); public static final Block YELLOW_BED = register(new BedBlock("yellow_bed", 4, builder().setBlockEntity(BlockEntityType.BED).destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(OCCUPIED) - .enumState(BED_PART))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(OCCUPIED) + .enumState(BED_PART))); public static final Block LIME_BED = register(new BedBlock("lime_bed", 5, builder().setBlockEntity(BlockEntityType.BED).destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(OCCUPIED) - .enumState(BED_PART))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(OCCUPIED) + .enumState(BED_PART))); public static final Block PINK_BED = register(new BedBlock("pink_bed", 6, builder().setBlockEntity(BlockEntityType.BED).destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(OCCUPIED) - .enumState(BED_PART))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(OCCUPIED) + .enumState(BED_PART))); public static final Block GRAY_BED = register(new BedBlock("gray_bed", 7, builder().setBlockEntity(BlockEntityType.BED).destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(OCCUPIED) - .enumState(BED_PART))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(OCCUPIED) + .enumState(BED_PART))); public static final Block LIGHT_GRAY_BED = register(new BedBlock("light_gray_bed", 8, builder().setBlockEntity(BlockEntityType.BED).destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(OCCUPIED) - .enumState(BED_PART))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(OCCUPIED) + .enumState(BED_PART))); public static final Block CYAN_BED = register(new BedBlock("cyan_bed", 9, builder().setBlockEntity(BlockEntityType.BED).destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(OCCUPIED) - .enumState(BED_PART))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(OCCUPIED) + .enumState(BED_PART))); public static final Block PURPLE_BED = register(new BedBlock("purple_bed", 10, builder().setBlockEntity(BlockEntityType.BED).destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(OCCUPIED) - .enumState(BED_PART))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(OCCUPIED) + .enumState(BED_PART))); public static final Block BLUE_BED = register(new BedBlock("blue_bed", 11, builder().setBlockEntity(BlockEntityType.BED).destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(OCCUPIED) - .enumState(BED_PART))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(OCCUPIED) + .enumState(BED_PART))); public static final Block BROWN_BED = register(new BedBlock("brown_bed", 12, builder().setBlockEntity(BlockEntityType.BED).destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(OCCUPIED) - .enumState(BED_PART))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(OCCUPIED) + .enumState(BED_PART))); public static final Block GREEN_BED = register(new BedBlock("green_bed", 13, builder().setBlockEntity(BlockEntityType.BED).destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(OCCUPIED) - .enumState(BED_PART))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(OCCUPIED) + .enumState(BED_PART))); public static final Block RED_BED = register(new BedBlock("red_bed", 14, builder().setBlockEntity(BlockEntityType.BED).destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(OCCUPIED) - .enumState(BED_PART))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(OCCUPIED) + .enumState(BED_PART))); public static final Block BLACK_BED = register(new BedBlock("black_bed", 15, builder().setBlockEntity(BlockEntityType.BED).destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(OCCUPIED) - .enumState(BED_PART))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(OCCUPIED) + .enumState(BED_PART))); public static final Block POWERED_RAIL = register(new Block("powered_rail", builder().destroyTime(0.7f) - .booleanState(POWERED) - .enumState(RAIL_SHAPE_STRAIGHT) - .booleanState(WATERLOGGED))); + .booleanState(POWERED) + .enumState(RAIL_SHAPE_STRAIGHT) + .booleanState(WATERLOGGED))); public static final Block DETECTOR_RAIL = register(new Block("detector_rail", builder().destroyTime(0.7f) - .booleanState(POWERED) - .enumState(RAIL_SHAPE_STRAIGHT) - .booleanState(WATERLOGGED))); + .booleanState(POWERED) + .enumState(RAIL_SHAPE_STRAIGHT) + .booleanState(WATERLOGGED))); public static final Block STICKY_PISTON = register(new PistonBlock("sticky_piston", builder().destroyTime(1.5f).pushReaction(PistonBehavior.BLOCK) - .booleanState(EXTENDED) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); + .booleanState(EXTENDED) + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); public static final Block COBWEB = register(new Block("cobweb", builder().requiresCorrectToolForDrops().destroyTime(4.0f).pushReaction(PistonBehavior.DESTROY))); public static final Block SHORT_GRASS = register(new Block("short_grass", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block FERN = register(new Block("fern", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block DEAD_BUSH = register(new Block("dead_bush", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block SEAGRASS = register(new Block("seagrass", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block TALL_SEAGRASS = register(new Block("tall_seagrass", builder().pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.SEAGRASS) - .enumState(DOUBLE_BLOCK_HALF))); + .enumState(DOUBLE_BLOCK_HALF))); public static final Block PISTON = register(new PistonBlock("piston", builder().destroyTime(1.5f).pushReaction(PistonBehavior.BLOCK) - .booleanState(EXTENDED) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); + .booleanState(EXTENDED) + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); public static final Block PISTON_HEAD = register(new PistonHeadBlock("piston_head", builder().destroyTime(1.5f).pushReaction(PistonBehavior.BLOCK) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) - .booleanState(SHORT) - .enumState(PISTON_TYPE))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) + .booleanState(SHORT) + .enumState(PISTON_TYPE))); public static final Block WHITE_WOOL = register(new Block("white_wool", builder().destroyTime(0.8f))); public static final Block ORANGE_WOOL = register(new Block("orange_wool", builder().destroyTime(0.8f))); public static final Block MAGENTA_WOOL = register(new Block("magenta_wool", builder().destroyTime(0.8f))); @@ -337,8 +352,8 @@ public final class Blocks { public static final Block RED_WOOL = register(new Block("red_wool", builder().destroyTime(0.8f))); public static final Block BLACK_WOOL = register(new Block("black_wool", builder().destroyTime(0.8f))); public static final Block MOVING_PISTON = register(new MovingPistonBlock("moving_piston", builder().setBlockEntity(BlockEntityType.PISTON).destroyTime(-1.0f).pushReaction(PistonBehavior.BLOCK) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) - .enumState(PISTON_TYPE))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) + .enumState(PISTON_TYPE))); public static final Block DANDELION = register(new Block("dandelion", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block TORCHFLOWER = register(new Block("torchflower", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block POPPY = register(new Block("poppy", builder().pushReaction(PistonBehavior.DESTROY))); @@ -359,288 +374,306 @@ public final class Blocks { public static final Block IRON_BLOCK = register(new Block("iron_block", builder().requiresCorrectToolForDrops().destroyTime(5.0f))); public static final Block BRICKS = register(new Block("bricks", builder().requiresCorrectToolForDrops().destroyTime(2.0f))); public static final Block TNT = register(new Block("tnt", builder() - .booleanState(UNSTABLE))); + .booleanState(UNSTABLE))); public static final Block BOOKSHELF = register(new Block("bookshelf", builder().destroyTime(1.5f))); public static final Block CHISELED_BOOKSHELF = register(new Block("chiseled_bookshelf", builder().setBlockEntity(BlockEntityType.CHISELED_BOOKSHELF).destroyTime(1.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(CHISELED_BOOKSHELF_SLOT_0_OCCUPIED) - .booleanState(CHISELED_BOOKSHELF_SLOT_1_OCCUPIED) - .booleanState(CHISELED_BOOKSHELF_SLOT_2_OCCUPIED) - .booleanState(CHISELED_BOOKSHELF_SLOT_3_OCCUPIED) - .booleanState(CHISELED_BOOKSHELF_SLOT_4_OCCUPIED) - .booleanState(CHISELED_BOOKSHELF_SLOT_5_OCCUPIED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(CHISELED_BOOKSHELF_SLOT_0_OCCUPIED) + .booleanState(CHISELED_BOOKSHELF_SLOT_1_OCCUPIED) + .booleanState(CHISELED_BOOKSHELF_SLOT_2_OCCUPIED) + .booleanState(CHISELED_BOOKSHELF_SLOT_3_OCCUPIED) + .booleanState(CHISELED_BOOKSHELF_SLOT_4_OCCUPIED) + .booleanState(CHISELED_BOOKSHELF_SLOT_5_OCCUPIED))); public static final Block MOSSY_COBBLESTONE = register(new Block("mossy_cobblestone", builder().requiresCorrectToolForDrops().destroyTime(2.0f))); public static final Block OBSIDIAN = register(new Block("obsidian", builder().requiresCorrectToolForDrops().destroyTime(50.0f))); public static final Block TORCH = register(new Block("torch", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block WALL_TORCH = register(new Block("wall_torch", builder().pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block FIRE = register(new Block("fire", builder().pushReaction(PistonBehavior.DESTROY) - .intState(AGE_15) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(UP) - .booleanState(WEST))); + .intState(AGE_15) + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(UP) + .booleanState(WEST))); public static final Block SOUL_FIRE = register(new Block("soul_fire", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block SPAWNER = register(new SpawnerBlock("spawner", builder().setBlockEntity(BlockEntityType.MOB_SPAWNER).requiresCorrectToolForDrops().destroyTime(5.0f))); + public static final Block CREAKING_HEART = register(new Block("creaking_heart", builder().setBlockEntity(BlockEntityType.CREAKING_HEART).destroyTime(5.0f) + .enumState(AXIS, Axis.VALUES) + .enumState(CREAKING))); public static final Block OAK_STAIRS = register(new Block("oak_stairs", builder().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block CHEST = register(new ChestBlock("chest", builder().setBlockEntity(BlockEntityType.CHEST).destroyTime(2.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(CHEST_TYPE, ChestType.VALUES) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(CHEST_TYPE, ChestType.VALUES) + .booleanState(WATERLOGGED))); public static final Block REDSTONE_WIRE = register(new Block("redstone_wire", builder().pushReaction(PistonBehavior.DESTROY) - .enumState(EAST_REDSTONE) - .enumState(NORTH_REDSTONE) - .intState(POWER) - .enumState(SOUTH_REDSTONE) - .enumState(WEST_REDSTONE))); + .enumState(EAST_REDSTONE) + .enumState(NORTH_REDSTONE) + .intState(POWER) + .enumState(SOUTH_REDSTONE) + .enumState(WEST_REDSTONE))); public static final Block DIAMOND_ORE = register(new Block("diamond_ore", builder().requiresCorrectToolForDrops().destroyTime(3.0f))); public static final Block DEEPSLATE_DIAMOND_ORE = register(new Block("deepslate_diamond_ore", builder().requiresCorrectToolForDrops().destroyTime(4.5f))); public static final Block DIAMOND_BLOCK = register(new Block("diamond_block", builder().requiresCorrectToolForDrops().destroyTime(5.0f))); public static final Block CRAFTING_TABLE = register(new Block("crafting_table", builder().destroyTime(2.5f))); public static final Block WHEAT = register(new Block("wheat", builder().pushReaction(PistonBehavior.DESTROY) - .intState(AGE_7))); + .intState(AGE_7))); public static final Block FARMLAND = register(new Block("farmland", builder().destroyTime(0.6f) - .intState(MOISTURE))); + .intState(MOISTURE))); public static final Block FURNACE = register(new FurnaceBlock("furnace", builder().setBlockEntity(BlockEntityType.FURNACE).requiresCorrectToolForDrops().destroyTime(3.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(LIT))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(LIT))); public static final Block OAK_SIGN = register(new Block("oak_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) - .intState(ROTATION_16) - .booleanState(WATERLOGGED))); + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); public static final Block SPRUCE_SIGN = register(new Block("spruce_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) - .intState(ROTATION_16) - .booleanState(WATERLOGGED))); + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); public static final Block BIRCH_SIGN = register(new Block("birch_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) - .intState(ROTATION_16) - .booleanState(WATERLOGGED))); + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); public static final Block ACACIA_SIGN = register(new Block("acacia_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) - .intState(ROTATION_16) - .booleanState(WATERLOGGED))); + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); public static final Block CHERRY_SIGN = register(new Block("cherry_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) - .intState(ROTATION_16) - .booleanState(WATERLOGGED))); + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); public static final Block JUNGLE_SIGN = register(new Block("jungle_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) - .intState(ROTATION_16) - .booleanState(WATERLOGGED))); + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); public static final Block DARK_OAK_SIGN = register(new Block("dark_oak_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) - .intState(ROTATION_16) - .booleanState(WATERLOGGED))); + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); + public static final Block PALE_OAK_SIGN = register(new Block("pale_oak_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); public static final Block MANGROVE_SIGN = register(new Block("mangrove_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) - .intState(ROTATION_16) - .booleanState(WATERLOGGED))); + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); public static final Block BAMBOO_SIGN = register(new Block("bamboo_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) - .intState(ROTATION_16) - .booleanState(WATERLOGGED))); + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); public static final Block OAK_DOOR = register(new DoorBlock("oak_door", builder().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(DOUBLE_BLOCK_HALF) - .enumState(DOOR_HINGE) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(DOUBLE_BLOCK_HALF) + .enumState(DOOR_HINGE) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block LADDER = register(new Block("ladder", builder().destroyTime(0.4f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block RAIL = register(new Block("rail", builder().destroyTime(0.7f) - .enumState(RAIL_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(RAIL_SHAPE) + .booleanState(WATERLOGGED))); public static final Block COBBLESTONE_STAIRS = register(new Block("cobblestone_stairs", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block OAK_WALL_SIGN = register(new Block("oak_wall_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block SPRUCE_WALL_SIGN = register(new Block("spruce_wall_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block BIRCH_WALL_SIGN = register(new Block("birch_wall_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block ACACIA_WALL_SIGN = register(new Block("acacia_wall_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block CHERRY_WALL_SIGN = register(new Block("cherry_wall_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block JUNGLE_WALL_SIGN = register(new Block("jungle_wall_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block DARK_OAK_WALL_SIGN = register(new Block("dark_oak_wall_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); + public static final Block PALE_OAK_WALL_SIGN = register(new Block("pale_oak_wall_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block MANGROVE_WALL_SIGN = register(new Block("mangrove_wall_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block BAMBOO_WALL_SIGN = register(new Block("bamboo_wall_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block OAK_HANGING_SIGN = register(new Block("oak_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) - .booleanState(ATTACHED) - .intState(ROTATION_16) - .booleanState(WATERLOGGED))); + .booleanState(ATTACHED) + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); public static final Block SPRUCE_HANGING_SIGN = register(new Block("spruce_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) - .booleanState(ATTACHED) - .intState(ROTATION_16) - .booleanState(WATERLOGGED))); + .booleanState(ATTACHED) + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); public static final Block BIRCH_HANGING_SIGN = register(new Block("birch_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) - .booleanState(ATTACHED) - .intState(ROTATION_16) - .booleanState(WATERLOGGED))); + .booleanState(ATTACHED) + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); public static final Block ACACIA_HANGING_SIGN = register(new Block("acacia_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) - .booleanState(ATTACHED) - .intState(ROTATION_16) - .booleanState(WATERLOGGED))); + .booleanState(ATTACHED) + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); public static final Block CHERRY_HANGING_SIGN = register(new Block("cherry_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) - .booleanState(ATTACHED) - .intState(ROTATION_16) - .booleanState(WATERLOGGED))); + .booleanState(ATTACHED) + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); public static final Block JUNGLE_HANGING_SIGN = register(new Block("jungle_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) - .booleanState(ATTACHED) - .intState(ROTATION_16) - .booleanState(WATERLOGGED))); + .booleanState(ATTACHED) + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); public static final Block DARK_OAK_HANGING_SIGN = register(new Block("dark_oak_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) - .booleanState(ATTACHED) - .intState(ROTATION_16) - .booleanState(WATERLOGGED))); + .booleanState(ATTACHED) + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); + public static final Block PALE_OAK_HANGING_SIGN = register(new Block("pale_oak_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) + .booleanState(ATTACHED) + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); public static final Block CRIMSON_HANGING_SIGN = register(new Block("crimson_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) - .booleanState(ATTACHED) - .intState(ROTATION_16) - .booleanState(WATERLOGGED))); + .booleanState(ATTACHED) + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); public static final Block WARPED_HANGING_SIGN = register(new Block("warped_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) - .booleanState(ATTACHED) - .intState(ROTATION_16) - .booleanState(WATERLOGGED))); + .booleanState(ATTACHED) + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); public static final Block MANGROVE_HANGING_SIGN = register(new Block("mangrove_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) - .booleanState(ATTACHED) - .intState(ROTATION_16) - .booleanState(WATERLOGGED))); + .booleanState(ATTACHED) + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); public static final Block BAMBOO_HANGING_SIGN = register(new Block("bamboo_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) - .booleanState(ATTACHED) - .intState(ROTATION_16) - .booleanState(WATERLOGGED))); + .booleanState(ATTACHED) + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); public static final Block OAK_WALL_HANGING_SIGN = register(new Block("oak_wall_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block SPRUCE_WALL_HANGING_SIGN = register(new Block("spruce_wall_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block BIRCH_WALL_HANGING_SIGN = register(new Block("birch_wall_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block ACACIA_WALL_HANGING_SIGN = register(new Block("acacia_wall_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block CHERRY_WALL_HANGING_SIGN = register(new Block("cherry_wall_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block JUNGLE_WALL_HANGING_SIGN = register(new Block("jungle_wall_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block DARK_OAK_WALL_HANGING_SIGN = register(new Block("dark_oak_wall_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); + public static final Block PALE_OAK_WALL_HANGING_SIGN = register(new Block("pale_oak_wall_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block MANGROVE_WALL_HANGING_SIGN = register(new Block("mangrove_wall_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block CRIMSON_WALL_HANGING_SIGN = register(new Block("crimson_wall_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block WARPED_WALL_HANGING_SIGN = register(new Block("warped_wall_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block BAMBOO_WALL_HANGING_SIGN = register(new Block("bamboo_wall_hanging_sign", builder().setBlockEntity(BlockEntityType.HANGING_SIGN).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block LEVER = register(new Block("lever", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .enumState(ATTACH_FACE) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(POWERED))); + .enumState(ATTACH_FACE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); public static final Block STONE_PRESSURE_PLATE = register(new Block("stone_pressure_plate", builder().requiresCorrectToolForDrops().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .booleanState(POWERED))); + .booleanState(POWERED))); public static final Block IRON_DOOR = register(new DoorBlock("iron_door", builder().requiresCorrectToolForDrops().destroyTime(5.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(DOUBLE_BLOCK_HALF) - .enumState(DOOR_HINGE) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(DOUBLE_BLOCK_HALF) + .enumState(DOOR_HINGE) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block OAK_PRESSURE_PLATE = register(new Block("oak_pressure_plate", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .booleanState(POWERED))); + .booleanState(POWERED))); public static final Block SPRUCE_PRESSURE_PLATE = register(new Block("spruce_pressure_plate", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .booleanState(POWERED))); + .booleanState(POWERED))); public static final Block BIRCH_PRESSURE_PLATE = register(new Block("birch_pressure_plate", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .booleanState(POWERED))); + .booleanState(POWERED))); public static final Block JUNGLE_PRESSURE_PLATE = register(new Block("jungle_pressure_plate", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .booleanState(POWERED))); + .booleanState(POWERED))); public static final Block ACACIA_PRESSURE_PLATE = register(new Block("acacia_pressure_plate", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .booleanState(POWERED))); + .booleanState(POWERED))); public static final Block CHERRY_PRESSURE_PLATE = register(new Block("cherry_pressure_plate", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .booleanState(POWERED))); + .booleanState(POWERED))); public static final Block DARK_OAK_PRESSURE_PLATE = register(new Block("dark_oak_pressure_plate", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .booleanState(POWERED))); + .booleanState(POWERED))); + public static final Block PALE_OAK_PRESSURE_PLATE = register(new Block("pale_oak_pressure_plate", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) + .booleanState(POWERED))); public static final Block MANGROVE_PRESSURE_PLATE = register(new Block("mangrove_pressure_plate", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .booleanState(POWERED))); + .booleanState(POWERED))); public static final Block BAMBOO_PRESSURE_PLATE = register(new Block("bamboo_pressure_plate", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .booleanState(POWERED))); + .booleanState(POWERED))); public static final Block REDSTONE_ORE = register(new Block("redstone_ore", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .booleanState(LIT))); + .booleanState(LIT))); public static final Block DEEPSLATE_REDSTONE_ORE = register(new Block("deepslate_redstone_ore", builder().requiresCorrectToolForDrops().destroyTime(4.5f) - .booleanState(LIT))); + .booleanState(LIT))); public static final Block REDSTONE_TORCH = register(new Block("redstone_torch", builder().pushReaction(PistonBehavior.DESTROY) - .booleanState(LIT))); + .booleanState(LIT))); public static final Block REDSTONE_WALL_TORCH = register(new Block("redstone_wall_torch", builder().pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(LIT))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(LIT))); public static final Block STONE_BUTTON = register(new Block("stone_button", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .enumState(ATTACH_FACE) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(POWERED))); + .enumState(ATTACH_FACE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); public static final Block SNOW = register(new Block("snow", builder().requiresCorrectToolForDrops().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY) - .intState(LAYERS))); + .intState(LAYERS))); public static final Block ICE = register(new Block("ice", builder().destroyTime(0.5f))); public static final Block SNOW_BLOCK = register(new Block("snow_block", builder().requiresCorrectToolForDrops().destroyTime(0.2f))); public static final Block CACTUS = register(new Block("cactus", builder().destroyTime(0.4f).pushReaction(PistonBehavior.DESTROY) - .intState(AGE_15))); + .intState(AGE_15))); public static final Block CLAY = register(new Block("clay", builder().destroyTime(0.6f))); public static final Block SUGAR_CANE = register(new Block("sugar_cane", builder().pushReaction(PistonBehavior.DESTROY) - .intState(AGE_15))); + .intState(AGE_15))); public static final Block JUKEBOX = register(new Block("jukebox", builder().setBlockEntity(BlockEntityType.JUKEBOX).destroyTime(2.0f) - .booleanState(HAS_RECORD))); + .booleanState(HAS_RECORD))); public static final Block OAK_FENCE = register(new Block("oak_fence", builder().destroyTime(2.0f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block NETHERRACK = register(new Block("netherrack", builder().requiresCorrectToolForDrops().destroyTime(0.4f))); public static final Block SOUL_SAND = register(new Block("soul_sand", builder().destroyTime(0.5f))); public static final Block SOUL_SOIL = register(new Block("soul_soil", builder().destroyTime(0.5f))); public static final Block BASALT = register(new Block("basalt", builder().requiresCorrectToolForDrops().destroyTime(1.25f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block POLISHED_BASALT = register(new Block("polished_basalt", builder().requiresCorrectToolForDrops().destroyTime(1.25f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block SOUL_TORCH = register(new Block("soul_torch", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block SOUL_WALL_TORCH = register(new Block("soul_wall_torch", builder().pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block GLOWSTONE = register(new Block("glowstone", builder().destroyTime(0.3f))); public static final Block NETHER_PORTAL = register(new Block("nether_portal", builder().destroyTime(-1.0f).pushReaction(PistonBehavior.BLOCK) - .enumState(HORIZONTAL_AXIS, Axis.X, Axis.Z))); + .enumState(HORIZONTAL_AXIS, Axis.X, Axis.Z))); public static final Block CARVED_PUMPKIN = register(new Block("carved_pumpkin", builder().destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block JACK_O_LANTERN = register(new Block("jack_o_lantern", builder().destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block CAKE = register(new Block("cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .intState(BITES))); + .intState(BITES))); public static final Block REPEATER = register(new Block("repeater", builder().pushReaction(PistonBehavior.DESTROY) - .intState(DELAY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(LOCKED) - .booleanState(POWERED))); + .intState(DELAY) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(LOCKED) + .booleanState(POWERED))); public static final Block WHITE_STAINED_GLASS = register(new Block("white_stained_glass", builder().destroyTime(0.3f))); public static final Block ORANGE_STAINED_GLASS = register(new Block("orange_stained_glass", builder().destroyTime(0.3f))); public static final Block MAGENTA_STAINED_GLASS = register(new Block("magenta_stained_glass", builder().destroyTime(0.3f))); @@ -658,59 +691,65 @@ public final class Blocks { public static final Block RED_STAINED_GLASS = register(new Block("red_stained_glass", builder().destroyTime(0.3f))); public static final Block BLACK_STAINED_GLASS = register(new Block("black_stained_glass", builder().destroyTime(0.3f))); public static final Block OAK_TRAPDOOR = register(new TrapDoorBlock("oak_trapdoor", builder().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .booleanState(OPEN) - .booleanState(POWERED) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .booleanState(OPEN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); public static final Block SPRUCE_TRAPDOOR = register(new TrapDoorBlock("spruce_trapdoor", builder().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .booleanState(OPEN) - .booleanState(POWERED) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .booleanState(OPEN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); public static final Block BIRCH_TRAPDOOR = register(new TrapDoorBlock("birch_trapdoor", builder().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .booleanState(OPEN) - .booleanState(POWERED) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .booleanState(OPEN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); public static final Block JUNGLE_TRAPDOOR = register(new TrapDoorBlock("jungle_trapdoor", builder().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .booleanState(OPEN) - .booleanState(POWERED) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .booleanState(OPEN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); public static final Block ACACIA_TRAPDOOR = register(new TrapDoorBlock("acacia_trapdoor", builder().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .booleanState(OPEN) - .booleanState(POWERED) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .booleanState(OPEN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); public static final Block CHERRY_TRAPDOOR = register(new TrapDoorBlock("cherry_trapdoor", builder().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .booleanState(OPEN) - .booleanState(POWERED) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .booleanState(OPEN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); public static final Block DARK_OAK_TRAPDOOR = register(new TrapDoorBlock("dark_oak_trapdoor", builder().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .booleanState(OPEN) - .booleanState(POWERED) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .booleanState(OPEN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); + public static final Block PALE_OAK_TRAPDOOR = register(new TrapDoorBlock("pale_oak_trapdoor", builder().destroyTime(3.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .booleanState(OPEN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); public static final Block MANGROVE_TRAPDOOR = register(new TrapDoorBlock("mangrove_trapdoor", builder().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .booleanState(OPEN) - .booleanState(POWERED) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .booleanState(OPEN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); public static final Block BAMBOO_TRAPDOOR = register(new TrapDoorBlock("bamboo_trapdoor", builder().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .booleanState(OPEN) - .booleanState(POWERED) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .booleanState(OPEN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); public static final Block STONE_BRICKS = register(new Block("stone_bricks", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block MOSSY_STONE_BRICKS = register(new Block("mossy_stone_bricks", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block CRACKED_STONE_BRICKS = register(new Block("cracked_stone_bricks", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); @@ -724,180 +763,180 @@ public final class Blocks { public static final Block INFESTED_CRACKED_STONE_BRICKS = register(new Block("infested_cracked_stone_bricks", builder().destroyTime(0.75f))); public static final Block INFESTED_CHISELED_STONE_BRICKS = register(new Block("infested_chiseled_stone_bricks", builder().destroyTime(0.75f))); public static final Block BROWN_MUSHROOM_BLOCK = register(new Block("brown_mushroom_block", builder().destroyTime(0.2f) - .booleanState(DOWN) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(UP) - .booleanState(WEST))); + .booleanState(DOWN) + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(UP) + .booleanState(WEST))); public static final Block RED_MUSHROOM_BLOCK = register(new Block("red_mushroom_block", builder().destroyTime(0.2f) - .booleanState(DOWN) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(UP) - .booleanState(WEST))); + .booleanState(DOWN) + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(UP) + .booleanState(WEST))); public static final Block MUSHROOM_STEM = register(new Block("mushroom_stem", builder().destroyTime(0.2f) - .booleanState(DOWN) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(UP) - .booleanState(WEST))); + .booleanState(DOWN) + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(UP) + .booleanState(WEST))); public static final Block IRON_BARS = register(new Block("iron_bars", builder().requiresCorrectToolForDrops().destroyTime(5.0f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block CHAIN = register(new Block("chain", builder().requiresCorrectToolForDrops().destroyTime(5.0f) - .enumState(AXIS, Axis.VALUES) - .booleanState(WATERLOGGED))); + .enumState(AXIS, Axis.VALUES) + .booleanState(WATERLOGGED))); public static final Block GLASS_PANE = register(new Block("glass_pane", builder().destroyTime(0.3f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block PUMPKIN = register(new Block("pumpkin", builder().destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY))); public static final Block MELON = register(new Block("melon", builder().destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY))); public static final Block ATTACHED_PUMPKIN_STEM = register(new Block("attached_pumpkin_stem", builder().pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.PUMPKIN_SEEDS) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block ATTACHED_MELON_STEM = register(new Block("attached_melon_stem", builder().pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.MELON_SEEDS) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block PUMPKIN_STEM = register(new Block("pumpkin_stem", builder().pushReaction(PistonBehavior.DESTROY) - .intState(AGE_7))); + .intState(AGE_7))); public static final Block MELON_STEM = register(new Block("melon_stem", builder().pushReaction(PistonBehavior.DESTROY) - .intState(AGE_7))); + .intState(AGE_7))); public static final Block VINE = register(new Block("vine", builder().destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(UP) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(UP) + .booleanState(WEST))); public static final Block GLOW_LICHEN = register(new Block("glow_lichen", builder().destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .booleanState(DOWN) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(UP) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(DOWN) + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(UP) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block OAK_FENCE_GATE = register(new Block("oak_fence_gate", builder().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(IN_WALL) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(IN_WALL) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block BRICK_STAIRS = register(new Block("brick_stairs", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block STONE_BRICK_STAIRS = register(new Block("stone_brick_stairs", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block MUD_BRICK_STAIRS = register(new Block("mud_brick_stairs", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block MYCELIUM = register(new Block("mycelium", builder().destroyTime(0.6f) - .booleanState(SNOWY))); + .booleanState(SNOWY))); public static final Block LILY_PAD = register(new Block("lily_pad", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block NETHER_BRICKS = register(new Block("nether_bricks", builder().requiresCorrectToolForDrops().destroyTime(2.0f))); public static final Block NETHER_BRICK_FENCE = register(new Block("nether_brick_fence", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block NETHER_BRICK_STAIRS = register(new Block("nether_brick_stairs", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block NETHER_WART = register(new Block("nether_wart", builder().pushReaction(PistonBehavior.DESTROY) - .intState(AGE_3))); + .intState(AGE_3))); public static final Block ENCHANTING_TABLE = register(new Block("enchanting_table", builder().setBlockEntity(BlockEntityType.ENCHANTING_TABLE).requiresCorrectToolForDrops().destroyTime(5.0f))); public static final Block BREWING_STAND = register(new Block("brewing_stand", builder().setBlockEntity(BlockEntityType.BREWING_STAND).requiresCorrectToolForDrops().destroyTime(0.5f) - .booleanState(HAS_BOTTLE_0) - .booleanState(HAS_BOTTLE_1) - .booleanState(HAS_BOTTLE_2))); + .booleanState(HAS_BOTTLE_0) + .booleanState(HAS_BOTTLE_1) + .booleanState(HAS_BOTTLE_2))); public static final Block CAULDRON = register(new CauldronBlock("cauldron", builder().requiresCorrectToolForDrops().destroyTime(2.0f))); public static final Block WATER_CAULDRON = register(new CauldronBlock("water_cauldron", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .intState(LEVEL_CAULDRON))); + .intState(LEVEL_CAULDRON))); public static final Block LAVA_CAULDRON = register(new CauldronBlock("lava_cauldron", builder().requiresCorrectToolForDrops().destroyTime(2.0f))); public static final Block POWDER_SNOW_CAULDRON = register(new CauldronBlock("powder_snow_cauldron", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .intState(LEVEL_CAULDRON))); + .intState(LEVEL_CAULDRON))); public static final Block END_PORTAL = register(new Block("end_portal", builder().setBlockEntity(BlockEntityType.END_PORTAL).destroyTime(-1.0f).pushReaction(PistonBehavior.BLOCK))); public static final Block END_PORTAL_FRAME = register(new Block("end_portal_frame", builder().destroyTime(-1.0f) - .booleanState(EYE) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .booleanState(EYE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block END_STONE = register(new Block("end_stone", builder().requiresCorrectToolForDrops().destroyTime(3.0f))); public static final Block DRAGON_EGG = register(new Block("dragon_egg", builder().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY))); public static final Block REDSTONE_LAMP = register(new Block("redstone_lamp", builder().destroyTime(0.3f) - .booleanState(LIT))); + .booleanState(LIT))); public static final Block COCOA = register(new Block("cocoa", builder().destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .intState(AGE_2) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .intState(AGE_2) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block SANDSTONE_STAIRS = register(new Block("sandstone_stairs", builder().requiresCorrectToolForDrops().destroyTime(0.8f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block EMERALD_ORE = register(new Block("emerald_ore", builder().requiresCorrectToolForDrops().destroyTime(3.0f))); public static final Block DEEPSLATE_EMERALD_ORE = register(new Block("deepslate_emerald_ore", builder().requiresCorrectToolForDrops().destroyTime(4.5f))); public static final Block ENDER_CHEST = register(new Block("ender_chest", builder().setBlockEntity(BlockEntityType.ENDER_CHEST).requiresCorrectToolForDrops().destroyTime(22.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block TRIPWIRE_HOOK = register(new Block("tripwire_hook", builder().pushReaction(PistonBehavior.DESTROY) - .booleanState(ATTACHED) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(POWERED))); + .booleanState(ATTACHED) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); public static final Block TRIPWIRE = register(new Block("tripwire", builder().pushReaction(PistonBehavior.DESTROY) - .booleanState(ATTACHED) - .booleanState(DISARMED) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(POWERED) - .booleanState(SOUTH) - .booleanState(WEST))); + .booleanState(ATTACHED) + .booleanState(DISARMED) + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(POWERED) + .booleanState(SOUTH) + .booleanState(WEST))); public static final Block EMERALD_BLOCK = register(new Block("emerald_block", builder().requiresCorrectToolForDrops().destroyTime(5.0f))); public static final Block SPRUCE_STAIRS = register(new Block("spruce_stairs", builder().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block BIRCH_STAIRS = register(new Block("birch_stairs", builder().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block JUNGLE_STAIRS = register(new Block("jungle_stairs", builder().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block COMMAND_BLOCK = register(new Block("command_block", builder().setBlockEntity(BlockEntityType.COMMAND_BLOCK).requiresCorrectToolForDrops().destroyTime(-1.0f) - .booleanState(CONDITIONAL) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); + .booleanState(CONDITIONAL) + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); public static final Block BEACON = register(new Block("beacon", builder().setBlockEntity(BlockEntityType.BEACON).destroyTime(3.0f))); public static final Block COBBLESTONE_WALL = register(new Block("cobblestone_wall", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block MOSSY_COBBLESTONE_WALL = register(new Block("mossy_cobblestone_wall", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block FLOWER_POT = register(new FlowerPotBlock("flower_pot", AIR, builder().pushReaction(PistonBehavior.DESTROY))); public static final Block POTTED_TORCHFLOWER = register(new FlowerPotBlock("potted_torchflower", TORCHFLOWER, builder().pushReaction(PistonBehavior.DESTROY))); public static final Block POTTED_OAK_SAPLING = register(new FlowerPotBlock("potted_oak_sapling", OAK_SAPLING, builder().pushReaction(PistonBehavior.DESTROY))); @@ -907,6 +946,7 @@ public final class Blocks { public static final Block POTTED_ACACIA_SAPLING = register(new FlowerPotBlock("potted_acacia_sapling", ACACIA_SAPLING, builder().pushReaction(PistonBehavior.DESTROY))); public static final Block POTTED_CHERRY_SAPLING = register(new FlowerPotBlock("potted_cherry_sapling", CHERRY_SAPLING, builder().pushReaction(PistonBehavior.DESTROY))); public static final Block POTTED_DARK_OAK_SAPLING = register(new FlowerPotBlock("potted_dark_oak_sapling", DARK_OAK_SAPLING, builder().pushReaction(PistonBehavior.DESTROY))); + public static final Block POTTED_PALE_OAK_SAPLING = register(new FlowerPotBlock("potted_pale_oak_sapling", PALE_OAK_SAPLING, builder().pushReaction(PistonBehavior.DESTROY))); public static final Block POTTED_MANGROVE_PROPAGULE = register(new FlowerPotBlock("potted_mangrove_propagule", MANGROVE_PROPAGULE, builder().pushReaction(PistonBehavior.DESTROY))); public static final Block POTTED_FERN = register(new FlowerPotBlock("potted_fern", FERN, builder().pushReaction(PistonBehavior.DESTROY))); public static final Block POTTED_DANDELION = register(new FlowerPotBlock("potted_dandelion", DANDELION, builder().pushReaction(PistonBehavior.DESTROY))); @@ -927,129 +967,133 @@ public final class Blocks { public static final Block POTTED_DEAD_BUSH = register(new FlowerPotBlock("potted_dead_bush", DEAD_BUSH, builder().pushReaction(PistonBehavior.DESTROY))); public static final Block POTTED_CACTUS = register(new FlowerPotBlock("potted_cactus", CACTUS, builder().pushReaction(PistonBehavior.DESTROY))); public static final Block CARROTS = register(new Block("carrots", builder().pushReaction(PistonBehavior.DESTROY) - .intState(AGE_7))); + .intState(AGE_7))); public static final Block POTATOES = register(new Block("potatoes", builder().pushReaction(PistonBehavior.DESTROY) - .intState(AGE_7))); + .intState(AGE_7))); public static final Block OAK_BUTTON = register(new Block("oak_button", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .enumState(ATTACH_FACE) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(POWERED))); + .enumState(ATTACH_FACE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); public static final Block SPRUCE_BUTTON = register(new Block("spruce_button", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .enumState(ATTACH_FACE) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(POWERED))); + .enumState(ATTACH_FACE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); public static final Block BIRCH_BUTTON = register(new Block("birch_button", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .enumState(ATTACH_FACE) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(POWERED))); + .enumState(ATTACH_FACE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); public static final Block JUNGLE_BUTTON = register(new Block("jungle_button", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .enumState(ATTACH_FACE) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(POWERED))); + .enumState(ATTACH_FACE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); public static final Block ACACIA_BUTTON = register(new Block("acacia_button", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .enumState(ATTACH_FACE) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(POWERED))); + .enumState(ATTACH_FACE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); public static final Block CHERRY_BUTTON = register(new Block("cherry_button", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .enumState(ATTACH_FACE) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(POWERED))); + .enumState(ATTACH_FACE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); public static final Block DARK_OAK_BUTTON = register(new Block("dark_oak_button", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .enumState(ATTACH_FACE) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(POWERED))); + .enumState(ATTACH_FACE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); + public static final Block PALE_OAK_BUTTON = register(new Block("pale_oak_button", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) + .enumState(ATTACH_FACE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); public static final Block MANGROVE_BUTTON = register(new Block("mangrove_button", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .enumState(ATTACH_FACE) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(POWERED))); + .enumState(ATTACH_FACE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); public static final Block BAMBOO_BUTTON = register(new Block("bamboo_button", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .enumState(ATTACH_FACE) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(POWERED))); + .enumState(ATTACH_FACE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); public static final Block SKELETON_SKULL = register(new SkullBlock("skeleton_skull", SkullBlock.Type.SKELETON, builder().setBlockEntity(BlockEntityType.SKULL).destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY) - .booleanState(POWERED) - .intState(ROTATION_16))); + .booleanState(POWERED) + .intState(ROTATION_16))); public static final Block SKELETON_WALL_SKULL = register(new WallSkullBlock("skeleton_wall_skull", SkullBlock.Type.SKELETON, builder().setBlockEntity(BlockEntityType.SKULL).destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); public static final Block WITHER_SKELETON_SKULL = register(new SkullBlock("wither_skeleton_skull", SkullBlock.Type.WITHER_SKELETON, builder().setBlockEntity(BlockEntityType.SKULL).destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY) - .booleanState(POWERED) - .intState(ROTATION_16))); + .booleanState(POWERED) + .intState(ROTATION_16))); public static final Block WITHER_SKELETON_WALL_SKULL = register(new WallSkullBlock("wither_skeleton_wall_skull", SkullBlock.Type.WITHER_SKELETON, builder().setBlockEntity(BlockEntityType.SKULL).destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); public static final Block ZOMBIE_HEAD = register(new SkullBlock("zombie_head", SkullBlock.Type.ZOMBIE, builder().setBlockEntity(BlockEntityType.SKULL).destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY) - .booleanState(POWERED) - .intState(ROTATION_16))); + .booleanState(POWERED) + .intState(ROTATION_16))); public static final Block ZOMBIE_WALL_HEAD = register(new WallSkullBlock("zombie_wall_head", SkullBlock.Type.ZOMBIE, builder().setBlockEntity(BlockEntityType.SKULL).destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); public static final Block PLAYER_HEAD = register(new SkullBlock("player_head", SkullBlock.Type.PLAYER, builder().setBlockEntity(BlockEntityType.SKULL).destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY) - .booleanState(POWERED) - .intState(ROTATION_16))); + .booleanState(POWERED) + .intState(ROTATION_16))); public static final Block PLAYER_WALL_HEAD = register(new WallSkullBlock("player_wall_head", SkullBlock.Type.PLAYER, builder().setBlockEntity(BlockEntityType.SKULL).destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); public static final Block CREEPER_HEAD = register(new SkullBlock("creeper_head", SkullBlock.Type.CREEPER, builder().setBlockEntity(BlockEntityType.SKULL).destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY) - .booleanState(POWERED) - .intState(ROTATION_16))); + .booleanState(POWERED) + .intState(ROTATION_16))); public static final Block CREEPER_WALL_HEAD = register(new WallSkullBlock("creeper_wall_head", SkullBlock.Type.CREEPER, builder().setBlockEntity(BlockEntityType.SKULL).destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); public static final Block DRAGON_HEAD = register(new SkullBlock("dragon_head", SkullBlock.Type.DRAGON, builder().setBlockEntity(BlockEntityType.SKULL).destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY) - .booleanState(POWERED) - .intState(ROTATION_16))); + .booleanState(POWERED) + .intState(ROTATION_16))); public static final Block DRAGON_WALL_HEAD = register(new WallSkullBlock("dragon_wall_head", SkullBlock.Type.DRAGON, builder().setBlockEntity(BlockEntityType.SKULL).destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); public static final Block PIGLIN_HEAD = register(new SkullBlock("piglin_head", SkullBlock.Type.PIGLIN, builder().setBlockEntity(BlockEntityType.SKULL).destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY) - .booleanState(POWERED) - .intState(ROTATION_16))); + .booleanState(POWERED) + .intState(ROTATION_16))); public static final Block PIGLIN_WALL_HEAD = register(new WallSkullBlock("piglin_wall_head", SkullBlock.Type.PIGLIN, builder().setBlockEntity(BlockEntityType.SKULL).destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); public static final Block ANVIL = register(new Block("anvil", builder().requiresCorrectToolForDrops().destroyTime(5.0f).pushReaction(PistonBehavior.BLOCK) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block CHIPPED_ANVIL = register(new Block("chipped_anvil", builder().requiresCorrectToolForDrops().destroyTime(5.0f).pushReaction(PistonBehavior.BLOCK) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block DAMAGED_ANVIL = register(new Block("damaged_anvil", builder().requiresCorrectToolForDrops().destroyTime(5.0f).pushReaction(PistonBehavior.BLOCK) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block TRAPPED_CHEST = register(new ChestBlock("trapped_chest", builder().setBlockEntity(BlockEntityType.TRAPPED_CHEST).destroyTime(2.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(CHEST_TYPE, ChestType.VALUES) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(CHEST_TYPE, ChestType.VALUES) + .booleanState(WATERLOGGED))); public static final Block LIGHT_WEIGHTED_PRESSURE_PLATE = register(new Block("light_weighted_pressure_plate", builder().requiresCorrectToolForDrops().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .intState(POWER))); + .intState(POWER))); public static final Block HEAVY_WEIGHTED_PRESSURE_PLATE = register(new Block("heavy_weighted_pressure_plate", builder().requiresCorrectToolForDrops().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .intState(POWER))); + .intState(POWER))); public static final Block COMPARATOR = register(new Block("comparator", builder().setBlockEntity(BlockEntityType.COMPARATOR).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(MODE_COMPARATOR) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(MODE_COMPARATOR) + .booleanState(POWERED))); public static final Block DAYLIGHT_DETECTOR = register(new Block("daylight_detector", builder().setBlockEntity(BlockEntityType.DAYLIGHT_DETECTOR).destroyTime(0.2f) - .booleanState(INVERTED) - .intState(POWER))); + .booleanState(INVERTED) + .intState(POWER))); public static final Block REDSTONE_BLOCK = register(new Block("redstone_block", builder().requiresCorrectToolForDrops().destroyTime(5.0f))); public static final Block NETHER_QUARTZ_ORE = register(new Block("nether_quartz_ore", builder().requiresCorrectToolForDrops().destroyTime(3.0f))); public static final Block HOPPER = register(new Block("hopper", builder().setBlockEntity(BlockEntityType.HOPPER).requiresCorrectToolForDrops().destroyTime(3.0f) - .booleanState(ENABLED) - .enumState(FACING_HOPPER, Direction.DOWN, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .booleanState(ENABLED) + .enumState(FACING_HOPPER, Direction.DOWN, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block QUARTZ_BLOCK = register(new Block("quartz_block", builder().requiresCorrectToolForDrops().destroyTime(0.8f))); public static final Block CHISELED_QUARTZ_BLOCK = register(new Block("chiseled_quartz_block", builder().requiresCorrectToolForDrops().destroyTime(0.8f))); public static final Block QUARTZ_PILLAR = register(new Block("quartz_pillar", builder().requiresCorrectToolForDrops().destroyTime(0.8f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block QUARTZ_STAIRS = register(new Block("quartz_stairs", builder().requiresCorrectToolForDrops().destroyTime(0.8f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block ACTIVATOR_RAIL = register(new Block("activator_rail", builder().destroyTime(0.7f) - .booleanState(POWERED) - .enumState(RAIL_SHAPE_STRAIGHT) - .booleanState(WATERLOGGED))); + .booleanState(POWERED) + .enumState(RAIL_SHAPE_STRAIGHT) + .booleanState(WATERLOGGED))); public static final Block DROPPER = register(new Block("dropper", builder().setBlockEntity(BlockEntityType.DROPPER).requiresCorrectToolForDrops().destroyTime(3.5f) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) - .booleanState(TRIGGERED))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) + .booleanState(TRIGGERED))); public static final Block WHITE_TERRACOTTA = register(new Block("white_terracotta", builder().requiresCorrectToolForDrops().destroyTime(1.25f))); public static final Block ORANGE_TERRACOTTA = register(new Block("orange_terracotta", builder().requiresCorrectToolForDrops().destroyTime(1.25f))); public static final Block MAGENTA_TERRACOTTA = register(new Block("magenta_terracotta", builder().requiresCorrectToolForDrops().destroyTime(1.25f))); @@ -1067,173 +1111,178 @@ public final class Blocks { public static final Block RED_TERRACOTTA = register(new Block("red_terracotta", builder().requiresCorrectToolForDrops().destroyTime(1.25f))); public static final Block BLACK_TERRACOTTA = register(new Block("black_terracotta", builder().requiresCorrectToolForDrops().destroyTime(1.25f))); public static final Block WHITE_STAINED_GLASS_PANE = register(new Block("white_stained_glass_pane", builder().destroyTime(0.3f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block ORANGE_STAINED_GLASS_PANE = register(new Block("orange_stained_glass_pane", builder().destroyTime(0.3f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block MAGENTA_STAINED_GLASS_PANE = register(new Block("magenta_stained_glass_pane", builder().destroyTime(0.3f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block LIGHT_BLUE_STAINED_GLASS_PANE = register(new Block("light_blue_stained_glass_pane", builder().destroyTime(0.3f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block YELLOW_STAINED_GLASS_PANE = register(new Block("yellow_stained_glass_pane", builder().destroyTime(0.3f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block LIME_STAINED_GLASS_PANE = register(new Block("lime_stained_glass_pane", builder().destroyTime(0.3f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block PINK_STAINED_GLASS_PANE = register(new Block("pink_stained_glass_pane", builder().destroyTime(0.3f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block GRAY_STAINED_GLASS_PANE = register(new Block("gray_stained_glass_pane", builder().destroyTime(0.3f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block LIGHT_GRAY_STAINED_GLASS_PANE = register(new Block("light_gray_stained_glass_pane", builder().destroyTime(0.3f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block CYAN_STAINED_GLASS_PANE = register(new Block("cyan_stained_glass_pane", builder().destroyTime(0.3f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block PURPLE_STAINED_GLASS_PANE = register(new Block("purple_stained_glass_pane", builder().destroyTime(0.3f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block BLUE_STAINED_GLASS_PANE = register(new Block("blue_stained_glass_pane", builder().destroyTime(0.3f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block BROWN_STAINED_GLASS_PANE = register(new Block("brown_stained_glass_pane", builder().destroyTime(0.3f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block GREEN_STAINED_GLASS_PANE = register(new Block("green_stained_glass_pane", builder().destroyTime(0.3f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block RED_STAINED_GLASS_PANE = register(new Block("red_stained_glass_pane", builder().destroyTime(0.3f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block BLACK_STAINED_GLASS_PANE = register(new Block("black_stained_glass_pane", builder().destroyTime(0.3f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block ACACIA_STAIRS = register(new Block("acacia_stairs", builder().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block CHERRY_STAIRS = register(new Block("cherry_stairs", builder().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block DARK_OAK_STAIRS = register(new Block("dark_oak_stairs", builder().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); + public static final Block PALE_OAK_STAIRS = register(new Block("pale_oak_stairs", builder().destroyTime(2.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block MANGROVE_STAIRS = register(new Block("mangrove_stairs", builder().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block BAMBOO_STAIRS = register(new Block("bamboo_stairs", builder().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block BAMBOO_MOSAIC_STAIRS = register(new Block("bamboo_mosaic_stairs", builder().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block SLIME_BLOCK = register(new Block("slime_block", builder())); public static final Block BARRIER = register(new Block("barrier", builder().destroyTime(-1.0f).pushReaction(PistonBehavior.BLOCK) - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block LIGHT = register(new Block("light", builder().destroyTime(-1.0f) - .intState(LEVEL) - .booleanState(WATERLOGGED))); + .intState(LEVEL) + .booleanState(WATERLOGGED))); public static final Block IRON_TRAPDOOR = register(new TrapDoorBlock("iron_trapdoor", builder().requiresCorrectToolForDrops().destroyTime(5.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .booleanState(OPEN) - .booleanState(POWERED) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .booleanState(OPEN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); public static final Block PRISMARINE = register(new Block("prismarine", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block PRISMARINE_BRICKS = register(new Block("prismarine_bricks", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block DARK_PRISMARINE = register(new Block("dark_prismarine", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block PRISMARINE_STAIRS = register(new Block("prismarine_stairs", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block PRISMARINE_BRICK_STAIRS = register(new Block("prismarine_brick_stairs", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block DARK_PRISMARINE_STAIRS = register(new Block("dark_prismarine_stairs", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block PRISMARINE_SLAB = register(new Block("prismarine_slab", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block PRISMARINE_BRICK_SLAB = register(new Block("prismarine_brick_slab", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block DARK_PRISMARINE_SLAB = register(new Block("dark_prismarine_slab", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block SEA_LANTERN = register(new Block("sea_lantern", builder().destroyTime(0.3f))); public static final Block HAY_BLOCK = register(new Block("hay_block", builder().destroyTime(0.5f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block WHITE_CARPET = register(new Block("white_carpet", builder().destroyTime(0.1f))); public static final Block ORANGE_CARPET = register(new Block("orange_carpet", builder().destroyTime(0.1f))); public static final Block MAGENTA_CARPET = register(new Block("magenta_carpet", builder().destroyTime(0.1f))); @@ -1254,415 +1303,435 @@ public final class Blocks { public static final Block COAL_BLOCK = register(new Block("coal_block", builder().requiresCorrectToolForDrops().destroyTime(5.0f))); public static final Block PACKED_ICE = register(new Block("packed_ice", builder().destroyTime(0.5f))); public static final Block SUNFLOWER = register(new Block("sunflower", builder().pushReaction(PistonBehavior.DESTROY) - .enumState(DOUBLE_BLOCK_HALF))); + .enumState(DOUBLE_BLOCK_HALF))); public static final Block LILAC = register(new Block("lilac", builder().pushReaction(PistonBehavior.DESTROY) - .enumState(DOUBLE_BLOCK_HALF))); + .enumState(DOUBLE_BLOCK_HALF))); public static final Block ROSE_BUSH = register(new Block("rose_bush", builder().pushReaction(PistonBehavior.DESTROY) - .enumState(DOUBLE_BLOCK_HALF))); + .enumState(DOUBLE_BLOCK_HALF))); public static final Block PEONY = register(new Block("peony", builder().pushReaction(PistonBehavior.DESTROY) - .enumState(DOUBLE_BLOCK_HALF))); + .enumState(DOUBLE_BLOCK_HALF))); public static final Block TALL_GRASS = register(new Block("tall_grass", builder().pushReaction(PistonBehavior.DESTROY) - .enumState(DOUBLE_BLOCK_HALF))); + .enumState(DOUBLE_BLOCK_HALF))); public static final Block LARGE_FERN = register(new Block("large_fern", builder().pushReaction(PistonBehavior.DESTROY) - .enumState(DOUBLE_BLOCK_HALF))); + .enumState(DOUBLE_BLOCK_HALF))); public static final Block WHITE_BANNER = register(new BannerBlock("white_banner", 0, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .intState(ROTATION_16))); + .intState(ROTATION_16))); public static final Block ORANGE_BANNER = register(new BannerBlock("orange_banner", 1, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .intState(ROTATION_16))); + .intState(ROTATION_16))); public static final Block MAGENTA_BANNER = register(new BannerBlock("magenta_banner", 2, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .intState(ROTATION_16))); + .intState(ROTATION_16))); public static final Block LIGHT_BLUE_BANNER = register(new BannerBlock("light_blue_banner", 3, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .intState(ROTATION_16))); + .intState(ROTATION_16))); public static final Block YELLOW_BANNER = register(new BannerBlock("yellow_banner", 4, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .intState(ROTATION_16))); + .intState(ROTATION_16))); public static final Block LIME_BANNER = register(new BannerBlock("lime_banner", 5, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .intState(ROTATION_16))); + .intState(ROTATION_16))); public static final Block PINK_BANNER = register(new BannerBlock("pink_banner", 6, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .intState(ROTATION_16))); + .intState(ROTATION_16))); public static final Block GRAY_BANNER = register(new BannerBlock("gray_banner", 7, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .intState(ROTATION_16))); + .intState(ROTATION_16))); public static final Block LIGHT_GRAY_BANNER = register(new BannerBlock("light_gray_banner", 8, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .intState(ROTATION_16))); + .intState(ROTATION_16))); public static final Block CYAN_BANNER = register(new BannerBlock("cyan_banner", 9, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .intState(ROTATION_16))); + .intState(ROTATION_16))); public static final Block PURPLE_BANNER = register(new BannerBlock("purple_banner", 10, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .intState(ROTATION_16))); + .intState(ROTATION_16))); public static final Block BLUE_BANNER = register(new BannerBlock("blue_banner", 11, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .intState(ROTATION_16))); + .intState(ROTATION_16))); public static final Block BROWN_BANNER = register(new BannerBlock("brown_banner", 12, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .intState(ROTATION_16))); + .intState(ROTATION_16))); public static final Block GREEN_BANNER = register(new BannerBlock("green_banner", 13, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .intState(ROTATION_16))); + .intState(ROTATION_16))); public static final Block RED_BANNER = register(new BannerBlock("red_banner", 14, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .intState(ROTATION_16))); + .intState(ROTATION_16))); public static final Block BLACK_BANNER = register(new BannerBlock("black_banner", 15, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .intState(ROTATION_16))); + .intState(ROTATION_16))); public static final Block WHITE_WALL_BANNER = register(new BannerBlock("white_wall_banner", 0, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block ORANGE_WALL_BANNER = register(new BannerBlock("orange_wall_banner", 1, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block MAGENTA_WALL_BANNER = register(new BannerBlock("magenta_wall_banner", 2, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block LIGHT_BLUE_WALL_BANNER = register(new BannerBlock("light_blue_wall_banner", 3, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block YELLOW_WALL_BANNER = register(new BannerBlock("yellow_wall_banner", 4, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block LIME_WALL_BANNER = register(new BannerBlock("lime_wall_banner", 5, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block PINK_WALL_BANNER = register(new BannerBlock("pink_wall_banner", 6, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block GRAY_WALL_BANNER = register(new BannerBlock("gray_wall_banner", 7, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block LIGHT_GRAY_WALL_BANNER = register(new BannerBlock("light_gray_wall_banner", 8, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block CYAN_WALL_BANNER = register(new BannerBlock("cyan_wall_banner", 9, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block PURPLE_WALL_BANNER = register(new BannerBlock("purple_wall_banner", 10, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block BLUE_WALL_BANNER = register(new BannerBlock("blue_wall_banner", 11, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block BROWN_WALL_BANNER = register(new BannerBlock("brown_wall_banner", 12, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block GREEN_WALL_BANNER = register(new BannerBlock("green_wall_banner", 13, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block RED_WALL_BANNER = register(new BannerBlock("red_wall_banner", 14, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block BLACK_WALL_BANNER = register(new BannerBlock("black_wall_banner", 15, builder().setBlockEntity(BlockEntityType.BANNER).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block RED_SANDSTONE = register(new Block("red_sandstone", builder().requiresCorrectToolForDrops().destroyTime(0.8f))); public static final Block CHISELED_RED_SANDSTONE = register(new Block("chiseled_red_sandstone", builder().requiresCorrectToolForDrops().destroyTime(0.8f))); public static final Block CUT_RED_SANDSTONE = register(new Block("cut_red_sandstone", builder().requiresCorrectToolForDrops().destroyTime(0.8f))); public static final Block RED_SANDSTONE_STAIRS = register(new Block("red_sandstone_stairs", builder().requiresCorrectToolForDrops().destroyTime(0.8f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block OAK_SLAB = register(new Block("oak_slab", builder().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block SPRUCE_SLAB = register(new Block("spruce_slab", builder().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block BIRCH_SLAB = register(new Block("birch_slab", builder().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block JUNGLE_SLAB = register(new Block("jungle_slab", builder().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block ACACIA_SLAB = register(new Block("acacia_slab", builder().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block CHERRY_SLAB = register(new Block("cherry_slab", builder().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block DARK_OAK_SLAB = register(new Block("dark_oak_slab", builder().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); + public static final Block PALE_OAK_SLAB = register(new Block("pale_oak_slab", builder().destroyTime(2.0f) + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block MANGROVE_SLAB = register(new Block("mangrove_slab", builder().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block BAMBOO_SLAB = register(new Block("bamboo_slab", builder().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block BAMBOO_MOSAIC_SLAB = register(new Block("bamboo_mosaic_slab", builder().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block STONE_SLAB = register(new Block("stone_slab", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block SMOOTH_STONE_SLAB = register(new Block("smooth_stone_slab", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block SANDSTONE_SLAB = register(new Block("sandstone_slab", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block CUT_SANDSTONE_SLAB = register(new Block("cut_sandstone_slab", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block PETRIFIED_OAK_SLAB = register(new Block("petrified_oak_slab", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block COBBLESTONE_SLAB = register(new Block("cobblestone_slab", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block BRICK_SLAB = register(new Block("brick_slab", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block STONE_BRICK_SLAB = register(new Block("stone_brick_slab", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block MUD_BRICK_SLAB = register(new Block("mud_brick_slab", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block NETHER_BRICK_SLAB = register(new Block("nether_brick_slab", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block QUARTZ_SLAB = register(new Block("quartz_slab", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block RED_SANDSTONE_SLAB = register(new Block("red_sandstone_slab", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block CUT_RED_SANDSTONE_SLAB = register(new Block("cut_red_sandstone_slab", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block PURPUR_SLAB = register(new Block("purpur_slab", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block SMOOTH_STONE = register(new Block("smooth_stone", builder().requiresCorrectToolForDrops().destroyTime(2.0f))); public static final Block SMOOTH_SANDSTONE = register(new Block("smooth_sandstone", builder().requiresCorrectToolForDrops().destroyTime(2.0f))); public static final Block SMOOTH_QUARTZ = register(new Block("smooth_quartz", builder().requiresCorrectToolForDrops().destroyTime(2.0f))); public static final Block SMOOTH_RED_SANDSTONE = register(new Block("smooth_red_sandstone", builder().requiresCorrectToolForDrops().destroyTime(2.0f))); public static final Block SPRUCE_FENCE_GATE = register(new Block("spruce_fence_gate", builder().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(IN_WALL) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(IN_WALL) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block BIRCH_FENCE_GATE = register(new Block("birch_fence_gate", builder().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(IN_WALL) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(IN_WALL) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block JUNGLE_FENCE_GATE = register(new Block("jungle_fence_gate", builder().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(IN_WALL) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(IN_WALL) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block ACACIA_FENCE_GATE = register(new Block("acacia_fence_gate", builder().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(IN_WALL) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(IN_WALL) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block CHERRY_FENCE_GATE = register(new Block("cherry_fence_gate", builder().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(IN_WALL) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(IN_WALL) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block DARK_OAK_FENCE_GATE = register(new Block("dark_oak_fence_gate", builder().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(IN_WALL) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(IN_WALL) + .booleanState(OPEN) + .booleanState(POWERED))); + public static final Block PALE_OAK_FENCE_GATE = register(new Block("pale_oak_fence_gate", builder().destroyTime(2.0f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(IN_WALL) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block MANGROVE_FENCE_GATE = register(new Block("mangrove_fence_gate", builder().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(IN_WALL) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(IN_WALL) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block BAMBOO_FENCE_GATE = register(new Block("bamboo_fence_gate", builder().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(IN_WALL) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(IN_WALL) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block SPRUCE_FENCE = register(new Block("spruce_fence", builder().destroyTime(2.0f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block BIRCH_FENCE = register(new Block("birch_fence", builder().destroyTime(2.0f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block JUNGLE_FENCE = register(new Block("jungle_fence", builder().destroyTime(2.0f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block ACACIA_FENCE = register(new Block("acacia_fence", builder().destroyTime(2.0f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block CHERRY_FENCE = register(new Block("cherry_fence", builder().destroyTime(2.0f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block DARK_OAK_FENCE = register(new Block("dark_oak_fence", builder().destroyTime(2.0f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); + public static final Block PALE_OAK_FENCE = register(new Block("pale_oak_fence", builder().destroyTime(2.0f) + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block MANGROVE_FENCE = register(new Block("mangrove_fence", builder().destroyTime(2.0f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block BAMBOO_FENCE = register(new Block("bamboo_fence", builder().destroyTime(2.0f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block SPRUCE_DOOR = register(new DoorBlock("spruce_door", builder().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(DOUBLE_BLOCK_HALF) - .enumState(DOOR_HINGE) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(DOUBLE_BLOCK_HALF) + .enumState(DOOR_HINGE) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block BIRCH_DOOR = register(new DoorBlock("birch_door", builder().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(DOUBLE_BLOCK_HALF) - .enumState(DOOR_HINGE) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(DOUBLE_BLOCK_HALF) + .enumState(DOOR_HINGE) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block JUNGLE_DOOR = register(new DoorBlock("jungle_door", builder().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(DOUBLE_BLOCK_HALF) - .enumState(DOOR_HINGE) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(DOUBLE_BLOCK_HALF) + .enumState(DOOR_HINGE) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block ACACIA_DOOR = register(new DoorBlock("acacia_door", builder().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(DOUBLE_BLOCK_HALF) - .enumState(DOOR_HINGE) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(DOUBLE_BLOCK_HALF) + .enumState(DOOR_HINGE) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block CHERRY_DOOR = register(new DoorBlock("cherry_door", builder().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(DOUBLE_BLOCK_HALF) - .enumState(DOOR_HINGE) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(DOUBLE_BLOCK_HALF) + .enumState(DOOR_HINGE) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block DARK_OAK_DOOR = register(new DoorBlock("dark_oak_door", builder().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(DOUBLE_BLOCK_HALF) - .enumState(DOOR_HINGE) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(DOUBLE_BLOCK_HALF) + .enumState(DOOR_HINGE) + .booleanState(OPEN) + .booleanState(POWERED))); + public static final Block PALE_OAK_DOOR = register(new DoorBlock("pale_oak_door", builder().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(DOUBLE_BLOCK_HALF) + .enumState(DOOR_HINGE) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block MANGROVE_DOOR = register(new DoorBlock("mangrove_door", builder().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(DOUBLE_BLOCK_HALF) - .enumState(DOOR_HINGE) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(DOUBLE_BLOCK_HALF) + .enumState(DOOR_HINGE) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block BAMBOO_DOOR = register(new DoorBlock("bamboo_door", builder().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(DOUBLE_BLOCK_HALF) - .enumState(DOOR_HINGE) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(DOUBLE_BLOCK_HALF) + .enumState(DOOR_HINGE) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block END_ROD = register(new Block("end_rod", builder() - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); public static final Block CHORUS_PLANT = register(new Block("chorus_plant", builder().destroyTime(0.4f).pushReaction(PistonBehavior.DESTROY) - .booleanState(DOWN) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(UP) - .booleanState(WEST))); + .booleanState(DOWN) + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(UP) + .booleanState(WEST))); public static final Block CHORUS_FLOWER = register(new Block("chorus_flower", builder().destroyTime(0.4f).pushReaction(PistonBehavior.DESTROY) - .intState(AGE_5))); + .intState(AGE_5))); public static final Block PURPUR_BLOCK = register(new Block("purpur_block", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block PURPUR_PILLAR = register(new Block("purpur_pillar", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block PURPUR_STAIRS = register(new Block("purpur_stairs", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block END_STONE_BRICKS = register(new Block("end_stone_bricks", builder().requiresCorrectToolForDrops().destroyTime(3.0f))); public static final Block TORCHFLOWER_CROP = register(new Block("torchflower_crop", builder().pushReaction(PistonBehavior.DESTROY) - .intState(AGE_1))); + .intState(AGE_1))); public static final Block PITCHER_CROP = register(new Block("pitcher_crop", builder().pushReaction(PistonBehavior.DESTROY) - .intState(AGE_4) - .enumState(DOUBLE_BLOCK_HALF))); + .intState(AGE_4) + .enumState(DOUBLE_BLOCK_HALF))); public static final Block PITCHER_PLANT = register(new Block("pitcher_plant", builder().pushReaction(PistonBehavior.DESTROY) - .enumState(DOUBLE_BLOCK_HALF))); + .enumState(DOUBLE_BLOCK_HALF))); public static final Block BEETROOTS = register(new Block("beetroots", builder().pushReaction(PistonBehavior.DESTROY) - .intState(AGE_3))); + .intState(AGE_3))); public static final Block DIRT_PATH = register(new Block("dirt_path", builder().destroyTime(0.65f))); public static final Block END_GATEWAY = register(new Block("end_gateway", builder().setBlockEntity(BlockEntityType.END_GATEWAY).destroyTime(-1.0f).pushReaction(PistonBehavior.BLOCK))); public static final Block REPEATING_COMMAND_BLOCK = register(new Block("repeating_command_block", builder().setBlockEntity(BlockEntityType.COMMAND_BLOCK).requiresCorrectToolForDrops().destroyTime(-1.0f) - .booleanState(CONDITIONAL) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); + .booleanState(CONDITIONAL) + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); public static final Block CHAIN_COMMAND_BLOCK = register(new Block("chain_command_block", builder().setBlockEntity(BlockEntityType.COMMAND_BLOCK).requiresCorrectToolForDrops().destroyTime(-1.0f) - .booleanState(CONDITIONAL) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); + .booleanState(CONDITIONAL) + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); public static final Block FROSTED_ICE = register(new Block("frosted_ice", builder().destroyTime(0.5f) - .intState(AGE_3))); + .intState(AGE_3))); public static final Block MAGMA_BLOCK = register(new Block("magma_block", builder().requiresCorrectToolForDrops().destroyTime(0.5f))); public static final Block NETHER_WART_BLOCK = register(new Block("nether_wart_block", builder().destroyTime(1.0f))); public static final Block RED_NETHER_BRICKS = register(new Block("red_nether_bricks", builder().requiresCorrectToolForDrops().destroyTime(2.0f))); public static final Block BONE_BLOCK = register(new Block("bone_block", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block STRUCTURE_VOID = register(new Block("structure_void", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block OBSERVER = register(new Block("observer", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) - .booleanState(POWERED))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) + .booleanState(POWERED))); public static final Block SHULKER_BOX = register(new Block("shulker_box", builder().setBlockEntity(BlockEntityType.SHULKER_BOX).destroyTime(2.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); public static final Block WHITE_SHULKER_BOX = register(new Block("white_shulker_box", builder().setBlockEntity(BlockEntityType.SHULKER_BOX).destroyTime(2.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); public static final Block ORANGE_SHULKER_BOX = register(new Block("orange_shulker_box", builder().setBlockEntity(BlockEntityType.SHULKER_BOX).destroyTime(2.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); public static final Block MAGENTA_SHULKER_BOX = register(new Block("magenta_shulker_box", builder().setBlockEntity(BlockEntityType.SHULKER_BOX).destroyTime(2.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); public static final Block LIGHT_BLUE_SHULKER_BOX = register(new Block("light_blue_shulker_box", builder().setBlockEntity(BlockEntityType.SHULKER_BOX).destroyTime(2.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); public static final Block YELLOW_SHULKER_BOX = register(new Block("yellow_shulker_box", builder().setBlockEntity(BlockEntityType.SHULKER_BOX).destroyTime(2.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); public static final Block LIME_SHULKER_BOX = register(new Block("lime_shulker_box", builder().setBlockEntity(BlockEntityType.SHULKER_BOX).destroyTime(2.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); public static final Block PINK_SHULKER_BOX = register(new Block("pink_shulker_box", builder().setBlockEntity(BlockEntityType.SHULKER_BOX).destroyTime(2.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); public static final Block GRAY_SHULKER_BOX = register(new Block("gray_shulker_box", builder().setBlockEntity(BlockEntityType.SHULKER_BOX).destroyTime(2.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); public static final Block LIGHT_GRAY_SHULKER_BOX = register(new Block("light_gray_shulker_box", builder().setBlockEntity(BlockEntityType.SHULKER_BOX).destroyTime(2.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); public static final Block CYAN_SHULKER_BOX = register(new Block("cyan_shulker_box", builder().setBlockEntity(BlockEntityType.SHULKER_BOX).destroyTime(2.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); public static final Block PURPLE_SHULKER_BOX = register(new Block("purple_shulker_box", builder().setBlockEntity(BlockEntityType.SHULKER_BOX).destroyTime(2.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); public static final Block BLUE_SHULKER_BOX = register(new Block("blue_shulker_box", builder().setBlockEntity(BlockEntityType.SHULKER_BOX).destroyTime(2.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); public static final Block BROWN_SHULKER_BOX = register(new Block("brown_shulker_box", builder().setBlockEntity(BlockEntityType.SHULKER_BOX).destroyTime(2.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); public static final Block GREEN_SHULKER_BOX = register(new Block("green_shulker_box", builder().setBlockEntity(BlockEntityType.SHULKER_BOX).destroyTime(2.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); public static final Block RED_SHULKER_BOX = register(new Block("red_shulker_box", builder().setBlockEntity(BlockEntityType.SHULKER_BOX).destroyTime(2.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); public static final Block BLACK_SHULKER_BOX = register(new Block("black_shulker_box", builder().setBlockEntity(BlockEntityType.SHULKER_BOX).destroyTime(2.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN))); public static final Block WHITE_GLAZED_TERRACOTTA = register(new Block("white_glazed_terracotta", builder().requiresCorrectToolForDrops().destroyTime(1.4f).pushReaction(PistonBehavior.PUSH_ONLY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block ORANGE_GLAZED_TERRACOTTA = register(new Block("orange_glazed_terracotta", builder().requiresCorrectToolForDrops().destroyTime(1.4f).pushReaction(PistonBehavior.PUSH_ONLY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block MAGENTA_GLAZED_TERRACOTTA = register(new Block("magenta_glazed_terracotta", builder().requiresCorrectToolForDrops().destroyTime(1.4f).pushReaction(PistonBehavior.PUSH_ONLY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block LIGHT_BLUE_GLAZED_TERRACOTTA = register(new Block("light_blue_glazed_terracotta", builder().requiresCorrectToolForDrops().destroyTime(1.4f).pushReaction(PistonBehavior.PUSH_ONLY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block YELLOW_GLAZED_TERRACOTTA = register(new Block("yellow_glazed_terracotta", builder().requiresCorrectToolForDrops().destroyTime(1.4f).pushReaction(PistonBehavior.PUSH_ONLY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block LIME_GLAZED_TERRACOTTA = register(new Block("lime_glazed_terracotta", builder().requiresCorrectToolForDrops().destroyTime(1.4f).pushReaction(PistonBehavior.PUSH_ONLY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block PINK_GLAZED_TERRACOTTA = register(new Block("pink_glazed_terracotta", builder().requiresCorrectToolForDrops().destroyTime(1.4f).pushReaction(PistonBehavior.PUSH_ONLY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block GRAY_GLAZED_TERRACOTTA = register(new Block("gray_glazed_terracotta", builder().requiresCorrectToolForDrops().destroyTime(1.4f).pushReaction(PistonBehavior.PUSH_ONLY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block LIGHT_GRAY_GLAZED_TERRACOTTA = register(new Block("light_gray_glazed_terracotta", builder().requiresCorrectToolForDrops().destroyTime(1.4f).pushReaction(PistonBehavior.PUSH_ONLY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block CYAN_GLAZED_TERRACOTTA = register(new Block("cyan_glazed_terracotta", builder().requiresCorrectToolForDrops().destroyTime(1.4f).pushReaction(PistonBehavior.PUSH_ONLY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block PURPLE_GLAZED_TERRACOTTA = register(new Block("purple_glazed_terracotta", builder().requiresCorrectToolForDrops().destroyTime(1.4f).pushReaction(PistonBehavior.PUSH_ONLY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block BLUE_GLAZED_TERRACOTTA = register(new Block("blue_glazed_terracotta", builder().requiresCorrectToolForDrops().destroyTime(1.4f).pushReaction(PistonBehavior.PUSH_ONLY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block BROWN_GLAZED_TERRACOTTA = register(new Block("brown_glazed_terracotta", builder().requiresCorrectToolForDrops().destroyTime(1.4f).pushReaction(PistonBehavior.PUSH_ONLY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block GREEN_GLAZED_TERRACOTTA = register(new Block("green_glazed_terracotta", builder().requiresCorrectToolForDrops().destroyTime(1.4f).pushReaction(PistonBehavior.PUSH_ONLY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block RED_GLAZED_TERRACOTTA = register(new Block("red_glazed_terracotta", builder().requiresCorrectToolForDrops().destroyTime(1.4f).pushReaction(PistonBehavior.PUSH_ONLY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block BLACK_GLAZED_TERRACOTTA = register(new Block("black_glazed_terracotta", builder().requiresCorrectToolForDrops().destroyTime(1.4f).pushReaction(PistonBehavior.PUSH_ONLY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block WHITE_CONCRETE = register(new Block("white_concrete", builder().requiresCorrectToolForDrops().destroyTime(1.8f))); public static final Block ORANGE_CONCRETE = register(new Block("orange_concrete", builder().requiresCorrectToolForDrops().destroyTime(1.8f))); public static final Block MAGENTA_CONCRETE = register(new Block("magenta_concrete", builder().requiresCorrectToolForDrops().destroyTime(1.8f))); @@ -1696,14 +1765,14 @@ public final class Blocks { public static final Block RED_CONCRETE_POWDER = register(new Block("red_concrete_powder", builder().destroyTime(0.5f))); public static final Block BLACK_CONCRETE_POWDER = register(new Block("black_concrete_powder", builder().destroyTime(0.5f))); public static final Block KELP = register(new Block("kelp", builder().pushReaction(PistonBehavior.DESTROY) - .intState(AGE_25))); + .intState(AGE_25))); public static final Block KELP_PLANT = register(new Block("kelp_plant", builder().pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.KELP))); public static final Block DRIED_KELP_BLOCK = register(new Block("dried_kelp_block", builder().destroyTime(0.5f))); public static final Block TURTLE_EGG = register(new Block("turtle_egg", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .intState(EGGS) - .intState(HATCH))); + .intState(EGGS) + .intState(HATCH))); public static final Block SNIFFER_EGG = register(new Block("sniffer_egg", builder().destroyTime(0.5f) - .intState(HATCH))); + .intState(HATCH))); public static final Block DEAD_TUBE_CORAL_BLOCK = register(new Block("dead_tube_coral_block", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block DEAD_BRAIN_CORAL_BLOCK = register(new Block("dead_brain_coral_block", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block DEAD_BUBBLE_CORAL_BLOCK = register(new Block("dead_bubble_coral_block", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); @@ -1715,480 +1784,480 @@ public final class Blocks { public static final Block FIRE_CORAL_BLOCK = register(new Block("fire_coral_block", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block HORN_CORAL_BLOCK = register(new Block("horn_coral_block", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block DEAD_TUBE_CORAL = register(new Block("dead_tube_coral", builder().requiresCorrectToolForDrops() - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block DEAD_BRAIN_CORAL = register(new Block("dead_brain_coral", builder().requiresCorrectToolForDrops() - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block DEAD_BUBBLE_CORAL = register(new Block("dead_bubble_coral", builder().requiresCorrectToolForDrops() - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block DEAD_FIRE_CORAL = register(new Block("dead_fire_coral", builder().requiresCorrectToolForDrops() - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block DEAD_HORN_CORAL = register(new Block("dead_horn_coral", builder().requiresCorrectToolForDrops() - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block TUBE_CORAL = register(new Block("tube_coral", builder().pushReaction(PistonBehavior.DESTROY) - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block BRAIN_CORAL = register(new Block("brain_coral", builder().pushReaction(PistonBehavior.DESTROY) - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block BUBBLE_CORAL = register(new Block("bubble_coral", builder().pushReaction(PistonBehavior.DESTROY) - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block FIRE_CORAL = register(new Block("fire_coral", builder().pushReaction(PistonBehavior.DESTROY) - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block HORN_CORAL = register(new Block("horn_coral", builder().pushReaction(PistonBehavior.DESTROY) - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block DEAD_TUBE_CORAL_FAN = register(new Block("dead_tube_coral_fan", builder().requiresCorrectToolForDrops() - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block DEAD_BRAIN_CORAL_FAN = register(new Block("dead_brain_coral_fan", builder().requiresCorrectToolForDrops() - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block DEAD_BUBBLE_CORAL_FAN = register(new Block("dead_bubble_coral_fan", builder().requiresCorrectToolForDrops() - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block DEAD_FIRE_CORAL_FAN = register(new Block("dead_fire_coral_fan", builder().requiresCorrectToolForDrops() - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block DEAD_HORN_CORAL_FAN = register(new Block("dead_horn_coral_fan", builder().requiresCorrectToolForDrops() - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block TUBE_CORAL_FAN = register(new Block("tube_coral_fan", builder().pushReaction(PistonBehavior.DESTROY) - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block BRAIN_CORAL_FAN = register(new Block("brain_coral_fan", builder().pushReaction(PistonBehavior.DESTROY) - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block BUBBLE_CORAL_FAN = register(new Block("bubble_coral_fan", builder().pushReaction(PistonBehavior.DESTROY) - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block FIRE_CORAL_FAN = register(new Block("fire_coral_fan", builder().pushReaction(PistonBehavior.DESTROY) - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block HORN_CORAL_FAN = register(new Block("horn_coral_fan", builder().pushReaction(PistonBehavior.DESTROY) - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block DEAD_TUBE_CORAL_WALL_FAN = register(new Block("dead_tube_coral_wall_fan", builder().requiresCorrectToolForDrops() - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block DEAD_BRAIN_CORAL_WALL_FAN = register(new Block("dead_brain_coral_wall_fan", builder().requiresCorrectToolForDrops() - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block DEAD_BUBBLE_CORAL_WALL_FAN = register(new Block("dead_bubble_coral_wall_fan", builder().requiresCorrectToolForDrops() - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block DEAD_FIRE_CORAL_WALL_FAN = register(new Block("dead_fire_coral_wall_fan", builder().requiresCorrectToolForDrops() - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block DEAD_HORN_CORAL_WALL_FAN = register(new Block("dead_horn_coral_wall_fan", builder().requiresCorrectToolForDrops() - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block TUBE_CORAL_WALL_FAN = register(new Block("tube_coral_wall_fan", builder().pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block BRAIN_CORAL_WALL_FAN = register(new Block("brain_coral_wall_fan", builder().pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block BUBBLE_CORAL_WALL_FAN = register(new Block("bubble_coral_wall_fan", builder().pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block FIRE_CORAL_WALL_FAN = register(new Block("fire_coral_wall_fan", builder().pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block HORN_CORAL_WALL_FAN = register(new Block("horn_coral_wall_fan", builder().pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block SEA_PICKLE = register(new Block("sea_pickle", builder().pushReaction(PistonBehavior.DESTROY) - .intState(PICKLES) - .booleanState(WATERLOGGED))); + .intState(PICKLES) + .booleanState(WATERLOGGED))); public static final Block BLUE_ICE = register(new Block("blue_ice", builder().destroyTime(2.8f))); public static final Block CONDUIT = register(new Block("conduit", builder().setBlockEntity(BlockEntityType.CONDUIT).destroyTime(3.0f) - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block BAMBOO_SAPLING = register(new Block("bamboo_sapling", builder().destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.BAMBOO))); public static final Block BAMBOO = register(new Block("bamboo", builder().destroyTime(1.0f).pushReaction(PistonBehavior.DESTROY) - .intState(AGE_1) - .enumState(BAMBOO_LEAVES) - .intState(STAGE))); + .intState(AGE_1) + .enumState(BAMBOO_LEAVES) + .intState(STAGE))); public static final Block POTTED_BAMBOO = register(new FlowerPotBlock("potted_bamboo", BAMBOO, builder().pushReaction(PistonBehavior.DESTROY))); public static final Block VOID_AIR = register(new Block("void_air", builder())); public static final Block CAVE_AIR = register(new Block("cave_air", builder())); public static final Block BUBBLE_COLUMN = register(new Block("bubble_column", builder().pushReaction(PistonBehavior.DESTROY) - .booleanState(DRAG))); + .booleanState(DRAG))); public static final Block POLISHED_GRANITE_STAIRS = register(new Block("polished_granite_stairs", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block SMOOTH_RED_SANDSTONE_STAIRS = register(new Block("smooth_red_sandstone_stairs", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block MOSSY_STONE_BRICK_STAIRS = register(new Block("mossy_stone_brick_stairs", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block POLISHED_DIORITE_STAIRS = register(new Block("polished_diorite_stairs", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block MOSSY_COBBLESTONE_STAIRS = register(new Block("mossy_cobblestone_stairs", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block END_STONE_BRICK_STAIRS = register(new Block("end_stone_brick_stairs", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block STONE_STAIRS = register(new Block("stone_stairs", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block SMOOTH_SANDSTONE_STAIRS = register(new Block("smooth_sandstone_stairs", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block SMOOTH_QUARTZ_STAIRS = register(new Block("smooth_quartz_stairs", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block GRANITE_STAIRS = register(new Block("granite_stairs", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block ANDESITE_STAIRS = register(new Block("andesite_stairs", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block RED_NETHER_BRICK_STAIRS = register(new Block("red_nether_brick_stairs", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block POLISHED_ANDESITE_STAIRS = register(new Block("polished_andesite_stairs", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block DIORITE_STAIRS = register(new Block("diorite_stairs", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block POLISHED_GRANITE_SLAB = register(new Block("polished_granite_slab", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block SMOOTH_RED_SANDSTONE_SLAB = register(new Block("smooth_red_sandstone_slab", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block MOSSY_STONE_BRICK_SLAB = register(new Block("mossy_stone_brick_slab", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block POLISHED_DIORITE_SLAB = register(new Block("polished_diorite_slab", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block MOSSY_COBBLESTONE_SLAB = register(new Block("mossy_cobblestone_slab", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block END_STONE_BRICK_SLAB = register(new Block("end_stone_brick_slab", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block SMOOTH_SANDSTONE_SLAB = register(new Block("smooth_sandstone_slab", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block SMOOTH_QUARTZ_SLAB = register(new Block("smooth_quartz_slab", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block GRANITE_SLAB = register(new Block("granite_slab", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block ANDESITE_SLAB = register(new Block("andesite_slab", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block RED_NETHER_BRICK_SLAB = register(new Block("red_nether_brick_slab", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block POLISHED_ANDESITE_SLAB = register(new Block("polished_andesite_slab", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block DIORITE_SLAB = register(new Block("diorite_slab", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block BRICK_WALL = register(new Block("brick_wall", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block PRISMARINE_WALL = register(new Block("prismarine_wall", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block RED_SANDSTONE_WALL = register(new Block("red_sandstone_wall", builder().requiresCorrectToolForDrops().destroyTime(0.8f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block MOSSY_STONE_BRICK_WALL = register(new Block("mossy_stone_brick_wall", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block GRANITE_WALL = register(new Block("granite_wall", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block STONE_BRICK_WALL = register(new Block("stone_brick_wall", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block MUD_BRICK_WALL = register(new Block("mud_brick_wall", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block NETHER_BRICK_WALL = register(new Block("nether_brick_wall", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block ANDESITE_WALL = register(new Block("andesite_wall", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block RED_NETHER_BRICK_WALL = register(new Block("red_nether_brick_wall", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block SANDSTONE_WALL = register(new Block("sandstone_wall", builder().requiresCorrectToolForDrops().destroyTime(0.8f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block END_STONE_BRICK_WALL = register(new Block("end_stone_brick_wall", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block DIORITE_WALL = register(new Block("diorite_wall", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block SCAFFOLDING = register(new Block("scaffolding", builder().pushReaction(PistonBehavior.DESTROY) - .booleanState(BOTTOM) - .intState(STABILITY_DISTANCE) - .booleanState(WATERLOGGED))); + .booleanState(BOTTOM) + .intState(STABILITY_DISTANCE) + .booleanState(WATERLOGGED))); public static final Block LOOM = register(new Block("loom", builder().destroyTime(2.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block BARREL = register(new Block("barrel", builder().setBlockEntity(BlockEntityType.BARREL).destroyTime(2.5f) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) - .booleanState(OPEN))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) + .booleanState(OPEN))); public static final Block SMOKER = register(new Block("smoker", builder().setBlockEntity(BlockEntityType.SMOKER).requiresCorrectToolForDrops().destroyTime(3.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(LIT))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(LIT))); public static final Block BLAST_FURNACE = register(new Block("blast_furnace", builder().setBlockEntity(BlockEntityType.BLAST_FURNACE).requiresCorrectToolForDrops().destroyTime(3.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(LIT))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(LIT))); public static final Block CARTOGRAPHY_TABLE = register(new Block("cartography_table", builder().destroyTime(2.5f))); public static final Block FLETCHING_TABLE = register(new Block("fletching_table", builder().destroyTime(2.5f))); public static final Block GRINDSTONE = register(new Block("grindstone", builder().requiresCorrectToolForDrops().destroyTime(2.0f).pushReaction(PistonBehavior.BLOCK) - .enumState(ATTACH_FACE) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(ATTACH_FACE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block LECTERN = register(new LecternBlock("lectern", builder().setBlockEntity(BlockEntityType.LECTERN).destroyTime(2.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(HAS_BOOK) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(HAS_BOOK) + .booleanState(POWERED))); public static final Block SMITHING_TABLE = register(new Block("smithing_table", builder().destroyTime(2.5f))); public static final Block STONECUTTER = register(new Block("stonecutter", builder().requiresCorrectToolForDrops().destroyTime(3.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); public static final Block BELL = register(new Block("bell", builder().setBlockEntity(BlockEntityType.BELL).requiresCorrectToolForDrops().destroyTime(5.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(BELL_ATTACHMENT) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(POWERED))); + .enumState(BELL_ATTACHMENT) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); public static final Block LANTERN = register(new Block("lantern", builder().requiresCorrectToolForDrops().destroyTime(3.5f).pushReaction(PistonBehavior.DESTROY) - .booleanState(HANGING) - .booleanState(WATERLOGGED))); + .booleanState(HANGING) + .booleanState(WATERLOGGED))); public static final Block SOUL_LANTERN = register(new Block("soul_lantern", builder().requiresCorrectToolForDrops().destroyTime(3.5f).pushReaction(PistonBehavior.DESTROY) - .booleanState(HANGING) - .booleanState(WATERLOGGED))); + .booleanState(HANGING) + .booleanState(WATERLOGGED))); public static final Block CAMPFIRE = register(new Block("campfire", builder().setBlockEntity(BlockEntityType.CAMPFIRE).destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(LIT) - .booleanState(SIGNAL_FIRE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(LIT) + .booleanState(SIGNAL_FIRE) + .booleanState(WATERLOGGED))); public static final Block SOUL_CAMPFIRE = register(new Block("soul_campfire", builder().setBlockEntity(BlockEntityType.CAMPFIRE).destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(LIT) - .booleanState(SIGNAL_FIRE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(LIT) + .booleanState(SIGNAL_FIRE) + .booleanState(WATERLOGGED))); public static final Block SWEET_BERRY_BUSH = register(new Block("sweet_berry_bush", builder().pushReaction(PistonBehavior.DESTROY) - .intState(AGE_3))); + .intState(AGE_3))); public static final Block WARPED_STEM = register(new Block("warped_stem", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block STRIPPED_WARPED_STEM = register(new Block("stripped_warped_stem", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block WARPED_HYPHAE = register(new Block("warped_hyphae", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block STRIPPED_WARPED_HYPHAE = register(new Block("stripped_warped_hyphae", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block WARPED_NYLIUM = register(new Block("warped_nylium", builder().requiresCorrectToolForDrops().destroyTime(0.4f))); public static final Block WARPED_FUNGUS = register(new Block("warped_fungus", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block WARPED_WART_BLOCK = register(new Block("warped_wart_block", builder().destroyTime(1.0f))); public static final Block WARPED_ROOTS = register(new Block("warped_roots", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block NETHER_SPROUTS = register(new Block("nether_sprouts", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block CRIMSON_STEM = register(new Block("crimson_stem", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block STRIPPED_CRIMSON_STEM = register(new Block("stripped_crimson_stem", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block CRIMSON_HYPHAE = register(new Block("crimson_hyphae", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block STRIPPED_CRIMSON_HYPHAE = register(new Block("stripped_crimson_hyphae", builder().destroyTime(2.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block CRIMSON_NYLIUM = register(new Block("crimson_nylium", builder().requiresCorrectToolForDrops().destroyTime(0.4f))); public static final Block CRIMSON_FUNGUS = register(new Block("crimson_fungus", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block SHROOMLIGHT = register(new Block("shroomlight", builder().destroyTime(1.0f))); public static final Block WEEPING_VINES = register(new Block("weeping_vines", builder().pushReaction(PistonBehavior.DESTROY) - .intState(AGE_25))); + .intState(AGE_25))); public static final Block WEEPING_VINES_PLANT = register(new Block("weeping_vines_plant", builder().pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.WEEPING_VINES))); public static final Block TWISTING_VINES = register(new Block("twisting_vines", builder().pushReaction(PistonBehavior.DESTROY) - .intState(AGE_25))); + .intState(AGE_25))); public static final Block TWISTING_VINES_PLANT = register(new Block("twisting_vines_plant", builder().pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.TWISTING_VINES))); public static final Block CRIMSON_ROOTS = register(new Block("crimson_roots", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block CRIMSON_PLANKS = register(new Block("crimson_planks", builder().destroyTime(2.0f))); public static final Block WARPED_PLANKS = register(new Block("warped_planks", builder().destroyTime(2.0f))); public static final Block CRIMSON_SLAB = register(new Block("crimson_slab", builder().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block WARPED_SLAB = register(new Block("warped_slab", builder().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block CRIMSON_PRESSURE_PLATE = register(new Block("crimson_pressure_plate", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .booleanState(POWERED))); + .booleanState(POWERED))); public static final Block WARPED_PRESSURE_PLATE = register(new Block("warped_pressure_plate", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .booleanState(POWERED))); + .booleanState(POWERED))); public static final Block CRIMSON_FENCE = register(new Block("crimson_fence", builder().destroyTime(2.0f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block WARPED_FENCE = register(new Block("warped_fence", builder().destroyTime(2.0f) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block CRIMSON_TRAPDOOR = register(new TrapDoorBlock("crimson_trapdoor", builder().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .booleanState(OPEN) - .booleanState(POWERED) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .booleanState(OPEN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); public static final Block WARPED_TRAPDOOR = register(new TrapDoorBlock("warped_trapdoor", builder().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .booleanState(OPEN) - .booleanState(POWERED) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .booleanState(OPEN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); public static final Block CRIMSON_FENCE_GATE = register(new Block("crimson_fence_gate", builder().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(IN_WALL) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(IN_WALL) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block WARPED_FENCE_GATE = register(new Block("warped_fence_gate", builder().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(IN_WALL) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(IN_WALL) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block CRIMSON_STAIRS = register(new Block("crimson_stairs", builder().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block WARPED_STAIRS = register(new Block("warped_stairs", builder().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block CRIMSON_BUTTON = register(new Block("crimson_button", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .enumState(ATTACH_FACE) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(POWERED))); + .enumState(ATTACH_FACE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); public static final Block WARPED_BUTTON = register(new Block("warped_button", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .enumState(ATTACH_FACE) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(POWERED))); + .enumState(ATTACH_FACE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); public static final Block CRIMSON_DOOR = register(new DoorBlock("crimson_door", builder().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(DOUBLE_BLOCK_HALF) - .enumState(DOOR_HINGE) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(DOUBLE_BLOCK_HALF) + .enumState(DOOR_HINGE) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block WARPED_DOOR = register(new DoorBlock("warped_door", builder().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(DOUBLE_BLOCK_HALF) - .enumState(DOOR_HINGE) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(DOUBLE_BLOCK_HALF) + .enumState(DOOR_HINGE) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block CRIMSON_SIGN = register(new Block("crimson_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) - .intState(ROTATION_16) - .booleanState(WATERLOGGED))); + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); public static final Block WARPED_SIGN = register(new Block("warped_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) - .intState(ROTATION_16) - .booleanState(WATERLOGGED))); + .intState(ROTATION_16) + .booleanState(WATERLOGGED))); public static final Block CRIMSON_WALL_SIGN = register(new Block("crimson_wall_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block WARPED_WALL_SIGN = register(new Block("warped_wall_sign", builder().setBlockEntity(BlockEntityType.SIGN).destroyTime(1.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block STRUCTURE_BLOCK = register(new Block("structure_block", builder().setBlockEntity(BlockEntityType.STRUCTURE_BLOCK).requiresCorrectToolForDrops().destroyTime(-1.0f) - .enumState(STRUCTUREBLOCK_MODE))); + .enumState(STRUCTUREBLOCK_MODE))); public static final Block JIGSAW = register(new Block("jigsaw", builder().setBlockEntity(BlockEntityType.JIGSAW).requiresCorrectToolForDrops().destroyTime(-1.0f) - .enumState(ORIENTATION, FrontAndTop.VALUES))); + .enumState(ORIENTATION, FrontAndTop.VALUES))); public static final Block COMPOSTER = register(new Block("composter", builder().destroyTime(0.6f) - .intState(LEVEL_COMPOSTER))); + .intState(LEVEL_COMPOSTER))); public static final Block TARGET = register(new Block("target", builder().destroyTime(0.5f) - .intState(POWER))); + .intState(POWER))); public static final Block BEE_NEST = register(new Block("bee_nest", builder().setBlockEntity(BlockEntityType.BEEHIVE).destroyTime(0.3f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .intState(LEVEL_HONEY))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .intState(LEVEL_HONEY))); public static final Block BEEHIVE = register(new Block("beehive", builder().setBlockEntity(BlockEntityType.BEEHIVE).destroyTime(0.6f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .intState(LEVEL_HONEY))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .intState(LEVEL_HONEY))); public static final Block HONEY_BLOCK = register(new HoneyBlock("honey_block", builder())); public static final Block HONEYCOMB_BLOCK = register(new Block("honeycomb_block", builder().destroyTime(0.6f))); public static final Block NETHERITE_BLOCK = register(new Block("netherite_block", builder().requiresCorrectToolForDrops().destroyTime(50.0f))); public static final Block ANCIENT_DEBRIS = register(new Block("ancient_debris", builder().requiresCorrectToolForDrops().destroyTime(30.0f))); public static final Block CRYING_OBSIDIAN = register(new Block("crying_obsidian", builder().requiresCorrectToolForDrops().destroyTime(50.0f))); public static final Block RESPAWN_ANCHOR = register(new Block("respawn_anchor", builder().requiresCorrectToolForDrops().destroyTime(50.0f) - .intState(RESPAWN_ANCHOR_CHARGES))); + .intState(RESPAWN_ANCHOR_CHARGES))); public static final Block POTTED_CRIMSON_FUNGUS = register(new FlowerPotBlock("potted_crimson_fungus", CRIMSON_FUNGUS, builder().pushReaction(PistonBehavior.DESTROY))); public static final Block POTTED_WARPED_FUNGUS = register(new FlowerPotBlock("potted_warped_fungus", WARPED_FUNGUS, builder().pushReaction(PistonBehavior.DESTROY))); public static final Block POTTED_CRIMSON_ROOTS = register(new FlowerPotBlock("potted_crimson_roots", CRIMSON_ROOTS, builder().pushReaction(PistonBehavior.DESTROY))); @@ -2196,257 +2265,257 @@ public final class Blocks { public static final Block LODESTONE = register(new Block("lodestone", builder().requiresCorrectToolForDrops().destroyTime(3.5f).pushReaction(PistonBehavior.BLOCK))); public static final Block BLACKSTONE = register(new Block("blackstone", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block BLACKSTONE_STAIRS = register(new Block("blackstone_stairs", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block BLACKSTONE_WALL = register(new Block("blackstone_wall", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block BLACKSTONE_SLAB = register(new Block("blackstone_slab", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block POLISHED_BLACKSTONE = register(new Block("polished_blackstone", builder().requiresCorrectToolForDrops().destroyTime(2.0f))); public static final Block POLISHED_BLACKSTONE_BRICKS = register(new Block("polished_blackstone_bricks", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block CRACKED_POLISHED_BLACKSTONE_BRICKS = register(new Block("cracked_polished_blackstone_bricks", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block CHISELED_POLISHED_BLACKSTONE = register(new Block("chiseled_polished_blackstone", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block POLISHED_BLACKSTONE_BRICK_SLAB = register(new Block("polished_blackstone_brick_slab", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block POLISHED_BLACKSTONE_BRICK_STAIRS = register(new Block("polished_blackstone_brick_stairs", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block POLISHED_BLACKSTONE_BRICK_WALL = register(new Block("polished_blackstone_brick_wall", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block GILDED_BLACKSTONE = register(new Block("gilded_blackstone", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block POLISHED_BLACKSTONE_STAIRS = register(new Block("polished_blackstone_stairs", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block POLISHED_BLACKSTONE_SLAB = register(new Block("polished_blackstone_slab", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block POLISHED_BLACKSTONE_PRESSURE_PLATE = register(new Block("polished_blackstone_pressure_plate", builder().requiresCorrectToolForDrops().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .booleanState(POWERED))); + .booleanState(POWERED))); public static final Block POLISHED_BLACKSTONE_BUTTON = register(new Block("polished_blackstone_button", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) - .enumState(ATTACH_FACE) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(POWERED))); + .enumState(ATTACH_FACE) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(POWERED))); public static final Block POLISHED_BLACKSTONE_WALL = register(new Block("polished_blackstone_wall", builder().requiresCorrectToolForDrops().destroyTime(2.0f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block CHISELED_NETHER_BRICKS = register(new Block("chiseled_nether_bricks", builder().requiresCorrectToolForDrops().destroyTime(2.0f))); public static final Block CRACKED_NETHER_BRICKS = register(new Block("cracked_nether_bricks", builder().requiresCorrectToolForDrops().destroyTime(2.0f))); public static final Block QUARTZ_BRICKS = register(new Block("quartz_bricks", builder().requiresCorrectToolForDrops().destroyTime(0.8f))); public static final Block CANDLE = register(new Block("candle", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY) - .intState(CANDLES) - .booleanState(LIT) - .booleanState(WATERLOGGED))); + .intState(CANDLES) + .booleanState(LIT) + .booleanState(WATERLOGGED))); public static final Block WHITE_CANDLE = register(new Block("white_candle", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY) - .intState(CANDLES) - .booleanState(LIT) - .booleanState(WATERLOGGED))); + .intState(CANDLES) + .booleanState(LIT) + .booleanState(WATERLOGGED))); public static final Block ORANGE_CANDLE = register(new Block("orange_candle", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY) - .intState(CANDLES) - .booleanState(LIT) - .booleanState(WATERLOGGED))); + .intState(CANDLES) + .booleanState(LIT) + .booleanState(WATERLOGGED))); public static final Block MAGENTA_CANDLE = register(new Block("magenta_candle", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY) - .intState(CANDLES) - .booleanState(LIT) - .booleanState(WATERLOGGED))); + .intState(CANDLES) + .booleanState(LIT) + .booleanState(WATERLOGGED))); public static final Block LIGHT_BLUE_CANDLE = register(new Block("light_blue_candle", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY) - .intState(CANDLES) - .booleanState(LIT) - .booleanState(WATERLOGGED))); + .intState(CANDLES) + .booleanState(LIT) + .booleanState(WATERLOGGED))); public static final Block YELLOW_CANDLE = register(new Block("yellow_candle", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY) - .intState(CANDLES) - .booleanState(LIT) - .booleanState(WATERLOGGED))); + .intState(CANDLES) + .booleanState(LIT) + .booleanState(WATERLOGGED))); public static final Block LIME_CANDLE = register(new Block("lime_candle", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY) - .intState(CANDLES) - .booleanState(LIT) - .booleanState(WATERLOGGED))); + .intState(CANDLES) + .booleanState(LIT) + .booleanState(WATERLOGGED))); public static final Block PINK_CANDLE = register(new Block("pink_candle", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY) - .intState(CANDLES) - .booleanState(LIT) - .booleanState(WATERLOGGED))); + .intState(CANDLES) + .booleanState(LIT) + .booleanState(WATERLOGGED))); public static final Block GRAY_CANDLE = register(new Block("gray_candle", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY) - .intState(CANDLES) - .booleanState(LIT) - .booleanState(WATERLOGGED))); + .intState(CANDLES) + .booleanState(LIT) + .booleanState(WATERLOGGED))); public static final Block LIGHT_GRAY_CANDLE = register(new Block("light_gray_candle", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY) - .intState(CANDLES) - .booleanState(LIT) - .booleanState(WATERLOGGED))); + .intState(CANDLES) + .booleanState(LIT) + .booleanState(WATERLOGGED))); public static final Block CYAN_CANDLE = register(new Block("cyan_candle", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY) - .intState(CANDLES) - .booleanState(LIT) - .booleanState(WATERLOGGED))); + .intState(CANDLES) + .booleanState(LIT) + .booleanState(WATERLOGGED))); public static final Block PURPLE_CANDLE = register(new Block("purple_candle", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY) - .intState(CANDLES) - .booleanState(LIT) - .booleanState(WATERLOGGED))); + .intState(CANDLES) + .booleanState(LIT) + .booleanState(WATERLOGGED))); public static final Block BLUE_CANDLE = register(new Block("blue_candle", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY) - .intState(CANDLES) - .booleanState(LIT) - .booleanState(WATERLOGGED))); + .intState(CANDLES) + .booleanState(LIT) + .booleanState(WATERLOGGED))); public static final Block BROWN_CANDLE = register(new Block("brown_candle", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY) - .intState(CANDLES) - .booleanState(LIT) - .booleanState(WATERLOGGED))); + .intState(CANDLES) + .booleanState(LIT) + .booleanState(WATERLOGGED))); public static final Block GREEN_CANDLE = register(new Block("green_candle", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY) - .intState(CANDLES) - .booleanState(LIT) - .booleanState(WATERLOGGED))); + .intState(CANDLES) + .booleanState(LIT) + .booleanState(WATERLOGGED))); public static final Block RED_CANDLE = register(new Block("red_candle", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY) - .intState(CANDLES) - .booleanState(LIT) - .booleanState(WATERLOGGED))); + .intState(CANDLES) + .booleanState(LIT) + .booleanState(WATERLOGGED))); public static final Block BLACK_CANDLE = register(new Block("black_candle", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY) - .intState(CANDLES) - .booleanState(LIT) - .booleanState(WATERLOGGED))); + .intState(CANDLES) + .booleanState(LIT) + .booleanState(WATERLOGGED))); public static final Block CANDLE_CAKE = register(new Block("candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) - .booleanState(LIT))); + .booleanState(LIT))); public static final Block WHITE_CANDLE_CAKE = register(new Block("white_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) - .booleanState(LIT))); + .booleanState(LIT))); public static final Block ORANGE_CANDLE_CAKE = register(new Block("orange_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) - .booleanState(LIT))); + .booleanState(LIT))); public static final Block MAGENTA_CANDLE_CAKE = register(new Block("magenta_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) - .booleanState(LIT))); + .booleanState(LIT))); public static final Block LIGHT_BLUE_CANDLE_CAKE = register(new Block("light_blue_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) - .booleanState(LIT))); + .booleanState(LIT))); public static final Block YELLOW_CANDLE_CAKE = register(new Block("yellow_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) - .booleanState(LIT))); + .booleanState(LIT))); public static final Block LIME_CANDLE_CAKE = register(new Block("lime_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) - .booleanState(LIT))); + .booleanState(LIT))); public static final Block PINK_CANDLE_CAKE = register(new Block("pink_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) - .booleanState(LIT))); + .booleanState(LIT))); public static final Block GRAY_CANDLE_CAKE = register(new Block("gray_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) - .booleanState(LIT))); + .booleanState(LIT))); public static final Block LIGHT_GRAY_CANDLE_CAKE = register(new Block("light_gray_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) - .booleanState(LIT))); + .booleanState(LIT))); public static final Block CYAN_CANDLE_CAKE = register(new Block("cyan_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) - .booleanState(LIT))); + .booleanState(LIT))); public static final Block PURPLE_CANDLE_CAKE = register(new Block("purple_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) - .booleanState(LIT))); + .booleanState(LIT))); public static final Block BLUE_CANDLE_CAKE = register(new Block("blue_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) - .booleanState(LIT))); + .booleanState(LIT))); public static final Block BROWN_CANDLE_CAKE = register(new Block("brown_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) - .booleanState(LIT))); + .booleanState(LIT))); public static final Block GREEN_CANDLE_CAKE = register(new Block("green_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) - .booleanState(LIT))); + .booleanState(LIT))); public static final Block RED_CANDLE_CAKE = register(new Block("red_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) - .booleanState(LIT))); + .booleanState(LIT))); public static final Block BLACK_CANDLE_CAKE = register(new Block("black_candle_cake", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.CAKE) - .booleanState(LIT))); + .booleanState(LIT))); public static final Block AMETHYST_BLOCK = register(new Block("amethyst_block", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block BUDDING_AMETHYST = register(new Block("budding_amethyst", builder().requiresCorrectToolForDrops().destroyTime(1.5f).pushReaction(PistonBehavior.DESTROY))); public static final Block AMETHYST_CLUSTER = register(new Block("amethyst_cluster", builder().destroyTime(1.5f).pushReaction(PistonBehavior.DESTROY) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) - .booleanState(WATERLOGGED))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) + .booleanState(WATERLOGGED))); public static final Block LARGE_AMETHYST_BUD = register(new Block("large_amethyst_bud", builder().destroyTime(1.5f).pushReaction(PistonBehavior.DESTROY) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) - .booleanState(WATERLOGGED))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) + .booleanState(WATERLOGGED))); public static final Block MEDIUM_AMETHYST_BUD = register(new Block("medium_amethyst_bud", builder().destroyTime(1.5f).pushReaction(PistonBehavior.DESTROY) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) - .booleanState(WATERLOGGED))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) + .booleanState(WATERLOGGED))); public static final Block SMALL_AMETHYST_BUD = register(new Block("small_amethyst_bud", builder().destroyTime(1.5f).pushReaction(PistonBehavior.DESTROY) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) - .booleanState(WATERLOGGED))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) + .booleanState(WATERLOGGED))); public static final Block TUFF = register(new Block("tuff", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block TUFF_SLAB = register(new Block("tuff_slab", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block TUFF_STAIRS = register(new Block("tuff_stairs", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block TUFF_WALL = register(new Block("tuff_wall", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block POLISHED_TUFF = register(new Block("polished_tuff", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block POLISHED_TUFF_SLAB = register(new Block("polished_tuff_slab", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block POLISHED_TUFF_STAIRS = register(new Block("polished_tuff_stairs", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block POLISHED_TUFF_WALL = register(new Block("polished_tuff_wall", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block CHISELED_TUFF = register(new Block("chiseled_tuff", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block TUFF_BRICKS = register(new Block("tuff_bricks", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block TUFF_BRICK_SLAB = register(new Block("tuff_brick_slab", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block TUFF_BRICK_STAIRS = register(new Block("tuff_brick_stairs", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block TUFF_BRICK_WALL = register(new Block("tuff_brick_wall", builder().requiresCorrectToolForDrops().destroyTime(1.5f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block CHISELED_TUFF_BRICKS = register(new Block("chiseled_tuff_bricks", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block CALCITE = register(new Block("calcite", builder().requiresCorrectToolForDrops().destroyTime(0.75f))); public static final Block TINTED_GLASS = register(new Block("tinted_glass", builder().destroyTime(0.3f))); public static final Block POWDER_SNOW = register(new Block("powder_snow", builder().destroyTime(0.25f))); public static final Block SCULK_SENSOR = register(new Block("sculk_sensor", builder().setBlockEntity(BlockEntityType.SCULK_SENSOR).destroyTime(1.5f) - .intState(POWER) - .enumState(SCULK_SENSOR_PHASE) - .booleanState(WATERLOGGED))); + .intState(POWER) + .enumState(SCULK_SENSOR_PHASE) + .booleanState(WATERLOGGED))); public static final Block CALIBRATED_SCULK_SENSOR = register(new Block("calibrated_sculk_sensor", builder().setBlockEntity(BlockEntityType.CALIBRATED_SCULK_SENSOR).destroyTime(1.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .intState(POWER) - .enumState(SCULK_SENSOR_PHASE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .intState(POWER) + .enumState(SCULK_SENSOR_PHASE) + .booleanState(WATERLOGGED))); public static final Block SCULK = register(new Block("sculk", builder().destroyTime(0.2f))); public static final Block SCULK_VEIN = register(new Block("sculk_vein", builder().destroyTime(0.2f).pushReaction(PistonBehavior.DESTROY) - .booleanState(DOWN) - .booleanState(EAST) - .booleanState(NORTH) - .booleanState(SOUTH) - .booleanState(UP) - .booleanState(WATERLOGGED) - .booleanState(WEST))); + .booleanState(DOWN) + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(UP) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block SCULK_CATALYST = register(new Block("sculk_catalyst", builder().setBlockEntity(BlockEntityType.SCULK_CATALYST).destroyTime(3.0f) - .booleanState(BLOOM))); + .booleanState(BLOOM))); public static final Block SCULK_SHRIEKER = register(new Block("sculk_shrieker", builder().setBlockEntity(BlockEntityType.SCULK_SHRIEKER).destroyTime(3.0f) - .booleanState(CAN_SUMMON) - .booleanState(SHRIEKING) - .booleanState(WATERLOGGED))); + .booleanState(CAN_SUMMON) + .booleanState(SHRIEKING) + .booleanState(WATERLOGGED))); public static final Block COPPER_BLOCK = register(new Block("copper_block", builder().requiresCorrectToolForDrops().destroyTime(3.0f))); public static final Block EXPOSED_COPPER = register(new Block("exposed_copper", builder().requiresCorrectToolForDrops().destroyTime(3.0f))); public static final Block WEATHERED_COPPER = register(new Block("weathered_copper", builder().requiresCorrectToolForDrops().destroyTime(3.0f))); @@ -2466,37 +2535,37 @@ public final class Blocks { public static final Block WAXED_EXPOSED_CHISELED_COPPER = register(new Block("waxed_exposed_chiseled_copper", builder().requiresCorrectToolForDrops().destroyTime(3.0f))); public static final Block WAXED_CHISELED_COPPER = register(new Block("waxed_chiseled_copper", builder().requiresCorrectToolForDrops().destroyTime(3.0f))); public static final Block OXIDIZED_CUT_COPPER_STAIRS = register(new Block("oxidized_cut_copper_stairs", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block WEATHERED_CUT_COPPER_STAIRS = register(new Block("weathered_cut_copper_stairs", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block EXPOSED_CUT_COPPER_STAIRS = register(new Block("exposed_cut_copper_stairs", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block CUT_COPPER_STAIRS = register(new Block("cut_copper_stairs", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block OXIDIZED_CUT_COPPER_SLAB = register(new Block("oxidized_cut_copper_slab", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block WEATHERED_CUT_COPPER_SLAB = register(new Block("weathered_cut_copper_slab", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block EXPOSED_CUT_COPPER_SLAB = register(new Block("exposed_cut_copper_slab", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block CUT_COPPER_SLAB = register(new Block("cut_copper_slab", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block WAXED_COPPER_BLOCK = register(new Block("waxed_copper_block", builder().requiresCorrectToolForDrops().destroyTime(3.0f))); public static final Block WAXED_WEATHERED_COPPER = register(new Block("waxed_weathered_copper", builder().requiresCorrectToolForDrops().destroyTime(3.0f))); public static final Block WAXED_EXPOSED_COPPER = register(new Block("waxed_exposed_copper", builder().requiresCorrectToolForDrops().destroyTime(3.0f))); @@ -2506,281 +2575,281 @@ public final class Blocks { public static final Block WAXED_EXPOSED_CUT_COPPER = register(new Block("waxed_exposed_cut_copper", builder().requiresCorrectToolForDrops().destroyTime(3.0f))); public static final Block WAXED_CUT_COPPER = register(new Block("waxed_cut_copper", builder().requiresCorrectToolForDrops().destroyTime(3.0f))); public static final Block WAXED_OXIDIZED_CUT_COPPER_STAIRS = register(new Block("waxed_oxidized_cut_copper_stairs", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block WAXED_WEATHERED_CUT_COPPER_STAIRS = register(new Block("waxed_weathered_cut_copper_stairs", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block WAXED_EXPOSED_CUT_COPPER_STAIRS = register(new Block("waxed_exposed_cut_copper_stairs", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block WAXED_CUT_COPPER_STAIRS = register(new Block("waxed_cut_copper_stairs", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block WAXED_OXIDIZED_CUT_COPPER_SLAB = register(new Block("waxed_oxidized_cut_copper_slab", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block WAXED_WEATHERED_CUT_COPPER_SLAB = register(new Block("waxed_weathered_cut_copper_slab", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block WAXED_EXPOSED_CUT_COPPER_SLAB = register(new Block("waxed_exposed_cut_copper_slab", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block WAXED_CUT_COPPER_SLAB = register(new Block("waxed_cut_copper_slab", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block COPPER_DOOR = register(new DoorBlock("copper_door", builder().requiresCorrectToolForDrops().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(DOUBLE_BLOCK_HALF) - .enumState(DOOR_HINGE) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(DOUBLE_BLOCK_HALF) + .enumState(DOOR_HINGE) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block EXPOSED_COPPER_DOOR = register(new DoorBlock("exposed_copper_door", builder().requiresCorrectToolForDrops().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(DOUBLE_BLOCK_HALF) - .enumState(DOOR_HINGE) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(DOUBLE_BLOCK_HALF) + .enumState(DOOR_HINGE) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block OXIDIZED_COPPER_DOOR = register(new DoorBlock("oxidized_copper_door", builder().requiresCorrectToolForDrops().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(DOUBLE_BLOCK_HALF) - .enumState(DOOR_HINGE) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(DOUBLE_BLOCK_HALF) + .enumState(DOOR_HINGE) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block WEATHERED_COPPER_DOOR = register(new DoorBlock("weathered_copper_door", builder().requiresCorrectToolForDrops().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(DOUBLE_BLOCK_HALF) - .enumState(DOOR_HINGE) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(DOUBLE_BLOCK_HALF) + .enumState(DOOR_HINGE) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block WAXED_COPPER_DOOR = register(new DoorBlock("waxed_copper_door", builder().requiresCorrectToolForDrops().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(DOUBLE_BLOCK_HALF) - .enumState(DOOR_HINGE) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(DOUBLE_BLOCK_HALF) + .enumState(DOOR_HINGE) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block WAXED_EXPOSED_COPPER_DOOR = register(new DoorBlock("waxed_exposed_copper_door", builder().requiresCorrectToolForDrops().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(DOUBLE_BLOCK_HALF) - .enumState(DOOR_HINGE) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(DOUBLE_BLOCK_HALF) + .enumState(DOOR_HINGE) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block WAXED_OXIDIZED_COPPER_DOOR = register(new DoorBlock("waxed_oxidized_copper_door", builder().requiresCorrectToolForDrops().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(DOUBLE_BLOCK_HALF) - .enumState(DOOR_HINGE) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(DOUBLE_BLOCK_HALF) + .enumState(DOOR_HINGE) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block WAXED_WEATHERED_COPPER_DOOR = register(new DoorBlock("waxed_weathered_copper_door", builder().requiresCorrectToolForDrops().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(DOUBLE_BLOCK_HALF) - .enumState(DOOR_HINGE) - .booleanState(OPEN) - .booleanState(POWERED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(DOUBLE_BLOCK_HALF) + .enumState(DOOR_HINGE) + .booleanState(OPEN) + .booleanState(POWERED))); public static final Block COPPER_TRAPDOOR = register(new TrapDoorBlock("copper_trapdoor", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .booleanState(OPEN) - .booleanState(POWERED) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .booleanState(OPEN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); public static final Block EXPOSED_COPPER_TRAPDOOR = register(new TrapDoorBlock("exposed_copper_trapdoor", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .booleanState(OPEN) - .booleanState(POWERED) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .booleanState(OPEN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); public static final Block OXIDIZED_COPPER_TRAPDOOR = register(new TrapDoorBlock("oxidized_copper_trapdoor", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .booleanState(OPEN) - .booleanState(POWERED) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .booleanState(OPEN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); public static final Block WEATHERED_COPPER_TRAPDOOR = register(new TrapDoorBlock("weathered_copper_trapdoor", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .booleanState(OPEN) - .booleanState(POWERED) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .booleanState(OPEN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); public static final Block WAXED_COPPER_TRAPDOOR = register(new TrapDoorBlock("waxed_copper_trapdoor", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .booleanState(OPEN) - .booleanState(POWERED) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .booleanState(OPEN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); public static final Block WAXED_EXPOSED_COPPER_TRAPDOOR = register(new TrapDoorBlock("waxed_exposed_copper_trapdoor", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .booleanState(OPEN) - .booleanState(POWERED) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .booleanState(OPEN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); public static final Block WAXED_OXIDIZED_COPPER_TRAPDOOR = register(new TrapDoorBlock("waxed_oxidized_copper_trapdoor", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .booleanState(OPEN) - .booleanState(POWERED) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .booleanState(OPEN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); public static final Block WAXED_WEATHERED_COPPER_TRAPDOOR = register(new TrapDoorBlock("waxed_weathered_copper_trapdoor", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .booleanState(OPEN) - .booleanState(POWERED) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .booleanState(OPEN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); public static final Block COPPER_GRATE = register(new Block("copper_grate", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block EXPOSED_COPPER_GRATE = register(new Block("exposed_copper_grate", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block WEATHERED_COPPER_GRATE = register(new Block("weathered_copper_grate", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block OXIDIZED_COPPER_GRATE = register(new Block("oxidized_copper_grate", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block WAXED_COPPER_GRATE = register(new Block("waxed_copper_grate", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block WAXED_EXPOSED_COPPER_GRATE = register(new Block("waxed_exposed_copper_grate", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block WAXED_WEATHERED_COPPER_GRATE = register(new Block("waxed_weathered_copper_grate", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block WAXED_OXIDIZED_COPPER_GRATE = register(new Block("waxed_oxidized_copper_grate", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block COPPER_BULB = register(new Block("copper_bulb", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .booleanState(LIT) - .booleanState(POWERED))); + .booleanState(LIT) + .booleanState(POWERED))); public static final Block EXPOSED_COPPER_BULB = register(new Block("exposed_copper_bulb", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .booleanState(LIT) - .booleanState(POWERED))); + .booleanState(LIT) + .booleanState(POWERED))); public static final Block WEATHERED_COPPER_BULB = register(new Block("weathered_copper_bulb", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .booleanState(LIT) - .booleanState(POWERED))); + .booleanState(LIT) + .booleanState(POWERED))); public static final Block OXIDIZED_COPPER_BULB = register(new Block("oxidized_copper_bulb", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .booleanState(LIT) - .booleanState(POWERED))); + .booleanState(LIT) + .booleanState(POWERED))); public static final Block WAXED_COPPER_BULB = register(new Block("waxed_copper_bulb", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .booleanState(LIT) - .booleanState(POWERED))); + .booleanState(LIT) + .booleanState(POWERED))); public static final Block WAXED_EXPOSED_COPPER_BULB = register(new Block("waxed_exposed_copper_bulb", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .booleanState(LIT) - .booleanState(POWERED))); + .booleanState(LIT) + .booleanState(POWERED))); public static final Block WAXED_WEATHERED_COPPER_BULB = register(new Block("waxed_weathered_copper_bulb", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .booleanState(LIT) - .booleanState(POWERED))); + .booleanState(LIT) + .booleanState(POWERED))); public static final Block WAXED_OXIDIZED_COPPER_BULB = register(new Block("waxed_oxidized_copper_bulb", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .booleanState(LIT) - .booleanState(POWERED))); + .booleanState(LIT) + .booleanState(POWERED))); public static final Block LIGHTNING_ROD = register(new Block("lightning_rod", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) - .booleanState(POWERED) - .booleanState(WATERLOGGED))); + .enumState(FACING, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN) + .booleanState(POWERED) + .booleanState(WATERLOGGED))); public static final Block POINTED_DRIPSTONE = register(new Block("pointed_dripstone", builder().destroyTime(1.5f).pushReaction(PistonBehavior.DESTROY) - .enumState(DRIPSTONE_THICKNESS) - .enumState(VERTICAL_DIRECTION, Direction.UP, Direction.DOWN) - .booleanState(WATERLOGGED))); + .enumState(DRIPSTONE_THICKNESS) + .enumState(VERTICAL_DIRECTION, Direction.UP, Direction.DOWN) + .booleanState(WATERLOGGED))); public static final Block DRIPSTONE_BLOCK = register(new Block("dripstone_block", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block CAVE_VINES = register(new Block("cave_vines", builder().pushReaction(PistonBehavior.DESTROY) - .intState(AGE_25) - .booleanState(BERRIES))); + .intState(AGE_25) + .booleanState(BERRIES))); public static final Block CAVE_VINES_PLANT = register(new Block("cave_vines_plant", builder().pushReaction(PistonBehavior.DESTROY).pickItem(() -> Items.GLOW_BERRIES) - .booleanState(BERRIES))); + .booleanState(BERRIES))); public static final Block SPORE_BLOSSOM = register(new Block("spore_blossom", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block AZALEA = register(new Block("azalea", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block FLOWERING_AZALEA = register(new Block("flowering_azalea", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block MOSS_CARPET = register(new Block("moss_carpet", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY))); public static final Block PINK_PETALS = register(new Block("pink_petals", builder().pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .intState(FLOWER_AMOUNT))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .intState(FLOWER_AMOUNT))); public static final Block MOSS_BLOCK = register(new Block("moss_block", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY))); public static final Block BIG_DRIPLEAF = register(new Block("big_dripleaf", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(TILT) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(TILT) + .booleanState(WATERLOGGED))); public static final Block BIG_DRIPLEAF_STEM = register(new Block("big_dripleaf_stem", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block SMALL_DRIPLEAF = register(new Block("small_dripleaf", builder().pushReaction(PistonBehavior.DESTROY) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(DOUBLE_BLOCK_HALF) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(DOUBLE_BLOCK_HALF) + .booleanState(WATERLOGGED))); public static final Block HANGING_ROOTS = register(new Block("hanging_roots", builder().pushReaction(PistonBehavior.DESTROY) - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); public static final Block ROOTED_DIRT = register(new Block("rooted_dirt", builder().destroyTime(0.5f))); public static final Block MUD = register(new Block("mud", builder().destroyTime(0.5f))); public static final Block DEEPSLATE = register(new Block("deepslate", builder().requiresCorrectToolForDrops().destroyTime(3.0f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block COBBLED_DEEPSLATE = register(new Block("cobbled_deepslate", builder().requiresCorrectToolForDrops().destroyTime(3.5f))); public static final Block COBBLED_DEEPSLATE_STAIRS = register(new Block("cobbled_deepslate_stairs", builder().requiresCorrectToolForDrops().destroyTime(3.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block COBBLED_DEEPSLATE_SLAB = register(new Block("cobbled_deepslate_slab", builder().requiresCorrectToolForDrops().destroyTime(3.5f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block COBBLED_DEEPSLATE_WALL = register(new Block("cobbled_deepslate_wall", builder().requiresCorrectToolForDrops().destroyTime(3.5f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block POLISHED_DEEPSLATE = register(new Block("polished_deepslate", builder().requiresCorrectToolForDrops().destroyTime(3.5f))); public static final Block POLISHED_DEEPSLATE_STAIRS = register(new Block("polished_deepslate_stairs", builder().requiresCorrectToolForDrops().destroyTime(3.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block POLISHED_DEEPSLATE_SLAB = register(new Block("polished_deepslate_slab", builder().requiresCorrectToolForDrops().destroyTime(3.5f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block POLISHED_DEEPSLATE_WALL = register(new Block("polished_deepslate_wall", builder().requiresCorrectToolForDrops().destroyTime(3.5f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block DEEPSLATE_TILES = register(new Block("deepslate_tiles", builder().requiresCorrectToolForDrops().destroyTime(3.5f))); public static final Block DEEPSLATE_TILE_STAIRS = register(new Block("deepslate_tile_stairs", builder().requiresCorrectToolForDrops().destroyTime(3.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block DEEPSLATE_TILE_SLAB = register(new Block("deepslate_tile_slab", builder().requiresCorrectToolForDrops().destroyTime(3.5f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block DEEPSLATE_TILE_WALL = register(new Block("deepslate_tile_wall", builder().requiresCorrectToolForDrops().destroyTime(3.5f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block DEEPSLATE_BRICKS = register(new Block("deepslate_bricks", builder().requiresCorrectToolForDrops().destroyTime(3.5f))); public static final Block DEEPSLATE_BRICK_STAIRS = register(new Block("deepslate_brick_stairs", builder().requiresCorrectToolForDrops().destroyTime(3.5f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .enumState(HALF) - .enumState(STAIRS_SHAPE) - .booleanState(WATERLOGGED))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); public static final Block DEEPSLATE_BRICK_SLAB = register(new Block("deepslate_brick_slab", builder().requiresCorrectToolForDrops().destroyTime(3.5f) - .enumState(SLAB_TYPE) - .booleanState(WATERLOGGED))); + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); public static final Block DEEPSLATE_BRICK_WALL = register(new Block("deepslate_brick_wall", builder().requiresCorrectToolForDrops().destroyTime(3.5f) - .enumState(EAST_WALL) - .enumState(NORTH_WALL) - .enumState(SOUTH_WALL) - .booleanState(UP) - .booleanState(WATERLOGGED) - .enumState(WEST_WALL))); + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); public static final Block CHISELED_DEEPSLATE = register(new Block("chiseled_deepslate", builder().requiresCorrectToolForDrops().destroyTime(3.5f))); public static final Block CRACKED_DEEPSLATE_BRICKS = register(new Block("cracked_deepslate_bricks", builder().requiresCorrectToolForDrops().destroyTime(3.5f))); public static final Block CRACKED_DEEPSLATE_TILES = register(new Block("cracked_deepslate_tiles", builder().requiresCorrectToolForDrops().destroyTime(3.5f))); public static final Block INFESTED_DEEPSLATE = register(new Block("infested_deepslate", builder().destroyTime(1.5f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block SMOOTH_BASALT = register(new Block("smooth_basalt", builder().requiresCorrectToolForDrops().destroyTime(1.25f))); public static final Block RAW_IRON_BLOCK = register(new Block("raw_iron_block", builder().requiresCorrectToolForDrops().destroyTime(5.0f))); public static final Block RAW_COPPER_BLOCK = register(new Block("raw_copper_block", builder().requiresCorrectToolForDrops().destroyTime(5.0f))); @@ -2788,30 +2857,39 @@ public final class Blocks { public static final Block POTTED_AZALEA_BUSH = register(new FlowerPotBlock("potted_azalea_bush", AZALEA, builder().pushReaction(PistonBehavior.DESTROY))); public static final Block POTTED_FLOWERING_AZALEA_BUSH = register(new FlowerPotBlock("potted_flowering_azalea_bush", FLOWERING_AZALEA, builder().pushReaction(PistonBehavior.DESTROY))); public static final Block OCHRE_FROGLIGHT = register(new Block("ochre_froglight", builder().destroyTime(0.3f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block VERDANT_FROGLIGHT = register(new Block("verdant_froglight", builder().destroyTime(0.3f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block PEARLESCENT_FROGLIGHT = register(new Block("pearlescent_froglight", builder().destroyTime(0.3f) - .enumState(AXIS, Axis.VALUES))); + .enumState(AXIS, Axis.VALUES))); public static final Block FROGSPAWN = register(new Block("frogspawn", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block REINFORCED_DEEPSLATE = register(new Block("reinforced_deepslate", builder().destroyTime(55.0f))); public static final Block DECORATED_POT = register(new Block("decorated_pot", builder().setBlockEntity(BlockEntityType.DECORATED_POT).pushReaction(PistonBehavior.DESTROY) - .booleanState(CRACKED) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(WATERLOGGED))); + .booleanState(CRACKED) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(WATERLOGGED))); public static final Block CRAFTER = register(new Block("crafter", builder().setBlockEntity(BlockEntityType.CRAFTER).destroyTime(1.5f) - .booleanState(CRAFTING) - .enumState(ORIENTATION, FrontAndTop.VALUES) - .booleanState(TRIGGERED))); + .booleanState(CRAFTING) + .enumState(ORIENTATION, FrontAndTop.VALUES) + .booleanState(TRIGGERED))); public static final Block TRIAL_SPAWNER = register(new Block("trial_spawner", builder().setBlockEntity(BlockEntityType.TRIAL_SPAWNER).destroyTime(50.0f) - .booleanState(OMINOUS) - .enumState(TRIAL_SPAWNER_STATE))); + .booleanState(OMINOUS) + .enumState(TRIAL_SPAWNER_STATE))); public static final Block VAULT = register(new Block("vault", builder().setBlockEntity(BlockEntityType.VAULT).destroyTime(50.0f) - .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) - .booleanState(OMINOUS) - .enumState(VAULT_STATE))); + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .booleanState(OMINOUS) + .enumState(VAULT_STATE))); public static final Block HEAVY_CORE = register(new Block("heavy_core", builder().destroyTime(10.0f) - .booleanState(WATERLOGGED))); + .booleanState(WATERLOGGED))); + public static final Block PALE_MOSS_BLOCK = register(new Block("pale_moss_block", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY))); + public static final Block PALE_MOSS_CARPET = register(new Block("pale_moss_carpet", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY) + .booleanState(BOTTOM) + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .enumState(WEST_WALL))); + public static final Block PALE_HANGING_MOSS = register(new Block("pale_hanging_moss", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY) + .booleanState(TIP))); private static <T extends Block> T register(T block) { block.setJavaId(BlockRegistries.JAVA_BLOCKS.get().size()); diff --git a/core/src/main/java/org/geysermc/geyser/level/block/property/Properties.java b/core/src/main/java/org/geysermc/geyser/level/block/property/Properties.java index 7efa2ef80..3e5f1b510 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/property/Properties.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/property/Properties.java @@ -47,6 +47,7 @@ public final class Properties { public static final BooleanProperty INVERTED = BooleanProperty.create("inverted"); public static final BooleanProperty IN_WALL = BooleanProperty.create("in_wall"); public static final BooleanProperty LIT = BooleanProperty.create("lit"); + public static final BooleanProperty TIP = BooleanProperty.create("tip"); public static final BooleanProperty LOCKED = BooleanProperty.create("locked"); public static final BooleanProperty OCCUPIED = BooleanProperty.create("occupied"); public static final BooleanProperty OPEN = BooleanProperty.create("open"); @@ -142,5 +143,6 @@ public final class Properties { public static final BooleanProperty CRAFTING = BooleanProperty.create("crafting"); public static final BasicEnumProperty TRIAL_SPAWNER_STATE = BasicEnumProperty.create("trial_spawner_state", "inactive", "waiting_for_players", "active", "waiting_for_reward_ejection", "ejecting_reward", "cooldown"); public static final BasicEnumProperty VAULT_STATE = BasicEnumProperty.create("vault_state", "inactive", "active", "unlocking", "ejecting"); + public static final BasicEnumProperty CREAKING = BasicEnumProperty.create("creaking", "disabled", "dormant", "active"); public static final BooleanProperty OMINOUS = BooleanProperty.create("ominous"); } diff --git a/core/src/main/java/org/geysermc/geyser/level/physics/CollisionResult.java b/core/src/main/java/org/geysermc/geyser/level/physics/CollisionResult.java new file mode 100644 index 000000000..8ba5f895b --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/level/physics/CollisionResult.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 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.level.physics; + +import org.cloudburstmc.math.vector.Vector3d; + +/** + * Holds the result of a collision check. + */ +public record CollisionResult(Vector3d correctedMovement, boolean horizontalCollision) { +} 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 9c20e9909..db802439f 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -191,7 +191,6 @@ import org.geysermc.mcprotocollib.network.event.session.SessionAdapter; import org.geysermc.mcprotocollib.network.packet.Packet; import org.geysermc.mcprotocollib.network.tcp.TcpClientSession; import org.geysermc.mcprotocollib.network.tcp.TcpSession; -import org.geysermc.mcprotocollib.protocol.ClientListener; import org.geysermc.mcprotocollib.protocol.MinecraftConstants; import org.geysermc.mcprotocollib.protocol.MinecraftProtocol; import org.geysermc.mcprotocollib.protocol.data.ProtocolState; @@ -207,8 +206,6 @@ import org.geysermc.mcprotocollib.protocol.data.game.setting.SkinPart; import org.geysermc.mcprotocollib.protocol.data.game.statistic.CustomStatistic; import org.geysermc.mcprotocollib.protocol.data.game.statistic.Statistic; import org.geysermc.mcprotocollib.protocol.packet.common.serverbound.ServerboundClientInformationPacket; -import org.geysermc.mcprotocollib.protocol.packet.configuration.clientbound.ClientboundFinishConfigurationPacket; -import org.geysermc.mcprotocollib.protocol.packet.configuration.serverbound.ServerboundFinishConfigurationPacket; import org.geysermc.mcprotocollib.protocol.packet.handshake.serverbound.ClientIntentionPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundChatCommandSignedPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundChatPacket; @@ -1275,7 +1272,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { Vector3d position = collisionManager.adjustBedrockPosition(playerEntity.getPosition(), playerEntity.isOnGround(), false); // A null return value cancels the packet if (position != null) { - ServerboundMovePlayerPosPacket packet = new ServerboundMovePlayerPosPacket(playerEntity.isOnGround(), + ServerboundMovePlayerPosPacket packet = new ServerboundMovePlayerPosPacket(playerEntity.isOnGround(), false, //FIXME position.getX(), position.getY(), position.getZ()); sendDownstreamGamePacket(packet); } 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 3338d2e52..f051885d4 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 @@ -729,10 +729,10 @@ public abstract class InventoryTranslator { if (ingRemaining == 0) { while (++ingredientIndex < ingredients.length) { - if (ingredients[ingredientIndex].getOptions().length != 0) { - ingRemaining = timesCrafted; - break; - } +// if (ingredients[ingredientIndex].getOptions().length != 0) { +// ingRemaining = timesCrafted; +// break; +// } } } 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 deleted file mode 100644 index 9eb69183d..000000000 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaClientboundRecipesTranslator.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * 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 org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundRecipePacket; -import org.cloudburstmc.protocol.bedrock.packet.UnlockedRecipesPacket; -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<ClientboundRecipePacket> { - - @Override - public void translate(GeyserSession session, ClientboundRecipePacket packet) { - UnlockedRecipesPacket recipesPacket = new UnlockedRecipesPacket(); - switch (packet.getAction()) { - case INIT -> { - recipesPacket.setAction(UnlockedRecipesPacket.ActionType.INITIALLY_UNLOCKED); - recipesPacket.getUnlockedRecipes().addAll(getBedrockRecipes(session, packet.getAlreadyKnownRecipes())); - } - case ADD -> { - List<String> recipes = getBedrockRecipes(session, packet.getRecipes()); - if (recipes.isEmpty()) { - // Sending an empty list here packet will crash the client as of 1.20.60 - return; - } - recipesPacket.setAction(UnlockedRecipesPacket.ActionType.NEWLY_UNLOCKED); - recipesPacket.getUnlockedRecipes().addAll(recipes); - } - case REMOVE -> { - List<String> recipes = getBedrockRecipes(session, packet.getRecipes()); - if (recipes.isEmpty()) { - // Sending an empty list here will crash the client as of 1.20.60 - return; - } - recipesPacket.setAction(UnlockedRecipesPacket.ActionType.REMOVE_UNLOCKED); - recipesPacket.getUnlockedRecipes().addAll(recipes); - } - } - session.sendUpstreamPacket(recipesPacket); - } - - private List<String> getBedrockRecipes(GeyserSession session, String[] javaRecipeIdentifiers) { - List<String> recipes = new ArrayList<>(); - for (String javaIdentifier : javaRecipeIdentifiers) { - List<String> 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; - } -} \ No newline at end of file diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaGameProfileTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginFinishedTranslator.java similarity index 91% rename from core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaGameProfileTranslator.java rename to core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginFinishedTranslator.java index 47d1cff08..cebf71efd 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaGameProfileTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginFinishedTranslator.java @@ -25,7 +25,6 @@ package org.geysermc.geyser.translator.protocol.java; -import org.geysermc.mcprotocollib.auth.GameProfile; import net.kyori.adventure.key.Key; import org.geysermc.geyser.api.network.AuthType; import org.geysermc.geyser.entity.type.player.PlayerEntity; @@ -34,17 +33,18 @@ import org.geysermc.geyser.skin.SkinManager; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.util.PluginMessageUtils; +import org.geysermc.mcprotocollib.auth.GameProfile; import org.geysermc.mcprotocollib.protocol.packet.common.serverbound.ServerboundCustomPayloadPacket; -import org.geysermc.mcprotocollib.protocol.packet.login.clientbound.ClientboundGameProfilePacket; +import org.geysermc.mcprotocollib.protocol.packet.login.clientbound.ClientboundLoginFinishedPacket; /** - * ClientboundGameProfilePacket triggers protocol change LOGIN -> CONFIGURATION + * Triggers protocol change LOGIN -> CONFIGURATION */ -@Translator(packet = ClientboundGameProfilePacket.class) -public class JavaGameProfileTranslator extends PacketTranslator<ClientboundGameProfilePacket> { +@Translator(packet = ClientboundLoginFinishedPacket.class) +public class JavaLoginFinishedTranslator extends PacketTranslator<ClientboundLoginFinishedPacket> { @Override - public void translate(GeyserSession session, ClientboundGameProfilePacket packet) { + public void translate(GeyserSession session, ClientboundLoginFinishedPacket packet) { PlayerEntity playerEntity = session.getPlayerEntity(); AuthType remoteAuthType = session.remoteServer().authType(); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java new file mode 100644 index 000000000..74fb11814 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java @@ -0,0 +1,81 @@ +/* + * 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 org.cloudburstmc.protocol.bedrock.packet.UnlockedRecipesPacket; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.protocol.PacketTranslator; +import org.geysermc.geyser.translator.protocol.Translator; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundRecipeBookAddPacket; + +@Translator(packet = ClientboundRecipeBookAddPacket.class) +public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRecipeBookAddPacket> { + + @Override + public void translate(GeyserSession session, ClientboundRecipeBookAddPacket packet) { + UnlockedRecipesPacket recipesPacket = new UnlockedRecipesPacket(); + recipesPacket.setAction(packet.isReplace() ? UnlockedRecipesPacket.ActionType.INITIALLY_UNLOCKED : UnlockedRecipesPacket.ActionType.NEWLY_UNLOCKED); +// List<String> recipes = getBedrockRecipes(session, packet.getEntries()); +// if (recipes.isEmpty() && !packet.isReplace()) { +// // Sending an empty list here packet will crash the client as of 1.20.60 +// return; +// } +// 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(recipes); +// } +// case REMOVE -> { +// List<String> recipes = getBedrockRecipes(session, packet.getRecipes()); +// if (recipes.isEmpty()) { +// // Sending an empty list here will crash the client as of 1.20.60 +// return; +// } +// recipesPacket.setAction(UnlockedRecipesPacket.ActionType.REMOVE_UNLOCKED); +// recipesPacket.getUnlockedRecipes().addAll(recipes); +// } +// } +// session.sendUpstreamPacket(recipesPacket); + } + +// private List<String> getBedrockRecipes(GeyserSession session, List<ClientboundRecipeBookAddPacket.Entry> entry) { +// List<String> recipes = new ArrayList<>(); +// for (String javaIdentifier : javaRecipeIdentifiers) { +// List<String> 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 689e0448a..e6e875791 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 @@ -25,61 +25,18 @@ package org.geysermc.geyser.translator.protocol.java; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; -import it.unimi.dsi.fastutil.ints.IntIterator; -import it.unimi.dsi.fastutil.ints.IntOpenHashSet; -import it.unimi.dsi.fastutil.ints.IntSet; -import lombok.AllArgsConstructor; -import lombok.EqualsAndHashCode; -import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; -import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; -import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.RecipeUnlockingRequirement; +import net.kyori.adventure.key.Key; import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.MultiRecipeData; import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.RecipeData; -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; -import org.geysermc.geyser.inventory.recipe.GeyserRecipe; -import org.geysermc.geyser.inventory.recipe.GeyserShapedRecipe; -import org.geysermc.geyser.inventory.recipe.GeyserShapelessRecipe; -import org.geysermc.geyser.inventory.recipe.GeyserStonecutterData; -import org.geysermc.geyser.inventory.recipe.TrimRecipe; -import org.geysermc.geyser.item.type.BedrockRequiresTagItem; -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.item.ItemTranslator; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; -import org.geysermc.geyser.util.InventoryUtils; -import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; -import org.geysermc.mcprotocollib.protocol.data.game.recipe.Ingredient; -import org.geysermc.mcprotocollib.protocol.data.game.recipe.Recipe; -import org.geysermc.mcprotocollib.protocol.data.game.recipe.RecipeType; -import org.geysermc.mcprotocollib.protocol.data.game.recipe.data.ShapedRecipeData; -import org.geysermc.mcprotocollib.protocol.data.game.recipe.data.ShapelessRecipeData; -import org.geysermc.mcprotocollib.protocol.data.game.recipe.data.SmithingTransformRecipeData; -import org.geysermc.mcprotocollib.protocol.data.game.recipe.data.StoneCuttingRecipeData; +import org.geysermc.geyser.util.MinecraftKey; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundUpdateRecipesPacket; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Objects; -import java.util.Set; import java.util.UUID; -import java.util.stream.Collectors; import static org.geysermc.geyser.util.InventoryUtils.LAST_RECIPE_NET_ID; @@ -121,437 +78,443 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator<ClientboundUpd "minecraft:wooden_slab", "minecraft:wooden_slabs", "minecraft:planks", "minecraft:planks"); + private static final Key SMITHING_BASE = MinecraftKey.key("smithing_base"); + private static final Key SMITHING_TEMPLATE = MinecraftKey.key("smithing_template"); + private static final Key SMITHING_ADDITION = MinecraftKey.key("smithing_addition"); + @Override public void translate(GeyserSession session, ClientboundUpdateRecipesPacket packet) { - boolean sendTrimRecipes = false; - Map<String, List<String>> recipeIDs = session.getJavaToBedrockRecipeIds(); - recipeIDs.clear(); - Int2ObjectMap<GeyserRecipe> recipeMap = new Int2ObjectOpenHashMap<>(); - Int2ObjectMap<List<StoneCuttingRecipeData>> unsortedStonecutterData = new Int2ObjectOpenHashMap<>(); - CraftingDataPacket craftingDataPacket = new CraftingDataPacket(); - craftingDataPacket.setCleanRecipes(true); - - RecipeContext context = new RecipeContext(session, craftingDataPacket, recipeMap); - - for (Recipe recipe : packet.getRecipes()) { - switch (recipe.getType()) { - case CRAFTING_SHAPELESS -> { - ShapelessRecipeData shapelessRecipeData = (ShapelessRecipeData) recipe.getData(); - List<String> bedrockRecipeIDs = context.translateShapelessRecipe(new GeyserShapelessRecipe(shapelessRecipeData)); - if (bedrockRecipeIDs != null) { - context.addRecipeIdentifier(session, recipe.getIdentifier().asString(), bedrockRecipeIDs); - } - } - case CRAFTING_SHAPED -> { - ShapedRecipeData shapedRecipeData = (ShapedRecipeData) recipe.getData(); - List<String> bedrockRecipeIDs = context.translateShapedRecipe(new GeyserShapedRecipe(shapedRecipeData)); - if (bedrockRecipeIDs != null) { - context.addRecipeIdentifier(session, recipe.getIdentifier().asString(), bedrockRecipeIDs); - } - } - case STONECUTTING -> { - 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<StoneCuttingRecipeData> data = unsortedStonecutterData.get(ingredient.getId()); - if (data == null) { - data = new ArrayList<>(); - unsortedStonecutterData.put(ingredient.getId(), data); - } - // Save for processing after all recipes have been received - data.add(stoneCuttingData); - } - case SMITHING_TRANSFORM -> { - SmithingTransformRecipeData data = (SmithingTransformRecipeData) recipe.getData(); - ItemData output = ItemTranslator.translateToBedrock(session, data.getResult()); - - for (ItemStack template : data.getTemplate().getOptions()) { - ItemDescriptorWithCount bedrockTemplate = ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, template)); - - for (ItemStack base : data.getBase().getOptions()) { - ItemDescriptorWithCount bedrockBase = ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, base)); - - for (ItemStack addition : data.getAddition().getOptions()) { - ItemDescriptorWithCount bedrockAddition = ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, addition)); - - String id = recipe.getIdentifier().asString(); - // Note: vanilla inputs use aux value of Short.MAX_VALUE - craftingDataPacket.getCraftingData().add(org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.SmithingTransformRecipeData.of(id, - bedrockTemplate, bedrockBase, bedrockAddition, output, "smithing_table", context.getAndIncrementNetId())); - - recipeIDs.put(id, new ArrayList<>(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"), context.getAndIncrementNetId())); - } - case CRAFTING_SPECIAL_BOOKCLONING -> { - craftingDataPacket.getCraftingData().add(MultiRecipeData.of(UUID.fromString("d1ca6b84-338e-4f2f-9c6b-76cc8b4bd98d"), context.getAndIncrementNetId())); - } - case CRAFTING_SPECIAL_REPAIRITEM -> { - craftingDataPacket.getCraftingData().add(MultiRecipeData.of(UUID.fromString("00000000-0000-0000-0000-000000000001"), context.getAndIncrementNetId())); - } - case CRAFTING_SPECIAL_MAPEXTENDING -> { - craftingDataPacket.getCraftingData().add(MultiRecipeData.of(UUID.fromString("d392b075-4ba1-40ae-8789-af868d56f6ce"), context.getAndIncrementNetId())); - } - case CRAFTING_SPECIAL_MAPCLONING -> { - craftingDataPacket.getCraftingData().add(MultiRecipeData.of(UUID.fromString("85939755-ba10-4d9d-a4cc-efb7a8e943c4"), context.getAndIncrementNetId())); - } - case CRAFTING_SPECIAL_FIREWORK_ROCKET -> { - craftingDataPacket.getCraftingData().add(MultiRecipeData.of(UUID.fromString("00000000-0000-0000-0000-000000000002"), context.getAndIncrementNetId())); - } - default -> { - List<GeyserRecipe> recipes = Registries.RECIPES.get(recipe.getType()); - if (recipes != null) { - List<String> bedrockRecipeIds = new ArrayList<>(); - if (recipe.getType() == RecipeType.CRAFTING_SPECIAL_TIPPEDARROW) { - // Only shaped recipe at this moment - for (GeyserRecipe builtInRecipe : recipes) { - var recipeIds = context.translateShapedRecipe((GeyserShapedRecipe) builtInRecipe); - if (recipeIds != null) { - bedrockRecipeIds.addAll(recipeIds); - } - } - } else if (recipe.getType() == RecipeType.CRAFTING_SPECIAL_SHULKERBOXCOLORING) { - for (GeyserRecipe builtInRecipe : recipes) { - var recipeIds = context.translateShulkerBoxRecipe((GeyserShapelessRecipe) builtInRecipe); - if (recipeIds != null) { - bedrockRecipeIds.addAll(recipeIds); - } - } - } else { - for (GeyserRecipe builtInRecipe : recipes) { - var recipeIds = context.translateShapelessRecipe((GeyserShapelessRecipe) builtInRecipe); - if (recipeIds != null) { - bedrockRecipeIds.addAll(recipeIds); - } - } - } - context.addSpecialRecipesIdentifiers(recipe, bedrockRecipeIds); - } - } - } - } - craftingDataPacket.getCraftingData().addAll(CARTOGRAPHY_RECIPES); - craftingDataPacket.getPotionMixData().addAll(Registries.POTION_MIXES.forVersion(session.getUpstream().getProtocolVersion())); - - Int2ObjectMap<GeyserStonecutterData> stonecutterRecipeMap = new Int2ObjectOpenHashMap<>(); - for (Int2ObjectMap.Entry<List<StoneCuttingRecipeData>> data : unsortedStonecutterData.int2ObjectEntrySet()) { - // Sort the list by each output item's Java identifier - this is how it's sorted on Java, and therefore - // We can get the correct order for button pressing - data.getValue().sort(Comparator.comparing((stoneCuttingRecipeData -> - Registries.JAVA_ITEMS.get().get(stoneCuttingRecipeData.getResult().getId()) - // See RecipeManager#getRecipesFor as of 1.21 - .translationKey()))); - - // Now that it's sorted, let's translate these recipes - int buttonId = 0; - for (StoneCuttingRecipeData stoneCuttingData : data.getValue()) { - // As of 1.16.4, all stonecutter recipes have one ingredient option - ItemStack ingredient = stoneCuttingData.getIngredient().getOptions()[0]; - ItemData input = ItemTranslator.translateToBedrock(session, ingredient); - ItemDescriptorWithCount descriptor = ItemDescriptorWithCount.fromItem(input); - ItemStack javaOutput = stoneCuttingData.getResult(); - ItemData output = ItemTranslator.translateToBedrock(session, javaOutput); - if (!input.isValid() || !output.isValid()) { - // Probably modded items - continue; - } - UUID uuid = UUID.randomUUID(); - // We need to register stonecutting recipes, so they show up on Bedrock - craftingDataPacket.getCraftingData().add(org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapelessRecipeData.shapeless(uuid.toString(), - Collections.singletonList(descriptor), Collections.singletonList(output), uuid, "stonecutter", 0, context.netId, RecipeUnlockingRequirement.INVALID)); - - // Save the recipe list for reference when crafting - // Add the net ID as the key and the button required + output for the value - stonecutterRecipeMap.put(context.getAndIncrementNetId(), new GeyserStonecutterData(buttonId++, javaOutput)); - - // Currently, stone cutter recipes are not locked/unlocked on Bedrock; so no need to cache their identifiers. - } - } - - session.getLastRecipeNetId().set(context.netId); // No increment - - // Only send smithing trim recipes if Java/ViaVersion sends them. - if (sendTrimRecipes) { - // BDS sends armor trim templates and materials before the CraftingDataPacket - TrimDataPacket trimDataPacket = new TrimDataPacket(); - trimDataPacket.getPatterns().addAll(session.getRegistryCache().trimPatterns().values()); - trimDataPacket.getMaterials().addAll(session.getRegistryCache().trimMaterials().values()); - session.sendUpstreamPacket(trimDataPacket); - - // Identical smithing_trim recipe sent by BDS that uses tag-descriptors, as the client seems to ignore the - // approach of using many default-descriptors (which we do for smithing_transform) - craftingDataPacket.getCraftingData().add(SmithingTrimRecipeData.of(TrimRecipe.ID, - TrimRecipe.BASE, TrimRecipe.ADDITION, TrimRecipe.TEMPLATE, "smithing_table", session.getLastRecipeNetId().getAndIncrement())); - } else { - // manually add recipes for the upgrade template (workaround), since Java pre-1.20 doesn't - craftingDataPacket.getCraftingData().addAll(getSmithingTransformRecipes(session)); - } - session.setOldSmithingTable(!sendTrimRecipes); - session.sendUpstreamPacket(craftingDataPacket); - session.setCraftingRecipes(recipeMap); - session.setStonecutterRecipes(stonecutterRecipeMap); - } - - //TODO: rewrite - /** - * The Java server sends an array of items for each ingredient you can use per slot in the crafting grid. - * Bedrock recipes take only one ingredient per crafting grid slot. - * - * @return the Java ingredient list as an array that Bedrock can understand - */ - private static ItemDescriptorWithCount[][] combinations(GeyserSession session, Ingredient[] ingredients) { - boolean empty = true; - Map<Set<ItemDescriptorWithCount>, IntSet> squashedOptions = new HashMap<>(); - for (int i = 0; i < ingredients.length; i++) { - if (ingredients[i].getOptions().length == 0) { - squashedOptions.computeIfAbsent(Collections.singleton(ItemDescriptorWithCount.EMPTY), k -> new IntOpenHashSet()).add(i); - continue; - } - empty = false; - Ingredient ingredient = ingredients[i]; - Map<GroupedItem, List<ItemDescriptorWithCount>> groupedByIds = Arrays.stream(ingredient.getOptions()) - .map(item -> ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, item))) - .collect(Collectors.groupingBy(item -> item == ItemDescriptorWithCount.EMPTY ? new GroupedItem(ItemDefinition.AIR, 0) : new GroupedItem(((DefaultDescriptor) item.getDescriptor()).getItemId(), item.getCount()))); - Set<ItemDescriptorWithCount> optionSet = new HashSet<>(groupedByIds.size()); - for (Map.Entry<GroupedItem, List<ItemDescriptorWithCount>> entry : groupedByIds.entrySet()) { - if (entry.getValue().size() > 1) { - GroupedItem groupedItem = entry.getKey(); - - String recipeTag = RECIPE_TAGS.get(groupedItem.id.getIdentifier()); - if (recipeTag != null && ingredients.length > 1) { - optionSet.add(new ItemDescriptorWithCount(new ItemTagDescriptor(recipeTag), groupedItem.count)); - continue; - } - - int idCount = 0; - //not optimal - for (ItemMapping mapping : session.getItemMappings().getItems()) { - if (mapping.getBedrockDefinition() == groupedItem.id) { - idCount++; - } - } - if (entry.getValue().size() < idCount) { - optionSet.addAll(entry.getValue()); - } else { - optionSet.add(groupedItem.id == ItemDefinition.AIR ? ItemDescriptorWithCount.EMPTY : new ItemDescriptorWithCount(new DefaultDescriptor(groupedItem.id, Short.MAX_VALUE), groupedItem.count)); - } - } else { - ItemDescriptorWithCount item = entry.getValue().get(0); - optionSet.add(item); - } - } - squashedOptions.computeIfAbsent(optionSet, k -> new IntOpenHashSet()).add(i); - } - if (empty) { - // Crashes Bedrock 1.19.70 otherwise - // Fixes https://github.com/GeyserMC/Geyser/issues/3549 - return null; - } - int totalCombinations = 1; - for (Set<ItemDescriptorWithCount> optionSet : squashedOptions.keySet()) { - totalCombinations *= optionSet.size(); - } - if (totalCombinations > 500) { - ItemDescriptorWithCount[] translatedItems = new ItemDescriptorWithCount[ingredients.length]; - for (int i = 0; i < ingredients.length; i++) { - if (ingredients[i].getOptions().length > 0) { - translatedItems[i] = ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, ingredients[i].getOptions()[0])); - } else { - translatedItems[i] = ItemDescriptorWithCount.EMPTY; - } - } - return new ItemDescriptorWithCount[][]{translatedItems}; - } - List<Set<ItemDescriptorWithCount>> sortedSets = new ArrayList<>(squashedOptions.keySet()); - sortedSets.sort(Comparator.comparing(Set::size, Comparator.reverseOrder())); - ItemDescriptorWithCount[][] combinations = new ItemDescriptorWithCount[totalCombinations][ingredients.length]; - int x = 1; - for (Set<ItemDescriptorWithCount> set : sortedSets) { - IntSet slotSet = squashedOptions.get(set); - int i = 0; - for (ItemDescriptorWithCount item : set) { - for (int j = 0; j < totalCombinations / set.size(); j++) { - final int comboIndex = (i * x) + (j % x) + ((j / x) * set.size() * x); - for (IntIterator it = slotSet.iterator(); it.hasNext(); ) { - combinations[comboIndex][it.nextInt()] = item; - } - } - i++; - } - x *= set.size(); - } - return combinations; - } - - private List<RecipeData> getSmithingTransformRecipes(GeyserSession session) { - List<RecipeData> recipes = new ArrayList<>(); - ItemMapping template = session.getItemMappings().getStoredItems().upgradeTemplate(); - - for (String identifier : NETHERITE_UPGRADES) { - recipes.add(org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.SmithingTransformRecipeData.of(identifier + "_smithing", - getDescriptorFromId(session, template.getBedrockIdentifier()), - getDescriptorFromId(session, identifier.replace("netherite", "diamond")), - getDescriptorFromId(session, "minecraft:netherite_ingot"), - ItemData.builder().definition(Objects.requireNonNull(session.getItemMappings().getDefinition(identifier))).count(1).build(), - "smithing_table", - session.getLastRecipeNetId().getAndIncrement())); - } - return recipes; - } - - private ItemDescriptorWithCount getDescriptorFromId(GeyserSession session, String bedrockId) { - ItemDefinition bedrockDefinition = session.getItemMappings().getDefinition(bedrockId); - if (bedrockDefinition != null) { - return ItemDescriptorWithCount.fromItem(ItemData.builder().definition(bedrockDefinition).count(1).build()); - } - GeyserImpl.getInstance().getLogger().debug("Unable to find item with identifier " + bedrockId); - return ItemDescriptorWithCount.EMPTY; - } - - @EqualsAndHashCode - @AllArgsConstructor - private static class GroupedItem { - ItemDefinition id; - int count; - } - - private static final class RecipeContext { - private final GeyserSession session; - private final CraftingDataPacket packet; - private final Int2ObjectMap<GeyserRecipe> recipeMap; - // Get the last known network ID (first used for some pregenerated recipes) and increment from there. - private int netId = InventoryUtils.LAST_RECIPE_NET_ID + 1; - - private RecipeContext(GeyserSession session, CraftingDataPacket packet, Int2ObjectMap<GeyserRecipe> recipeMap) { - this.session = session; - this.packet = packet; - this.recipeMap = recipeMap; - } - - List<String> translateShulkerBoxRecipe(GeyserShapelessRecipe recipe) { - ItemStack result = recipe.result(); - ItemData output = ItemTranslator.translateToBedrock(session, result); - if (!output.isValid()) { - // Likely modded item that Bedrock will complain about if it persists - return null; - } - - Item javaItem = Registries.JAVA_ITEMS.get(result.getId()); - if (!(javaItem instanceof BedrockRequiresTagItem)) { - // Strip NBT - tools won't appear in the recipe book otherwise - output = output.toBuilder().tag(null).build(); - } - ItemDescriptorWithCount[][] inputCombinations = combinations(session, recipe.ingredients()); - if (inputCombinations == null) { - return null; - } - - List<String> bedrockRecipeIDs = new ArrayList<>(); - for (ItemDescriptorWithCount[] inputs : inputCombinations) { - UUID uuid = UUID.randomUUID(); - bedrockRecipeIDs.add(uuid.toString()); - packet.getCraftingData().add(org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapelessRecipeData.shulkerBox(uuid.toString(), - Arrays.asList(inputs), Collections.singletonList(output), uuid, "crafting_table", 0, netId)); - recipeMap.put(netId++, recipe); - } - return bedrockRecipeIDs; - } - - List<String> translateShapelessRecipe(GeyserShapelessRecipe recipe) { - ItemStack result = recipe.result(); - ItemData output = ItemTranslator.translateToBedrock(session, result); - if (!output.isValid()) { - // Likely modded item that Bedrock will complain about if it persists - return null; - } - - Item javaItem = Registries.JAVA_ITEMS.get(result.getId()); - if (!(javaItem instanceof BedrockRequiresTagItem)) { - // Strip NBT - tools won't appear in the recipe book otherwise - output = output.toBuilder().tag(null).build(); - } - ItemDescriptorWithCount[][] inputCombinations = combinations(session, recipe.ingredients()); - if (inputCombinations == null) { - return null; - } - - List<String> bedrockRecipeIDs = new ArrayList<>(); - for (ItemDescriptorWithCount[] inputs : inputCombinations) { - UUID uuid = UUID.randomUUID(); - bedrockRecipeIDs.add(uuid.toString()); - packet.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, RecipeUnlockingRequirement.INVALID)); - recipeMap.put(netId++, recipe); - } - return bedrockRecipeIDs; - } - - List<String> translateShapedRecipe(GeyserShapedRecipe recipe) { - ItemStack result = recipe.result(); - ItemData output = ItemTranslator.translateToBedrock(session, result); - if (!output.isValid()) { - // Likely modded item that Bedrock will complain about if it persists - return null; - } - - Item javaItem = Registries.JAVA_ITEMS.get(result.getId()); - if (!(javaItem instanceof BedrockRequiresTagItem)) { - // Strip NBT - tools won't appear in the recipe book otherwise - output = output.toBuilder().tag(null).build(); - } - ItemDescriptorWithCount[][] inputCombinations = combinations(session, recipe.ingredients()); - if (inputCombinations == null) { - return null; - } - - List<String> bedrockRecipeIDs = new ArrayList<>(); - for (ItemDescriptorWithCount[] inputs : inputCombinations) { - UUID uuid = UUID.randomUUID(); - bedrockRecipeIDs.add(uuid.toString()); - packet.getCraftingData().add(org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapedRecipeData.shaped(uuid.toString(), - recipe.width(), recipe.height(), Arrays.asList(inputs), - Collections.singletonList(output), uuid, "crafting_table", 0, netId, false, RecipeUnlockingRequirement.INVALID)); - recipeMap.put(netId++, recipe); - } - return bedrockRecipeIDs; - } - - void addSpecialRecipesIdentifiers(Recipe recipe, List<String> identifiers) { - String javaRecipeID = switch (recipe.getType()) { - case CRAFTING_SPECIAL_SHULKERBOXCOLORING -> - // BDS (un)locks the dyeing with the shulker box recipe, Java never - we want BDS behavior for ease of use - "minecraft:shulker_box"; - case CRAFTING_SPECIAL_TIPPEDARROW -> - // similar as above - "minecraft:arrow"; - default -> recipe.getIdentifier().asString(); - }; - - addRecipeIdentifier(session, javaRecipeID, identifiers); - } - - void addRecipeIdentifier(GeyserSession session, String javaIdentifier, List<String> bedrockIdentifiers) { - session.getJavaToBedrockRecipeIds().computeIfAbsent(javaIdentifier, k -> new ArrayList<>()).addAll(bedrockIdentifiers); - } - - int getAndIncrementNetId() { - return this.netId++; - } + // :( } +// boolean sendTrimRecipes = false; +// Map<String, List<String>> recipeIDs = session.getJavaToBedrockRecipeIds(); +// recipeIDs.clear(); +// Int2ObjectMap<GeyserRecipe> recipeMap = new Int2ObjectOpenHashMap<>(); +// Int2ObjectMap<List<StoneCuttingRecipeData>> unsortedStonecutterData = new Int2ObjectOpenHashMap<>(); +// CraftingDataPacket craftingDataPacket = new CraftingDataPacket(); +// craftingDataPacket.setCleanRecipes(true); +// +// RecipeContext context = new RecipeContext(session, craftingDataPacket, recipeMap); +// +// for (Recipe recipe : packet.getRecipes()) { +// switch (recipe.getType()) { +// case CRAFTING_SHAPELESS -> { +// ShapelessRecipeData shapelessRecipeData = (ShapelessRecipeData) recipe.getData(); +// List<String> bedrockRecipeIDs = context.translateShapelessRecipe(new GeyserShapelessRecipe(shapelessRecipeData)); +// if (bedrockRecipeIDs != null) { +// context.addRecipeIdentifier(session, recipe.getIdentifier().asString(), bedrockRecipeIDs); +// } +// } +// case CRAFTING_SHAPED -> { +// ShapedRecipeData shapedRecipeData = (ShapedRecipeData) recipe.getData(); +// List<String> bedrockRecipeIDs = context.translateShapedRecipe(new GeyserShapedRecipe(shapedRecipeData)); +// if (bedrockRecipeIDs != null) { +// context.addRecipeIdentifier(session, recipe.getIdentifier().asString(), bedrockRecipeIDs); +// } +// } +// case STONECUTTING -> { +// 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<StoneCuttingRecipeData> data = unsortedStonecutterData.get(ingredient.getId()); +// if (data == null) { +// data = new ArrayList<>(); +// unsortedStonecutterData.put(ingredient.getId(), data); +// } +// // Save for processing after all recipes have been received +// data.add(stoneCuttingData); +// } +// case SMITHING_TRANSFORM -> { +// SmithingTransformRecipeData data = (SmithingTransformRecipeData) recipe.getData(); +// ItemData output = ItemTranslator.translateToBedrock(session, data.getResult()); +// +// for (ItemStack template : data.getTemplate().getOptions()) { +// ItemDescriptorWithCount bedrockTemplate = ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, template)); +// +// for (ItemStack base : data.getBase().getOptions()) { +// ItemDescriptorWithCount bedrockBase = ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, base)); +// +// for (ItemStack addition : data.getAddition().getOptions()) { +// ItemDescriptorWithCount bedrockAddition = ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, addition)); +// +// String id = recipe.getIdentifier().asString(); +// // Note: vanilla inputs use aux value of Short.MAX_VALUE +// craftingDataPacket.getCraftingData().add(org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.SmithingTransformRecipeData.of(id, +// bedrockTemplate, bedrockBase, bedrockAddition, output, "smithing_table", context.getAndIncrementNetId())); +// +// recipeIDs.put(id, new ArrayList<>(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"), context.getAndIncrementNetId())); +// } +// case CRAFTING_SPECIAL_BOOKCLONING -> { +// craftingDataPacket.getCraftingData().add(MultiRecipeData.of(UUID.fromString("d1ca6b84-338e-4f2f-9c6b-76cc8b4bd98d"), context.getAndIncrementNetId())); +// } +// case CRAFTING_SPECIAL_REPAIRITEM -> { +// craftingDataPacket.getCraftingData().add(MultiRecipeData.of(UUID.fromString("00000000-0000-0000-0000-000000000001"), context.getAndIncrementNetId())); +// } +// case CRAFTING_SPECIAL_MAPEXTENDING -> { +// craftingDataPacket.getCraftingData().add(MultiRecipeData.of(UUID.fromString("d392b075-4ba1-40ae-8789-af868d56f6ce"), context.getAndIncrementNetId())); +// } +// case CRAFTING_SPECIAL_MAPCLONING -> { +// craftingDataPacket.getCraftingData().add(MultiRecipeData.of(UUID.fromString("85939755-ba10-4d9d-a4cc-efb7a8e943c4"), context.getAndIncrementNetId())); +// } +// case CRAFTING_SPECIAL_FIREWORK_ROCKET -> { +// craftingDataPacket.getCraftingData().add(MultiRecipeData.of(UUID.fromString("00000000-0000-0000-0000-000000000002"), context.getAndIncrementNetId())); +// } +// default -> { +// List<GeyserRecipe> recipes = Registries.RECIPES.get(recipe.getType()); +// if (recipes != null) { +// List<String> bedrockRecipeIds = new ArrayList<>(); +// if (recipe.getType() == RecipeType.CRAFTING_SPECIAL_TIPPEDARROW) { +// // Only shaped recipe at this moment +// for (GeyserRecipe builtInRecipe : recipes) { +// var recipeIds = context.translateShapedRecipe((GeyserShapedRecipe) builtInRecipe); +// if (recipeIds != null) { +// bedrockRecipeIds.addAll(recipeIds); +// } +// } +// } else if (recipe.getType() == RecipeType.CRAFTING_SPECIAL_SHULKERBOXCOLORING) { +// for (GeyserRecipe builtInRecipe : recipes) { +// var recipeIds = context.translateShulkerBoxRecipe((GeyserShapelessRecipe) builtInRecipe); +// if (recipeIds != null) { +// bedrockRecipeIds.addAll(recipeIds); +// } +// } +// } else { +// for (GeyserRecipe builtInRecipe : recipes) { +// var recipeIds = context.translateShapelessRecipe((GeyserShapelessRecipe) builtInRecipe); +// if (recipeIds != null) { +// bedrockRecipeIds.addAll(recipeIds); +// } +// } +// } +// context.addSpecialRecipesIdentifiers(recipe, bedrockRecipeIds); +// } +// } +// } +// } +// craftingDataPacket.getCraftingData().addAll(CARTOGRAPHY_RECIPES); +// craftingDataPacket.getPotionMixData().addAll(Registries.POTION_MIXES.forVersion(session.getUpstream().getProtocolVersion())); +// +// Int2ObjectMap<GeyserStonecutterData> stonecutterRecipeMap = new Int2ObjectOpenHashMap<>(); +// for (Int2ObjectMap.Entry<List<StoneCuttingRecipeData>> data : unsortedStonecutterData.int2ObjectEntrySet()) { +// // Sort the list by each output item's Java identifier - this is how it's sorted on Java, and therefore +// // We can get the correct order for button pressing +// data.getValue().sort(Comparator.comparing((stoneCuttingRecipeData -> +// Registries.JAVA_ITEMS.get().get(stoneCuttingRecipeData.getResult().getId()) +// // See RecipeManager#getRecipesFor as of 1.21 +// .translationKey()))); +// +// // Now that it's sorted, let's translate these recipes +// int buttonId = 0; +// for (StoneCuttingRecipeData stoneCuttingData : data.getValue()) { +// // As of 1.16.4, all stonecutter recipes have one ingredient option +// ItemStack ingredient = stoneCuttingData.getIngredient().getOptions()[0]; +// ItemData input = ItemTranslator.translateToBedrock(session, ingredient); +// ItemDescriptorWithCount descriptor = ItemDescriptorWithCount.fromItem(input); +// ItemStack javaOutput = stoneCuttingData.getResult(); +// ItemData output = ItemTranslator.translateToBedrock(session, javaOutput); +// if (!input.isValid() || !output.isValid()) { +// // Probably modded items +// continue; +// } +// UUID uuid = UUID.randomUUID(); +// // We need to register stonecutting recipes, so they show up on Bedrock +// craftingDataPacket.getCraftingData().add(org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapelessRecipeData.shapeless(uuid.toString(), +// Collections.singletonList(descriptor), Collections.singletonList(output), uuid, "stonecutter", 0, context.netId, RecipeUnlockingRequirement.INVALID)); +// +// // Save the recipe list for reference when crafting +// // Add the net ID as the key and the button required + output for the value +// stonecutterRecipeMap.put(context.getAndIncrementNetId(), new GeyserStonecutterData(buttonId++, javaOutput)); +// +// // Currently, stone cutter recipes are not locked/unlocked on Bedrock; so no need to cache their identifiers. +// } +// } +// +// session.getLastRecipeNetId().set(context.netId); // No increment +// +// // Only send smithing trim recipes if Java/ViaVersion sends them. +// if (sendTrimRecipes) { +// // BDS sends armor trim templates and materials before the CraftingDataPacket +// TrimDataPacket trimDataPacket = new TrimDataPacket(); +// trimDataPacket.getPatterns().addAll(session.getRegistryCache().trimPatterns().values()); +// trimDataPacket.getMaterials().addAll(session.getRegistryCache().trimMaterials().values()); +// session.sendUpstreamPacket(trimDataPacket); +// +// // Identical smithing_trim recipe sent by BDS that uses tag-descriptors, as the client seems to ignore the +// // approach of using many default-descriptors (which we do for smithing_transform) +// craftingDataPacket.getCraftingData().add(SmithingTrimRecipeData.of(TrimRecipe.ID, +// TrimRecipe.BASE, TrimRecipe.ADDITION, TrimRecipe.TEMPLATE, "smithing_table", session.getLastRecipeNetId().getAndIncrement())); +// } else { +// // manually add recipes for the upgrade template (workaround), since Java pre-1.20 doesn't +// craftingDataPacket.getCraftingData().addAll(getSmithingTransformRecipes(session)); +// } +// session.setOldSmithingTable(!sendTrimRecipes); +// session.sendUpstreamPacket(craftingDataPacket); +// session.setCraftingRecipes(recipeMap); +// session.setStonecutterRecipes(stonecutterRecipeMap); +// } +// +// //TODO: rewrite +// /** +// * The Java server sends an array of items for each ingredient you can use per slot in the crafting grid. +// * Bedrock recipes take only one ingredient per crafting grid slot. +// * +// * @return the Java ingredient list as an array that Bedrock can understand +// */ +// private static ItemDescriptorWithCount[][] combinations(GeyserSession session, Ingredient[] ingredients) { +// boolean empty = true; +// Map<Set<ItemDescriptorWithCount>, IntSet> squashedOptions = new HashMap<>(); +// for (int i = 0; i < ingredients.length; i++) { +// if (ingredients[i].getOptions().length == 0) { +// squashedOptions.computeIfAbsent(Collections.singleton(ItemDescriptorWithCount.EMPTY), k -> new IntOpenHashSet()).add(i); +// continue; +// } +// empty = false; +// Ingredient ingredient = ingredients[i]; +// Map<GroupedItem, List<ItemDescriptorWithCount>> groupedByIds = Arrays.stream(ingredient.getOptions()) +// .map(item -> ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, item))) +// .collect(Collectors.groupingBy(item -> item == ItemDescriptorWithCount.EMPTY ? new GroupedItem(ItemDefinition.AIR, 0) : new GroupedItem(((DefaultDescriptor) item.getDescriptor()).getItemId(), item.getCount()))); +// Set<ItemDescriptorWithCount> optionSet = new HashSet<>(groupedByIds.size()); +// for (Map.Entry<GroupedItem, List<ItemDescriptorWithCount>> entry : groupedByIds.entrySet()) { +// if (entry.getValue().size() > 1) { +// GroupedItem groupedItem = entry.getKey(); +// +// String recipeTag = RECIPE_TAGS.get(groupedItem.id.getIdentifier()); +// if (recipeTag != null && ingredients.length > 1) { +// optionSet.add(new ItemDescriptorWithCount(new ItemTagDescriptor(recipeTag), groupedItem.count)); +// continue; +// } +// +// int idCount = 0; +// //not optimal +// for (ItemMapping mapping : session.getItemMappings().getItems()) { +// if (mapping.getBedrockDefinition() == groupedItem.id) { +// idCount++; +// } +// } +// if (entry.getValue().size() < idCount) { +// optionSet.addAll(entry.getValue()); +// } else { +// optionSet.add(groupedItem.id == ItemDefinition.AIR ? ItemDescriptorWithCount.EMPTY : new ItemDescriptorWithCount(new DefaultDescriptor(groupedItem.id, Short.MAX_VALUE), groupedItem.count)); +// } +// } else { +// ItemDescriptorWithCount item = entry.getValue().get(0); +// optionSet.add(item); +// } +// } +// squashedOptions.computeIfAbsent(optionSet, k -> new IntOpenHashSet()).add(i); +// } +// if (empty) { +// // Crashes Bedrock 1.19.70 otherwise +// // Fixes https://github.com/GeyserMC/Geyser/issues/3549 +// return null; +// } +// int totalCombinations = 1; +// for (Set<ItemDescriptorWithCount> optionSet : squashedOptions.keySet()) { +// totalCombinations *= optionSet.size(); +// } +// if (totalCombinations > 500) { +// ItemDescriptorWithCount[] translatedItems = new ItemDescriptorWithCount[ingredients.length]; +// for (int i = 0; i < ingredients.length; i++) { +// if (ingredients[i].getOptions().length > 0) { +// translatedItems[i] = ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, ingredients[i].getOptions()[0])); +// } else { +// translatedItems[i] = ItemDescriptorWithCount.EMPTY; +// } +// } +// return new ItemDescriptorWithCount[][]{translatedItems}; +// } +// List<Set<ItemDescriptorWithCount>> sortedSets = new ArrayList<>(squashedOptions.keySet()); +// sortedSets.sort(Comparator.comparing(Set::size, Comparator.reverseOrder())); +// ItemDescriptorWithCount[][] combinations = new ItemDescriptorWithCount[totalCombinations][ingredients.length]; +// int x = 1; +// for (Set<ItemDescriptorWithCount> set : sortedSets) { +// IntSet slotSet = squashedOptions.get(set); +// int i = 0; +// for (ItemDescriptorWithCount item : set) { +// for (int j = 0; j < totalCombinations / set.size(); j++) { +// final int comboIndex = (i * x) + (j % x) + ((j / x) * set.size() * x); +// for (IntIterator it = slotSet.iterator(); it.hasNext(); ) { +// combinations[comboIndex][it.nextInt()] = item; +// } +// } +// i++; +// } +// x *= set.size(); +// } +// return combinations; +// } +// +// private List<RecipeData> getSmithingTransformRecipes(GeyserSession session) { +// List<RecipeData> recipes = new ArrayList<>(); +// ItemMapping template = session.getItemMappings().getStoredItems().upgradeTemplate(); +// +// for (String identifier : NETHERITE_UPGRADES) { +// recipes.add(org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.SmithingTransformRecipeData.of(identifier + "_smithing", +// getDescriptorFromId(session, template.getBedrockIdentifier()), +// getDescriptorFromId(session, identifier.replace("netherite", "diamond")), +// getDescriptorFromId(session, "minecraft:netherite_ingot"), +// ItemData.builder().definition(Objects.requireNonNull(session.getItemMappings().getDefinition(identifier))).count(1).build(), +// "smithing_table", +// session.getLastRecipeNetId().getAndIncrement())); +// } +// return recipes; +// } +// +// private ItemDescriptorWithCount getDescriptorFromId(GeyserSession session, String bedrockId) { +// ItemDefinition bedrockDefinition = session.getItemMappings().getDefinition(bedrockId); +// if (bedrockDefinition != null) { +// return ItemDescriptorWithCount.fromItem(ItemData.builder().definition(bedrockDefinition).count(1).build()); +// } +// GeyserImpl.getInstance().getLogger().debug("Unable to find item with identifier " + bedrockId); +// return ItemDescriptorWithCount.EMPTY; +// } +// +// @EqualsAndHashCode +// @AllArgsConstructor +// private static class GroupedItem { +// ItemDefinition id; +// int count; +// } +// +// private static final class RecipeContext { +// private final GeyserSession session; +// private final CraftingDataPacket packet; +// private final Int2ObjectMap<GeyserRecipe> recipeMap; +// // Get the last known network ID (first used for some pregenerated recipes) and increment from there. +// private int netId = InventoryUtils.LAST_RECIPE_NET_ID + 1; +// +// private RecipeContext(GeyserSession session, CraftingDataPacket packet, Int2ObjectMap<GeyserRecipe> recipeMap) { +// this.session = session; +// this.packet = packet; +// this.recipeMap = recipeMap; +// } +// +// List<String> translateShulkerBoxRecipe(GeyserShapelessRecipe recipe) { +// ItemStack result = recipe.result(); +// ItemData output = ItemTranslator.translateToBedrock(session, result); +// if (!output.isValid()) { +// // Likely modded item that Bedrock will complain about if it persists +// return null; +// } +// +// Item javaItem = Registries.JAVA_ITEMS.get(result.getId()); +// if (!(javaItem instanceof BedrockRequiresTagItem)) { +// // Strip NBT - tools won't appear in the recipe book otherwise +// output = output.toBuilder().tag(null).build(); +// } +// ItemDescriptorWithCount[][] inputCombinations = combinations(session, recipe.ingredients()); +// if (inputCombinations == null) { +// return null; +// } +// +// List<String> bedrockRecipeIDs = new ArrayList<>(); +// for (ItemDescriptorWithCount[] inputs : inputCombinations) { +// UUID uuid = UUID.randomUUID(); +// bedrockRecipeIDs.add(uuid.toString()); +// packet.getCraftingData().add(org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapelessRecipeData.shulkerBox(uuid.toString(), +// Arrays.asList(inputs), Collections.singletonList(output), uuid, "crafting_table", 0, netId)); +// recipeMap.put(netId++, recipe); +// } +// return bedrockRecipeIDs; +// } +// +// List<String> translateShapelessRecipe(GeyserShapelessRecipe recipe) { +// ItemStack result = recipe.result(); +// ItemData output = ItemTranslator.translateToBedrock(session, result); +// if (!output.isValid()) { +// // Likely modded item that Bedrock will complain about if it persists +// return null; +// } +// +// Item javaItem = Registries.JAVA_ITEMS.get(result.getId()); +// if (!(javaItem instanceof BedrockRequiresTagItem)) { +// // Strip NBT - tools won't appear in the recipe book otherwise +// output = output.toBuilder().tag(null).build(); +// } +// ItemDescriptorWithCount[][] inputCombinations = combinations(session, recipe.ingredients()); +// if (inputCombinations == null) { +// return null; +// } +// +// List<String> bedrockRecipeIDs = new ArrayList<>(); +// for (ItemDescriptorWithCount[] inputs : inputCombinations) { +// UUID uuid = UUID.randomUUID(); +// bedrockRecipeIDs.add(uuid.toString()); +// packet.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, RecipeUnlockingRequirement.INVALID)); +// recipeMap.put(netId++, recipe); +// } +// return bedrockRecipeIDs; +// } +// +// List<String> translateShapedRecipe(GeyserShapedRecipe recipe) { +// ItemStack result = recipe.result(); +// ItemData output = ItemTranslator.translateToBedrock(session, result); +// if (!output.isValid()) { +// // Likely modded item that Bedrock will complain about if it persists +// return null; +// } +// +// Item javaItem = Registries.JAVA_ITEMS.get(result.getId()); +// if (!(javaItem instanceof BedrockRequiresTagItem)) { +// // Strip NBT - tools won't appear in the recipe book otherwise +// output = output.toBuilder().tag(null).build(); +// } +// ItemDescriptorWithCount[][] inputCombinations = combinations(session, recipe.ingredients()); +// if (inputCombinations == null) { +// return null; +// } +// +// List<String> bedrockRecipeIDs = new ArrayList<>(); +// for (ItemDescriptorWithCount[] inputs : inputCombinations) { +// UUID uuid = UUID.randomUUID(); +// bedrockRecipeIDs.add(uuid.toString()); +// packet.getCraftingData().add(org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapedRecipeData.shaped(uuid.toString(), +// recipe.width(), recipe.height(), Arrays.asList(inputs), +// Collections.singletonList(output), uuid, "crafting_table", 0, netId, false, RecipeUnlockingRequirement.INVALID)); +// recipeMap.put(netId++, recipe); +// } +// return bedrockRecipeIDs; +// } +// +// void addSpecialRecipesIdentifiers(Recipe recipe, List<String> identifiers) { +// String javaRecipeID = switch (recipe.getType()) { +// case CRAFTING_SPECIAL_SHULKERBOXCOLORING -> +// // BDS (un)locks the dyeing with the shulker box recipe, Java never - we want BDS behavior for ease of use +// "minecraft:shulker_box"; +// case CRAFTING_SPECIAL_TIPPEDARROW -> +// // similar as above +// "minecraft:arrow"; +// default -> recipe.getIdentifier().asString(); +// }; +// +// addRecipeIdentifier(session, javaRecipeID, identifiers); +// } +// +// void addRecipeIdentifier(GeyserSession session, String javaIdentifier, List<String> bedrockIdentifiers) { +// session.getJavaToBedrockRecipeIds().computeIfAbsent(javaIdentifier, k -> new ArrayList<>()).addAll(bedrockIdentifiers); +// } +// +// int getAndIncrementNetId() { +// return this.netId++; +// } +// } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetCarriedItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetHeldSlotTranslator.java similarity index 86% rename from core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetCarriedItemTranslator.java rename to core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetHeldSlotTranslator.java index e590b5658..a02aa61ee 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetCarriedItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetHeldSlotTranslator.java @@ -25,17 +25,17 @@ package org.geysermc.geyser.translator.protocol.java.entity.player; -import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.player.ClientboundSetCarriedItemPacket; import org.cloudburstmc.protocol.bedrock.packet.PlayerHotbarPacket; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.player.ClientboundSetHeldSlotPacket; -@Translator(packet = ClientboundSetCarriedItemPacket.class) -public class JavaSetCarriedItemTranslator extends PacketTranslator<ClientboundSetCarriedItemPacket> { +@Translator(packet = ClientboundSetHeldSlotPacket.class) +public class JavaSetHeldSlotTranslator extends PacketTranslator<ClientboundSetHeldSlotPacket> { @Override - public void translate(GeyserSession session, ClientboundSetCarriedItemPacket packet) { + public void translate(GeyserSession session, ClientboundSetHeldSlotPacket packet) { PlayerHotbarPacket hotbarPacket = new PlayerHotbarPacket(); hotbarPacket.setContainerId(0); hotbarPacket.setSelectedHotbarSlot(packet.getSlot()); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java index 9b5d95afe..ed3abdfe4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java @@ -59,7 +59,7 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound @Override public void translate(GeyserSession session, ClientboundContainerSetSlotPacket packet) { - if (packet.getContainerId() == 255) { //cursor + if (packet.getContainerId() == 255) { //cursor //TODO new packet GeyserItemStack newItem = GeyserItemStack.from(packet.getItem()); session.getPlayerInventory().setCursor(newItem, session); InventoryUtils.updateCursor(session); @@ -90,7 +90,7 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound updateCraftingGrid(session, slot, packet.getItem(), inventory, translator); GeyserItemStack newItem = GeyserItemStack.from(packet.getItem()); - if (packet.getContainerId() == 0 && !(translator instanceof PlayerInventoryTranslator)) { + if (packet.getContainerId() == 0 && !(translator instanceof PlayerInventoryTranslator)) { //TODO new packet // In rare cases, the window ID can still be 0 but Java treats it as valid session.getPlayerInventory().setItem(slot, newItem, session); InventoryTranslator.PLAYER_INVENTORY_TRANSLATOR.updateSlot(session, session.getPlayerInventory(), slot); diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3a3831044..1fc799d32 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,7 @@ protocol-common = "3.0.0.Beta5-20240916.181041-6" protocol-codec = "3.0.0.Beta5-20240916.181041-6" raknet = "1.0.0.CR3-20240416.144209-1" minecraftauth = "4.1.1" -mcprotocollib = "1.21-20241010.155958-24" +mcprotocollib = "1.21.2-SNAPSHOT" adventure = "4.14.0" adventure-platform = "4.3.0" junit = "5.9.2" From 0f184627f3aa392ae4750c6e9b223edaa6d61026 Mon Sep 17 00:00:00 2001 From: chris <github@onechris.mozmail.com> Date: Mon, 21 Oct 2024 00:36:02 +0800 Subject: [PATCH 003/165] Fix: Late Geyser response to ClientboundSelectKnownPacks packet (#5090) --- .../protocol/java/JavaSelectKnownPacksTranslator.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectKnownPacksTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectKnownPacksTranslator.java index 6b1c8c645..9192beacf 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectKnownPacksTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectKnownPacksTranslator.java @@ -59,4 +59,9 @@ public class JavaSelectKnownPacksTranslator extends PacketTranslator<Clientbound } session.sendDownstreamPacket(new ServerboundSelectKnownPacks(knownPacks)); } + + @Override + public boolean shouldExecuteInEventLoop() { + return false; + } } From 93d96ef5a458c447d2c6ed027fb0b05ef6a90ca3 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Sun, 20 Oct 2024 14:54:27 -0400 Subject: [PATCH 004/165] Boat changes applied --- .../geyser/entity/EntityDefinitions.java | 92 +++++++++++++++---- .../geyser/entity/type/BoatEntity.java | 46 +++++++--- .../geyser/entity/type/ChestBoatEntity.java | 10 +- .../BedrockEntityPickRequestTranslator.java | 25 +---- ...BedrockInventoryTransactionTranslator.java | 5 +- .../BedrockMoveEntityAbsoluteTranslator.java | 3 +- .../bedrock/BedrockPlayerInputTranslator.java | 16 ++-- .../player/BedrockActionTranslator.java | 1 + .../player/BedrockInteractTranslator.java | 14 +-- .../player/BedrockMovePlayerTranslator.java | 5 +- .../BedrockLevelSoundEventTranslator.java | 1 + .../java/level/JavaCooldownTranslator.java | 2 +- .../org/geysermc/geyser/util/EntityUtils.java | 44 +++++---- .../geysermc/geyser/util/InventoryUtils.java | 13 +-- 14 files changed, 178 insertions(+), 99 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 39357eb60..1443a9443 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java @@ -152,29 +152,37 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.FloatE import org.geysermc.mcprotocollib.protocol.data.game.entity.type.EntityType; public final class EntityDefinitions { + public static final EntityDefinition<BoatEntity> ACACIA_BOAT; + public static final EntityDefinition<ChestBoatEntity> ACACIA_CHEST_BOAT; public static final EntityDefinition<AllayEntity> ALLAY; public static final EntityDefinition<AreaEffectCloudEntity> AREA_EFFECT_CLOUD; public static final EntityDefinition<ArmadilloEntity> ARMADILLO; public static final EntityDefinition<ArmorStandEntity> ARMOR_STAND; public static final EntityDefinition<ArrowEntity> ARROW; public static final EntityDefinition<AxolotlEntity> AXOLOTL; + public static final EntityDefinition<BoatEntity> BAMBOO_RAFT; + public static final EntityDefinition<ChestBoatEntity> BAMBOO_CHEST_RAFT; public static final EntityDefinition<BatEntity> BAT; public static final EntityDefinition<BeeEntity> BEE; + public static final EntityDefinition<BoatEntity> BIRCH_BOAT; + public static final EntityDefinition<ChestBoatEntity> BIRCH_CHEST_BOAT; public static final EntityDefinition<BlazeEntity> BLAZE; - public static final EntityDefinition<BoatEntity> BOAT; public static final EntityDefinition<BoggedEntity> BOGGED; public static final EntityDefinition<BreezeEntity> BREEZE; public static final EntityDefinition<AbstractWindChargeEntity> BREEZE_WIND_CHARGE; public static final EntityDefinition<CamelEntity> CAMEL; public static final EntityDefinition<CatEntity> CAT; public static final EntityDefinition<SpiderEntity> CAVE_SPIDER; + public static final EntityDefinition<BoatEntity> CHERRY_BOAT; + public static final EntityDefinition<ChestBoatEntity> CHERRY_CHEST_BOAT; public static final EntityDefinition<MinecartEntity> CHEST_MINECART; public static final EntityDefinition<ChickenEntity> CHICKEN; - public static final EntityDefinition<ChestBoatEntity> CHEST_BOAT; public static final EntityDefinition<AbstractFishEntity> COD; public static final EntityDefinition<CommandBlockMinecartEntity> COMMAND_BLOCK_MINECART; public static final EntityDefinition<CowEntity> COW; public static final EntityDefinition<CreeperEntity> CREEPER; + public static final EntityDefinition<BoatEntity> DARK_OAK_BOAT; + public static final EntityDefinition<ChestBoatEntity> DARK_OAK_CHEST_BOAT; public static final EntityDefinition<DolphinEntity> DOLPHIN; public static final EntityDefinition<ChestedHorseEntity> DONKEY; public static final EntityDefinition<FireballEntity> DRAGON_FIREBALL; @@ -213,14 +221,20 @@ public final class EntityDefinitions { public static final EntityDefinition<IronGolemEntity> IRON_GOLEM; public static final EntityDefinition<ItemEntity> ITEM; public static final EntityDefinition<ItemFrameEntity> ITEM_FRAME; + public static final EntityDefinition<BoatEntity> JUNGLE_BOAT; + public static final EntityDefinition<ChestBoatEntity> JUNGLE_CHEST_BOAT; public static final EntityDefinition<LeashKnotEntity> LEASH_KNOT; public static final EntityDefinition<LightningEntity> LIGHTNING_BOLT; public static final EntityDefinition<LlamaEntity> LLAMA; public static final EntityDefinition<ThrowableEntity> LLAMA_SPIT; public static final EntityDefinition<MagmaCubeEntity> MAGMA_CUBE; + public static final EntityDefinition<BoatEntity> MANGROVE_BOAT; + public static final EntityDefinition<ChestBoatEntity> MANGROVE_CHEST_BOAT; public static final EntityDefinition<MinecartEntity> MINECART; public static final EntityDefinition<MooshroomEntity> MOOSHROOM; public static final EntityDefinition<ChestedHorseEntity> MULE; + public static final EntityDefinition<BoatEntity> OAK_BOAT; + public static final EntityDefinition<ChestBoatEntity> OAK_CHEST_BOAT; public static final EntityDefinition<OcelotEntity> OCELOT; public static final EntityDefinition<PaintingEntity> PAINTING; public static final EntityDefinition<PandaEntity> PANDA; @@ -251,6 +265,8 @@ public final class EntityDefinitions { public static final EntityDefinition<SpawnerMinecartEntity> SPAWNER_MINECART; // Not present on Bedrock public static final EntityDefinition<AbstractArrowEntity> SPECTRAL_ARROW; public static final EntityDefinition<SpiderEntity> SPIDER; + public static final EntityDefinition<BoatEntity> SPRUCE_BOAT; + public static final EntityDefinition<ChestBoatEntity> SPRUCE_CHEST_BOAT; public static final EntityDefinition<SquidEntity> SQUID; public static final EntityDefinition<AbstractSkeletonEntity> STRAY; public static final EntityDefinition<StriderEntity> STRIDER; @@ -309,23 +325,6 @@ public final class EntityDefinitions { .addTranslator(null) // Waiting .addTranslator(MetadataType.PARTICLE, AreaEffectCloudEntity::setParticle) .build(); - BOAT = EntityDefinition.inherited(BoatEntity::new, entityBase) - .type(EntityType.BOAT) - .height(0.6f).width(1.6f) - .offset(0.35f) - .addTranslator(MetadataType.INT, (boatEntity, entityMetadata) -> boatEntity.getDirtyMetadata().put(EntityDataTypes.HURT_TICKS, entityMetadata.getValue())) // Time since last hit - .addTranslator(MetadataType.INT, (boatEntity, entityMetadata) -> boatEntity.getDirtyMetadata().put(EntityDataTypes.HURT_DIRECTION, entityMetadata.getValue())) // Rocking direction - .addTranslator(MetadataType.FLOAT, (boatEntity, entityMetadata) -> - // 'Health' in Bedrock, damage taken in Java - it makes motion in Bedrock - boatEntity.getDirtyMetadata().put(EntityDataTypes.STRUCTURAL_INTEGRITY, 40 - ((int) ((FloatEntityMetadata) entityMetadata).getPrimitiveValue()))) - .addTranslator(MetadataType.INT, BoatEntity::setVariant) - .addTranslator(MetadataType.BOOLEAN, BoatEntity::setPaddlingLeft) - .addTranslator(MetadataType.BOOLEAN, BoatEntity::setPaddlingRight) - .addTranslator(MetadataType.INT, (boatEntity, entityMetadata) -> boatEntity.getDirtyMetadata().put(EntityDataTypes.BOAT_BUBBLE_TIME, entityMetadata.getValue())) // May not actually do anything - .build(); - CHEST_BOAT = EntityDefinition.inherited(ChestBoatEntity::new, BOAT) - .type(EntityType.CHEST_BOAT) - .build(); DRAGON_FIREBALL = EntityDefinition.inherited(FireballEntity::new, entityBase) .type(EntityType.DRAGON_FIREBALL) .heightAndWidth(1.0f) @@ -568,6 +567,45 @@ public final class EntityDefinitions { .build(false); } + // Boats + { + EntityDefinition<BoatEntity> boatBase = EntityDefinition.<BoatEntity>inherited(null, entityBase) + .height(0.6f).width(1.6f) + .offset(0.35f) + .addTranslator(MetadataType.INT, (boatEntity, entityMetadata) -> boatEntity.getDirtyMetadata().put(EntityDataTypes.HURT_TICKS, entityMetadata.getValue())) // Time since last hit + .addTranslator(MetadataType.INT, (boatEntity, entityMetadata) -> boatEntity.getDirtyMetadata().put(EntityDataTypes.HURT_DIRECTION, entityMetadata.getValue())) // Rocking direction + .addTranslator(MetadataType.FLOAT, (boatEntity, entityMetadata) -> + // 'Health' in Bedrock, damage taken in Java - it makes motion in Bedrock + boatEntity.getDirtyMetadata().put(EntityDataTypes.STRUCTURAL_INTEGRITY, 40 - ((int) ((FloatEntityMetadata) entityMetadata).getPrimitiveValue()))) + .addTranslator(MetadataType.BOOLEAN, BoatEntity::setPaddlingLeft) + .addTranslator(MetadataType.BOOLEAN, BoatEntity::setPaddlingRight) + .addTranslator(MetadataType.INT, (boatEntity, entityMetadata) -> boatEntity.getDirtyMetadata().put(EntityDataTypes.BOAT_BUBBLE_TIME, entityMetadata.getValue())) // May not actually do anything + .build(); + + ACACIA_BOAT = buildBoat(boatBase, EntityType.ACACIA_BOAT, BoatEntity.BoatVariant.ACACIA); + BAMBOO_RAFT = buildBoat(boatBase, EntityType.BAMBOO_RAFT, BoatEntity.BoatVariant.BAMBOO); + BIRCH_BOAT = buildBoat(boatBase, EntityType.BIRCH_BOAT, BoatEntity.BoatVariant.BIRCH); + CHERRY_BOAT = buildBoat(boatBase, EntityType.CHERRY_BOAT, BoatEntity.BoatVariant.CHERRY); + DARK_OAK_BOAT = buildBoat(boatBase, EntityType.DARK_OAK_BOAT, BoatEntity.BoatVariant.DARK_OAK); + JUNGLE_BOAT = buildBoat(boatBase, EntityType.JUNGLE_BOAT, BoatEntity.BoatVariant.JUNGLE); + MANGROVE_BOAT = buildBoat(boatBase, EntityType.MANGROVE_BOAT, BoatEntity.BoatVariant.MANGROVE); + OAK_BOAT = buildBoat(boatBase, EntityType.OAK_BOAT, BoatEntity.BoatVariant.OAK); + SPRUCE_BOAT = buildBoat(boatBase, EntityType.SPRUCE_BOAT, BoatEntity.BoatVariant.SPRUCE); + + EntityDefinition<ChestBoatEntity> chestBoatBase = EntityDefinition.<ChestBoatEntity>inherited(null, boatBase) + .build(); + + ACACIA_CHEST_BOAT = buildChestBoat(chestBoatBase, EntityType.ACACIA_CHEST_BOAT, BoatEntity.BoatVariant.ACACIA); + BAMBOO_CHEST_RAFT = buildChestBoat(chestBoatBase, EntityType.BAMBOO_CHEST_RAFT, BoatEntity.BoatVariant.BAMBOO); + BIRCH_CHEST_BOAT = buildChestBoat(chestBoatBase, EntityType.BIRCH_CHEST_BOAT, BoatEntity.BoatVariant.BIRCH); + CHERRY_CHEST_BOAT = buildChestBoat(chestBoatBase, EntityType.CHERRY_CHEST_BOAT, BoatEntity.BoatVariant.CHERRY); + DARK_OAK_CHEST_BOAT = buildChestBoat(chestBoatBase, EntityType.DARK_OAK_CHEST_BOAT, BoatEntity.BoatVariant.DARK_OAK); + JUNGLE_CHEST_BOAT = buildChestBoat(chestBoatBase, EntityType.JUNGLE_CHEST_BOAT, BoatEntity.BoatVariant.JUNGLE); + MANGROVE_CHEST_BOAT = buildChestBoat(chestBoatBase, EntityType.MANGROVE_CHEST_BOAT, BoatEntity.BoatVariant.MANGROVE); + OAK_CHEST_BOAT = buildChestBoat(chestBoatBase, EntityType.OAK_CHEST_BOAT, BoatEntity.BoatVariant.OAK); + SPRUCE_CHEST_BOAT = buildChestBoat(chestBoatBase, EntityType.SPRUCE_CHEST_BOAT, BoatEntity.BoatVariant.SPRUCE); + } + EntityDefinition<LivingEntity> livingEntityBase = EntityDefinition.inherited(LivingEntity::new, entityBase) .addTranslator(MetadataType.BYTE, LivingEntity::setLivingEntityFlags) .addTranslator(MetadataType.FLOAT, LivingEntity::setHealth) @@ -1128,6 +1166,22 @@ public final class EntityDefinitions { } } + private static EntityDefinition<BoatEntity> buildBoat(EntityDefinition<BoatEntity> base, EntityType entityType, BoatEntity.BoatVariant variant) { + return EntityDefinition.inherited((session, javaId, bedrockId, uuid, definition, position, motion, yaw, pitch, headYaw) -> + new BoatEntity(session, javaId, bedrockId, uuid, definition, position, motion, yaw, variant), base) + .type(entityType) + .identifier("minecraft:boat") + .build(); + } + + private static EntityDefinition<ChestBoatEntity> buildChestBoat(EntityDefinition<ChestBoatEntity> base, EntityType entityType, BoatEntity.BoatVariant variant) { + return EntityDefinition.inherited((session, javaId, bedrockId, uuid, definition, position, motion, yaw, pitch, headYaw) -> + new ChestBoatEntity(session, javaId, bedrockId, uuid, definition, position, motion, yaw, variant), base) + .type(entityType) + .identifier("minecraft:chest_boat") + .build(); + } + public static void init() { // no-op } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java index 47ae6777a..9312d83f5 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java @@ -32,11 +32,12 @@ import org.cloudburstmc.protocol.bedrock.packet.AnimatePacket; import org.cloudburstmc.protocol.bedrock.packet.MoveEntityAbsolutePacket; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.entity.EntityDefinitions; +import org.geysermc.geyser.item.Items; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; -import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; import java.util.UUID; @@ -63,16 +64,19 @@ public class BoatEntity extends Entity implements Leashable, Tickable { * Saved for using the "pick" functionality on a boat. */ @Getter - private int variant; + protected final BoatVariant variant; private long leashHolderBedrockId = -1; // Looks too fast and too choppy with 0.1f, which is how I believe the Microsoftian client handles it private final float ROWING_SPEED = 0.1f; - public BoatEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) { + public BoatEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, BoatVariant variant) { // Initial rotation is incorrect super(session, entityId, geyserId, uuid, definition, position.add(0d, definition.offset(), 0d), motion, yaw + 90, 0, yaw + 90); + this.variant = variant; + + dirtyMetadata.put(EntityDataTypes.VARIANT, variant.ordinal()); // Required to be able to move on land 1.16.200+ or apply gravity not in the water 1.16.100+ dirtyMetadata.put(EntityDataTypes.IS_BUOYANT, true); @@ -124,15 +128,6 @@ public class BoatEntity extends Entity implements Leashable, Tickable { moveRelative(0, 0, 0, yaw + 90, 0, 0, isOnGround); } - public void setVariant(IntEntityMetadata entityMetadata) { - variant = entityMetadata.getPrimitiveValue(); - dirtyMetadata.put(EntityDataTypes.VARIANT, switch (variant) { - case 6, 7, 8 -> variant - 1; // dark_oak, mangrove, bamboo - case 5 -> 8; // cherry - default -> variant; - }); - } - public void setPaddlingLeft(BooleanEntityMetadata entityMetadata) { isPaddlingLeft = entityMetadata.getPrimitiveValue(); if (!isPaddlingLeft) { @@ -212,6 +207,10 @@ public class BoatEntity extends Entity implements Leashable, Tickable { return leashHolderBedrockId; } + public Item getPickItem() { + return variant.pickItem; + } + private void sendAnimationPacket(GeyserSession session, Entity rower, AnimatePacket.Action action, float rowTime) { AnimatePacket packet = new AnimatePacket(); packet.setRuntimeEntityId(rower.getGeyserId()); @@ -219,4 +218,27 @@ public class BoatEntity extends Entity implements Leashable, Tickable { packet.setRowingTime(rowTime); session.sendUpstreamPacket(packet); } + + /** + * Ordered by Bedrock ordinal + */ + public enum BoatVariant { + OAK(Items.OAK_BOAT, Items.OAK_CHEST_BOAT), + SPRUCE(Items.SPRUCE_BOAT, Items.SPRUCE_CHEST_BOAT), + BIRCH(Items.BIRCH_BOAT, Items.BIRCH_CHEST_BOAT), + JUNGLE(Items.JUNGLE_BOAT, Items.JUNGLE_CHEST_BOAT), + ACACIA(Items.ACACIA_BOAT, Items.ACACIA_CHEST_BOAT), + DARK_OAK(Items.DARK_OAK_BOAT, Items.DARK_OAK_CHEST_BOAT), + MANGROVE(Items.MANGROVE_BOAT, Items.MANGROVE_CHEST_BOAT), + BAMBOO(Items.BAMBOO_RAFT, Items.BAMBOO_CHEST_RAFT), + CHERRY(Items.CHERRY_BOAT, Items.CHERRY_CHEST_BOAT); + + private final Item pickItem; + final Item chestPickItem; + + BoatVariant(Item pickItem, Item chestPickItem) { + this.pickItem = pickItem; + this.chestPickItem = chestPickItem; + } + } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ChestBoatEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ChestBoatEntity.java index 479b4d80d..967da41df 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ChestBoatEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ChestBoatEntity.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.entity.type; import org.cloudburstmc.math.vector.Vector3f; import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; @@ -35,8 +36,8 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; import java.util.UUID; public class ChestBoatEntity extends BoatEntity { - public ChestBoatEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) { - super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); + public ChestBoatEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, BoatVariant variant) { + super(session, entityId, geyserId, uuid, definition, position, motion, yaw, variant); } @Override @@ -48,4 +49,9 @@ public class ChestBoatEntity extends BoatEntity { public InteractionResult interact(Hand hand) { return passengers.isEmpty() && !session.isSneaking() ? super.interact(hand) : InteractionResult.SUCCESS; } + + @Override + public Item getPickItem() { + return this.variant.chestPickItem; + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEntityPickRequestTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEntityPickRequestTranslator.java index e85456c33..acb8573fb 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEntityPickRequestTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEntityPickRequestTranslator.java @@ -51,29 +51,14 @@ public class BedrockEntityPickRequestTranslator extends PacketTranslator<EntityP Entity entity = session.getEntityCache().getEntityByGeyserId(packet.getRuntimeEntityId()); if (entity == null) return; + if (entity instanceof BoatEntity boat) { + InventoryUtils.findOrCreateItem(session, boat.getPickItem()); + return; + } + // Get the corresponding item String itemName; switch (entity.getDefinition().entityType()) { - case BOAT, CHEST_BOAT -> { - // Include type of boat in the name - int variant = ((BoatEntity) entity).getVariant(); - String typeOfBoat = switch (variant) { - case 1 -> "spruce"; - case 2 -> "birch"; - case 3 -> "jungle"; - case 4 -> "acacia"; - case 5 -> "cherry"; - case 6 -> "dark_oak"; - case 7 -> "mangrove"; - case 8 -> "bamboo"; - default -> "oak"; - }; - itemName = typeOfBoat + "_" + entity.getDefinition().entityType().name().toLowerCase(Locale.ROOT); - // Bamboo boat is a raft - if (variant == 8) { - itemName = itemName.replace("boat", "raft"); - } - } case LEASH_KNOT -> itemName = "lead"; case CHEST_MINECART, COMMAND_BLOCK_MINECART, FURNACE_MINECART, HOPPER_MINECART, TNT_MINECART -> // The Bedrock identifier matches the item name which moves MINECART to the end of the name 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 6ae21067f..7ed4ac72c 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 @@ -296,6 +296,7 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve Hand.MAIN_HAND, packet.getClickPosition().getX(), packet.getClickPosition().getY(), packet.getClickPosition().getZ(), false, + false, sequence); session.sendDownstreamGamePacket(blockPacket); @@ -698,9 +699,9 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve float pitch = (float) -Math.toDegrees(Math.atan2(yDiff, xzHypot)); SessionPlayerEntity entity = session.getPlayerEntity(); - ServerboundMovePlayerPosRotPacket returnPacket = new ServerboundMovePlayerPosRotPacket(entity.isOnGround(), playerPosition.getX(), playerPosition.getY(), playerPosition.getZ(), entity.getYaw(), entity.getPitch()); + ServerboundMovePlayerPosRotPacket returnPacket = new ServerboundMovePlayerPosRotPacket(entity.isOnGround(), false, playerPosition.getX(), playerPosition.getY(), playerPosition.getZ(), entity.getYaw(), entity.getPitch()); // This matches Java edition behavior - ServerboundMovePlayerPosRotPacket movementPacket = new ServerboundMovePlayerPosRotPacket(entity.isOnGround(), playerPosition.getX(), playerPosition.getY(), playerPosition.getZ(), yaw, pitch); + ServerboundMovePlayerPosRotPacket movementPacket = new ServerboundMovePlayerPosRotPacket(entity.isOnGround(), false, playerPosition.getX(), playerPosition.getY(), playerPosition.getZ(), yaw, pitch); session.sendDownstreamGamePacket(movementPacket); if (session.getLookBackScheduledFuture() != null) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMoveEntityAbsoluteTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMoveEntityAbsoluteTranslator.java index f8f31d67f..f2d69d51c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMoveEntityAbsoluteTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMoveEntityAbsoluteTranslator.java @@ -27,7 +27,6 @@ package org.geysermc.geyser.translator.protocol.bedrock; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.packet.MoveEntityAbsolutePacket; -import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.type.BoatEntity; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.session.GeyserSession; @@ -66,7 +65,7 @@ public class BedrockMoveEntityAbsoluteTranslator extends PacketTranslator<MoveEn float y = packet.getPosition().getY(); if (ridingEntity instanceof BoatEntity && !ridingEntity.isOnGround()) { // Remove the offset to prevents boats from looking like they're floating in water - y -= EntityDefinitions.BOAT.offset(); + y -= ridingEntity.getDefinition().offset(); } ServerboundMoveVehiclePacket ServerboundMoveVehiclePacket = new ServerboundMoveVehiclePacket( packet.getPosition().getX(), y, packet.getPosition().getZ(), diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPlayerInputTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPlayerInputTranslator.java index 1498c2184..81f65e1bd 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPlayerInputTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPlayerInputTranslator.java @@ -25,11 +25,8 @@ package org.geysermc.geyser.translator.protocol.bedrock; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.level.ServerboundMoveVehiclePacket; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.level.ServerboundPlayerInputPacket; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.packet.PlayerInputPacket; -import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.type.BoatEntity; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.living.animal.horse.AbstractHorseEntity; @@ -37,6 +34,7 @@ import org.geysermc.geyser.entity.type.living.animal.horse.LlamaEntity; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.level.ServerboundMoveVehiclePacket; /** * Sent by the client for minecarts and boats. @@ -46,11 +44,11 @@ public class BedrockPlayerInputTranslator extends PacketTranslator<PlayerInputPa @Override public void translate(GeyserSession session, PlayerInputPacket packet) { - ServerboundPlayerInputPacket playerInputPacket = new ServerboundPlayerInputPacket( - packet.getInputMotion().getX(), packet.getInputMotion().getY(), packet.isJumping(), packet.isSneaking() - ); - - session.sendDownstreamGamePacket(playerInputPacket); +// ServerboundPlayerInputPacket playerInputPacket = new ServerboundPlayerInputPacket( +// packet.getInputMotion().getX(), packet.getInputMotion().getY(), packet.isJumping(), packet.isSneaking() +// ); +// +// session.sendDownstreamGamePacket(playerInputPacket); session.getPlayerEntity().setVehicleInput(packet.getInputMotion()); @@ -78,7 +76,7 @@ public class BedrockPlayerInputTranslator extends PacketTranslator<PlayerInputPa if (vehicle instanceof BoatEntity && !vehicle.isOnGround()) { // Remove some Y position to prevents boats flying up - vehiclePosition = vehiclePosition.down(EntityDefinitions.BOAT.offset()); + vehiclePosition = vehiclePosition.down(vehicle.getDefinition().offset()); } ServerboundMoveVehiclePacket moveVehiclePacket = new ServerboundMoveVehiclePacket( 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 cd1300a13..669481747 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 @@ -350,6 +350,7 @@ public class BedrockActionTranslator extends PacketTranslator<PlayerActionPacket Hand.MAIN_HAND, 0, 0, 0, false, + false, session.getWorldCache().nextPredictionSequence()); session.sendDownstreamGamePacket(blockPacket); break; diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockInteractTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockInteractTranslator.java index 20c1b055d..2df77ad16 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockInteractTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockInteractTranslator.java @@ -25,16 +25,11 @@ package org.geysermc.geyser.translator.protocol.bedrock.entity.player; -import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; -import org.geysermc.mcprotocollib.protocol.data.game.entity.player.InteractAction; -import org.geysermc.mcprotocollib.protocol.data.game.entity.player.PlayerState; -import org.geysermc.mcprotocollib.protocol.data.game.entity.type.EntityType; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundInteractPacket; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundPlayerCommandPacket; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityLinkData; import org.cloudburstmc.protocol.bedrock.packet.InteractPacket; import org.cloudburstmc.protocol.bedrock.packet.SetEntityLinkPacket; +import org.geysermc.geyser.entity.type.ChestBoatEntity; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.living.animal.horse.AbstractHorseEntity; import org.geysermc.geyser.item.Items; @@ -42,6 +37,11 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.util.InventoryUtils; +import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; +import org.geysermc.mcprotocollib.protocol.data.game.entity.player.InteractAction; +import org.geysermc.mcprotocollib.protocol.data.game.entity.player.PlayerState; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundInteractPacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundPlayerCommandPacket; import java.util.concurrent.TimeUnit; @@ -119,7 +119,7 @@ public class BedrockInteractTranslator extends PacketTranslator<InteractPacket> case OPEN_INVENTORY: if (session.getOpenInventory() == null) { Entity ridingEntity = session.getPlayerEntity().getVehicle(); - if (ridingEntity instanceof AbstractHorseEntity || (ridingEntity != null && ridingEntity.getDefinition().entityType() == EntityType.CHEST_BOAT)) { + if (ridingEntity instanceof AbstractHorseEntity || ridingEntity instanceof ChestBoatEntity) { // This mob has an inventory of its own that we should open instead. ServerboundPlayerCommandPacket openVehicleWindowPacket = new ServerboundPlayerCommandPacket(session.getPlayerEntity().getEntityId(), PlayerState.OPEN_VEHICLE_INVENTORY); session.sendDownstreamGamePacket(openVehicleWindowPacket); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java index ee80cac16..c4cb10127 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java @@ -84,7 +84,7 @@ public class BedrockMovePlayerTranslator extends PacketTranslator<MovePlayerPack // This isn't needed, but it makes the packets closer to vanilla // It also means you can't "lag back" while only looking, in theory if (!positionChanged && rotationChanged) { - ServerboundMovePlayerRotPacket playerRotationPacket = new ServerboundMovePlayerRotPacket(packet.isOnGround(), yaw, pitch); + ServerboundMovePlayerRotPacket playerRotationPacket = new ServerboundMovePlayerRotPacket(packet.isOnGround(), false, yaw, pitch); entity.setYaw(yaw); entity.setPitch(pitch); @@ -138,6 +138,7 @@ public class BedrockMovePlayerTranslator extends PacketTranslator<MovePlayerPack // Send rotation updates as well movePacket = new ServerboundMovePlayerPosRotPacket( onGround, + false, position.getX(), yPosition, position.getZ(), yaw, pitch ); @@ -146,7 +147,7 @@ public class BedrockMovePlayerTranslator extends PacketTranslator<MovePlayerPack entity.setHeadYaw(headYaw); } else { // Rotation did not change; don't send an update with rotation - movePacket = new ServerboundMovePlayerPosPacket(onGround, position.getX(), yPosition, position.getZ()); + movePacket = new ServerboundMovePlayerPosPacket(onGround, false, position.getX(), yPosition, position.getZ()); } entity.setPositionManual(packet.getPosition()); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/world/BedrockLevelSoundEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/world/BedrockLevelSoundEventTranslator.java index 7e791ab2d..62b1b8b14 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/world/BedrockLevelSoundEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/world/BedrockLevelSoundEventTranslator.java @@ -89,6 +89,7 @@ public class BedrockLevelSoundEventTranslator extends PacketTranslator<LevelSoun Hand.MAIN_HAND, 0, 0, 0, false, + false, session.getWorldCache().nextPredictionSequence()); session.sendDownstreamGamePacket(blockPacket); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaCooldownTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaCooldownTranslator.java index 636671651..168992dd4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaCooldownTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaCooldownTranslator.java @@ -39,7 +39,7 @@ public class JavaCooldownTranslator extends PacketTranslator<ClientboundCooldown @Override public void translate(GeyserSession session, ClientboundCooldownPacket packet) { - Item item = Registries.JAVA_ITEMS.get().get(packet.getItemId()); + Item item = Registries.JAVA_ITEMS.get().get(0); // FIXME // Not every item, as of 1.19, appears to be server-driven. Just these two. // Use a map here if it gets too big. String cooldownCategory; 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 8e5a57fae..85f83822f 100644 --- a/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java @@ -25,7 +25,6 @@ package org.geysermc.geyser.util; -import java.util.Locale; import net.kyori.adventure.key.Key; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -35,6 +34,7 @@ import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.type.BoatEntity; +import org.geysermc.geyser.entity.type.ChestBoatEntity; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.TextDisplayEntity; import org.geysermc.geyser.entity.type.living.ArmorStandEntity; @@ -49,6 +49,8 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; import org.geysermc.mcprotocollib.protocol.data.game.entity.type.EntityType; +import java.util.Locale; + public final class EntityUtils { /** * A constant array of the two hands that a player can interact with an entity. @@ -93,6 +95,10 @@ public final class EntityUtils { } private static float getMountedHeightOffset(Entity mount) { + if (mount instanceof BoatEntity boat && boat.getVariant() != BoatEntity.BoatVariant.BAMBOO) { + return -0.1f; + } + float height = mount.getBoundingBoxHeight(); float mountedHeightOffset = height * 0.75f; switch (mount.getDefinition().entityType()) { @@ -105,10 +111,7 @@ public final class EntityUtils { case TRADER_LLAMA, LLAMA -> mountedHeightOffset = height * 0.6f; case MINECART, HOPPER_MINECART, TNT_MINECART, CHEST_MINECART, FURNACE_MINECART, SPAWNER_MINECART, COMMAND_BLOCK_MINECART -> mountedHeightOffset = 0; - case BOAT, CHEST_BOAT -> { - boolean isBamboo = ((BoatEntity) mount).getVariant() == 8; - mountedHeightOffset = isBamboo ? 0.25f : -0.1f; - } + case BAMBOO_RAFT, BAMBOO_CHEST_RAFT -> mountedHeightOffset = 0.25f; case HOGLIN, ZOGLIN -> { boolean isBaby = mount.getFlag(EntityFlag.BABY); mountedHeightOffset = height - (isBaby ? 0.2f : 0.15f); @@ -174,15 +177,6 @@ public final class EntityUtils { float yOffset = mountedHeightOffset + heightOffset; float zOffset = 0; switch (mount.getDefinition().entityType()) { - case BOAT -> { - // Without the X offset, more than one entity on a boat is stacked on top of each other - if (moreThanOneEntity) { - xOffset = rider ? 0.2f : -0.6f; - if (passenger instanceof AnimalEntity) { - xOffset += 0.2f; - } - } - } case CAMEL -> { zOffset = 0.5f; if (moreThanOneEntity) { @@ -201,7 +195,6 @@ public final class EntityUtils { } } } - case CHEST_BOAT -> xOffset = 0.15F; case CHICKEN -> zOffset = -0.1f; case TRADER_LLAMA, LLAMA -> zOffset = -0.3f; case TEXT_DISPLAY -> { @@ -217,6 +210,17 @@ public final class EntityUtils { } } } + if (mount instanceof ChestBoatEntity) { + xOffset = 0.15F; + } else if (mount instanceof BoatEntity) { + // Without the X offset, more than one entity on a boat is stacked on top of each other + if (moreThanOneEntity) { + xOffset = rider ? 0.2f : -0.6f; + if (passenger instanceof AnimalEntity) { + xOffset += 0.2f; + } + } + } /* * Bedrock Differences * Zoglin & Hoglin seem to be taller in Bedrock edition @@ -231,13 +235,19 @@ public final class EntityUtils { } switch (mount.getDefinition().entityType()) { case MINECART, HOPPER_MINECART, TNT_MINECART, CHEST_MINECART, FURNACE_MINECART, SPAWNER_MINECART, - COMMAND_BLOCK_MINECART, BOAT, CHEST_BOAT -> yOffset -= mount.getDefinition().height() * 0.5f; + COMMAND_BLOCK_MINECART -> yOffset -= mount.getDefinition().height() * 0.5f; } switch (passenger.getDefinition().entityType()) { case MINECART, HOPPER_MINECART, TNT_MINECART, CHEST_MINECART, FURNACE_MINECART, SPAWNER_MINECART, - COMMAND_BLOCK_MINECART, BOAT, CHEST_BOAT -> yOffset += passenger.getDefinition().height() * 0.5f; + COMMAND_BLOCK_MINECART -> yOffset += passenger.getDefinition().height() * 0.5f; case FALLING_BLOCK -> yOffset += 0.5f; } + if (mount instanceof BoatEntity) { + yOffset -= mount.getDefinition().height() * 0.5f; + } + if (passenger instanceof BoatEntity) { + yOffset += passenger.getDefinition().height() * 0.5f; + } if (mount instanceof ArmorStandEntity armorStand) { yOffset -= armorStand.getYOffset(); } 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 a0bd5a4c7..11ed17872 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java @@ -485,7 +485,7 @@ public class InventoryUtils { } for (int i = 0; i < data.ingredients().length; i++) { Ingredient ingredient = data.ingredients()[i]; - for (ItemStack itemStack : ingredient.getOptions()) { + for (int item : ingredient.getValues().getHolders()) { // FIXME boolean inventoryHasItem = false; // Iterate only over the crafting table to find this item crafting: @@ -493,11 +493,11 @@ public class InventoryUtils { for (int col = firstCol; col < width + firstCol; col++) { GeyserItemStack geyserItemStack = inventoryGetter.apply(col + (row * gridDimensions) + 1); if (geyserItemStack.isEmpty()) { - inventoryHasItem = itemStack == null || itemStack.getId() == 0; + inventoryHasItem = item == 0; if (inventoryHasItem) { break crafting; } - } else if (itemStack.equals(geyserItemStack.getItemStack(1))) { + } else if (item == geyserItemStack.getJavaId()) { inventoryHasItem = true; break crafting; } @@ -522,14 +522,15 @@ public class InventoryUtils { for (int col = firstCol; col < width + firstCol; col++) { GeyserItemStack geyserItemStack = inventoryGetter.apply(col + (row * gridDimensions) + 1); Ingredient ingredient = ingredients[ingredientIndex++]; - if (ingredient.getOptions().length == 0) { + int[] items = ingredient.getValues().getHolders(); // FIXME + if (items.length == 0) { if (!geyserItemStack.isEmpty()) { return false; } } else { boolean inventoryHasItem = false; - for (ItemStack item : ingredient.getOptions()) { - if (Objects.equals(geyserItemStack.getItemStack(1), item)) { + for (int item : items) { + if (geyserItemStack.getJavaId() == item) { inventoryHasItem = true; break; } From 04128907b452af7880113878b5f98509af4353ae Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Mon, 21 Oct 2024 01:19:18 -0400 Subject: [PATCH 005/165] More progress --- .../player/JavaPlayerPositionTranslator.java | 22 ++++---- .../java/level/JavaExplodeTranslator.java | 55 +++++-------------- .../level/JavaLevelParticlesTranslator.java | 9 +-- .../java/level/JavaSetTimeTranslator.java | 16 ++---- 4 files changed, 37 insertions(+), 65 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java index 413833acf..5fc7f7200 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java @@ -53,7 +53,7 @@ public class JavaPlayerPositionTranslator extends PacketTranslator<ClientboundPl if (!session.isSpawned()) { // The server sends an absolute teleport everytime the player is respawned - Vector3f pos = Vector3f.from(packet.getX(), packet.getY(), packet.getZ()); + Vector3f pos = packet.getPosition().toFloat(); entity.setPosition(pos); entity.setYaw(packet.getYaw()); entity.setPitch(packet.getPitch()); @@ -76,9 +76,9 @@ public class JavaPlayerPositionTranslator extends PacketTranslator<ClientboundPl session.sendUpstreamPacket(movePlayerPacket); session.setSpawned(true); // Make sure the player moves away from (0, 32767, 0) before accepting movement packets - session.setUnconfirmedTeleport(new TeleportCache(packet.getX(), packet.getY(), packet.getZ(), packet.getPitch(), packet.getYaw(), packet.getTeleportId())); + session.setUnconfirmedTeleport(new TeleportCache(packet.getPosition().getX(), packet.getPosition().getY(), packet.getPosition().getZ(), packet.getYRot(), packet.getXRot(), packet.getId())); // TODO - acceptTeleport(session, packet.getX(), packet.getY(), packet.getZ(), packet.getYaw(), packet.getPitch(), packet.getTeleportId()); + acceptTeleport(session, packet.getPosition().getX(), packet.getPosition().getY(), packet.getPosition().getZ(), packet.getYRot(), packet.getXRot(), packet.getId()); if (session.getServerRenderDistance() > 32 && !session.isEmulatePost1_13Logic()) { // See DimensionUtils for an explanation @@ -92,23 +92,23 @@ public class JavaPlayerPositionTranslator extends PacketTranslator<ClientboundPl ChunkUtils.updateChunkPosition(session, pos.toInt()); if (session.getGeyser().getConfig().isDebugMode()) { - session.getGeyser().getLogger().debug("Spawned player at " + packet.getX() + " " + packet.getY() + " " + packet.getZ()); + session.getGeyser().getLogger().debug("Spawned player at " + packet.getPosition()); } return; } // If coordinates are relative, then add to the existing coordinate double newX = packet.getX() + - (packet.getRelative().contains(PositionElement.X) ? entity.getPosition().getX() : 0); + (packet.getRelatives().contains(PositionElement.X) ? entity.getPosition().getX() : 0); double newY = packet.getY() + - (packet.getRelative().contains(PositionElement.Y) ? entity.getPosition().getY() - EntityDefinitions.PLAYER.offset() : 0); + (packet.getRelatives().contains(PositionElement.Y) ? entity.getPosition().getY() - EntityDefinitions.PLAYER.offset() : 0); double newZ = packet.getZ() + - (packet.getRelative().contains(PositionElement.Z) ? entity.getPosition().getZ() : 0); + (packet.getRelatives().contains(PositionElement.Z) ? entity.getPosition().getZ() : 0); - float newPitch = packet.getPitch() + (packet.getRelative().contains(PositionElement.PITCH) ? entity.getPitch() : 0); - float newYaw = packet.getYaw() + (packet.getRelative().contains(PositionElement.YAW) ? entity.getYaw() : 0); + float newPitch = packet.getPitch() + (packet.getRelatives().contains(PositionElement.X_ROT) ? entity.getPitch() : 0); + float newYaw = packet.getYaw() + (packet.getRelatives().contains(PositionElement.Y_ROT) ? entity.getYaw() : 0); - int id = packet.getTeleportId(); + int id = packet.getId(); session.getGeyser().getLogger().debug("Teleport (" + id + ") from " + entity.getPosition().getX() + " " + (entity.getPosition().getY() - EntityDefinitions.PLAYER.offset()) + " " + entity.getPosition().getZ()); @@ -135,7 +135,7 @@ public class JavaPlayerPositionTranslator extends PacketTranslator<ClientboundPl ServerboundAcceptTeleportationPacket teleportConfirmPacket = new ServerboundAcceptTeleportationPacket(id); session.sendDownstreamGamePacket(teleportConfirmPacket); // Servers (especially ones like Hypixel) expect exact coordinates given back to them. - ServerboundMovePlayerPosRotPacket positionPacket = new ServerboundMovePlayerPosRotPacket(false, x, y, z, yaw, pitch); + ServerboundMovePlayerPosRotPacket positionPacket = new ServerboundMovePlayerPosRotPacket(false, false, x, y, z, yaw, pitch); session.sendDownstreamGamePacket(positionPacket); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaExplodeTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaExplodeTranslator.java index f840b8143..76ba803e1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaExplodeTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaExplodeTranslator.java @@ -26,20 +26,15 @@ package org.geysermc.geyser.translator.protocol.java.level; import org.cloudburstmc.math.vector.Vector3f; -import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.protocol.bedrock.data.LevelEvent; import org.cloudburstmc.protocol.bedrock.packet.LevelEventGenericPacket; import org.cloudburstmc.protocol.bedrock.packet.SetEntityMotionPacket; -import org.geysermc.geyser.level.block.type.Block; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; -import org.geysermc.geyser.util.ChunkUtils; import org.geysermc.geyser.util.SoundUtils; -import org.geysermc.mcprotocollib.protocol.data.game.level.block.ExplosionInteraction; -import org.geysermc.mcprotocollib.protocol.data.game.level.particle.Particle; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.level.ClientboundExplodePacket; import java.util.concurrent.ThreadLocalRandom; @@ -49,53 +44,33 @@ public class JavaExplodeTranslator extends PacketTranslator<ClientboundExplodePa @Override public void translate(GeyserSession session, ClientboundExplodePacket packet) { - // todo 1.20.3 handle the 4 new fields + Vector3f vector = packet.getCenter().toFloat(); LevelEventGenericPacket levelEventPacket = new LevelEventGenericPacket(); levelEventPacket.setType(LevelEvent.PARTICLE_BLOCK_EXPLOSION); NbtMapBuilder builder = NbtMap.builder(); - builder.putFloat("originX", (float) packet.getX()); - builder.putFloat("originY", (float) packet.getY()); - builder.putFloat("originZ", (float) packet.getZ()); - builder.putFloat("radius", packet.getRadius()); - builder.putInt("size", packet.getExploded().size()); - // As of 1.21, KEEP means no block actions are run. TRIGGER_BLOCK will run some actions, like buttons can be pressed - if (packet.getBlockInteraction() != ExplosionInteraction.KEEP && packet.getBlockInteraction() != ExplosionInteraction.TRIGGER_BLOCK) { - int i = 0; - for (Vector3i position : packet.getExploded()) { - Vector3i pos = Vector3i.from(packet.getX() + position.getX(), packet.getY() + position.getY(), packet.getZ() + position.getZ()); - ChunkUtils.updateBlock(session, Block.JAVA_AIR_ID, pos); - builder.putFloat("pos" + i + "x", pos.getX()); - builder.putFloat("pos" + i + "y", pos.getY()); - builder.putFloat("pos" + i + "z", pos.getZ()); - i++; - } - } else { - // As of Bedrock 1.21 - particles will only be created by the above packet if there are blocks to blow up? - // Not sure if the packet does anything - sending it just in case, because BDS still sends it. - // TODO move out of packet translator class - Particle particle; - if (!(packet.getRadius() < 2f) && packet.getBlockInteraction() != ExplosionInteraction.KEEP) { - particle = packet.getLargeExplosionParticles(); - } else { - particle = packet.getSmallExplosionParticles(); - } - var particleCreator = JavaLevelParticlesTranslator.createParticle(session, particle); - if (particleCreator != null) { - session.sendUpstreamPacket(particleCreator.apply(Vector3f.from(packet.getX(), packet.getY(), packet.getZ()))); - } + builder.putFloat("originX", (float) packet.getCenter().getX()); + builder.putFloat("originY", (float) packet.getCenter().getY()); + builder.putFloat("originZ", (float) packet.getCenter().getZ()); + + // As of Bedrock 1.21 - particles will only be created by the above packet if there are blocks to blow up? + // Not sure if the packet does anything - sending it just in case, because BDS still sends it. + // TODO move out of packet translator class + var particleCreator = JavaLevelParticlesTranslator.createParticle(session, packet.getExplosionParticle()); + if (particleCreator != null) { + session.sendUpstreamPacket(particleCreator.apply(vector)); } + levelEventPacket.setTag(builder.build()); session.sendUpstreamPacket(levelEventPacket); - Vector3f pos = Vector3f.from(packet.getX(), packet.getY(), packet.getZ()); ThreadLocalRandom random = ThreadLocalRandom.current(); float pitch = (1.0f + (random.nextFloat() - random.nextFloat()) * 0.2f) * 0.7f; // As of 1.21, Explosion#finalizeExplosion - SoundUtils.playSound(session, packet.getExplosionSound(), pos, 4.0f, pitch); + SoundUtils.playSound(session, packet.getExplosionSound(), vector, 4.0f, pitch); - if (packet.getPushX() != 0f || packet.getPushY() != 0f || packet.getPushZ() != 0f) { + if (packet.getPlayerKnockback() != null) { SetEntityMotionPacket motionPacket = new SetEntityMotionPacket(); motionPacket.setRuntimeEntityId(session.getPlayerEntity().getGeyserId()); - motionPacket.setMotion(Vector3f.from(packet.getPushX(), packet.getPushY(), packet.getPushZ())); + motionPacket.setMotion(packet.getPlayerKnockback().toFloat()); session.sendUpstreamPacket(motionPacket); } } 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 65f84a595..3c73b1886 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 @@ -132,10 +132,11 @@ public class JavaLevelParticlesTranslator extends PacketTranslator<ClientboundLe } case DUST, DUST_COLOR_TRANSITION -> { //TODO DustParticleData data = (DustParticleData) particle.getData(); - int r = (int) (data.getRed() * 255); - int g = (int) (data.getGreen() * 255); - int b = (int) (data.getBlue() * 255); - int rgbData = ((0xff) << 24) | ((r & 0xff) << 16) | ((g & 0xff) << 8) | (b & 0xff); +// int r = (int) (data.getRed() * 255); +// int g = (int) (data.getGreen() * 255); +// int b = (int) (data.getBlue() * 255); +// int rgbData = ((0xff) << 24) | ((r & 0xff) << 16) | ((g & 0xff) << 8) | (b & 0xff); + int rgbData = data.getColor(); // TEST return (position) -> { LevelEventPacket packet = new LevelEventPacket(); packet.setType(ParticleType.FALLING_DUST); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetTimeTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetTimeTranslator.java index 43ef0870a..b7a92dbd4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetTimeTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetTimeTranslator.java @@ -36,11 +36,9 @@ public class JavaSetTimeTranslator extends PacketTranslator<ClientboundSetTimePa @Override public void translate(GeyserSession session, ClientboundSetTimePacket packet) { - session.setWorldTicks(packet.getWorldAge()); + session.setWorldTicks(packet.getGameTime()); - // Bedrock sends a GameRulesChangedPacket if there is no daylight cycle - // Java just sends a negative long if there is no daylight cycle - long time = packet.getTime(); + long time = packet.getDayTime(); // https://minecraft.wiki/w/Day-night_cycle#24-hour_Minecraft_day SetTimePacket setTimePacket = new SetTimePacket(); @@ -49,12 +47,10 @@ public class JavaSetTimeTranslator extends PacketTranslator<ClientboundSetTimePa // (Last verified behavior: Bedrock 1.18.12 / Java 1.18.2) setTimePacket.setTime((int) (Math.abs(time) % (24000 * 8))); session.sendUpstreamPacket(setTimePacket); - if (!session.isDaylightCycle() && time >= 0) { - // Client thinks there is no daylight cycle but there is - session.setDaylightCycle(true); - } else if (session.isDaylightCycle() && time < 0) { - // Client thinks there is daylight cycle but there isn't - session.setDaylightCycle(false); + + // We need to send a gamerule if this changed + if (session.isDaylightCycle() != packet.isTickDayTime()) { + session.setDaylightCycle(packet.isTickDayTime()); } } } From aaf95effc4b7c6ab3b8bdc9a29f4e4e7ae6b096e Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Mon, 21 Oct 2024 13:50:41 -0400 Subject: [PATCH 006/165] IT BOOOOOOOOOTS --- .../registry/loader/RecipeRegistryLoader.java | 8 ++- .../populator/BlockRegistryPopulator.java | 2 +- .../populator/ItemRegistryPopulator.java | 3 +- .../geyser/session/GeyserSession.java | 3 +- .../JavaEntityPositionSyncTranslator.java | 52 +++++++++++++++++++ .../entity/JavaTeleportEntityTranslator.java | 14 +---- .../player/JavaPlayerPositionTranslator.java | 22 ++++---- .../JavaContainerSetSlotTranslator.java | 5 +- 8 files changed, 80 insertions(+), 29 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityPositionSyncTranslator.java diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/RecipeRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/RecipeRegistryLoader.java index f1d0c456f..1af6a8661 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/RecipeRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/RecipeRegistryLoader.java @@ -49,6 +49,7 @@ import java.io.DataInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.Base64; +import java.util.Collections; import java.util.List; import java.util.Map; @@ -60,6 +61,9 @@ public final class RecipeRegistryLoader implements RegistryLoader<String, Map<Re @Override public Map<RecipeType, List<GeyserRecipe>> load(String input) { + if (true) { + return Collections.emptyMap(); + } Map<RecipeType, List<GeyserRecipe>> deserializedRecipes = new Object2ObjectOpenHashMap<>(); List<NbtMap> recipes; @@ -96,7 +100,7 @@ public final class RecipeRegistryLoader implements RegistryLoader<String, Map<Re List<NbtMap> rawInputs = recipe.getList("inputs", NbtType.COMPOUND); Ingredient[] javaInputs = new Ingredient[rawInputs.size()]; for (int i = 0; i < rawInputs.size(); i++) { - javaInputs[i] = new Ingredient(new ItemStack[] {toItemStack(rawInputs.get(i), helper)}); + //javaInputs[i] = new Ingredient(new ItemStack[] {toItemStack(rawInputs.get(i), helper)}); } deserializedRecipes.add(new GeyserShapelessRecipe(javaInputs, output)); } @@ -121,7 +125,7 @@ public final class RecipeRegistryLoader implements RegistryLoader<String, Map<Re for (int j = 0; i < shape.size() * shape.get(0).length; j++) { for (int index : shape.get(j)) { ItemStack stack = letterToRecipe.get(index); - inputs[i++] = new Ingredient(new ItemStack[] {stack}); + //inputs[i++] = new Ingredient(new ItemStack[] {stack}); } } deserializedRecipes.add(new GeyserShapedRecipe(shape.size(), shape.get(0).length, inputs, output)); 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 bface58da..ce67d3462 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 @@ -262,7 +262,7 @@ public final class BlockRegistryPopulator { NbtMap originalBedrockTag = buildBedrockState(blockState, entry); NbtMap bedrockTag = stateMapper.remap(originalBedrockTag); - GeyserBedrockBlock vanillaBedrockDefinition = blockStateOrderedMap.get(bedrockTag); + GeyserBedrockBlock vanillaBedrockDefinition = blockStateOrderedMap.getOrDefault(bedrockTag, airDefinition); // FIXME EEE GeyserBedrockBlock bedrockDefinition; CustomBlockState blockStateOverride = BlockRegistries.CUSTOM_BLOCK_STATE_OVERRIDES.get(javaRuntimeId); 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 bea213aa4..20997186b 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 @@ -240,7 +240,8 @@ public class ItemRegistryPopulator { String bedrockIdentifier = mappingItem.getBedrockIdentifier(); ItemDefinition definition = definitions.get(bedrockIdentifier); if (definition == null) { - throw new RuntimeException("Missing Bedrock ItemDefinition in version " + palette.version() + " for mapping: " + mappingItem); + definition = definitions.get("minecraft:air"); + //throw new RuntimeException("Missing Bedrock ItemDefinition in version " + palette.version() + " for mapping: " + mappingItem); } BlockDefinition bedrockBlock = null; 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 db802439f..bf396a3c3 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -202,6 +202,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.HandPreference; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.PlayerAction; import org.geysermc.mcprotocollib.protocol.data.game.setting.ChatVisibility; +import org.geysermc.mcprotocollib.protocol.data.game.setting.ParticleStatus; import org.geysermc.mcprotocollib.protocol.data.game.setting.SkinPart; import org.geysermc.mcprotocollib.protocol.data.game.statistic.CustomStatistic; import org.geysermc.mcprotocollib.protocol.data.game.statistic.Statistic; @@ -1966,7 +1967,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { public void sendJavaClientSettings() { ServerboundClientInformationPacket clientSettingsPacket = new ServerboundClientInformationPacket(locale(), getRenderDistance(), ChatVisibility.FULL, true, SKIN_PARTS, - HandPreference.RIGHT_HAND, false, true); + HandPreference.RIGHT_HAND, false, true, ParticleStatus.ALL); // TODO particle status sendDownstreamPacket(clientSettingsPacket); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityPositionSyncTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityPositionSyncTranslator.java new file mode 100644 index 000000000..ecc153ce0 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityPositionSyncTranslator.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 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.translator.protocol.java.entity; + +import org.cloudburstmc.math.vector.Vector3d; +import org.geysermc.geyser.entity.type.Entity; +import org.geysermc.geyser.entity.vehicle.ClientVehicle; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.protocol.PacketTranslator; +import org.geysermc.geyser.translator.protocol.Translator; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.ClientboundEntityPositionSyncPacket; + +@Translator(packet = ClientboundEntityPositionSyncPacket.class) +public class JavaEntityPositionSyncTranslator extends PacketTranslator<ClientboundEntityPositionSyncPacket> { + + @Override + public void translate(GeyserSession session, ClientboundEntityPositionSyncPacket packet) { + Entity entity = session.getEntityCache().getEntityByJavaId(packet.getId()); + if (entity == null) return; + + Vector3d pos = packet.getPosition(); + + if (entity instanceof ClientVehicle clientVehicle) { + clientVehicle.getVehicleComponent().moveAbsolute(pos.getX(), pos.getY(), pos.getZ()); + } + + entity.teleport(pos.toFloat(), packet.getXRot(), packet.getYRot(), packet.isOnGround()); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTeleportEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTeleportEntityTranslator.java index 47c61eb8e..eda195a8f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTeleportEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTeleportEntityTranslator.java @@ -25,26 +25,16 @@ package org.geysermc.geyser.translator.protocol.java.entity; -import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.ClientboundTeleportEntityPacket; -import org.cloudburstmc.math.vector.Vector3f; -import org.geysermc.geyser.entity.type.Entity; -import org.geysermc.geyser.entity.vehicle.ClientVehicle; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.ClientboundTeleportEntityPacket; @Translator(packet = ClientboundTeleportEntityPacket.class) public class JavaTeleportEntityTranslator extends PacketTranslator<ClientboundTeleportEntityPacket> { @Override public void translate(GeyserSession session, ClientboundTeleportEntityPacket packet) { - Entity entity = session.getEntityCache().getEntityByJavaId(packet.getEntityId()); - if (entity == null) return; - - if (entity instanceof ClientVehicle clientVehicle) { - clientVehicle.getVehicleComponent().moveAbsolute(packet.getX(), packet.getY(), packet.getZ()); - } - - entity.teleport(Vector3f.from(packet.getX(), packet.getY(), packet.getZ()), packet.getYaw(), packet.getPitch(), packet.isOnGround()); + session.getGeyser().getLogger().info(packet.toString()); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java index 5fc7f7200..e73e25a93 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.translator.protocol.java.entity.player; +import org.cloudburstmc.math.vector.Vector3d; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.PositionElement; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.player.ClientboundPlayerPositionPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.level.ServerboundAcceptTeleportationPacket; @@ -50,14 +51,15 @@ public class JavaPlayerPositionTranslator extends PacketTranslator<ClientboundPl return; SessionPlayerEntity entity = session.getPlayerEntity(); + Vector3d pos = packet.getPosition(); if (!session.isSpawned()) { + // TODO this behavior seems outdated (1.21.2). // The server sends an absolute teleport everytime the player is respawned - Vector3f pos = packet.getPosition().toFloat(); - entity.setPosition(pos); - entity.setYaw(packet.getYaw()); - entity.setPitch(packet.getPitch()); - entity.setHeadYaw(packet.getYaw()); + entity.setPosition(pos.toFloat()); + entity.setYaw(packet.getXRot()); + entity.setPitch(packet.getYRot()); + entity.setHeadYaw(packet.getXRot()); RespawnPacket respawnPacket = new RespawnPacket(); respawnPacket.setRuntimeEntityId(0); // Bedrock server behavior @@ -98,15 +100,15 @@ public class JavaPlayerPositionTranslator extends PacketTranslator<ClientboundPl } // If coordinates are relative, then add to the existing coordinate - double newX = packet.getX() + + double newX = pos.getX() + (packet.getRelatives().contains(PositionElement.X) ? entity.getPosition().getX() : 0); - double newY = packet.getY() + + double newY = pos.getY() + (packet.getRelatives().contains(PositionElement.Y) ? entity.getPosition().getY() - EntityDefinitions.PLAYER.offset() : 0); - double newZ = packet.getZ() + + double newZ = pos.getZ() + (packet.getRelatives().contains(PositionElement.Z) ? entity.getPosition().getZ() : 0); - float newPitch = packet.getPitch() + (packet.getRelatives().contains(PositionElement.X_ROT) ? entity.getPitch() : 0); - float newYaw = packet.getYaw() + (packet.getRelatives().contains(PositionElement.Y_ROT) ? entity.getYaw() : 0); + float newPitch = packet.getYRot() + (packet.getRelatives().contains(PositionElement.Y_ROT) ? entity.getPitch() : 0); + float newYaw = packet.getXRot() + (packet.getRelatives().contains(PositionElement.X_ROT) ? entity.getYaw() : 0); int id = packet.getId(); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java index ed3abdfe4..1d8e74dfb 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.translator.protocol.java.inventory; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; import org.geysermc.mcprotocollib.protocol.data.game.recipe.Ingredient; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.inventory.ClientboundContainerSetSlotPacket; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId; @@ -175,8 +176,8 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound for (int col = firstCol; col < width + firstCol; col++) { GeyserItemStack geyserItemStack = inventory.getItem(col + (row * gridDimensions) + 1); ingredients[index] = geyserItemStack.getItemData(session); - ItemStack[] itemStacks = new ItemStack[] {geyserItemStack.isEmpty() ? null : geyserItemStack.getItemStack(1)}; - javaIngredients[index] = new Ingredient(itemStacks); + int[] items = new int[] {geyserItemStack.isEmpty() ? 0 : geyserItemStack.getJavaId()}; + javaIngredients[index] = new Ingredient(new HolderSet(items)); InventorySlotPacket slotPacket = new InventorySlotPacket(); slotPacket.setContainerId(ContainerId.UI); From fb868e41ed35dc079a63b5b6623c220f64c6c82b Mon Sep 17 00:00:00 2001 From: Roman Alexander <romanalexander@users.noreply.github.com> Date: Tue, 22 Oct 2024 12:25:13 +0700 Subject: [PATCH 007/165] Protocol Update 1.21.40 (#5091) Co-authored-by: Camotoy <20743703+Camotoy@users.noreply.github.com> --- .../standalone/src/main/resources/log4j2.xml | 5 +- .../geyser/impl/camera/CameraDefinitions.java | 14 +- .../updater/AnvilInventoryUpdater.java | 8 +- .../updater/ChestInventoryUpdater.java | 2 + .../updater/ContainerInventoryUpdater.java | 2 + .../updater/CrafterInventoryUpdater.java | 3 + .../updater/HorseInventoryUpdater.java | 2 + .../inventory/updater/InventoryUpdater.java | 2 + .../inventory/updater/UIInventoryUpdater.java | 3 + .../geyser/level/block/type/BlockState.java | 2 +- .../geyser/network/CodecProcessor.java | 25 +- .../geysermc/geyser/network/GameProtocol.java | 14 +- .../geyser/network/UpstreamPacketHandler.java | 2 +- .../populator/BlockRegistryPopulator.java | 21 + .../populator/ItemRegistryPopulator.java | 2 + .../inventory/OldSmithingTableTranslator.java | 1 + .../inventory/PlayerInventoryTranslator.java | 6 + .../ChestedHorseInventoryTranslator.java | 2 + .../entity/SkullBlockEntityTranslator.java | 5 +- .../entity/JavaEntityEventTranslator.java | 2 + .../JavaContainerSetSlotTranslator.java | 2 + .../geysermc/geyser/util/InventoryUtils.java | 1 + .../resources/bedrock/biome_definitions.dat | Bin 41832 -> 37653 bytes .../bedrock/block_palette.1_21_40.nbt | Bin 0 -> 181156 bytes .../bedrock/creative_items.1_21_40.json | 6262 +++++++++++++++ .../bedrock/runtime_item_states.1_21_40.json | 6994 +++++++++++++++++ gradle/libs.versions.toml | 6 +- 27 files changed, 13367 insertions(+), 21 deletions(-) create mode 100644 core/src/main/resources/bedrock/block_palette.1_21_40.nbt create mode 100644 core/src/main/resources/bedrock/creative_items.1_21_40.json create mode 100644 core/src/main/resources/bedrock/runtime_item_states.1_21_40.json diff --git a/bootstrap/standalone/src/main/resources/log4j2.xml b/bootstrap/standalone/src/main/resources/log4j2.xml index 54f6f9528..bf361a851 100644 --- a/bootstrap/standalone/src/main/resources/log4j2.xml +++ b/bootstrap/standalone/src/main/resources/log4j2.xml @@ -20,6 +20,9 @@ <AppenderRef ref="TerminalConsole"/> <AppenderRef ref="Console"/> <AppenderRef ref="File"/> + <filters> + <MarkerFilter marker="packet_logging" onMatch="DENY" onMismatch="ACCEPT" /> + </filters> </Root> </Loggers> -</Configuration> \ No newline at end of file +</Configuration> 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 index 1cf6a794e..ee20c14a2 100644 --- a/core/src/main/java/org/geysermc/geyser/impl/camera/CameraDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/impl/camera/CameraDefinitions.java @@ -43,13 +43,13 @@ public class CameraDefinitions { static { CAMERA_PRESETS = List.of( - new CameraPreset(CameraPerspective.FIRST_PERSON.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null), - new CameraPreset(CameraPerspective.FREE.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null), - new CameraPreset(CameraPerspective.THIRD_PERSON.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null), - new CameraPreset(CameraPerspective.THIRD_PERSON_FRONT.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null), - new CameraPreset("geyser:free_audio", "minecraft:free", null, null, null, null, null, CameraAudioListener.PLAYER, OptionalBoolean.empty(), null, OptionalBoolean.of(false), null), - new CameraPreset("geyser:free_effects", "minecraft:free", null, null, null, null, null, CameraAudioListener.CAMERA, OptionalBoolean.empty(), null, OptionalBoolean.of(true), null), - new CameraPreset("geyser:free_audio_effects", "minecraft:free", null, null, null, null, null, CameraAudioListener.PLAYER, OptionalBoolean.empty(), null, OptionalBoolean.of(true), null)); + new CameraPreset(CameraPerspective.FIRST_PERSON.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()), + new CameraPreset(CameraPerspective.FREE.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()), + new CameraPreset(CameraPerspective.THIRD_PERSON.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()), + new CameraPreset(CameraPerspective.THIRD_PERSON_FRONT.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()), + new CameraPreset("geyser:free_audio", "minecraft:free", null, null, null, null, null, CameraAudioListener.PLAYER, OptionalBoolean.empty(), null, OptionalBoolean.of(false), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()), + new CameraPreset("geyser:free_effects", "minecraft:free", null, null, null, null, null, CameraAudioListener.CAMERA, OptionalBoolean.empty(), null, OptionalBoolean.of(true), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()), + new CameraPreset("geyser:free_audio_effects", "minecraft:free", null, null, null, null, null, CameraAudioListener.PLAYER, OptionalBoolean.empty(), null, OptionalBoolean.of(true), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty())); SimpleDefinitionRegistry.Builder<NamedDefinition> builder = SimpleDefinitionRegistry.builder(); for (int i = 0; i < CAMERA_PRESETS.size(); i++) { 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 2e0c75708..cc98d0ae5 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 @@ -27,7 +27,6 @@ package org.geysermc.geyser.inventory.updater; import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; -import java.util.stream.IntStream; import net.kyori.adventure.text.Component; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; @@ -41,8 +40,8 @@ import org.geysermc.geyser.inventory.AnvilContainer; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.item.BedrockEnchantment; -import org.geysermc.geyser.item.enchantment.Enchantment; import org.geysermc.geyser.item.Items; +import org.geysermc.geyser.item.enchantment.Enchantment; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.EnchantmentTag; import org.geysermc.geyser.session.cache.tags.ItemTag; @@ -57,6 +56,7 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.S import java.util.Map; import java.util.Objects; +import java.util.stream.IntStream; public class AnvilInventoryUpdater extends InventoryUpdater { public static final AnvilInventoryUpdater INSTANCE = new AnvilInventoryUpdater(); @@ -81,6 +81,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater { slotPacket.setSlot(bedrockSlot); slotPacket.setItem(inventory.getItem(i).getItemData(session)); slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); } } @@ -102,6 +103,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater { slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot)); slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session)); slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); } else if (lastTargetSlot != javaSlot) { // Update the previous target slot to remove repair cost changes @@ -110,6 +112,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater { slotPacket.setSlot(translator.javaSlotToBedrock(lastTargetSlot)); slotPacket.setItem(inventory.getItem(lastTargetSlot).getItemData(session)); slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); } @@ -174,6 +177,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater { slotPacket.setSlot(translator.javaSlotToBedrock(slot)); slotPacket.setItem(itemData); slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/ChestInventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/ChestInventoryUpdater.java index 9f3d00c57..b28bd23d1 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/ChestInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/ChestInventoryUpdater.java @@ -64,6 +64,7 @@ public class ChestInventoryUpdater extends InventoryUpdater { contentPacket.setContainerId(inventory.getBedrockId()); contentPacket.setContents(bedrockItems); contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + contentPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(contentPacket); } @@ -77,6 +78,7 @@ public class ChestInventoryUpdater extends InventoryUpdater { slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot)); slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session)); slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); return true; } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/ContainerInventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/ContainerInventoryUpdater.java index 3d372c083..224b7d4c9 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/ContainerInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/ContainerInventoryUpdater.java @@ -52,6 +52,7 @@ public class ContainerInventoryUpdater extends InventoryUpdater { contentPacket.setContainerId(inventory.getBedrockId()); contentPacket.setContents(Arrays.asList(bedrockItems)); contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + contentPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(contentPacket); } @@ -65,6 +66,7 @@ public class ContainerInventoryUpdater extends InventoryUpdater { slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot)); slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session)); slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); return true; } 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 index 315b84c6d..d3135c97e 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/CrafterInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/CrafterInventoryUpdater.java @@ -59,6 +59,7 @@ public class CrafterInventoryUpdater extends InventoryUpdater { contentPacket.setContainerId(inventory.getBedrockId()); contentPacket.setContents(Arrays.asList(bedrockItems)); contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + contentPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(contentPacket); // inventory and hotbar @@ -71,6 +72,7 @@ public class CrafterInventoryUpdater extends InventoryUpdater { contentPacket.setContainerId(ContainerId.INVENTORY); contentPacket.setContents(Arrays.asList(bedrockItems)); contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + contentPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(contentPacket); // Crafter result - it doesn't come after the grid, as explained elsewhere. @@ -93,6 +95,7 @@ public class CrafterInventoryUpdater extends InventoryUpdater { packet.setSlot(translator.javaSlotToBedrock(javaSlot)); packet.setItem(inventory.getItem(javaSlot).getItemData(session)); packet.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + packet.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(packet); return true; } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/HorseInventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/HorseInventoryUpdater.java index 1a46fc02a..657c91604 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/HorseInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/HorseInventoryUpdater.java @@ -52,6 +52,7 @@ public class HorseInventoryUpdater extends InventoryUpdater { contentPacket.setContainerId(inventory.getBedrockId()); contentPacket.setContents(Arrays.asList(bedrockItems)); contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + contentPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(contentPacket); } @@ -65,6 +66,7 @@ public class HorseInventoryUpdater extends InventoryUpdater { slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot)); slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session)); slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); return true; } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/InventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/InventoryUpdater.java index b7ef4720f..c57f59bfd 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/InventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/InventoryUpdater.java @@ -48,6 +48,7 @@ public class InventoryUpdater { contentPacket.setContainerId(ContainerId.INVENTORY); contentPacket.setContents(Arrays.asList(bedrockItems)); contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + contentPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(contentPacket); } @@ -58,6 +59,7 @@ public class InventoryUpdater { slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot)); slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session)); slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); return true; } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/UIInventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/UIInventoryUpdater.java index f4f40d6ce..23cfc79f5 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/UIInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/UIInventoryUpdater.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.inventory.updater; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName; +import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket; import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.session.GeyserSession; @@ -49,6 +50,7 @@ public class UIInventoryUpdater extends InventoryUpdater { slotPacket.setSlot(bedrockSlot); slotPacket.setItem(inventory.getItem(i).getItemData(session)); slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); } } @@ -63,6 +65,7 @@ public class UIInventoryUpdater extends InventoryUpdater { slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot)); slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session)); slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); return true; } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/type/BlockState.java b/core/src/main/java/org/geysermc/geyser/level/block/type/BlockState.java index 2513e3ceb..32aa2fd3f 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/type/BlockState.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/type/BlockState.java @@ -63,7 +63,7 @@ public final class BlockState { return null; } //noinspection unchecked - return (T) get(property); + return (T) value; } public <T extends Comparable<T>> T getValue(Property<T> property, T def) { diff --git a/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java b/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java index 741369c46..cdbeef143 100644 --- a/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java +++ b/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java @@ -44,6 +44,8 @@ import org.cloudburstmc.protocol.bedrock.codec.v712.serializer.InventorySlotSeri import org.cloudburstmc.protocol.bedrock.codec.v712.serializer.MobArmorEquipmentSerializer_v712; import org.cloudburstmc.protocol.bedrock.codec.v729.serializer.InventoryContentSerializer_v729; import org.cloudburstmc.protocol.bedrock.codec.v729.serializer.InventorySlotSerializer_v729; +import org.cloudburstmc.protocol.bedrock.codec.v748.serializer.InventoryContentSerializer_v748; +import org.cloudburstmc.protocol.bedrock.codec.v748.serializer.InventorySlotSerializer_v748; import org.cloudburstmc.protocol.bedrock.packet.AnvilDamagePacket; import org.cloudburstmc.protocol.bedrock.packet.BedrockPacket; import org.cloudburstmc.protocol.bedrock.packet.BossEventPacket; @@ -140,6 +142,13 @@ class CodecProcessor { } }; + private static final BedrockPacketSerializer<InventoryContentPacket> INVENTORY_CONTENT_SERIALIZER_V748 = new InventoryContentSerializer_v748() { + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, InventoryContentPacket packet) { + throw new IllegalArgumentException("Client cannot send InventoryContentPacket in server-auth inventory environment!"); + } + }; + private static final BedrockPacketSerializer<InventoryContentPacket> INVENTORY_CONTENT_SERIALIZER_V729 = new InventoryContentSerializer_v729() { @Override public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, InventoryContentPacket packet) { @@ -174,6 +183,13 @@ class CodecProcessor { } }; + private static final BedrockPacketSerializer<InventorySlotPacket> INVENTORY_SLOT_SERIALIZER_V748 = new InventorySlotSerializer_v748() { + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, InventorySlotPacket packet) { + throw new IllegalArgumentException("Client cannot send InventorySlotPacket in server-auth inventory environment!"); + } + }; + /** * Serializer that does nothing when trying to deserialize BossEventPacket since it is not used from the client. */ @@ -262,11 +278,14 @@ class CodecProcessor { @SuppressWarnings("unchecked") static BedrockCodec processCodec(BedrockCodec codec) { + boolean is748OrAbove = codec.getProtocolVersion() >= 748; boolean is729OrAbove = codec.getProtocolVersion() >= 729; boolean is712OrAbove = codec.getProtocolVersion() >= 712; BedrockPacketSerializer<InventoryContentPacket> inventoryContentSerializer; - if (is729OrAbove) { + if (is748OrAbove) { + inventoryContentSerializer = INVENTORY_CONTENT_SERIALIZER_V748; + } else if (is729OrAbove) { inventoryContentSerializer = INVENTORY_CONTENT_SERIALIZER_V729; } else if (is712OrAbove) { inventoryContentSerializer = INVENTORY_CONTENT_SERIALIZER_V712; @@ -275,7 +294,9 @@ class CodecProcessor { } BedrockPacketSerializer<InventorySlotPacket> inventorySlotSerializer; - if (is729OrAbove) { + if (is748OrAbove) { + inventorySlotSerializer = INVENTORY_SLOT_SERIALIZER_V748; + } else if (is729OrAbove) { inventorySlotSerializer = INVENTORY_SLOT_SERIALIZER_V729; } else if (is712OrAbove) { inventorySlotSerializer = INVENTORY_SLOT_SERIALIZER_V712; 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 c188e92bb..c76958777 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.v685.Bedrock_v685; import org.cloudburstmc.protocol.bedrock.codec.v686.Bedrock_v686; import org.cloudburstmc.protocol.bedrock.codec.v712.Bedrock_v712; import org.cloudburstmc.protocol.bedrock.codec.v729.Bedrock_v729; +import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748; import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodec; @@ -50,8 +51,8 @@ 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 = CodecProcessor.processCodec(Bedrock_v729.CODEC.toBuilder() - .minecraftVersion("1.21.31") + public static final BedrockCodec DEFAULT_BEDROCK_CODEC = CodecProcessor.processCodec(Bedrock_v748.CODEC.toBuilder() + .minecraftVersion("1.21.40") .build()); /** @@ -78,8 +79,11 @@ public final class GameProtocol { SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v712.CODEC.toBuilder() .minecraftVersion("1.21.20 - 1.21.23") .build())); + SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v729.CODEC.toBuilder() + .minecraftVersion("1.21.30/1.21.31") + .build())); SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC.toBuilder() - .minecraftVersion("1.21.30/1.21.31") + .minecraftVersion("1.21.40") .build()); } @@ -107,6 +111,10 @@ public final class GameProtocol { return session.getUpstream().getProtocolVersion() < Bedrock_v686.CODEC.getProtocolVersion(); } + public static boolean isPre1_21_40(GeyserSession session) { + return session.getUpstream().getProtocolVersion() < Bedrock_v748.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 5c48df1f9..48f1dee5f 100644 --- a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java @@ -209,7 +209,7 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { ResourcePackManifest.Header header = pack.manifest().header(); resourcePacksInfo.getResourcePackInfos().add(new ResourcePacksInfoPacket.Entry( header.uuid().toString(), header.version().toString(), codec.size(), pack.contentKey(), - "", header.uuid().toString(), false, false, false)); + "", header.uuid().toString(), false, false, false, "")); } resourcePacksInfo.setForcedToAccept(GeyserImpl.getInstance().getConfig().isForceResourcePacks()); session.sendUpstreamPacket(resourcePacksInfo); 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 bface58da..b95da4f8f 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 @@ -48,6 +48,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v671.Bedrock_v671; import org.cloudburstmc.protocol.bedrock.codec.v685.Bedrock_v685; import org.cloudburstmc.protocol.bedrock.codec.v712.Bedrock_v712; import org.cloudburstmc.protocol.bedrock.codec.v729.Bedrock_v729; +import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748; import org.cloudburstmc.protocol.bedrock.data.BlockPropertyData; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.geysermc.geyser.GeyserImpl; @@ -60,6 +61,7 @@ import org.geysermc.geyser.level.block.property.Properties; import org.geysermc.geyser.level.block.type.Block; import org.geysermc.geyser.level.block.type.BlockState; import org.geysermc.geyser.level.block.type.FlowerPotBlock; +import org.geysermc.geyser.level.block.type.SkullBlock; import org.geysermc.geyser.level.physics.PistonBehavior; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.Registries; @@ -129,6 +131,16 @@ public final class BlockRegistryPopulator { .put(ObjectIntPair.of("1_21_0", Bedrock_v685.CODEC.getProtocolVersion()), Conversion712_685::remapBlock) .put(ObjectIntPair.of("1_21_20", Bedrock_v712.CODEC.getProtocolVersion()), Conversion729_712::remapBlock) .put(ObjectIntPair.of("1_21_30", Bedrock_v729.CODEC.getProtocolVersion()), tag -> tag) + .put(ObjectIntPair.of("1_21_40", Bedrock_v748.CODEC.getProtocolVersion()), tag -> { + final String name = tag.getString("name"); + if (name.endsWith("_wood") && tag.getCompound("states").containsKey("stripped_bit")) { + NbtMapBuilder builder = tag.getCompound("states").toBuilder(); + builder.remove("stripped_bit"); + NbtMap states = builder.build(); + return tag.toBuilder().putCompound("states", states).build(); + } + return tag; + }) .build(); // We can keep this strong as nothing should be garbage collected @@ -262,6 +274,15 @@ public final class BlockRegistryPopulator { NbtMap originalBedrockTag = buildBedrockState(blockState, entry); NbtMap bedrockTag = stateMapper.remap(originalBedrockTag); + // FIXME TEMPORARY + if (blockState.block() instanceof SkullBlock && palette.valueInt() >= Bedrock_v748.CODEC.getProtocolVersion()) { + // The flattening must be a very interesting process. + String skullName = blockState.block().javaIdentifier().asString().replace("_wall", ""); + bedrockTag = bedrockTag.toBuilder() + .putString("name", skullName) + .build(); + } + GeyserBedrockBlock vanillaBedrockDefinition = blockStateOrderedMap.get(bedrockTag); GeyserBedrockBlock bedrockDefinition; 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 bea213aa4..12b5ebb0e 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 @@ -43,6 +43,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v671.Bedrock_v671; import org.cloudburstmc.protocol.bedrock.codec.v685.Bedrock_v685; import org.cloudburstmc.protocol.bedrock.codec.v712.Bedrock_v712; import org.cloudburstmc.protocol.bedrock.codec.v729.Bedrock_v729; +import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.SimpleItemDefinition; @@ -95,6 +96,7 @@ public class ItemRegistryPopulator { paletteVersions.add(new PaletteVersion("1_21_0", Bedrock_v685.CODEC.getProtocolVersion(), Collections.emptyMap(), Conversion712_685::remapItem)); paletteVersions.add(new PaletteVersion("1_21_20", Bedrock_v712.CODEC.getProtocolVersion(), Collections.emptyMap(), Conversion729_712::remapItem)); paletteVersions.add(new PaletteVersion("1_21_30", Bedrock_v729.CODEC.getProtocolVersion())); + paletteVersions.add(new PaletteVersion("1_21_40", Bedrock_v748.CODEC.getProtocolVersion())); GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/OldSmithingTableTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/OldSmithingTableTranslator.java index 685d51fc0..125614e77 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/OldSmithingTableTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/OldSmithingTableTranslator.java @@ -141,6 +141,7 @@ public class OldSmithingTableTranslator extends AbstractBlockInventoryTranslator slotPacket.setSlot(53); slotPacket.setItem(UPGRADE_TEMPLATE.apply(session.getUpstream().getProtocolVersion())); slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java index a276e4750..65fd87c83 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java @@ -85,6 +85,7 @@ public class PlayerInventoryTranslator extends InventoryTranslator { } inventoryContentPacket.setContents(Arrays.asList(contents)); inventoryContentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + inventoryContentPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(inventoryContentPacket); // Armor @@ -102,6 +103,7 @@ public class PlayerInventoryTranslator extends InventoryTranslator { } armorContentPacket.setContents(Arrays.asList(contents)); armorContentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + armorContentPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(armorContentPacket); // Offhand @@ -109,6 +111,7 @@ public class PlayerInventoryTranslator extends InventoryTranslator { offhandPacket.setContainerId(ContainerId.OFFHAND); offhandPacket.setContents(Collections.singletonList(inventory.getItem(45).getItemData(session))); offhandPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + offhandPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(offhandPacket); } @@ -131,6 +134,7 @@ public class PlayerInventoryTranslator extends InventoryTranslator { } slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); } } @@ -168,12 +172,14 @@ public class PlayerInventoryTranslator extends InventoryTranslator { } slotPacket.setItem(bedrockItem); slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); } else if (slot == 45) { InventoryContentPacket offhandPacket = new InventoryContentPacket(); offhandPacket.setContainerId(ContainerId.OFFHAND); offhandPacket.setContents(Collections.singletonList(bedrockItem)); offhandPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + offhandPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(offhandPacket); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/ChestedHorseInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/ChestedHorseInventoryTranslator.java index ba3b7285e..363761e47 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/ChestedHorseInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/ChestedHorseInventoryTranslator.java @@ -96,6 +96,7 @@ public abstract class ChestedHorseInventoryTranslator extends AbstractHorseInven contentPacket.setContainerId(ContainerId.INVENTORY); contentPacket.setContents(Arrays.asList(bedrockItems)); contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + contentPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(contentPacket); ItemData[] horseItems = new ItemData[chestSize + 1]; @@ -110,6 +111,7 @@ public abstract class ChestedHorseInventoryTranslator extends AbstractHorseInven horseContentsPacket.setContainerId(inventory.getBedrockId()); horseContentsPacket.setContents(Arrays.asList(horseItems)); horseContentsPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + horseContentsPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(horseContentsPacket); } } 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 c2d457202..77f58f5d6 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 @@ -36,6 +36,7 @@ import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.level.block.property.Properties; import org.geysermc.geyser.level.block.type.BlockState; import org.geysermc.geyser.level.block.type.SkullBlock; +import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.SkullCache; import org.geysermc.geyser.skin.SkinProvider; @@ -57,7 +58,9 @@ public class SkullBlockEntityTranslator extends BlockEntityTranslator implements // Could be a wall skull block otherwise, which has rotation in its Bedrock state bedrockNbt.putFloat("Rotation", rotation * 22.5f); } - bedrockNbt.putByte("SkullType", (byte) (blockState.block() instanceof SkullBlock skull ? skull.skullType().bedrockId() : 0)); + if (GameProtocol.isPre1_21_40(session)) { + bedrockNbt.putByte("SkullType", (byte) (blockState.block() instanceof SkullBlock skull ? skull.skullType().bedrockId() : 0)); + } if (blockState.getValue(Properties.POWERED)) { bedrockNbt.putBoolean("MouthMoving", true); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java index 3195a6536..a37ba88b3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java @@ -32,6 +32,7 @@ import org.cloudburstmc.protocol.bedrock.data.entity.EntityEventType; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName; +import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.packet.EntityEventPacket; import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket; import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket; @@ -170,6 +171,7 @@ public class JavaEntityEventTranslator extends PacketTranslator<ClientboundEntit offhandPacket.setContainerId(ContainerId.OFFHAND); offhandPacket.setContents(Collections.singletonList(InventoryUtils.getTotemOfUndying().apply(session.getUpstream().getProtocolVersion()))); offhandPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + offhandPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(offhandPacket); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java index 9b5d95afe..732eb6be5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java @@ -183,6 +183,7 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound slotPacket.setSlot(col + (row * gridDimensions) + offset); slotPacket.setItem(ItemData.AIR); slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); index++; } @@ -216,6 +217,7 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound slotPacket.setSlot(col + (row * gridDimensions) + offset); slotPacket.setItem(ingredients[index]); slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); index++; } 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 a0bd5a4c7..4011cc1bd 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java @@ -183,6 +183,7 @@ public class InventoryUtils { cursorPacket.setSlot(0); cursorPacket.setItem(session.getPlayerInventory().getCursor().getItemData(session)); cursorPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); + cursorPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(cursorPacket); } diff --git a/core/src/main/resources/bedrock/biome_definitions.dat b/core/src/main/resources/bedrock/biome_definitions.dat index 3ae94a5c85c6f13d4de2feb8a5d24d2ab2f11efe..2bd58d0a33a9ea50e55361a77e3832a66cdc771a 100644 GIT binary patch delta 1462 zcmY*Ze@s(X6rRAw1G~~%E0&Iyb+kx_5ymP~9S+>UX6guI5KC#H(D7rSWviu#&Q`35 z1*&{uNfm~e#VtBE^|H9=9C1HPmf#Y%WZC|i%ZAC8DT~>b?2j4u-o5X=vHo?>cfWJK z^PPKMf4QDCekSRBT{4>c3}eL{#*>4@lu|%rgoimGbssETBO-nSE^~1-rM)b0v5*!Z zyVKV#qrn}e7S$>a*_r8huT+6lg&(7euf)42aKkR(I{fgc17*ri5q}ejjMgRjgIH9# zXdG78CcksWf@y;de(frhu9%{@LK6^TGNVah!naojh+o?%b-`g#x03H7jM>a9Vr2nS z;OgoCw(7h~un~-9xp`Y!81)yRGOr@{^%_>lk==*yvv=a&J|kW+Y>-+ZcMYQ7`ka39 zYmSYv8%+Dj?<Ow`qPYRS*56d8+|oyGT1u1X?Ckk|T+4US^GntsezXeW1_YlRfU3Yl z6W%STlC{d#ewai-YvCK1EBu6>g$KD-bO^4ed_p`{e3(oYXE0^qjw@Co#TEi=ewi;| zE$e%6Z+#=hq9rksx8Z4;B)m9E`(d_=bLVT!*(0QWV-71ivndGsGnZ&$wZn{UWmc&} zd{K6ZPKa#oM#;11nV@<(9xvZ0bIz65QkQEhKE)$jKBAnNO&soT=_Zlq;*to5ZI!$6 zb>+vD@MYBta)FkulK6`fMiw1&|Ly1P?W5%A4zIkx`85GDTeD<=&2@w1vpTa(usHXS zi_Sbb*0~Roi*A0OgxCJlW0Pe<O%~SQx6L8=yiVHNAKnUyfI}^A9y3DUS|Vf9t#y=F z?J(eZU!jDP&wanKV)K#5@SrV<lkGPs@s5(i*^V$N@4U5)j%r8OE_~DF<j+PJovG;P z-b4QC4hUP6Kv7RCCA9^WxYDb~KRpd(*K1dkMKFQ~!A|~Mz+d`FMTmYS$MADh4c*?$ z)S;%omrVC>7VM6Y@%?SID`5{Du@$I1(1Gg*UZsuAM=}r%4`WS)?i%JJZ)5P_Ini-C zx&~b2)_|G05|%H1I0H4&y}TMrVAv2@H)vwcauZpYIO2wSh_1UJdSqCS`6073CjLr? zoku_5Eim(rSP0+6+Gs=J;cA&@9ARq_RvTa)Et2uGqaHeniue$IiZ{@_g)|*v$6S1@ zh30rAokIM$UCvoO)+E+9@dJ=+ky=bXOfPa1L0m{Q3uo4|3ceFP<nD>A|C`@F5yrv< z6BW$Q*^M|k>4Net_T{mGWa3nK4c?zLVfj=Z98>kQ;hR$)Qguo!I6fUf&T00aJ9~OW SmDbzd5%77MUvGbi{{98b;aB?r delta 5474 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 diff --git a/core/src/main/resources/bedrock/block_palette.1_21_40.nbt b/core/src/main/resources/bedrock/block_palette.1_21_40.nbt new file mode 100644 index 0000000000000000000000000000000000000000..f7d3ace9aca01fe633ec7c90f358245bfde4af75 GIT binary patch literal 181156 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%0DkWAHZt1YNzSM($+M93nyVnUHCn# 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�F%BP4tuMZB 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 Ik{MwB5BVQ@8UO$Q literal 0 HcmV?d00001 diff --git a/core/src/main/resources/bedrock/creative_items.1_21_40.json b/core/src/main/resources/bedrock/creative_items.1_21_40.json new file mode 100644 index 000000000..e4a15d9c6 --- /dev/null +++ b/core/src/main/resources/bedrock/creative_items.1_21_40.json @@ -0,0 +1,6262 @@ +{ + "items": [ + { + "id": "minecraft:oak_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19wbGFua3MECQBuYW1lX2hhc2ilMDLR92rQ4wMKAG5ldHdvcmtfaWS2GotyCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:spruce_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAwAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9wbGFua3MECQBuYW1lX2hhc2iumBkmFGFE8gMKAG5ldHdvcmtfaWSo8TFgCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:birch_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX3BsYW5rcwQJAG5hbWVfaGFzaLrrAKJqV2WFAwoAbmV0d29ya19pZL+e3ZAKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:jungle_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAwAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9wbGFua3MECQBuYW1lX2hhc2iBM3k4T3FAugMKAG5ldHdvcmtfaWSXUmBCCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:acacia_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAwAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9wbGFua3MECQBuYW1lX2hhc2g60edJxO5/aAMKAG5ldHdvcmtfaWTUXozECgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:dark_oak_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX3BsYW5rcwQJAG5hbWVfaGFzaAr64wkQ9cA7AwoAbmV0d29ya19pZFbMeR0KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:mangrove_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX3BsYW5rcwQJAG5hbWVfaGFzaPvLtcEA0F8xAwoAbmV0d29ya19pZEvnlCYKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cherry_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9wbGFua3MECQBuYW1lX2hhc2hNIvVh/lVW7gMKAG5ldHdvcmtfaWQTXpRoCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:bamboo_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT9AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19wbGFua3MECQBuYW1lX2hhc2gYnjNz7SCCjgMKAG5ldHdvcmtfaWTi8ySSCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:bamboo_mosaic", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT8AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19tb3NhaWMECQBuYW1lX2hhc2izSEgiMKOp/AMKAG5ldHdvcmtfaWQZ/p8xCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:crimson_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fcGxhbmtzBAkAbmFtZV9oYXNoJc5IKqNXJnwDCgBuZXR3b3JrX2lkwtJDdQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:warped_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTyAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9wbGFua3MECQBuYW1lX2hhc2g3yGXEWhe6LgMKAG5ldHdvcmtfaWStTABvCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWSLY2XwCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:mossy_cobblestone_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTKBAAACAQAbmFtZSAAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2gHUQMwwFQeNQMKAG5ldHdvcmtfaWRzPhG8CgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:granite_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTLBAAACAQAbmFtZRYAbWluZWNyYWZ0OmdyYW5pdGVfd2FsbAQJAG5hbWVfaGFzaE1GmM5AU0qUAwoAbmV0d29ya19pZE/UoPUKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:diorite_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTMBAAACAQAbmFtZRYAbWluZWNyYWZ0OmRpb3JpdGVfd2FsbAQJAG5hbWVfaGFzaF27l0QvdM8xAwoAbmV0d29ya19pZJe7jOwKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:andesite_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTNBAAACAQAbmFtZRcAbWluZWNyYWZ0OmFuZGVzaXRlX3dhbGwECQBuYW1lX2hhc2gAL1Vay0kZjQMKAG5ldHdvcmtfaWRJGxdvCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:sandstone_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTOBAAACAQAbmFtZRgAbWluZWNyYWZ0OnNhbmRzdG9uZV93YWxsBAkAbmFtZV9oYXNoYL2gu8a6HfgDCgBuZXR3b3JrX2lkHrhRjgoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:red_sandstone_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTVBAAACAQAbmFtZRwAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmVfd2FsbAQJAG5hbWVfaGFzaLAUUdOlo24MAwoAbmV0d29ya19pZI66BqAKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:stone_brick_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTQBAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2JyaWNrX3dhbGwECQBuYW1lX2hhc2hQegufuP6vjAMKAG5ldHdvcmtfaWS4AsOKCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:mossy_stone_brick_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTRBAAACAQAbmFtZSAAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrX3dhbGwECQBuYW1lX2hhc2i680zzUekp+wMKAG5ldHdvcmtfaWTQTaHPCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:brick_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTPBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJyaWNrX3dhbGwECQBuYW1lX2hhc2gGJFLNjfgSCAMKAG5ldHdvcmtfaWSc5iUZCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:nether_brick_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTSBAAACAQAbmFtZRsAbWluZWNyYWZ0Om5ldGhlcl9icmlja193YWxsBAkAbmFtZV9oYXNoAxb5f2yQ5MYDCgBuZXR3b3JrX2lkAECPDAoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:red_nether_brick_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTWBAAACAQAbmFtZR8AbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2tfd2FsbAQJAG5hbWVfaGFzaBOtwkokUt3cAwoAbmV0d29ya19pZJykmZUKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:end_stone_brick_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTBAAACAQAbmFtZR4AbWluZWNyYWZ0OmVuZF9zdG9uZV9icmlja193YWxsBAkAbmFtZV9oYXNoOsr1L9kJIAMDCgBuZXR3b3JrX2lkjuYlYgoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:prismarine_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTUBAAACAQAbmFtZRkAbWluZWNyYWZ0OnByaXNtYXJpbmVfd2FsbAQJAG5hbWVfaGFzaDO5IGrYZu1/AwoAbmV0d29ya19pZB4nLYYKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:blackstone_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsYWNrc3RvbmVfd2FsbAQJAG5hbWVfaGFzaMP8XppUSU1RAwoAbmV0d29ya19pZMbeBBsKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:polished_blackstone_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfd2FsbAQJAG5hbWVfaGFzaP6SwV08YwzAAwoAbmV0d29ya19pZAJLsz8KBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:polished_blackstone_brick_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQVAgAACAQAbmFtZSgAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfd2FsbAQJAG5hbWVfaGFzaBBIDZbHxiEzAwoAbmV0d29ya19pZEbLV8cKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:cobbled_deepslate_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AgAACAQAbmFtZSAAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3dhbGwECQBuYW1lX2hhc2iECY5oKxeT+gMKAG5ldHdvcmtfaWRCnPrFCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:deepslate_tile_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3dhbGwECQBuYW1lX2hhc2jz7N+PeuEXgQMKAG5ldHdvcmtfaWTqw4s4CgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:polished_deepslate_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV93YWxsBAkAbmFtZV9oYXNoHxjTdj9pevMDCgBuZXR3b3JrX2lkIvBYYwoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:deepslate_brick_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSJAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja193YWxsBAkAbmFtZV9oYXNoEs3EQrjroyEDCgBuZXR3b3JrX2lkwlrCGwoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:tuff_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAwAACAQAbmFtZRMAbWluZWNyYWZ0OnR1ZmZfd2FsbAQJAG5hbWVfaGFzaMyeeu1IRf03AwoAbmV0d29ya19pZDkIrosKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:tuff_brick_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT1AwAACAQAbmFtZRkAbWluZWNyYWZ0OnR1ZmZfYnJpY2tfd2FsbAQJAG5hbWVfaGFzaIL0IyNCOsonAwoAbmV0d29ya19pZJW4T5UKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:polished_tuff_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTvAwAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmZfd2FsbAQJAG5hbWVfaGFzaJVZj6QYWXUrAwoAbmV0d29ya19pZLU7dooKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:mud_brick_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAgAACAQAbmFtZRgAbWluZWNyYWZ0Om11ZF9icmlja193YWxsBAkAbmFtZV9oYXNov9b98ATpUSwDCgBuZXR3b3JrX2lkH/1WZQoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:oak_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAAAACAQAbmFtZRMAbWluZWNyYWZ0Om9ha19mZW5jZQQJAG5hbWVfaGFzaGEmid7AaCWRAwoAbmV0d29ya19pZDvPEXcKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:spruce_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRCAwAACAQAbmFtZRYAbWluZWNyYWZ0OnNwcnVjZV9mZW5jZQQJAG5hbWVfaGFzaPQCm+aX1ZQeAwoAbmV0d29ya19pZD1QUEoKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:birch_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ/AwAACAQAbmFtZRUAbWluZWNyYWZ0OmJpcmNoX2ZlbmNlBAkAbmFtZV9oYXNo6CJ2ATpANfgDCgBuZXR3b3JrX2lkmCUV2QoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:jungle_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRBAwAACAQAbmFtZRYAbWluZWNyYWZ0Omp1bmdsZV9mZW5jZQQJAG5hbWVfaGFzaOX4cD9uAmsdAwoAbmV0d29ya19pZHz1VxkKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:acacia_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ+AwAACAQAbmFtZRYAbWluZWNyYWZ0OmFjYWNpYV9mZW5jZQQJAG5hbWVfaGFzaGjn+RlKVDH6AwoAbmV0d29ya19pZNVGubwKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:dark_oak_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRAAwAACAQAbmFtZRgAbWluZWNyYWZ0OmRhcmtfb2FrX2ZlbmNlBAkAbmFtZV9oYXNoGPj0gCgM0c0DCgBuZXR3b3JrX2lk2w+gEwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:mangrove_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hbmdyb3ZlX2ZlbmNlBAkAbmFtZV9oYXNowwAd7tPu9bsDCgBuZXR3b3JrX2lkKEcd0goGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:cherry_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAwAACAQAbmFtZRYAbWluZWNyYWZ0OmNoZXJyeV9mZW5jZQQJAG5hbWVfaGFzaFmtUfHfTxcxAwoAbmV0d29ya19pZPCBxAIKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:bamboo_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJhbWJvb19mZW5jZQQJAG5hbWVfaGFzaCKRbxfXsfkiAwoAbmV0d29ya19pZJNXKFcKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:nether_brick_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRxAAAACAQAbmFtZRwAbWluZWNyYWZ0Om5ldGhlcl9icmlja19mZW5jZQQJAG5hbWVfaGFzaA6030ngawxcAwoAbmV0d29ya19pZLnjLF4KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:crimson_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT/AQAACAQAbmFtZRcAbWluZWNyYWZ0OmNyaW1zb25fZmVuY2UECQBuYW1lX2hhc2jhUhKv1HGj9AMKAG5ldHdvcmtfaWR3OH3OCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:warped_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQAAgAACAQAbmFtZRYAbWluZWNyYWZ0OndhcnBlZF9mZW5jZQQJAG5hbWVfaGFzaJfb3/YuKmOWAwoAbmV0d29ya19pZCpaGC8KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAAAACAQAbmFtZRQAbWluZWNyYWZ0OmZlbmNlX2dhdGUECQBuYW1lX2hhc2hTxpjEDmRzAwMKAG5ldHdvcmtfaWR+T9kTCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:spruce_fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS3AAAACAQAbmFtZRsAbWluZWNyYWZ0OnNwcnVjZV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoanTVB84HRbkDCgBuZXR3b3JrX2lkEnw5egoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:birch_fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS4AAAACAQAbmFtZRoAbWluZWNyYWZ0OmJpcmNoX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2jmfPklI8azSwMKAG5ldHdvcmtfaWQL77/BCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:jungle_fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS5AAAACAQAbmFtZRsAbWluZWNyYWZ0Omp1bmdsZV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNobYVQkfBomIcDCgBuZXR3b3JrX2lkA1zgtgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:acacia_fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS7AAAACAQAbmFtZRsAbWluZWNyYWZ0OmFjYWNpYV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoZnrLUx/XSekDCgBuZXR3b3JrX2lkHg/kTgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:dark_oak_fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS6AAAACAQAbmFtZR0AbWluZWNyYWZ0OmRhcmtfb2FrX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2j2PTvdJJHcVQMKAG5ldHdvcmtfaWTwjOCeCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:mangrove_fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAgAACAQAbmFtZR0AbWluZWNyYWZ0Om1hbmdyb3ZlX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2i/kOhBKiI/dAMKAG5ldHdvcmtfaWSfweCSCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:cherry_fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAwAACAQAbmFtZRsAbWluZWNyYWZ0OmNoZXJyeV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoKWLgCk0z+PsDCgBuZXR3b3JrX2lk/9bTZQoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:bamboo_fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJhbWJvb19mZW5jZV9nYXRlBAkAbmFtZV9oYXNopH1JrUgwdIADCgBuZXR3b3JrX2lkzIpPywoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:crimson_fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAgAACAQAbmFtZRwAbWluZWNyYWZ0OmNyaW1zb25fZmVuY2VfZ2F0ZQQJAG5hbWVfaGFzaHE3Gfd0Z2d2AwoAbmV0d29ya19pZDQzVbEKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQsAaW5fd2FsbF9iaXQAAQgAb3Blbl9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:warped_fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAgAACAQAbmFtZRsAbWluZWNyYWZ0OndhcnBlZF9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoy0oIBjDIG4kDCgBuZXR3b3JrX2lkkf+/3QoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:normal_stone_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAQAACAQAbmFtZR0AbWluZWNyYWZ0Om5vcm1hbF9zdG9uZV9zdGFpcnMECQBuYW1lX2hhc2hAEktZZOkGIwMKAG5ldHdvcmtfaWQeH1ALCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:stone_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAAAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX3N0YWlycwQJAG5hbWVfaGFzaNRjqVC5GRVDAwoAbmV0d29ya19pZDcCv+MKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:mossy_cobblestone_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSyAQAACAQAbmFtZSIAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lX3N0YWlycwQJAG5hbWVfaGFzaMVSTq5z9n1RAwoAbmV0d29ya19pZFIfrhkKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:oak_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ1AAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19zdGFpcnMECQBuYW1lX2hhc2jk/HFzdXy0FQMKAG5ldHdvcmtfaWQJjyzBCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:spruce_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAAAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9zdGFpcnMECQBuYW1lX2hhc2iznygw7uBPBQMKAG5ldHdvcmtfaWTv+is3CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:birch_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAAAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX3N0YWlycwQJAG5hbWVfaGFzaPfhbL619a3GAwoAbmV0d29ya19pZFyPlHAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:jungle_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAAAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9zdGFpcnMECQBuYW1lX2hhc2jodJsHUbOVxQMKAG5ldHdvcmtfaWR0z5d4CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:acacia_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAAAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9zdGFpcnMECQBuYW1lX2hhc2h3x1NmD43IqQMKAG5ldHdvcmtfaWS7Jwz6CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:dark_oak_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAAAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX3N0YWlycwQJAG5hbWVfaGFzaMfwkbYPbNmAAwoAbmV0d29ya19pZCmBYKAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:mangrove_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX3N0YWlycwQJAG5hbWVfaGFzaNpUDY+uGMpyAwoAbmV0d29ya19pZChzUAsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cherry_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQcAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9zdGFpcnMECQBuYW1lX2hhc2jMtr0v9JY4zwMKAG5ldHdvcmtfaWRQwq31CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:bamboo_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT/AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19zdGFpcnMECQBuYW1lX2hhc2jFOzWL8PalKwMKAG5ldHdvcmtfaWTVPh42CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:bamboo_mosaic_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQKAwAACAQAbmFtZR4AbWluZWNyYWZ0OmJhbWJvb19tb3NhaWNfc3RhaXJzBAkAbmFtZV9oYXNoNLPiveSHPaoDCgBuZXR3b3JrX2lk44PHjgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:stone_brick_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAAAACAQAbmFtZRwAbWluZWNyYWZ0OnN0b25lX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaN6tQViRo5cwAwoAbmV0d29ya19pZDMyMgIKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:mossy_stone_brick_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAQAACAQAbmFtZSIAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaIB/Zv5YBPuYAwoAbmV0d29ya19pZANTOsMKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:sandstone_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAAAACAQAbmFtZRoAbWluZWNyYWZ0OnNhbmRzdG9uZV9zdGFpcnMECQBuYW1lX2hhc2hOyA0BoYUOPQMKAG5ldHdvcmtfaWSV/834CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:smooth_sandstone_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSwAQAACAQAbmFtZSEAbWluZWNyYWZ0OnNtb290aF9zYW5kc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNoB+CuCd8Ruz8DCgBuZXR3b3JrX2lksR+m8QoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:red_sandstone_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS0AAAACAQAbmFtZR4AbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNoPs0LpHPL24YDCgBuZXR3b3JrX2lkLYVt3woGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:smooth_red_sandstone_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAQAACAQAbmFtZSUAbWluZWNyYWZ0OnNtb290aF9yZWRfc2FuZHN0b25lX3N0YWlycwQJAG5hbWVfaGFzaBvjtQv5pf+MAwoAbmV0d29ya19pZMHNND8KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:granite_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAQAACAQAbmFtZRgAbWluZWNyYWZ0OmdyYW5pdGVfc3RhaXJzBAkAbmFtZV9oYXNoGzpvtoqKQjgDCgBuZXR3b3JrX2lkPkcB1goGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:polished_granite_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAQAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGVfc3RhaXJzBAkAbmFtZV9oYXNo3PvbSfEQklIDCgBuZXR3b3JrX2lkMmEm3AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:diorite_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAQAACAQAbmFtZRgAbWluZWNyYWZ0OmRpb3JpdGVfc3RhaXJzBAkAbmFtZV9oYXNoi73T8VQuZmcDCgBuZXR3b3JrX2lk6i6nBQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:polished_diorite_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAQAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGVfc3RhaXJzBAkAbmFtZV9oYXNoFKRJd5Wk5L0DCgBuZXR3b3JrX2lkbt2ioAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:andesite_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAQAACAQAbmFtZRkAbWluZWNyYWZ0OmFuZGVzaXRlX3N0YWlycwQJAG5hbWVfaGFzaO5w2FKBw76EAwoAbmV0d29ya19pZKhXEgUKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:polished_andesite_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWStAQAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlX3N0YWlycwQJAG5hbWVfaGFzaNcZZ/zmLInIAwoAbmV0d29ya19pZJTHrlEKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:brick_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAAAACAQAbmFtZRYAbWluZWNyYWZ0OmJyaWNrX3N0YWlycwQJAG5hbWVfaGFzaMyt+cRDk5O2AwoAbmV0d29ya19pZNeMh58KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:nether_brick_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRyAAAACAQAbmFtZR0AbWluZWNyYWZ0Om5ldGhlcl9icmlja19zdGFpcnMECQBuYW1lX2hhc2jRqIoOXgifBAMKAG5ldHdvcmtfaWQDiw5yCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:red_nether_brick_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS3AQAACAQAbmFtZSEAbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNogQvosSbcj7kDCgBuZXR3b3JrX2lkx2IMtAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:end_brick_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSxAQAACAQAbmFtZRoAbWluZWNyYWZ0OmVuZF9icmlja19zdGFpcnMECQBuYW1lX2hhc2hmlAk+QhsUsQMKAG5ldHdvcmtfaWTN7KFaCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:quartz_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWScAAAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9zdGFpcnMECQBuYW1lX2hhc2hmvpvOqGi6egMKAG5ldHdvcmtfaWRmUTh7CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:smooth_quartz_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS4AQAACAQAbmFtZR4AbWluZWNyYWZ0OnNtb290aF9xdWFydHpfc3RhaXJzBAkAbmFtZV9oYXNoNZZ9rX0qZOsDCgBuZXR3b3JrX2lkzsgQyQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:purpur_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAAAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnB1cl9zdGFpcnMECQBuYW1lX2hhc2ifwDxeezXD7gMKAG5ldHdvcmtfaWTT+rxiCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:prismarine_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAQAACAQAbmFtZRsAbWluZWNyYWZ0OnByaXNtYXJpbmVfc3RhaXJzBAkAbmFtZV9oYXNooTHSZ+IrYtcDCgBuZXR3b3JrX2lkxTJfeAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:dark_prismarine_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAQAACAQAbmFtZSAAbWluZWNyYWZ0OmRhcmtfcHJpc21hcmluZV9zdGFpcnMECQBuYW1lX2hhc2hIciLmam4o4AMKAG5ldHdvcmtfaWTVu7TCCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:prismarine_bricks_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAQAACAQAbmFtZSIAbWluZWNyYWZ0OnByaXNtYXJpbmVfYnJpY2tzX3N0YWlycwQJAG5hbWVfaGFzaNIjq1oBlZMMAwoAbmV0d29ya19pZGEFwLYKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:crimson_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT9AQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fc3RhaXJzBAkAbmFtZV9oYXNoZJqIzCBpCq4DCgBuZXR3b3JrX2lktXE00AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:warped_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT+AQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9zdGFpcnMECQBuYW1lX2hhc2hOkY27jLD4RQMKAG5ldHdvcmtfaWQ+E5VrCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:blackstone_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAgAACAQAbmFtZRsAbWluZWNyYWZ0OmJsYWNrc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNokdoUb76p9McDCgBuZXR3b3JrX2lk5fWI5goGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:polished_blackstone_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNolCFtFIE8MmADCgBuZXR3b3JrX2lkGTf7sgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:polished_blackstone_brick_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQSAgAACAQAbmFtZSoAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNonks6UlfpOmkDCgBuZXR3b3JrX2lkgYeOdAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:cobbled_deepslate_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR8AgAACAQAbmFtZSIAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3N0YWlycwQJAG5hbWVfaGFzaPIfa+TpyJcIAwoAbmV0d29ya19pZJUvOYIKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:deepslate_tile_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3N0YWlycwQJAG5hbWVfaGFzaGFRFzB72mN2AwoAbmV0d29ya19pZJEOgIsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:polished_deepslate_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAgAACAQAbmFtZSMAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV9zdGFpcnMECQBuYW1lX2hhc2iNCYxVik9sGAMKAG5ldHdvcmtfaWSRVPnYCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:deepslate_brick_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAgAACAQAbmFtZSAAbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja19zdGFpcnMECQBuYW1lX2hhc2hIasOahEf83wMKAG5ldHdvcmtfaWQ1qEDCCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:tuff_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAwAACAQAbmFtZRUAbWluZWNyYWZ0OnR1ZmZfc3RhaXJzBAkAbmFtZV9oYXNoKjyNUBjcfZsDCgBuZXR3b3JrX2lk+LsycgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:polished_tuff_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTuAwAACAQAbmFtZR4AbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmZfc3RhaXJzBAkAbmFtZV9oYXNo8yuah8QI1dcDCgBuZXR3b3JrX2lkjLoU4AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:tuff_brick_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT0AwAACAQAbmFtZRsAbWluZWNyYWZ0OnR1ZmZfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNoWJpkAurUfKwDCgBuZXR3b3JrX2lkUMcjiwoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:mud_brick_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAgAACAQAbmFtZRoAbWluZWNyYWZ0Om11ZF9icmlja19zdGFpcnMECQBuYW1lX2hhc2gt3qxK1NWajAMKAG5ldHdvcmtfaWSm9N3MCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAgAACAQAbmFtZRsAbWluZWNyYWZ0OmN1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoHfoAXYq5G3MDCgBuZXR3b3JrX2lkeetf7woGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:exposed_cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAgAACAQAbmFtZSMAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcl9zdGFpcnMECQBuYW1lX2hhc2howneQGtZ9cgMKAG5ldHdvcmtfaWSg73zdCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:weathered_cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAgAACAQAbmFtZSUAbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyX3N0YWlycwQJAG5hbWVfaGFzaP+R5loXxrVgAwoAbmV0d29ya19pZOnbRf4KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:oxidized_cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAgAACAQAbmFtZSQAbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNo6Jeoq5rsPxsDCgBuZXR3b3JrX2lkmRjDnQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:waxed_cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAgAACAQAbmFtZSEAbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoh07CQj0/SR8DCgBuZXR3b3JrX2lkmYqoqAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:waxed_exposed_cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcl9zdGFpcnMECQBuYW1lX2hhc2guVct1ilmxTwMKAG5ldHdvcmtfaWQgCPROCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:waxed_weathered_cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRnAgAACAQAbmFtZSsAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyX3N0YWlycwQJAG5hbWVfaGFzaPXC8Sz/phCpAwoAbmV0d29ya19pZHlwHVsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:waxed_oxidized_cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS/AgAACAQAbmFtZSoAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoaqGdkuhxVZUDCgBuZXR3b3JrX2lkYQXzzgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "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:copper_door" + }, + { + "id": "minecraft:exposed_copper_door" + }, + { + "id": "minecraft:weathered_copper_door" + }, + { + "id": "minecraft:oxidized_copper_door" + }, + { + "id": "minecraft:waxed_copper_door" + }, + { + "id": "minecraft:waxed_exposed_copper_door" + }, + { + "id": "minecraft:waxed_weathered_copper_door" + }, + { + "id": "minecraft:waxed_oxidized_copper_door" + }, + { + "id": "minecraft:trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRgAAAACAQAbmFtZRIAbWluZWNyYWZ0OnRyYXBkb29yBAkAbmFtZV9oYXNotYiAJGtN0xADCgBuZXR3b3JrX2lkyTAWkAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:spruce_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAQAACAQAbmFtZRkAbWluZWNyYWZ0OnNwcnVjZV90cmFwZG9vcgQJAG5hbWVfaGFzaOwlfbgBkUW4AwoAbmV0d29ya19pZPHy1K0KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:birch_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAQAACAQAbmFtZRgAbWluZWNyYWZ0OmJpcmNoX3RyYXBkb29yBAkAbmFtZV9oYXNoSLtLweOLJ7wDCgBuZXR3b3JrX2lkeJWDfgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:jungle_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSTAQAACAQAbmFtZRkAbWluZWNyYWZ0Omp1bmdsZV90cmFwZG9vcgQJAG5hbWVfaGFzaDP/TnM9wyCIAwoAbmV0d29ya19pZEy2fJoKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:acacia_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAQAACAQAbmFtZRkAbWluZWNyYWZ0OmFjYWNpYV90cmFwZG9vcgQJAG5hbWVfaGFzaMj8xi3vmEKOAwoAbmV0d29ya19pZOHj8E8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:dark_oak_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAQAACAQAbmFtZRsAbWluZWNyYWZ0OmRhcmtfb2FrX3RyYXBkb29yBAkAbmFtZV9oYXNomB2GGJQ2aOMDCgBuZXR3b3JrX2lko5ZHTwoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:mangrove_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTvAgAACAQAbmFtZRsAbWluZWNyYWZ0Om1hbmdyb3ZlX3RyYXBkb29yBAkAbmFtZV9oYXNooV3kQsQUUmkDCgBuZXR3b3JrX2lkkF/mxAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:cherry_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAwAACAQAbmFtZRkAbWluZWNyYWZ0OmNoZXJyeV90cmFwZG9vcgQJAG5hbWVfaGFzaH/PefpfdHgtAwoAbmV0d29ya19pZOA7eNgKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:bamboo_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAwAACAQAbmFtZRkAbWluZWNyYWZ0OmJhbWJvb190cmFwZG9vcgQJAG5hbWVfaGFzaJrEOpsTwtKCAwoAbmV0d29ya19pZLvbPz8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:iron_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAAAACAQAbmFtZRcAbWluZWNyYWZ0Omlyb25fdHJhcGRvb3IECQBuYW1lX2hhc2gwA+IumsEiGQMKAG5ldHdvcmtfaWTvSVl/CgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:crimson_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT1AQAACAQAbmFtZRoAbWluZWNyYWZ0OmNyaW1zb25fdHJhcGRvb3IECQBuYW1lX2hhc2jHXufTnwUkYgMKAG5ldHdvcmtfaWQLjMYVCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:warped_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT2AQAACAQAbmFtZRkAbWluZWNyYWZ0OndhcnBlZF90cmFwZG9vcgQJAG5hbWVfaGFzaA20wG/+vkd6AwoAbmV0d29ya19pZHKR/hYKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:copper_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQXBAAACAQAbmFtZRkAbWluZWNyYWZ0OmNvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaO9fXio+svKVAwoAbmV0d29ya19pZMCoRjEKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:exposed_copper_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQYBAAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyX3RyYXBkb29yBAkAbmFtZV9oYXNoYhDFUysN7qUDCgBuZXR3b3JrX2lkMzwGJgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:weathered_copper_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQZBAAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXJfdHJhcGRvb3IECQBuYW1lX2hhc2hFnEC282a1tgMKAG5ldHdvcmtfaWTk70oiCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:oxidized_copper_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQaBAAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaOJpG/XFexVwAwoAbmV0d29ya19pZPhi0J4KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:waxed_copper_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQbBAAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2NvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaO0JUKUHqNU6AwoAbmV0d29ya19pZJC3ZuMKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:waxed_exposed_copper_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQcBAAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyX3RyYXBkb29yBAkAbmFtZV9oYXNoBHHxCpkUzpgDCgBuZXR3b3JrX2lkw2XBGQoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:waxed_weathered_copper_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQdBAAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXJfdHJhcGRvb3IECQBuYW1lX2hhc2gH9Fi3JCF4egMKAG5ldHdvcmtfaWRkGU6TCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:waxed_oxidized_copper_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQeBAAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaNA/q9qAy6Z9AwoAbmV0d29ya19pZDgExS8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:iron_bars", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAAAACAQAbmFtZRMAbWluZWNyYWZ0Omlyb25fYmFycwQJAG5hbWVfaGFzaPuefWSNAe56AwoAbmV0d29ya19pZN2LB5IKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmdsYXNzBAkAbmFtZV9oYXNowGJByfWff6gDCgBuZXR3b3JrX2lk0hdLNwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:white_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAAAACAQAbmFtZR0AbWluZWNyYWZ0OndoaXRlX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2iHubqoMbu9fAMKAG5ldHdvcmtfaWRndBrUCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:light_gray_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAwAACAQAbmFtZSIAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaKKa+LrRsHQhAwoAbmV0d29ya19pZEv2giYKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:gray_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSmAwAACAQAbmFtZRwAbWluZWNyYWZ0OmdyYXlfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaIETy7Y/HZREAwoAbmV0d29ya19pZDomVrUKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:black_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAwAACAQAbmFtZR0AbWluZWNyYWZ0OmJsYWNrX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2iV6BCwpfDMmwMKAG5ldHdvcmtfaWSV7doJCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:brown_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAwAACAQAbmFtZR0AbWluZWNyYWZ0OmJyb3duX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2igsEiq5np8JgMKAG5ldHdvcmtfaWRMzE/lCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:red_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWStAwAACAQAbmFtZRsAbWluZWNyYWZ0OnJlZF9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNoCa2J12/lQoIDCgBuZXR3b3JrX2lk283lWAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:orange_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAwAACAQAbmFtZR4AbWluZWNyYWZ0Om9yYW5nZV9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNozgjAuvzhxGsDCgBuZXR3b3JrX2lkW5CkhQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:yellow_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAwAACAQAbmFtZR4AbWluZWNyYWZ0OnllbGxvd19zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNo7EbHMd5WVugDCgBuZXR3b3JrX2lkkdDyXQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:lime_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAwAACAQAbmFtZRwAbWluZWNyYWZ0OmxpbWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaBtZA1nZtwcFAwoAbmV0d29ya19pZDxX85UKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:green_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAwAACAQAbmFtZR0AbWluZWNyYWZ0OmdyZWVuX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2h91ptDgbehWwMKAG5ldHdvcmtfaWTlDhnECgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:cyan_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAwAACAQAbmFtZRwAbWluZWNyYWZ0OmN5YW5fc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaBkIYQ8nQLqbAwoAbmV0d29ya19pZOL1lHsKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:light_blue_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAwAACAQAbmFtZSIAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaLt05n1G0fiSAwoAbmV0d29ya19pZNbwulIKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:blue_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAwAACAQAbmFtZRwAbWluZWNyYWZ0OmJsdWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaPhLocSfzduRAwoAbmV0d29ya19pZENsjFwKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:purple_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAwAACAQAbmFtZR4AbWluZWNyYWZ0OnB1cnBsZV9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNoJk0DhRO0szUDCgBuZXR3b3JrX2lkD98ZxgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:magenta_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAwAACAQAbmFtZR8AbWluZWNyYWZ0Om1hZ2VudGFfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaFEDeFiJj3zSAwoAbmV0d29ya19pZG+iFRoKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:pink_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAwAACAQAbmFtZRwAbWluZWNyYWZ0OnBpbmtfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaDijTX87ywxhAwoAbmV0d29ya19pZKdEricKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:tinted_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAgAACAQAbmFtZRYAbWluZWNyYWZ0OnRpbnRlZF9nbGFzcwQJAG5hbWVfaGFzaAFZWSamk6KdAwoAbmV0d29ya19pZGSvWX8KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdsYXNzX3BhbmUECQBuYW1lX2hhc2gRSBHwNMQ4gQMKAG5ldHdvcmtfaWRGwixuCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:white_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAAAACAQAbmFtZSIAbWluZWNyYWZ0OndoaXRlX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaHgxQmgJVtRrAwoAbmV0d29ya19pZBEr/DYKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:light_gray_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSJAwAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNon0aQw9lNkSEDCgBuZXR3b3JrX2lk9dp5VgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:gray_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAwAACAQAbmFtZSEAbWluZWNyYWZ0OmdyYXlfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNors74IIw+2MMDCgBuZXR3b3JrX2lkmrGO5woGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:black_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAwAACAQAbmFtZSIAbWluZWNyYWZ0OmJsYWNrX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaOK/5ZRRd+M1AwoAbmV0d29ya19pZDv++oQKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:brown_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSNAwAACAQAbmFtZSIAbWluZWNyYWZ0OmJyb3duX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLHeGJyRFTIWAwoAbmV0d29ya19pZMz9L0wKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:red_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAwAACAQAbmFtZSAAbWluZWNyYWZ0OnJlZF9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2gGr4x6JheAywMKAG5ldHdvcmtfaWQBjCTmCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:orange_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAwAACAQAbmFtZSMAbWluZWNyYWZ0Om9yYW5nZV9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2hbHxPD2gEbEAMKAG5ldHdvcmtfaWSt/7a5CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:yellow_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAwAACAQAbmFtZSMAbWluZWNyYWZ0OnllbGxvd19zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2g9tl4aOCyZBwMKAG5ldHdvcmtfaWTXRAS7CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:lime_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAwAACAQAbmFtZSEAbWluZWNyYWZ0OmxpbWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNo3CtUyLwoGegDCgBuZXR3b3JrX2lkYJDnggoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:green_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSOAwAACAQAbmFtZSIAbWluZWNyYWZ0OmdyZWVuX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaJo6YP7IMy9SAwoAbmV0d29ya19pZHOnixoKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cyan_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAwAACAQAbmFtZSEAbWluZWNyYWZ0OmN5YW5fc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoti97c6QrbLQDCgBuZXR3b3JrX2lkUqFUeQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:light_blue_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAwAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNovDg/gQle104DCgBuZXR3b3JrX2lkFuy4MQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:blue_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSMAwAACAQAbmFtZSEAbWluZWNyYWZ0OmJsdWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoGc57tiexbQMDCgBuZXR3b3JrX2lk1eBLUAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:purple_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAwAACAQAbmFtZSMAbWluZWNyYWZ0OnB1cnBsZV9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2hDJHYdd0FdfQMKAG5ldHdvcmtfaWSNsdK5CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:magenta_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAwAACAQAbmFtZSQAbWluZWNyYWZ0Om1hZ2VudGFfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNo3pcOw5bs5XoDCgBuZXR3b3JrX2lkVbOR7AoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:pink_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAwAACAQAbmFtZSEAbWluZWNyYWZ0OnBpbmtfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoWRhSACMWgswDCgBuZXR3b3JrX2lkIR92xwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:ladder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRBAAAACAQAbmFtZRAAbWluZWNyYWZ0OmxhZGRlcgQJAG5hbWVfaGFzaKBhqheJVOz+AwoAbmV0d29ya19pZCgvzlsKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:scaffolding", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAQAACAQAbmFtZRUAbWluZWNyYWZ0OnNjYWZmb2xkaW5nBAkAbmFtZV9oYXNoYrkevrqcljwDCgBuZXR3b3JrX2lkD13mlAoGAHN0YXRlcwMJAHN0YWJpbGl0eQAAAAABDwBzdGFiaWxpdHlfY2hlY2sAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:brick_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAAAACAQAbmFtZRUAbWluZWNyYWZ0OmJyaWNrX2Jsb2NrBAkAbmFtZV9oYXNo5Qc2E005S3oDCgBuZXR3b3JrX2lkqeGWRgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:smooth_stone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAAAACAQAbmFtZRsAbWluZWNyYWZ0OnNtb290aF9zdG9uZV9zbGFiBAkAbmFtZV9oYXNon5I1yVw74uMDCgBuZXR3b3JrX2lkqvjcBQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:normal_stone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSCBAAACAQAbmFtZRsAbWluZWNyYWZ0Om5vcm1hbF9zdG9uZV9zbGFiBAkAbmFtZV9oYXNoIvsjJLQdolcDCgBuZXR3b3JrX2lkC1zqRQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cobblestone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRoBAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3NsYWIECQBuYW1lX2hhc2h5CXtW7vlQVgMKAG5ldHdvcmtfaWRDGyj2CgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:mossy_cobblestone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR3BAAACAQAbmFtZSAAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lX3NsYWIECQBuYW1lX2hhc2ijm1BCwB82VgMKAG5ldHdvcmtfaWR7ByMGCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:oak_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAAAACAQAbmFtZRIAbWluZWNyYWZ0Om9ha19zbGFiBAkAbmFtZV9oYXNoJp1Cp1M4jlwDCgBuZXR3b3JrX2lkZH6+owoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:spruce_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQjBAAACAQAbmFtZRUAbWluZWNyYWZ0OnNwcnVjZV9zbGFiBAkAbmFtZV9oYXNodQi70jB238cDCgBuZXR3b3JrX2lkrriOYQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:birch_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQkBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJpcmNoX3NsYWIECQBuYW1lX2hhc2gZPpfMxoOsTAMKAG5ldHdvcmtfaWThR9jyCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:jungle_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQlBAAACAQAbmFtZRUAbWluZWNyYWZ0Omp1bmdsZV9zbGFiBAkAbmFtZV9oYXNo6gLs79NXak4DCgBuZXR3b3JrX2lk5ZiKgwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:acacia_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmBAAACAQAbmFtZRUAbWluZWNyYWZ0OmFjYWNpYV9zbGFiBAkAbmFtZV9oYXNomSdFmDnv4OUDCgBuZXR3b3JrX2lkHttaXAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:dark_oak_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQnBAAACAQAbmFtZRcAbWluZWNyYWZ0OmRhcmtfb2FrX3NsYWIECQBuYW1lX2hhc2hJjTohRFyhIQMKAG5ldHdvcmtfaWRMzDTyCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:mangrove_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWToAgAACAQAbmFtZRcAbWluZWNyYWZ0Om1hbmdyb3ZlX3NsYWIECQBuYW1lX2hhc2jYCcmhJPeNMwMKAG5ldHdvcmtfaWQx6U1yCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:cherry_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQaAwAACAQAbmFtZRUAbWluZWNyYWZ0OmNoZXJyeV9zbGFiBAkAbmFtZV9oYXNoTt0MmVn/mqoDCgBuZXR3b3JrX2lk2VVsZQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:bamboo_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQAAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJhbWJvb19zbGFiBAkAbmFtZV9oYXNoo1xuFqINeLYDCgBuZXR3b3JrX2lkVC+0twoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:bamboo_mosaic_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQLAwAACAQAbmFtZRwAbWluZWNyYWZ0OmJhbWJvb19tb3NhaWNfc2xhYgQJAG5hbWVfaGFzaNbVRBZ/ChI3AwoAbmV0d29ya19pZOLZHFMKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:stone_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRqBAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2JyaWNrX3NsYWIECQBuYW1lX2hhc2js6EexuKuzrQMKAG5ldHdvcmtfaWRSsMxaCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:mossy_stone_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAQAACAQAbmFtZSAAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrX3NsYWIECQBuYW1lX2hhc2hiA4kFUl4tHAMKAG5ldHdvcmtfaWS6joSOCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:sandstone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRnBAAACAQAbmFtZRgAbWluZWNyYWZ0OnNhbmRzdG9uZV9zbGFiBAkAbmFtZV9oYXNo/GMI0MZnrhsDCgBuZXR3b3JrX2lkFP8WmwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cut_sandstone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDBAAACAQAbmFtZRwAbWluZWNyYWZ0OmN1dF9zYW5kc3RvbmVfc2xhYgQJAG5hbWVfaGFzaE+zxVQweViJAwoAbmV0d29ya19pZHsu74YKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:smooth_sandstone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR4BAAACAQAbmFtZR8AbWluZWNyYWZ0OnNtb290aF9zYW5kc3RvbmVfc2xhYgQJAG5hbWVfaGFzaIkmsO1gw3gnAwoAbmV0d29ya19pZFSiwP0KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:red_sandstone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRwAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmVfc2xhYgQJAG5hbWVfaGFzaEyDjeWlUHItAwoAbmV0d29ya19pZIT4rmwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:cut_red_sandstone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSEBAAACAQAbmFtZSAAbWluZWNyYWZ0OmN1dF9yZWRfc2FuZHN0b25lX3NsYWIECQBuYW1lX2hhc2hTVRS++snU3wMKAG5ldHdvcmtfaWSvIAviCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:smooth_red_sandstone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR6BAAACAQAbmFtZSMAbWluZWNyYWZ0OnNtb290aF9yZWRfc2FuZHN0b25lX3NsYWIECQBuYW1lX2hhc2i9iN2UK272tgMKAG5ldHdvcmtfaWRUZrwJCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:granite_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR/BAAACAQAbmFtZRYAbWluZWNyYWZ0OmdyYW5pdGVfc2xhYgQJAG5hbWVfaGFzaL0HprlAhhZwAwoAbmV0d29ya19pZIcIdc8KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:polished_granite_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSABAAACAQAbmFtZR8AbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGVfc2xhYgQJAG5hbWVfaGFzaP6bXk5w2dGrAwoAbmV0d29ya19pZCsRy1cKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:diorite_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR9BAAACAQAbmFtZRYAbWluZWNyYWZ0OmRpb3JpdGVfc2xhYgQJAG5hbWVfaGFzaM3ppS8v55sNAwoAbmV0d29ya19pZB+Pv9oKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:polished_diorite_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR+BAAACAQAbmFtZR8AbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGVfc2xhYgQJAG5hbWVfaGFzaLZlyJLkMPhyAwoAbmV0d29ya19pZFM0HYwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:andesite_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR8BAAACAQAbmFtZRcAbWluZWNyYWZ0OmFuZGVzaXRlX3NsYWIECQBuYW1lX2hhc2icIrtuy/aosAMKAG5ldHdvcmtfaWTtXTtYCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:polished_andesite_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR7BAAACAQAbmFtZSAAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlX3NsYWIECQBuYW1lX2hhc2j56zJOfCF+3wMKAG5ldHdvcmtfaWRBs69FCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRpBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJyaWNrX3NsYWIECQBuYW1lX2hhc2hO/Da4jU2v4wMKAG5ldHdvcmtfaWRG/qphCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:nether_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRsBAAACAQAbmFtZRsAbWluZWNyYWZ0Om5ldGhlcl9icmlja19zbGFiBAkAbmFtZV9oYXNonymoa2zbbqMDCgBuZXR3b3JrX2lkquvR1QoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:red_nether_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR5BAAACAQAbmFtZR8AbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaG89ujUk3Y64AwoAbmV0d29ya19pZEZIunAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:end_stone_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZR4AbWluZWNyYWZ0OmVuZF9zdG9uZV9icmlja19zbGFiBAkAbmFtZV9oYXNo4tkxQtl+IyQDCgBuZXR3b3JrX2lkhByH/woGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:quartz_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRrBAAACAQAbmFtZRUAbWluZWNyYWZ0OnF1YXJ0el9zbGFiBAkAbmFtZV9oYXNo9JMj3upfsbwDCgBuZXR3b3JrX2lkn2g2VAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:smooth_quartz_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSBBAAACAQAbmFtZRwAbWluZWNyYWZ0OnNtb290aF9xdWFydHpfc2xhYgQJAG5hbWVfaGFzaHOSJv8ve0nmAwoAbmV0d29ya19pZFMk/JsKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:purpur_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRzBAAACAQAbmFtZRUAbWluZWNyYWZ0OnB1cnB1cl9zbGFiBAkAbmFtZV9oYXNo4XeWbKpx2ScDCgBuZXR3b3JrX2lkRkga5goGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:prismarine_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR0BAAACAQAbmFtZRkAbWluZWNyYWZ0OnByaXNtYXJpbmVfc2xhYgQJAG5hbWVfaGFzaI9x+1fY8QRfAwoAbmV0d29ya19pZBTUZhwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:dark_prismarine_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR1BAAACAQAbmFtZR4AbWluZWNyYWZ0OmRhcmtfcHJpc21hcmluZV9zbGFiBAkAbmFtZV9oYXNoSsZGDkEL5ZUDCgBuZXR3b3JrX2lkNLQ8VwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:prismarine_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR2BAAACAQAbmFtZR8AbWluZWNyYWZ0OnByaXNtYXJpbmVfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaB1FSbVi97xJAwoAbmV0d29ya19pZEBwwFMKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:crimson_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAgAACAQAbmFtZRYAbWluZWNyYWZ0OmNyaW1zb25fc2xhYgQJAG5hbWVfaGFzaKZ+EfP0ZYOZAwoAbmV0d29ya19pZAxRUWAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:warped_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQIAgAACAQAbmFtZRUAbWluZWNyYWZ0OndhcnBlZF9zbGFiBAkAbmFtZV9oYXNo/AT0e/Z9W7UDCgBuZXR3b3JrX2lk1yq11AoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:blackstone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsYWNrc3RvbmVfc2xhYgQJAG5hbWVfaGFzaF/DD4ZUlNgtAwoAbmV0d29ya19pZGy1DjwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:polished_blackstone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQkAgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfc2xhYgQJAG5hbWVfaGFzaDYnuUs86EWfAwoAbmV0d29ya19pZJj2bXIKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:polished_blackstone_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQbAgAACAQAbmFtZSgAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaKySLqvHc4xXAwoAbmV0d29ya19pZOyWX94KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:cobbled_deepslate_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AgAACAQAbmFtZSAAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3NsYWIECQBuYW1lX2hhc2gwJIVWK1TM2QMKAG5ldHdvcmtfaWTYAoX5CgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:polished_deepslate_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR/AgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV9zbGFiBAkAbmFtZV9oYXNoC/Adiz8k6RYDCgBuZXR3b3JrX2lkuFYMAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:deepslate_tile_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3NsYWIECQBuYW1lX2hhc2hPydV6emzIXAMKAG5ldHdvcmtfaWQwlbFCCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:deepslate_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja19zbGFiBAkAbmFtZV9oYXNoSv62V7iw10UDCgBuZXR3b3JrX2lkWMoragoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:tuff_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAwAACAQAbmFtZRMAbWluZWNyYWZ0OnR1ZmZfc2xhYgQJAG5hbWVfaGFzaIhCGdlIsnMUAwoAbmV0d29ya19pZN1dUL4KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:polished_tuff_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTsAwAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmZfc2xhYgQJAG5hbWVfaGFzaLXdb48YvAsHAwoAbmV0d29ya19pZAnJ7W0KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:tuff_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTyAwAACAQAbmFtZRkAbWluZWNyYWZ0OnR1ZmZfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaLqPMjVCv5dIAwoAbmV0d29ya19pZOmeRhcKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:mud_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAgAACAQAbmFtZRgAbWluZWNyYWZ0Om11ZF9icmlja19zbGFiBAkAbmFtZV9oYXNoq/tGBQWkv08DCgBuZXR3b3JrX2lkl4nnMwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRoAgAACAQAbmFtZRkAbWluZWNyYWZ0OmN1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaDsNpb2qs4iBAwoAbmV0d29ya19pZOTm2nsKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:exposed_cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRpAgAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcl9zbGFiBAkAbmFtZV9oYXNoahQ5OwIQb7kDCgBuZXR3b3JrX2lkrUlZLwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:weathered_cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRqAgAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyX3NsYWIECQBuYW1lX2hhc2hBIuGIOVVXogMKAG5ldHdvcmtfaWQgnaDiCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:oxidized_cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAgAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaOptj9ycfpaDAwoAbmV0d29ya19pZMzFSRgKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:waxed_cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaAlx6DZOCTHzAwoAbmV0d29ya19pZFRBvDAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:waxed_exposed_cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAgAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcl9zbGFiBAkAbmFtZV9oYXNo3KqS5OnhtRIDCgBuZXR3b3JrX2lkHTGcTgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:waxed_weathered_cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyX3NsYWIECQBuYW1lX2hhc2gzZ1oX0HCFtwMKAG5ldHdvcmtfaWSgJR+XCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:waxed_oxidized_cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTAAgAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaMjjTnLu1KcqAwoAbmV0d29ya19pZIxsnFYKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:stone_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAAAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX2JyaWNrcwQJAG5hbWVfaGFzaGAiQu8VWVJRAwoAbmV0d29ya19pZH2DjXUKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:mossy_stone_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRjBAAACAQAbmFtZRwAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaIZBO00MONRIAwoAbmV0d29ya19pZL2WDrAKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cracked_stone_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRkBAAACAQAbmFtZR4AbWluZWNyYWZ0OmNyYWNrZWRfc3RvbmVfYnJpY2tzBAkAbmFtZV9oYXNocIkAp6riMz4DCgBuZXR3b3JrX2lkTWGeCwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:chiseled_stone_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRlBAAACAQAbmFtZR8AbWluZWNyYWZ0OmNoaXNlbGVkX3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaMB2FPLLADkEAwoAbmV0d29ya19pZOIPn0IKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:smooth_stone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AQAACAQAbmFtZRYAbWluZWNyYWZ0OnNtb290aF9zdG9uZQQJAG5hbWVfaGFzaMwf87/JaTNvAwoAbmV0d29ya19pZLkZICEKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:end_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTOAAAACAQAbmFtZRQAbWluZWNyYWZ0OmVuZF9icmlja3MECQBuYW1lX2hhc2hIUFfxNLZaFgMKAG5ldHdvcmtfaWQ/vDihCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:polished_blackstone_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tzBAkAbmFtZV9oYXNoIHgsgIdzKXcDCgBuZXR3b3JrX2lkUw9b3woGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:cracked_polished_blackstone_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAgAACAQAbmFtZSwAbWluZWNyYWZ0OmNyYWNrZWRfcG9saXNoZWRfYmxhY2tzdG9uZV9icmlja3MECQBuYW1lX2hhc2jQIO1GQDk80AMKAG5ldHdvcmtfaWQ3UlRYCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:gilded_blackstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAgAACAQAbmFtZRsAbWluZWNyYWZ0OmdpbGRlZF9ibGFja3N0b25lBAkAbmFtZV9oYXNoNoWt1ocG0HEDCgBuZXR3b3JrX2lktL8gUwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:chiseled_polished_blackstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAgAACAQAbmFtZSYAbWluZWNyYWZ0OmNoaXNlbGVkX3BvbGlzaGVkX2JsYWNrc3RvbmUECQBuYW1lX2hhc2gzFa+kEjCJgAMKAG5ldHdvcmtfaWR2NJX2CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:deepslate_tiles", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAgAACAQAbmFtZRkAbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlcwQJAG5hbWVfaGFzaGcLLx3NXAFvAwoAbmV0d29ya19pZI/G/xYKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cracked_deepslate_tiles", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSYAgAACAQAbmFtZSEAbWluZWNyYWZ0OmNyYWNrZWRfZGVlcHNsYXRlX3RpbGVzBAkAbmFtZV9oYXNo9zWgkFuMM1QDCgBuZXR3b3JrX2lkGwY6OgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:deepslate_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAgAACAQAbmFtZRoAbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja3MECQBuYW1lX2hhc2gucvFmPdZxigMKAG5ldHdvcmtfaWSH4HDPCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:tuff_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAwAACAQAbmFtZRUAbWluZWNyYWZ0OnR1ZmZfYnJpY2tzBAkAbmFtZV9oYXNo/hbQ+mXSK7wDCgBuZXR3b3JrX2lk6gmIwQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:cracked_deepslate_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAgAACAQAbmFtZSIAbWluZWNyYWZ0OmNyYWNrZWRfZGVlcHNsYXRlX2JyaWNrcwQJAG5hbWVfaGFzaN40aqhh9WqHAwoAbmV0d29ya19pZO9GPBQKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:chiseled_deepslate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAgAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaEU7/uRG8HSBAwoAbmV0d29ya19pZEqmI0EKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:chiseled_tuff", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoaXNlbGVkX3R1ZmYECQBuYW1lX2hhc2iVliOT8OTQ9AMKAG5ldHdvcmtfaWTLNKOiCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:chiseled_tuff_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT2AwAACAQAbmFtZR4AbWluZWNyYWZ0OmNoaXNlbGVkX3R1ZmZfYnJpY2tzBAkAbmFtZV9oYXNo3oQw6gmxYuADCgBuZXR3b3JrX2lkm3D8AgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:cobblestone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAAAACAQAbmFtZRUAbWluZWNyYWZ0OmNvYmJsZXN0b25lBAkAbmFtZV9oYXNoPoK7mGlSUz4DCgBuZXR3b3JrX2lkLm7RZwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:mossy_cobblestone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQwAAAACAQAbmFtZRsAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lBAkAbmFtZV9oYXNoGJ67FCbkChMDCgBuZXR3b3JrX2lk/pYs1AoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:cobbled_deepslate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AgAACAQAbmFtZRsAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlBAkAbmFtZV9oYXNoLUz9Y/ywmLwDCgBuZXR3b3JrX2lkNwzZ+AoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZPsXMaQKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:chiseled_sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSvBAAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX3NhbmRzdG9uZQQJAG5hbWVfaGFzaPEkxMvZmemgAwoAbmV0d29ya19pZGI5NB4KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cut_sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSwBAAACAQAbmFtZRcAbWluZWNyYWZ0OmN1dF9zYW5kc3RvbmUECQBuYW1lX2hhc2ichLQc71njnQMKAG5ldHdvcmtfaWSmBLkRCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:smooth_sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSxBAAACAQAbmFtZRoAbWluZWNyYWZ0OnNtb290aF9zYW5kc3RvbmUECQBuYW1lX2hhc2huR7XTwISyCAMKAG5ldHdvcmtfaWSzWj3UCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:red_sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWRXRYxZCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:chiseled_red_sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS7BAAACAQAbmFtZSAAbWluZWNyYWZ0OmNoaXNlbGVkX3JlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2gh5sX+ON054wMKAG5ldHdvcmtfaWT6Pw1PCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:cut_red_sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS8BAAACAQAbmFtZRsAbWluZWNyYWZ0OmN1dF9yZWRfc2FuZHN0b25lBAkAbmFtZV9oYXNoaOtka4NrQ1EDCgBuZXR3b3JrX2lk3r/JPAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:smooth_red_sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS9BAAACAQAbmFtZR4AbWluZWNyYWZ0OnNtb290aF9yZWRfc2FuZHN0b25lBAkAbmFtZV9oYXNoqsNl8x36ju4DCgBuZXR3b3JrX2lk7x5DTwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:coal_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWStAAAACAQAbmFtZRQAbWluZWNyYWZ0OmNvYWxfYmxvY2sECQBuYW1lX2hhc2jH8QQP3t5PiAMKAG5ldHdvcmtfaWRo+sR+CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:dried_kelp_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAQAACAQAbmFtZRoAbWluZWNyYWZ0OmRyaWVkX2tlbHBfYmxvY2sECQBuYW1lX2hhc2iRoucexkrl8wMKAG5ldHdvcmtfaWQQCCrvCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:copper_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRTAgAACAQAbmFtZRYAbWluZWNyYWZ0OmNvcHBlcl9ibG9jawQJAG5hbWVfaGFzaDVxnehsGaZ1AwoAbmV0d29ya19pZIiUodwKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:weathered_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAgAACAQAbmFtZRoAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2hJCQXbvobv+gMKAG5ldHdvcmtfaWQwM0lJCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:exposed_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAgAACAQAbmFtZRgAbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoQH3Fukmu3CEDCgBuZXR3b3JrX2lk72jFIwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:oxidized_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAgAACAQAbmFtZRkAbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMDtJqR0G5Y7AwoAbmV0d29ya19pZGjN8bUKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:waxed_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAgAACAQAbmFtZRYAbWluZWNyYWZ0OndheGVkX2NvcHBlcgQJAG5hbWVfaGFzaPF+FG6Eh5fsAwoAbmV0d29ya19pZIjtz/0KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:waxed_exposed_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAgAACAQAbmFtZR4AbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoig8IOc+SCikDCgBuZXR3b3JrX2lklz8yWQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:waxed_weathered_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRZAgAACAQAbmFtZSAAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2gjtPq8MOdvKgMKAG5ldHdvcmtfaWSQ9Ln9CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:waxed_oxidized_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS9AgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMaORhsO+LzjAwoAbmV0d29ya19pZJhGfLEKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:copper_grate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT/AwAACAQAbmFtZRYAbWluZWNyYWZ0OmNvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaC/JEFOWnmEcAwoAbmV0d29ya19pZC6YiiMKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:exposed_copper_grate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQABAAACAQAbmFtZR4AbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyX2dyYXRlBAkAbmFtZV9oYXNolFIBYLYU0IcDCgBuZXR3b3JrX2lk4UqptAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:weathered_copper_grate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQBBAAACAQAbmFtZSAAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXJfZ3JhdGUECQBuYW1lX2hhc2jB3o8enlv1RgMKAG5ldHdvcmtfaWRih2pOCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:oxidized_copper_grate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQCBAAACAQAbmFtZR8AbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaBRfNhyndve7AwoAbmV0d29ya19pZKY2cnEKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:waxed_copper_grate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQDBAAACAQAbmFtZRwAbWluZWNyYWZ0OndheGVkX2NvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaDmC92M2RO+HAwoAbmV0d29ya19pZH4og2AKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:waxed_exposed_copper_grate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQEBAAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyX2dyYXRlBAkAbmFtZV9oYXNoWmd6B+hWwiEDCgBuZXR3b3JrX2lk8d4ZQwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:waxed_weathered_copper_grate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQFBAAACAQAbmFtZSYAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXJfZ3JhdGUECQBuYW1lX2hhc2hXfilVFDAiYQMKAG5ldHdvcmtfaWQqTGC1CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:waxed_oxidized_copper_grate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQGBAAACAQAbmFtZSUAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaEbeMT605GP4AwoAbmV0d29ya19pZOZjpkkKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cut_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRaAgAACAQAbmFtZRQAbWluZWNyYWZ0OmN1dF9jb3BwZXIECQBuYW1lX2hhc2hAfN3NGax3eAMKAG5ldHdvcmtfaWTnFBtYCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:exposed_cut_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAgAACAQAbmFtZRwAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcgQJAG5hbWVfaGFzaA85G3yv/w6pAwoAbmV0d29ya19pZMQhr0QKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:weathered_cut_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRcAgAACAQAbmFtZR4AbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyBAkAbmFtZV9oYXNoVgRV0fBaz88DCgBuZXR3b3JrX2lk/0cYugoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:oxidized_cut_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRdAgAACAQAbmFtZR0AbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2iP8WmFWOkriwMKAG5ldHdvcmtfaWQPdce7CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:waxed_cut_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWReAgAACAQAbmFtZRoAbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2jumiwOZIqv2AMKAG5ldHdvcmtfaWQvuxx9CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:waxed_exposed_cut_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRfAgAACAQAbmFtZSIAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcgQJAG5hbWVfaGFzaPE/OfK6IoVMAwoAbmV0d29ya19pZHy5HkcKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:waxed_weathered_cut_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRgAgAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyBAkAbmFtZV9oYXNoCA1xDp11bnwDCgBuZXR3b3JrX2lkDyEDVQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:waxed_oxidized_cut_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS+AgAACAQAbmFtZSMAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2i1pZAsZYHLDAMKAG5ldHdvcmtfaWQ/wSkCCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:chiseled_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT3AwAACAQAbmFtZRkAbWluZWNyYWZ0OmNoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaIsW5pmpJEuQAwoAbmV0d29ya19pZHetwrkKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:exposed_chiseled_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT4AwAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY2hpc2VsZWRfY29wcGVyBAkAbmFtZV9oYXNoOvrLJ0UowbgDCgBuZXR3b3JrX2lkZj7cPwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:weathered_chiseled_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT5AwAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jaGlzZWxlZF9jb3BwZXIECQBuYW1lX2hhc2hh+42XlsWvGAMKAG5ldHdvcmtfaWS7Cy59CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:oxidized_chiseled_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT6AwAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2NoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaLpTIsnfluiCAwoAbmV0d29ya19pZB9/jS8KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:waxed_chiseled_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT7AwAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2NoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaFnXvXY5OinzAwoAbmV0d29ya19pZAcKtHsKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:waxed_exposed_chiseled_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT8AwAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY2hpc2VsZWRfY29wcGVyBAkAbmFtZV9oYXNoHJdq+Pph6hMDCgBuZXR3b3JrX2lkdge7IAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:waxed_oxidized_chiseled_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT9AwAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaMj49OvlTpgCAwoAbmV0d29ya19pZN/r+roKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:waxed_weathered_chiseled_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT+AwAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jaGlzZWxlZF9jb3BwZXIECQBuYW1lX2hhc2hzuO+Sg9LYQwMKAG5ldHdvcmtfaWQ7AN7iCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:copper_bulb", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQHBAAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcHBlcl9idWxiBAkAbmFtZV9oYXNo41TimHOsMWcDCgBuZXR3b3JrX2lkJnZvAgoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:exposed_copper_bulb", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQIBAAACAQAbmFtZR0AbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyX2J1bGIECQBuYW1lX2hhc2g++f1wYLLCrAMKAG5ldHdvcmtfaWRLdMmGCgYAc3RhdGVzAQMAbGl0AAELAHBvd2VyZWRfYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:weathered_copper_bulb", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQJBAAACAQAbmFtZR8AbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXJfYnVsYgQJAG5hbWVfaGFzaMEtsYfwRTXlAwoAbmV0d29ya19pZAp51LQKBgBzdGF0ZXMBAwBsaXQAAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:oxidized_copper_bulb", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQKBAAACAQAbmFtZR4AbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcl9idWxiBAkAbmFtZV9oYXNovnrBQZs8nDIDCgBuZXR3b3JrX2lkPsj0AAoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:waxed_copper_bulb", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQLBAAACAQAbmFtZRsAbWluZWNyYWZ0OndheGVkX2NvcHBlcl9idWxiBAkAbmFtZV9oYXNoGTg6TYllMiIDCgBuZXR3b3JrX2lk9m0WhgoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:waxed_exposed_copper_bulb", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQMBAAACAQAbmFtZSMAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyX2J1bGIECQBuYW1lX2hhc2gI6xkPcvBDVwMKAG5ldHdvcmtfaWR7BRcACgYAc3RhdGVzAQMAbGl0AAELAHBvd2VyZWRfYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:waxed_weathered_copper_bulb", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQNBAAACAQAbmFtZSUAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXJfYnVsYgQJAG5hbWVfaGFzaMsUnmp3/VqVAwoAbmV0d29ya19pZEoworoKBgBzdGF0ZXMBAwBsaXQAAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:waxed_oxidized_copper_bulb", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQOBAAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcl9idWxiBAkAbmFtZV9oYXNoBFKxY3fjVq4DCgBuZXR3b3JrX2lkzrJ6aAoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:iron_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAAAACAQAbmFtZRQAbWluZWNyYWZ0Omlyb25fYmxvY2sECQBuYW1lX2hhc2jYINmJQbvV/gMKAG5ldHdvcmtfaWRf7AbICgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:gold_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdvbGRfYmxvY2sECQBuYW1lX2hhc2iYLshvjtXzFwMKAG5ldHdvcmtfaWTDJGBcCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:emerald_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAAAACAQAbmFtZRcAbWluZWNyYWZ0OmVtZXJhbGRfYmxvY2sECQBuYW1lX2hhc2hK6QunqJznNAMKAG5ldHdvcmtfaWRk5+otCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:diamond_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5AAAACAQAbmFtZRcAbWluZWNyYWZ0OmRpYW1vbmRfYmxvY2sECQBuYW1lX2hhc2iGKrxuvkytFQMKAG5ldHdvcmtfaWQQeQZXCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:lapis_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAAAACAQAbmFtZRUAbWluZWNyYWZ0OmxhcGlzX2Jsb2NrBAkAbmFtZV9oYXNoDZ44xdb2zVoDCgBuZXR3b3JrX2lktVy0BAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:raw_copper_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTDAgAACAQAbmFtZRoAbWluZWNyYWZ0OnJhd19jb3BwZXJfYmxvY2sECQBuYW1lX2hhc2hw1KG0TNUGgwMKAG5ldHdvcmtfaWS1vGo/CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:raw_iron_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTCAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJhd19pcm9uX2Jsb2NrBAkAbmFtZV9oYXNo9XyzNIQXxvwDCgBuZXR3b3JrX2lknms1QAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:raw_gold_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJhd19nb2xkX2Jsb2NrBAkAbmFtZV9oYXNo6YuwuLwfOBwDCgBuZXR3b3JrX2lkLiQ5gQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:quartz_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAAAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZE2axGsKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:quartz_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAgAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9icmlja3MECQBuYW1lX2hhc2jSZO590dd8sAMKAG5ldHdvcmtfaWSc5xCLCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:quartz_pillar", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS5BAAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9waWxsYXIECQBuYW1lX2hhc2igp62HI+PuSwMKAG5ldHdvcmtfaWS9SGXLCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:chiseled_quartz_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS4BAAACAQAbmFtZR8AbWluZWNyYWZ0OmNoaXNlbGVkX3F1YXJ0el9ibG9jawQJAG5hbWVfaGFzaAftJM9mCAvaAwoAbmV0d29ya19pZFwy0s0KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:smooth_quartz", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS6BAAACAQAbmFtZRcAbWluZWNyYWZ0OnNtb290aF9xdWFydHoECQBuYW1lX2hhc2hIVzzgiItGagMKAG5ldHdvcmtfaWTVWgU2CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:prismarine", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAAAACAQAbmFtZRQAbWluZWNyYWZ0OnByaXNtYXJpbmUECQBuYW1lX2hhc2jcnQCHi9CspQMKAG5ldHdvcmtfaWQnuuW1CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:prismarine_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSzBAAACAQAbmFtZRsAbWluZWNyYWZ0OnByaXNtYXJpbmVfYnJpY2tzBAkAbmFtZV9oYXNozeGe3/7s5fcDCgBuZXR3b3JrX2lkj/iBnAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:dark_prismarine", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSyBAAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfcHJpc21hcmluZQQJAG5hbWVfaGFzaK+rhxsgkzplAwoAbmV0d29ya19pZIdA0I0KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:slime", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnNsaW1lBAkAbmFtZV9oYXNoHJiEEJx+JlkDCgBuZXR3b3JrX2lkfgfVzAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:honey_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAQAACAQAbmFtZRUAbWluZWNyYWZ0OmhvbmV5X2Jsb2NrBAkAbmFtZV9oYXNo9zLYSUlelywDCgBuZXR3b3JrX2lko+dyWgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:honeycomb_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAQAACAQAbmFtZRkAbWluZWNyYWZ0OmhvbmV5Y29tYl9ibG9jawQJAG5hbWVfaGFzaASIPuOCYd1oAwoAbmV0d29ya19pZKys4n4KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:hay_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAAAACAQAbmFtZRMAbWluZWNyYWZ0OmhheV9ibG9jawQJAG5hbWVfaGFzaIB2VxKxX8EpAwoAbmV0d29ya19pZKuQSloKBgBzdGF0ZXMDCgBkZXByZWNhdGVkAAAAAAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:bone_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAAAACAQAbmFtZRQAbWluZWNyYWZ0OmJvbmVfYmxvY2sECQBuYW1lX2hhc2i4ZX576W9AWgMKAG5ldHdvcmtfaWTWGacQCgYAc3RhdGVzAwoAZGVwcmVjYXRlZAAAAAAICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:nether_brick", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRwAAAACAQAbmFtZRYAbWluZWNyYWZ0Om5ldGhlcl9icmljawQJAG5hbWVfaGFzaMxcRiheU+nXAwoAbmV0d29ya19pZMkmzloKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:red_nether_brick", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAAAACAQAbmFtZRoAbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2sECQBuYW1lX2hhc2j8pRO4LfoECAMKAG5ldHdvcmtfaWRpdF0YCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:chiseled_nether_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAgAACAQAbmFtZSAAbWluZWNyYWZ0OmNoaXNlbGVkX25ldGhlcl9icmlja3MECQBuYW1lX2hhc2g31SBPTcUK1QMKAG5ldHdvcmtfaWS8TJ+TCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:cracked_nether_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAgAACAQAbmFtZR8AbWluZWNyYWZ0OmNyYWNrZWRfbmV0aGVyX2JyaWNrcwQJAG5hbWVfaGFzaAdC6eKzXT5tAwoAbmV0d29ya19pZIUSejwKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:netherite_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAgAACAQAbmFtZRkAbWluZWNyYWZ0Om5ldGhlcml0ZV9ibG9jawQJAG5hbWVfaGFzaMghh6Zib/ZKAwoAbmV0d29ya19pZIz0mq0KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:lodestone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAQAACAQAbmFtZRMAbWluZWNyYWZ0OmxvZGVzdG9uZQQJAG5hbWVfaGFzaJ2gmHOTlXv8AwoAbmV0d29ya19pZEfgB4wKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:white_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAAAACAQAbmFtZRQAbWluZWNyYWZ0OndoaXRlX3dvb2wECQBuYW1lX2hhc2jRWB7vaIEDiQMKAG5ldHdvcmtfaWSO8paQCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:light_gray_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQnAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfd29vbAQJAG5hbWVfaGFzaOpdQ1a2v4b3AwoAbmV0d29ya19pZIqZCYEKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:gray_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAwAACAQAbmFtZRMAbWluZWNyYWZ0OmdyYXlfd29vbAQJAG5hbWVfaGFzaLsc1Lp1xdIOAwoAbmV0d29ya19pZFUs+HgKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:black_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAwAACAQAbmFtZRQAbWluZWNyYWZ0OmJsYWNrX3dvb2wECQBuYW1lX2hhc2hP2HC6o0X4HAMKAG5ldHdvcmtfaWRUbORcCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:brown_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAwAACAQAbmFtZRQAbWluZWNyYWZ0OmJyb3duX3dvb2wECQBuYW1lX2hhc2ig5IW89PrREwMKAG5ldHdvcmtfaWRjT9j8CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:red_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQrAwAACAQAbmFtZRIAbWluZWNyYWZ0OnJlZF93b29sBAkAbmFtZV9oYXNoY4TBDq+mFgUDCgBuZXR3b3JrX2lktn9lcAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:orange_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAwAACAQAbmFtZRUAbWluZWNyYWZ0Om9yYW5nZV93b29sBAkAbmFtZV9oYXNoFstfrTZfSCgDCgBuZXR3b3JrX2lk+rqywwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:yellow_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAwAACAQAbmFtZRUAbWluZWNyYWZ0OnllbGxvd193b29sBAkAbmFtZV9oYXNoTFyus2RHegcDCgBuZXR3b3JrX2lkkKBhXAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:lime_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAwAACAQAbmFtZRMAbWluZWNyYWZ0OmxpbWVfd29vbAQJAG5hbWVfaGFzaNVnnzKiMxmeAwoAbmV0d29ya19pZG9b32kKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:green_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAwAACAQAbmFtZRQAbWluZWNyYWZ0OmdyZWVuX3dvb2wECQBuYW1lX2hhc2i3mElRYHIcSQMKAG5ldHdvcmtfaWSssprwCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:cyan_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQwAwAACAQAbmFtZRMAbWluZWNyYWZ0OmN5YW5fd29vbAQJAG5hbWVfaGFzaBNDfvHn8dqFAwoAbmV0d29ya19pZK0hAbgKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:light_blue_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQxAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfd29vbAQJAG5hbWVfaGFzaLWFAUfyxFPNAwoAbmV0d29ya19pZL2oEugKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:blue_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQyAwAACAQAbmFtZRMAbWluZWNyYWZ0OmJsdWVfd29vbAQJAG5hbWVfaGFzaLjHyxxbTWCLAwoAbmV0d29ya19pZPaLdFQKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:purple_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQzAwAACAQAbmFtZRUAbWluZWNyYWZ0OnB1cnBsZV93b29sBAkAbmFtZV9oYXNojvFtqzjAf/4DCgBuZXR3b3JrX2lklqASNQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:magenta_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ0AwAACAQAbmFtZRYAbWluZWNyYWZ0Om1hZ2VudGFfd29vbAQJAG5hbWVfaGFzaGuOHvf+Pd4yAwoAbmV0d29ya19pZI4UoDQKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:pink_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ1AwAACAQAbmFtZRMAbWluZWNyYWZ0OnBpbmtfd29vbAQJAG5hbWVfaGFzaPiVA2pFeoFLAwoAbmV0d29ya19pZOZRO6oKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:white_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAAAACAQAbmFtZRYAbWluZWNyYWZ0OndoaXRlX2NhcnBldAQJAG5hbWVfaGFzaNeMHTI1fWPXAwoAbmV0d29ya19pZEahDFcKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:light_gray_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAwAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FycGV0BAkAbmFtZV9oYXNoHPw6ArBAsP0DCgBuZXR3b3JrX2lkQoAeUAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:gray_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRaAwAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXlfY2FycGV0BAkAbmFtZV9oYXNoZVR0OI+1VRADCgBuZXR3b3JrX2lkETF4WwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:black_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJsYWNrX2NhcnBldAQJAG5hbWVfaGFzaOk7LP9NptyhAwoAbmV0d29ya19pZFjmXtIKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:brown_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRfAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJyb3duX2NhcnBldAQJAG5hbWVfaGFzaNaXFyOsAvIvAwoAbmV0d29ya19pZHPjFuoKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:red_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAwAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9jYXJwZXQECQBuYW1lX2hhc2i9eSKBf6SO3wMKAG5ldHdvcmtfaWQuhI/KCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:orange_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAwAACAQAbmFtZRcAbWluZWNyYWZ0Om9yYW5nZV9jYXJwZXQECQBuYW1lX2hhc2hIUkO4HlAdygMKAG5ldHdvcmtfaWSyKV9OCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:yellow_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAwAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19jYXJwZXQECQBuYW1lX2hhc2hSDKX3scCamwMKAG5ldHdvcmtfaWT8nq+ECgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:lime_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAwAACAQAbmFtZRUAbWluZWNyYWZ0OmxpbWVfY2FycGV0BAkAbmFtZV9oYXNo+6KFOpzsib4DCgBuZXR3b3JrX2lkT+DS4woGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:green_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRgAwAACAQAbmFtZRYAbWluZWNyYWZ0OmdyZWVuX2NhcnBldAQJAG5hbWVfaGFzaCHPMP9ltqFJAwoAbmV0d29ya19pZBgwAvAKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cyan_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRcAwAACAQAbmFtZRUAbWluZWNyYWZ0OmN5YW5fY2FycGV0BAkAbmFtZV9oYXNobXf62dQBJj8DCgBuZXR3b3JrX2lkKVppLgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:light_blue_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAwAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FycGV0BAkAbmFtZV9oYXNo20l4oktdZ3sDCgBuZXR3b3JrX2lkjdeMiwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:blue_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWReAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfY2FycGV0BAkAbmFtZV9oYXNo3p3lsW0eQwsDCgBuZXR3b3JrX2lkAovdPQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:purple_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRdAwAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnBsZV9jYXJwZXQECQBuYW1lX2hhc2jwIA9pW/qp7QMKAG5ldHdvcmtfaWTqJqhjCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:magenta_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAwAACAQAbmFtZRgAbWluZWNyYWZ0Om1hZ2VudGFfY2FycGV0BAkAbmFtZV9oYXNoFXT36YNNZhMDCgBuZXR3b3JrX2lk+tqsGAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:pink_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRZAwAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfY2FycGV0BAkAbmFtZV9oYXNoHll72oqk+OoDCgBuZXR3b3JrX2lkrnBYDwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:white_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTtAAAACAQAbmFtZR8AbWluZWNyYWZ0OndoaXRlX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaFUk9iXVjwV8AwoAbmV0d29ya19pZJPZY8AKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:light_gray_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAwAACAQAbmFtZSQAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNo7EUk30hmUtYDCgBuZXR3b3JrX2lkh8jVIwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:gray_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAwAACAQAbmFtZR4AbWluZWNyYWZ0OmdyYXlfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoW77af6WihdwDCgBuZXR3b3JrX2lkSsqC1woGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:black_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTSAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJsYWNrX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaAfWYp0xtgcfAwoAbmV0d29ya19pZMWTC8EKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:brown_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTPAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJyb3duX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaB74EeiLO46XAwoAbmV0d29ya19pZEDHKqwKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:red_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTRAwAACAQAbmFtZR0AbWluZWNyYWZ0OnJlZF9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2gjFut6Z/VH1gMKAG5ldHdvcmtfaWSvcmwYCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:orange_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAwAACAQAbmFtZSAAbWluZWNyYWZ0Om9yYW5nZV9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2gADDj2IJiw+gMKAG5ldHdvcmtfaWTHph0FCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:yellow_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTHAwAACAQAbmFtZSAAbWluZWNyYWZ0OnllbGxvd19jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2iy6qKNn3ob5wMKAG5ldHdvcmtfaWQZAI39CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:lime_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAwAACAQAbmFtZR4AbWluZWNyYWZ0OmxpbWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNo4dYIPslbXPUDCgBuZXR3b3JrX2lk2O8X0AoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:green_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTQAwAACAQAbmFtZR8AbWluZWNyYWZ0OmdyZWVuX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaM/c9x2aJh3HAwoAbmV0d29ya19pZA0VfBMKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cyan_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTMAwAACAQAbmFtZR4AbWluZWNyYWZ0OmN5YW5fY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNok+xKAe7XXjoDCgBuZXR3b3JrX2lkmkn6uwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:light_blue_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTGAwAACAQAbmFtZSQAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNogScpIQceyAEDCgBuZXR3b3JrX2lkOmVSbgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:blue_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTOAwAACAQAbmFtZR4AbWluZWNyYWZ0OmJsdWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoFp7mmeL86r0DCgBuZXR3b3JrX2lkS3b3RQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:purple_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAwAACAQAbmFtZSAAbWluZWNyYWZ0OnB1cnBsZV9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2iYcVU04hoStwMKAG5ldHdvcmtfaWQXimEjCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:magenta_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAwAACAQAbmFtZSEAbWluZWNyYWZ0Om1hZ2VudGFfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoy/70q6VPsWgDCgBuZXR3b3JrX2lkf9mxQwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:pink_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAwAACAQAbmFtZR4AbWluZWNyYWZ0OnBpbmtfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoVikSAf8DwV0DCgBuZXR3b3JrX2lku2MivwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:white_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTsAAAACAQAbmFtZRgAbWluZWNyYWZ0OndoaXRlX2NvbmNyZXRlBAkAbmFtZV9oYXNo6zAp7lsLlvkDCgBuZXR3b3JrX2lk3MAYQAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:light_gray_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AwAACAQAbmFtZR0AbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY29uY3JldGUECQBuYW1lX2hhc2hEtet5wuDIKAMKAG5ldHdvcmtfaWQISs02CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:gray_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AwAACAQAbmFtZRcAbWluZWNyYWZ0OmdyYXlfY29uY3JldGUECQBuYW1lX2hhc2j92INnb0a83AMKAG5ldHdvcmtfaWQj8RHwCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:black_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAwAACAQAbmFtZRgAbWluZWNyYWZ0OmJsYWNrX2NvbmNyZXRlBAkAbmFtZV9oYXNo2X7NDIQmZ70DCgBuZXR3b3JrX2lk2uiVDQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:brown_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AwAACAQAbmFtZRgAbWluZWNyYWZ0OmJyb3duX2NvbmNyZXRlBAkAbmFtZV9oYXNoeka02BwXf6oDCgBuZXR3b3JrX2lkYf+xDQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:red_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAwAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZF9jb25jcmV0ZQQJAG5hbWVfaGFzaPWmNowLGubqAwoAbmV0d29ya19pZKwyx58KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:orange_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRzAwAACAQAbmFtZRkAbWluZWNyYWZ0Om9yYW5nZV9jb25jcmV0ZQQJAG5hbWVfaGFzaAgE8XmaAi6+AwoAbmV0d29ya19pZMDQNz8KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:yellow_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR2AwAACAQAbmFtZRkAbWluZWNyYWZ0OnllbGxvd19jb25jcmV0ZQQJAG5hbWVfaGFzaE6ONfJPBd0+AwoAbmV0d29ya19pZMarutwKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:lime_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR3AwAACAQAbmFtZRcAbWluZWNyYWZ0OmxpbWVfY29uY3JldGUECQBuYW1lX2hhc2gnd8JW6wmJcAMKAG5ldHdvcmtfaWTd47aoCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:green_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR/AwAACAQAbmFtZRgAbWluZWNyYWZ0OmdyZWVuX2NvbmNyZXRlBAkAbmFtZV9oYXNokbFxRKchQZkDCgBuZXR3b3JrX2lkmhZWUgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:cyan_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AwAACAQAbmFtZRcAbWluZWNyYWZ0OmN5YW5fY29uY3JldGUECQBuYW1lX2hhc2hFRrWJ33qj1wMKAG5ldHdvcmtfaWQbi5b8CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:light_blue_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR1AwAACAQAbmFtZR0AbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY29uY3JldGUECQBuYW1lX2hhc2gHAe0kl0SE4AMKAG5ldHdvcmtfaWRL/GbSCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:blue_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AwAACAQAbmFtZRcAbWluZWNyYWZ0OmJsdWVfY29uY3JldGUECQBuYW1lX2hhc2hiay301nnj1wMKAG5ldHdvcmtfaWRMvFXNCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:purple_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR8AwAACAQAbmFtZRkAbWluZWNyYWZ0OnB1cnBsZV9jb25jcmV0ZQQJAG5hbWVfaGFzaHBHflsPIwdXAwoAbmV0d29ya19pZCyKA5gKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:magenta_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR0AwAACAQAbmFtZRoAbWluZWNyYWZ0Om1hZ2VudGFfY29uY3JldGUECQBuYW1lX2hhc2gN7LuB/OvdZAMKAG5ldHdvcmtfaWTc6ZOdCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:pink_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AwAACAQAbmFtZRcAbWluZWNyYWZ0OnBpbmtfY29uY3JldGUECQBuYW1lX2hhc2ii2G5F0u3SOAMKAG5ldHdvcmtfaWSszGgrCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:hardened_clay", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAAAACAQAbmFtZRcAbWluZWNyYWZ0OmhhcmRlbmVkX2NsYXkECQBuYW1lX2hhc2jrnRwCJ0krJAMKAG5ldHdvcmtfaWRBCOrrCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:white_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSfAAAACAQAbmFtZRoAbWluZWNyYWZ0OndoaXRlX3RlcnJhY290dGEECQBuYW1lX2hhc2j3RSdgmnAIewMKAG5ldHdvcmtfaWSimKw+CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:light_gray_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAwAACAQAbmFtZR8AbWluZWNyYWZ0OmxpZ2h0X2dyYXlfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAz1Ri3wIxomAwoAbmV0d29ya19pZH5qgOcKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:gray_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAwAACAQAbmFtZRkAbWluZWNyYWZ0OmdyYXlfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAXdSLAaNZ9vAwoAbmV0d29ya19pZM1QDV0KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:black_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWThAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJsYWNrX3RlcnJhY290dGEECQBuYW1lX2hhc2jxssdv5vlbpgMKAG5ldHdvcmtfaWRE3Ru/CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:brown_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJyb3duX3RlcnJhY290dGEECQBuYW1lX2hhc2gG4kPenmOF9gMKAG5ldHdvcmtfaWQ/i0iNCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:red_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAwAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNo7fX56HXFejEDCgBuZXR3b3JrX2lk8tTF8QoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:orange_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAwAACAQAbmFtZRsAbWluZWNyYWZ0Om9yYW5nZV90ZXJyYWNvdHRhBAkAbmFtZV9oYXNo0Hjmql3sruMDCgBuZXR3b3JrX2lklmqmkAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:yellow_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAwAACAQAbmFtZRsAbWluZWNyYWZ0OnllbGxvd190ZXJyYWNvdHRhBAkAbmFtZV9oYXNoqkyKKrmA3VcDCgBuZXR3b3JrX2lkaM/orAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:lime_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpbWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaANjADFOF9v7AwoAbmV0d29ya19pZJt0XsgKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:green_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAwAACAQAbmFtZRoAbWluZWNyYWZ0OmdyZWVuX3RlcnJhY290dGEECQBuYW1lX2hhc2j5Ybq36yYwRQMKAG5ldHdvcmtfaWQ8kGdHCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:cyan_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAwAACAQAbmFtZRkAbWluZWNyYWZ0OmN5YW5fdGVycmFjb3R0YQQJAG5hbWVfaGFzaN09COzMuHwAAwoAbmV0d29ya19pZIWPCzoKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:light_blue_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAwAACAQAbmFtZR8AbWluZWNyYWZ0OmxpZ2h0X2JsdWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaOMytez7cOZiAwoAbmV0d29ya19pZFHK1UsKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:blue_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAwAACAQAbmFtZRkAbWluZWNyYWZ0OmJsdWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaF6inyTK5RpAAwoAbmV0d29ya19pZF5mVZIKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:purple_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAwAACAQAbmFtZRsAbWluZWNyYWZ0OnB1cnBsZV90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoKF7YG61yTbEDCgBuZXR3b3JrX2lkhtRDlwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:magenta_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAwAACAQAbmFtZRwAbWluZWNyYWZ0Om1hZ2VudGFfdGVycmFjb3R0YQQJAG5hbWVfaGFzaLWvtpAVtztyAwoAbmV0d29ya19pZN5SoakKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:pink_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAwAACAQAbmFtZRkAbWluZWNyYWZ0OnBpbmtfdGVycmFjb3R0YQQJAG5hbWVfaGFzaJ7mzvyzSQZTAwoAbmV0d29ya19pZDJWe4YKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:white_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAAAACAQAbmFtZSEAbWluZWNyYWZ0OndoaXRlX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoiVzCdoHAJo0DCgBuZXR3b3JrX2lkIlj9AAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:silver_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAAAACAQAbmFtZSIAbWluZWNyYWZ0OnNpbHZlcl9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAVsA0CnhzA4AwoAbmV0d29ya19pZPnxtJEKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:gray_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAAAACAQAbmFtZSAAbWluZWNyYWZ0OmdyYXlfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2jvLZt9u/lF/AMKAG5ldHdvcmtfaWQVU8eFCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:black_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAAAACAQAbmFtZSEAbWluZWNyYWZ0OmJsYWNrX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoe8I4xAXbO5UDCgBuZXR3b3JrX2lk2Icb9AoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:brown_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWToAAAACAQAbmFtZSEAbWluZWNyYWZ0OmJyb3duX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoSiNZOobbpjoDCgBuZXR3b3JrX2lkJy0jwgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:red_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAAAACAQAbmFtZR8AbWluZWNyYWZ0OnJlZF9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaBdWFGLmCLFVAwoAbmV0d29ya19pZMYBJSEKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:orange_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAAAACAQAbmFtZSIAbWluZWNyYWZ0Om9yYW5nZV9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaMyJMrnPr7szAwoAbmV0d29ya19pZN6+7TUKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:yellow_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAAAACAQAbmFtZSIAbWluZWNyYWZ0OnllbGxvd19nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaN6NaIhf6m0uAwoAbmV0d29ya19pZKRHXeoKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:lime_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWThAAAACAQAbmFtZSAAbWluZWNyYWZ0OmxpbWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2iF3E68/rB2EAMKAG5ldHdvcmtfaWSP7qQWCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:green_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAAAACAQAbmFtZSEAbWluZWNyYWZ0OmdyZWVuX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNow5mo8aQDFboDCgBuZXR3b3JrX2lkoF11kgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:cyan_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAAAACAQAbmFtZSAAbWluZWNyYWZ0OmN5YW5fZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2gnNB+cCFRJhwMKAG5ldHdvcmtfaWT9buMtCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:light_blue_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAAAACAQAbmFtZSYAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2gladnCDBKCigMKAG5ldHdvcmtfaWS5CszFCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:blue_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAAAACAQAbmFtZSAAbWluZWNyYWZ0OmJsdWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2giOZK+2nB1igMKAG5ldHdvcmtfaWR+e22CCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:purple_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAAAACAQAbmFtZSIAbWluZWNyYWZ0OnB1cnBsZV9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaIQU03txeAfHAwoAbmV0d29ya19pZLKbSE4KBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:magenta_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAAAACAQAbmFtZSMAbWluZWNyYWZ0Om1hZ2VudGFfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2i/SNqDJbfjMgMKAG5ldHdvcmtfaWQKf9UvCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:pink_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAAAACAQAbmFtZSAAbWluZWNyYWZ0OnBpbmtfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2hik8DVt4g+twMKAG5ldHdvcmtfaWTKzav2CgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:purpur_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAAAACAQAbmFtZRYAbWluZWNyYWZ0OnB1cnB1cl9ibG9jawQJAG5hbWVfaGFzaAgLwnUZGlzsAwoAbmV0d29ya19pZGCZ+4UKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:purpur_pillar", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS2BAAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnB1cl9waWxsYXIECQBuYW1lX2hhc2iFcSsdykO+jgMKAG5ldHdvcmtfaWQe0+geCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:packed_mud", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAgAACAQAbmFtZRQAbWluZWNyYWZ0OnBhY2tlZF9tdWQECQBuYW1lX2hhc2gHOMa121h4FgMKAG5ldHdvcmtfaWTUb6LyCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:mud_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAgAACAQAbmFtZRQAbWluZWNyYWZ0Om11ZF9icmlja3MECQBuYW1lX2hhc2iDL/SVl/PewQMKAG5ldHdvcmtfaWSkBjaDCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:nether_wart_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAAAACAQAbmFtZRsAbWluZWNyYWZ0Om5ldGhlcl93YXJ0X2Jsb2NrBAkAbmFtZV9oYXNo9XGS4GNnlV4DCgBuZXR3b3JrX2lkh3apIgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:warped_wart_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAQAACAQAbmFtZRsAbWluZWNyYWZ0OndhcnBlZF93YXJ0X2Jsb2NrBAkAbmFtZV9oYXNo9IqDS9yUPJoDCgBuZXR3b3JrX2lkMpKAbAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:shroomlight", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAQAACAQAbmFtZRUAbWluZWNyYWZ0OnNocm9vbWxpZ2h0BAkAbmFtZV9oYXNoZHCHcHX/HYADCgBuZXR3b3JrX2lkLG2JiwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:crimson_nylium", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fbnlsaXVtBAkAbmFtZV9oYXNoOr6DJYW2bFYDCgBuZXR3b3JrX2lkuWpRDgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:warped_nylium", + "block_state_b64": "CgAAAwgAYmxvY2tfaWToAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9ueWxpdW0ECQBuYW1lX2hhc2g0Zf89cfr3rwMKAG5ldHdvcmtfaWSu/kekCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:netherrack", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAAAACAQAbmFtZRQAbWluZWNyYWZ0Om5ldGhlcnJhY2sECQBuYW1lX2hhc2i/r5ZyRsvPyQMKAG5ldHdvcmtfaWTAiTOACgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:soul_soil", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAQAACAQAbmFtZRMAbWluZWNyYWZ0OnNvdWxfc29pbAQJAG5hbWVfaGFzaC1/87ccutuTAwoAbmV0d29ya19pZKc63SMKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:grass_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAAAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXNzX2Jsb2NrBAkAbmFtZV9oYXNojPyGp3/CSZwDCgBuZXR3b3JrX2lktCgx3goGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:podzol", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTzAAAACAQAbmFtZRAAbWluZWNyYWZ0OnBvZHpvbAQJAG5hbWVfaGFzaBzqokRjH4Z1AwoAbmV0d29ya19pZPPS/GUKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:mycelium", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAAAACAQAbmFtZRIAbWluZWNyYWZ0Om15Y2VsaXVtBAkAbmFtZV9oYXNojTN09cKickIDCgBuZXR3b3JrX2lkLNPxXQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:grass_path", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTGAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdyYXNzX3BhdGgECQBuYW1lX2hhc2i0/KZV8Qsy+gMKAG5ldHdvcmtfaWT7CcdzCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:dirt", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAAAACAQAbmFtZQ4AbWluZWNyYWZ0OmRpcnQECQBuYW1lX2hhc2hXp6jnXAe+kQMKAG5ldHdvcmtfaWSG706CCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:coarse_dirt", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTBBAAACAQAbmFtZRUAbWluZWNyYWZ0OmNvYXJzZV9kaXJ0BAkAbmFtZV9oYXNosd+cah7WSmoDCgBuZXR3b3JrX2lkgS5RcAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:dirt_with_roots", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ9AgAACAQAbmFtZRkAbWluZWNyYWZ0OmRpcnRfd2l0aF9yb290cwQJAG5hbWVfaGFzaLCNDYPviDCIAwoAbmV0d29ya19pZNCkwzoKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:farmland", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AAAACAQAbmFtZRIAbWluZWNyYWZ0OmZhcm1sYW5kBAkAbmFtZV9oYXNoxyQ5ag7LolADCgBuZXR3b3JrX2lkX618FQoGAHN0YXRlcwMSAG1vaXN0dXJpemVkX2Ftb3VudAAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:mud", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAgAACAQAbmFtZQ0AbWluZWNyYWZ0Om11ZAQJAG5hbWVfaGFzaPb/3P+uLy+9AwoAbmV0d29ya19pZPIUlUkKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:clay", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRSAAAACAQAbmFtZQ4AbWluZWNyYWZ0OmNsYXkECQBuYW1lX2hhc2j/S6sKXRcpzwMKAG5ldHdvcmtfaWRmsb8nCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:iron_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAAAACAQAbmFtZRIAbWluZWNyYWZ0Omlyb25fb3JlBAkAbmFtZV9oYXNoS7BYtLnfx3gDCgBuZXR3b3JrX2lk3loneQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:gold_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAAAACAQAbmFtZRIAbWluZWNyYWZ0OmdvbGRfb3JlBAkAbmFtZV9oYXNoC5Y+DUGXLC4DCgBuZXR3b3JrX2lkNhvMfwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:diamond_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4AAAACAQAbmFtZRUAbWluZWNyYWZ0OmRpYW1vbmRfb3JlBAkAbmFtZV9oYXNokUOJ2wZZrGQDCgBuZXR3b3JrX2lk/dChVAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:lapis_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQVAAAACAQAbmFtZRMAbWluZWNyYWZ0OmxhcGlzX29yZQQJAG5hbWVfaGFzaMrmrUrSzb7qAwoAbmV0d29ya19pZMg+qK4KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:redstone_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAAAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZHN0b25lX29yZQQJAG5hbWVfaGFzaFHVnp8Wc4JbAwoAbmV0d29ya19pZKDYvQoKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:coal_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAAAACAQAbmFtZRIAbWluZWNyYWZ0OmNvYWxfb3JlBAkAbmFtZV9oYXNo1OjA+Iuy51oDCgBuZXR3b3JrX2lk+R/aKAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:copper_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2AgAACAQAbmFtZRQAbWluZWNyYWZ0OmNvcHBlcl9vcmUECQBuYW1lX2hhc2iSZduSntOzOwMKAG5ldHdvcmtfaWQtIuCnCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:emerald_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAAAACAQAbmFtZRUAbWluZWNyYWZ0OmVtZXJhbGRfb3JlBAkAbmFtZV9oYXNoJTovr+VgINsDCgBuZXR3b3JrX2lknbkqCgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:quartz_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAAAACAQAbmFtZRQAbWluZWNyYWZ0OnF1YXJ0el9vcmUECQBuYW1lX2hhc2g0yNHLMK9TaQMKAG5ldHdvcmtfaWSzN7nzCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:nether_gold_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQfAgAACAQAbmFtZRkAbWluZWNyYWZ0Om5ldGhlcl9nb2xkX29yZQQJAG5hbWVfaGFzaEJZ7segIBgBAwoAbmV0d29ya19pZNI9pDgKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:ancient_debris", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAgAACAQAbmFtZRgAbWluZWNyYWZ0OmFuY2llbnRfZGVicmlzBAkAbmFtZV9oYXNoNrbxMc9AwKcDCgBuZXR3b3JrX2lkrSNjEAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:deepslate_iron_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9pcm9uX29yZQQJAG5hbWVfaGFzaB/fDL9pgvXXAwoAbmV0d29ya19pZFA0bz4KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:deepslate_gold_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9nb2xkX29yZQQJAG5hbWVfaGFzaF9G7WYhKFinAwoAbmV0d29ya19pZHQTfBUKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:deepslate_diamond_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV9kaWFtb25kX29yZQQJAG5hbWVfaGFzaEUH5USh+iD3AwoAbmV0d29ya19pZHP6VzAKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:deepslate_lapis_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV9sYXBpc19vcmUECQBuYW1lX2hhc2j+yFxU/KZs1gMKAG5ldHdvcmtfaWRKINzICgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:deepslate_redstone_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAgAACAQAbmFtZSAAbWluZWNyYWZ0OmRlZXBzbGF0ZV9yZWRzdG9uZV9vcmUECQBuYW1lX2hhc2iVgM3wWWD6ugMKAG5ldHdvcmtfaWReBdYRCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:deepslate_emerald_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSWAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV9lbWVyYWxkX29yZQQJAG5hbWVfaGFzaNlfo5HTwS6wAwoAbmV0d29ya19pZNeie6sKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:deepslate_coal_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSVAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9jb2FsX29yZQQJAG5hbWVfaGFzaIjikmcbRrPPAwoAbmV0d29ya19pZD9TiygKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:deepslate_copper_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9jb3BwZXJfb3JlBAkAbmFtZV9oYXNottjV4Ev5LAQDCgBuZXR3b3JrX2lkP23rgQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:stone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lkIQ4xgAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:granite", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAwAACAQAbmFtZREAbWluZWNyYWZ0OmdyYW5pdGUECQBuYW1lX2hhc2iq+Dur2pw4AwMKAG5ldHdvcmtfaWT2NMfJCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:diorite", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAwAACAQAbmFtZREAbWluZWNyYWZ0OmRpb3JpdGUECQBuYW1lX2hhc2iaFsq2iinZBQMKAG5ldHdvcmtfaWQqGE6XCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:andesite", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAwAACAQAbmFtZRIAbWluZWNyYWZ0OmFuZGVzaXRlBAkAbmFtZV9oYXNosaLIEnQQoSYDCgBuZXR3b3JrX2lkEApRZAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:blackstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAgAACAQAbmFtZRQAbWluZWNyYWZ0OmJsYWNrc3RvbmUECQBuYW1lX2hhc2iMFYziD80D6QMKAG5ldHdvcmtfaWSrUryHCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:deepslate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AgAACAQAbmFtZRMAbWluZWNyYWZ0OmRlZXBzbGF0ZQQJAG5hbWVfaGFzaKX5pAblxz8TAwoAbmV0d29ya19pZOJoQjsKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:tuff", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAgAACAQAbmFtZQ4AbWluZWNyYWZ0OnR1ZmYECQBuYW1lX2hhc2h1Rwc1XYsBGwMKAG5ldHdvcmtfaWRwQGn0CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:basalt", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhc2FsdAQJAG5hbWVfaGFzaH+UQO2yWodiAwoAbmV0d29ya19pZBPNSV4KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:polished_granite", + "block_state_b64": "CgAAAwgAYmxvY2tfaWROAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGUECQBuYW1lX2hhc2iLiEfys8pFIAMKAG5ldHdvcmtfaWTCxxcHCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:polished_diorite", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGUECQBuYW1lX2hhc2hTxY4fKmNmlAMKAG5ldHdvcmtfaWTmtjdRCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:polished_andesite", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRSAwAACAQAbmFtZRsAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlBAkAbmFtZV9oYXNovl28uFk4HuQDCgBuZXR3b3JrX2lklFjuCwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:polished_blackstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQiAgAACAQAbmFtZR0AbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmUECQBuYW1lX2hhc2jT9fHCl6vWQQMKAG5ldHdvcmtfaWR/Ho6oCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:polished_deepslate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AgAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaHC1edoaWF3uAwoAbmV0d29ya19pZCPeQsEKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:polished_tuff", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAwAACAQAbmFtZRcAbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmYECQBuYW1lX2hhc2hyaLe/KEVZ0gMKAG5ldHdvcmtfaWTcX3NrCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:polished_basalt", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAQAACAQAbmFtZRkAbWluZWNyYWZ0OnBvbGlzaGVkX2Jhc2FsdAQJAG5hbWVfaGFzaMS+L0gMnRcBAwoAbmV0d29ya19pZF+/mHwKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:smooth_basalt", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AgAACAQAbmFtZRcAbWluZWNyYWZ0OnNtb290aF9iYXNhbHQECQBuYW1lX2hhc2jKPUdz89kuNAMKAG5ldHdvcmtfaWTkb/oVCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:gravel", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAAAACAQAbmFtZRAAbWluZWNyYWZ0OmdyYXZlbAQJAG5hbWVfaGFzaOFxz8XJd2r/AwoAbmV0d29ya19pZBpfI1sKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:sand", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQMAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnNhbmQECQBuYW1lX2hhc2i6lthXXbAyWAMKAG5ldHdvcmtfaWRjeUMICgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:red_sand", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS0BAAACAQAbmFtZRIAbWluZWNyYWZ0OnJlZF9zYW5kBAkAbmFtZV9oYXNoCiarI69JQCkDCgBuZXR3b3JrX2lkU8UD/AoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:cactus", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAAAACAQAbmFtZRAAbWluZWNyYWZ0OmNhY3R1cwQJAG5hbWVfaGFzaCG9zL0N4wvGAwoAbmV0d29ya19pZDeCERAKBgBzdGF0ZXMDAwBhZ2UAAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:oak_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAAAACAQAbmFtZREAbWluZWNyYWZ0Om9ha19sb2cECQBuYW1lX2hhc2ho6TS+K7PZFQMKAG5ldHdvcmtfaWQjfjoxCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:stripped_oak_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQJAQAACAQAbmFtZRoAbWluZWNyYWZ0OnN0cmlwcGVkX29ha19sb2cECQBuYW1lX2hhc2h8dqh+OOHU4wMKAG5ldHdvcmtfaWSYKjdrCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:spruce_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4AwAACAQAbmFtZRQAbWluZWNyYWZ0OnNwcnVjZV9sb2cECQBuYW1lX2hhc2hZ03qaLoF3WgMKAG5ldHdvcmtfaWRlFD8eCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:stripped_spruce_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX3NwcnVjZV9sb2cECQBuYW1lX2hhc2iNrhKjS5IyrgMKAG5ldHdvcmtfaWRQcEC3CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:birch_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5AwAACAQAbmFtZRMAbWluZWNyYWZ0OmJpcmNoX2xvZwQJAG5hbWVfaGFzaBUzT3NxsZAnAwoAbmV0d29ya19pZBKN3VQKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:stripped_birch_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAQAACAQAbmFtZRwAbWluZWNyYWZ0OnN0cmlwcGVkX2JpcmNoX2xvZwQJAG5hbWVfaGFzaCFKS4AeuSidAwoAbmV0d29ya19pZN0IONIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:jungle_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6AwAACAQAbmFtZRQAbWluZWNyYWZ0Omp1bmdsZV9sb2cECQBuYW1lX2hhc2gkwW0KNulqDgMKAG5ldHdvcmtfaWQaziU/CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:stripped_jungle_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2p1bmdsZV9sb2cECQBuYW1lX2hhc2hAwMsgOk02JAMKAG5ldHdvcmtfaWQvls0eCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:acacia_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAAAACAQAbmFtZRQAbWluZWNyYWZ0OmFjYWNpYV9sb2cECQBuYW1lX2hhc2iV48VpYhjoYQMKAG5ldHdvcmtfaWRxEqe0CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:stripped_acacia_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2FjYWNpYV9sb2cECQBuYW1lX2hhc2hJb0lQqnEqlgMKAG5ldHdvcmtfaWRg3IdRCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:dark_oak_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ7AwAACAQAbmFtZRYAbWluZWNyYWZ0OmRhcmtfb2FrX2xvZwQJAG5hbWVfaGFzaIWfVRd0XUo3AwoAbmV0d29ya19pZPMM7LYKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:stripped_dark_oak_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQIAQAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2Rhcmtfb2FrX2xvZwQJAG5hbWVfaGFzaPFTdxRdPwkOAwoAbmV0d29ya19pZDIzenIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:mangrove_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAgAACAQAbmFtZRYAbWluZWNyYWZ0Om1hbmdyb3ZlX2xvZwQJAG5hbWVfaGFzaHZe6DzPZBobAwoAbmV0d29ya19pZG6DuYkKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:stripped_mangrove_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX21hbmdyb3ZlX2xvZwQJAG5hbWVfaGFzaLqIBo4hwA//AwoAbmV0d29ya19pZPtRn7UKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:cherry_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAwAACAQAbmFtZRQAbWluZWNyYWZ0OmNoZXJyeV9sb2cECQBuYW1lX2hhc2hwFlaioppB1wMKAG5ldHdvcmtfaWS2sdXECgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:stripped_cherry_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAwAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2NoZXJyeV9sb2cECQBuYW1lX2hhc2i85H6G+WhXaAMKAG5ldHdvcmtfaWRjzoglCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:crimson_stem", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAQAACAQAbmFtZRYAbWluZWNyYWZ0OmNyaW1zb25fc3RlbQQJAG5hbWVfaGFzaM0FzfL0UTKZAwoAbmV0d29ya19pZKvzID0KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:stripped_crimson_stem", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTvAQAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2NyaW1zb25fc3RlbQQJAG5hbWVfaGFzaDlA6nood57EAwoAbmV0d29ya19pZHrIqjIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:warped_stem", + "block_state_b64": "CgAAAwgAYmxvY2tfaWThAQAACAQAbmFtZRUAbWluZWNyYWZ0OndhcnBlZF9zdGVtBAkAbmFtZV9oYXNon7cKfPZxdrUDCgBuZXR3b3JrX2lkerWyMwoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:stripped_warped_stem", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAQAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX3dhcnBlZF9zdGVtBAkAbmFtZV9oYXNoEw+y0dDPSd8DCgBuZXR3b3JrX2lkIQ9vBAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:oak_wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAQAACAQAbmFtZRIAbWluZWNyYWZ0Om9ha193b29kBAkAbmFtZV9oYXNoqQIkuVPyJX0DCgBuZXR3b3JrX2lku2G1YAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:stripped_oak_wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQyBAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0cmlwcGVkX29ha193b29kBAkAbmFtZV9oYXNovW6KCv+VZnsDCgBuZXR3b3JrX2lkkhWGegoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:spruce_wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQtBAAACAQAbmFtZRUAbWluZWNyYWZ0OnNwcnVjZV93b29kBAkAbmFtZV9oYXNoTrIJ5TAQ+OgDCgBuZXR3b3JrX2lkaXLxCwoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:stripped_spruce_wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQzBAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX3NwcnVjZV93b29kBAkAbmFtZV9oYXNoMnuUk4Xo6icDCgBuZXR3b3JrX2lkes2ydAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:birch_wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQuBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJpcmNoX3dvb2QECQBuYW1lX2hhc2iqVjG4xt0cKQMKAG5ldHdvcmtfaWS06c5VCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:stripped_birch_wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ0BAAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2JpcmNoX3dvb2QECQBuYW1lX2hhc2hm88R604TKbAMKAG5ldHdvcmtfaWRleEMJCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:jungle_wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQvBAAACAQAbmFtZRUAbWluZWNyYWZ0Omp1bmdsZV93b29kBAkAbmFtZV9oYXNo9bYW29ORWCoDCgBuZXR3b3JrX2lkyFyKLQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:stripped_jungle_wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ1BAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2p1bmdsZV93b29kBAkAbmFtZV9oYXNoUVs6KsZQRBoDCgBuZXR3b3JrX2lk92k8HQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:acacia_wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQwBAAACAQAbmFtZRUAbWluZWNyYWZ0OmFjYWNpYV93b29kBAkAbmFtZV9oYXNoKkDfgzlJUcIDCgBuZXR3b3JrX2lkuTWlcgoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:stripped_acacia_wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2BAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2FjYWNpYV93b29kBAkAbmFtZV9oYXNo/kOPN2bCJhUDCgBuZXR3b3JrX2lktl6LwQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:dark_oak_wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQxBAAACAQAbmFtZRcAbWluZWNyYWZ0OmRhcmtfb2FrX3dvb2QECQBuYW1lX2hhc2jaKv4ORLadAAMKAG5ldHdvcmtfaWSDrNQ8CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:stripped_dark_oak_wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ3BAAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX2Rhcmtfb2FrX3dvb2QECQBuYW1lX2hhc2h2jFDfKVFgfAMKAG5ldHdvcmtfaWTgZQ5VCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:mangrove_wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAgAACAQAbmFtZRcAbWluZWNyYWZ0Om1hbmdyb3ZlX3dvb2QECQBuYW1lX2hhc2iXVxG0JG2fVAMKAG5ldHdvcmtfaWSkqJ4cCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:stripped_mangrove_wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAgAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX21hbmdyb3ZlX3dvb2QECQBuYW1lX2hhc2h7CkbaBF7/WAMKAG5ldHdvcmtfaWQLAX88CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cherry_wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQhAwAACAQAbmFtZRUAbWluZWNyYWZ0OmNoZXJyeV93b29kBAkAbmFtZV9oYXNoAW8srlmpBM8DCgBuZXR3b3JrX2lkLPsAwgoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:stripped_cherry_wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAwAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2NoZXJyeV93b29kBAkAbmFtZV9oYXNo/e7KXv+CB38DCgBuZXR3b3JrX2lkg5aVtQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:crimson_hyphae", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25faHlwaGFlBAkAbmFtZV9oYXNouRmKmfSqEWADCgBuZXR3b3JrX2lk+Tm5rQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:stripped_crimson_hyphae", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQrAgAACAQAbmFtZSEAbWluZWNyYWZ0OnN0cmlwcGVkX2NyaW1zb25faHlwaGFlBAkAbmFtZV9oYXNoFffwmABq4LUDCgBuZXR3b3JrX2lkZAlUbgoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:warped_hyphae", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9oeXBoYWUECQBuYW1lX2hhc2hn8plQUr6pmQMKAG5ldHdvcmtfaWRU2AIBCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:stripped_warped_hyphae", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAgAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX3dhcnBlZF9oeXBoYWUECQBuYW1lX2hhc2irKq+HYPSgjQMKAG5ldHdvcmtfaWSbrOPDCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:bamboo_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJhbWJvb19ibG9jawQJAG5hbWVfaGFzaAbDeur6stIBAwoAbmV0d29ya19pZCJAwn0KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:stripped_bamboo_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAwAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2JhbWJvb19ibG9jawQJAG5hbWVfaGFzaJpwytpZOZM9AwoAbmV0d29ya19pZKuRbNEKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:oak_leaves", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQSAAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19sZWF2ZXMECQBuYW1lX2hhc2h6O4xGqA2oKgMKAG5ldHdvcmtfaWT98c59CgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:spruce_leaves", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQfBAAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9sZWF2ZXMECQBuYW1lX2hhc2i9x1CtNAuqZwMKAG5ldHdvcmtfaWSzF7pTCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:birch_leaves", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQgBAAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX2xlYXZlcwQJAG5hbWVfaGFzaBlAGHaoaLZSAwoAbmV0d29ya19pZOjtvWcKBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:jungle_leaves", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQhBAAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9sZWF2ZXMECQBuYW1lX2hhc2iW1uAH07zGhgMKAG5ldHdvcmtfaWSA5KX0CgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:acacia_leaves", + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAAAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9sZWF2ZXMECQBuYW1lX2hhc2iZJf8dAgDRNQMKAG5ldHdvcmtfaWQ/G7VuCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:dark_oak_leaves", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQiBAAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX2xlYXZlcwQJAG5hbWVfaGFzaCk7rDipWFSjAwoAbmV0d29ya19pZJ2AkbYKBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:mangrove_leaves", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX2xlYXZlcwQJAG5hbWVfaGFzaKyI/dWvhEG8AwoAbmV0d29ya19pZPQxCZ8KBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:cherry_leaves", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9sZWF2ZXMECQBuYW1lX2hhc2giTs9ChhYBlQMKAG5ldHdvcmtfaWR8bPpwCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:azalea_leaves", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAgAACAQAbmFtZRcAbWluZWNyYWZ0OmF6YWxlYV9sZWF2ZXMECQBuYW1lX2hhc2iXFhD57wFS7AMKAG5ldHdvcmtfaWTNB/9ECgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:azalea_leaves_flowered", + "block_state_b64": "CgAAAwgAYmxvY2tfaWREAgAACAQAbmFtZSAAbWluZWNyYWZ0OmF6YWxlYV9sZWF2ZXNfZmxvd2VyZWQECQBuYW1lX2hhc2gs8jxlS/pMrwMKAG5ldHdvcmtfaWQ7W4PyCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:oak_sapling", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAAAACAQAbmFtZRUAbWluZWNyYWZ0Om9ha19zYXBsaW5nBAkAbmFtZV9oYXNoogXcT9QfjiUDCgBuZXR3b3JrX2lkG22C+AoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:spruce_sapling", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4BAAACAQAbmFtZRgAbWluZWNyYWZ0OnNwcnVjZV9zYXBsaW5nBAkAbmFtZV9oYXNoe8hz4uYP0FcDCgBuZXR3b3JrX2lkUQmhaQoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:birch_sapling", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5BAAACAQAbmFtZRcAbWluZWNyYWZ0OmJpcmNoX3NhcGxpbmcECQBuYW1lX2hhc2h348iJQ/tK4wMKAG5ldHdvcmtfaWQ2Uh53CgYAc3RhdGVzAQcAYWdlX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:jungle_sapling", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6BAAACAQAbmFtZRgAbWluZWNyYWZ0Omp1bmdsZV9zYXBsaW5nBAkAbmFtZV9oYXNo7tyTOdSrxaADCgBuZXR3b3JrX2lkXmBAdAoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:acacia_sapling", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ7BAAACAQAbmFtZRgAbWluZWNyYWZ0OmFjYWNpYV9zYXBsaW5nBAkAbmFtZV9oYXNo99sg15uoX7ADCgBuZXR3b3JrX2lkPXX1KgoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:dark_oak_sapling", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8BAAACAQAbmFtZRoAbWluZWNyYWZ0OmRhcmtfb2FrX3NhcGxpbmcECQBuYW1lX2hhc2jnVzFplW7cHgMKAG5ldHdvcmtfaWTD4giHCgYAc3RhdGVzAQcAYWdlX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:mangrove_propagule", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAgAACAQAbmFtZRwAbWluZWNyYWZ0Om1hbmdyb3ZlX3Byb3BhZ3VsZQQJAG5hbWVfaGFzaJGeox6hkfLFAwoAbmV0d29ya19pZAIpvpYKBgBzdGF0ZXMBBwBoYW5naW5nAAMPAHByb3BhZ3VsZV9zdGFnZQAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cherry_sapling", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQiAwAACAQAbmFtZRgAbWluZWNyYWZ0OmNoZXJyeV9zYXBsaW5nBAkAbmFtZV9oYXNoGrPpNMf1LtcDCgBuZXR3b3JrX2lkypakXQoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:bee_nest", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAQAACAQAbmFtZRIAbWluZWNyYWZ0OmJlZV9uZXN0BAkAbmFtZV9oYXNo2R2WBxUHEZIDCgBuZXR3b3JrX2lkiXWLEAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAADCwBob25leV9sZXZlbAAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "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": "CgAAAwgAYmxvY2tfaWRnAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1lbG9uX2Jsb2NrBAkAbmFtZV9oYXNoXxSm0iYpAx8DCgBuZXR3b3JrX2lkC9rqygoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:melon_slice" + }, + { + "id": "minecraft:glistering_melon_slice" + }, + { + "id": "minecraft:sweet_berries" + }, + { + "id": "minecraft:glow_berries" + }, + { + "id": "minecraft:pumpkin", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAAAACAQAbmFtZREAbWluZWNyYWZ0OnB1bXBraW4ECQBuYW1lX2hhc2gc8A3jaSzWbgMKAG5ldHdvcmtfaWRFGA+xCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:carved_pumpkin", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSaAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNhcnZlZF9wdW1wa2luBAkAbmFtZV9oYXNoPu1T0MJuG90DCgBuZXR3b3JrX2lkXNNn5QoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:lit_pumpkin", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAAAACAQAbmFtZRUAbWluZWNyYWZ0OmxpdF9wdW1wa2luBAkAbmFtZV9oYXNo7gWtEm2uPL0DCgBuZXR3b3JrX2lki8sU4AoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:honeycomb" + }, + { + "id": "minecraft:fern", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRPBAAACAQAbmFtZQ4AbWluZWNyYWZ0OmZlcm4ECQBuYW1lX2hhc2iHbj3yXFn4owMKAG5ldHdvcmtfaWQKC6u7CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:large_fern", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRgBAAACAQAbmFtZRQAbWluZWNyYWZ0OmxhcmdlX2Zlcm4ECQBuYW1lX2hhc2gnE9sd0LzHtQMKAG5ldHdvcmtfaWTS9hG4CgYAc3RhdGVzAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:short_grass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQfAAAACAQAbmFtZRUAbWluZWNyYWZ0OnNob3J0X2dyYXNzBAkAbmFtZV9oYXNobWQghLH0bLcDCgBuZXR3b3JrX2lkJWOOqAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:tall_grass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRfBAAACAQAbmFtZRQAbWluZWNyYWZ0OnRhbGxfZ3Jhc3MECQBuYW1lX2hhc2ii5MyZJpv4sgMKAG5ldHdvcmtfaWRRfeH4CgYAc3RhdGVzAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:nether_sprouts" + }, + { + "id": "minecraft:fire_coral", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAwAACAQAbmFtZRQAbWluZWNyYWZ0OmZpcmVfY29yYWwECQBuYW1lX2hhc2hOHyyECVQVJwMKAG5ldHdvcmtfaWS9vF0UCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:brain_coral", + "block_state_b64": "CgAAAwgAYmxvY2tfaWREAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJyYWluX2NvcmFsBAkAbmFtZV9oYXNoRiWlLCwA2ycDCgBuZXR3b3JrX2lkrjAuhgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:bubble_coral", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbAQJAG5hbWVfaGFzaJz6rWnl+v2qAwoAbmV0d29ya19pZImIWy0KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:tube_coral", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAQAACAQAbmFtZRQAbWluZWNyYWZ0OnR1YmVfY29yYWwECQBuYW1lX2hhc2iYa8oO/tgk7wMKAG5ldHdvcmtfaWRTfND5CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:horn_coral", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRHAwAACAQAbmFtZRQAbWluZWNyYWZ0Omhvcm5fY29yYWwECQBuYW1lX2hhc2iZnRHjZbnLPgMKAG5ldHdvcmtfaWR+GGp8CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:dead_fire_coral", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRLAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbAQJAG5hbWVfaGFzaEPU6tFy/latAwoAbmV0d29ya19pZNMa7V4KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:dead_brain_coral", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAwAACAQAbmFtZRoAbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWwECQBuYW1lX2hhc2j5L6QJCISvzwMKAG5ldHdvcmtfaWQkKzeiCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:dead_bubble_coral", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRKAwAACAQAbmFtZRsAbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsBAkAbmFtZV9oYXNoSTOZ/8wpeNYDCgBuZXR3b3JrX2lka6w9DAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:dead_tube_coral", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbAQJAG5hbWVfaGFzaJGjNWhlaIJeAwoAbmV0d29ya19pZO3Z0ygKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:dead_horn_coral", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbAQJAG5hbWVfaGFzaJBkz3qt+g2cAwoAbmV0d29ya19pZBAN+eYKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:fire_coral_fan", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRJBAAACAQAbmFtZRgAbWluZWNyYWZ0OmZpcmVfY29yYWxfZmFuBAkAbmFtZV9oYXNosOTxYYxsDLgDCgBuZXR3b3JrX2lkFKxbEgoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:brain_coral_fan", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRHBAAACAQAbmFtZRkAbWluZWNyYWZ0OmJyYWluX2NvcmFsX2ZhbgQJAG5hbWVfaGFzaAi5uHizSNcqAwoAbmV0d29ya19pZFtLjNwKBgBzdGF0ZXMDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:bubble_coral_fan", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRIBAAACAQAbmFtZRoAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbF9mYW4ECQBuYW1lX2hhc2hy/rX2on17DgMKAG5ldHdvcmtfaWQof60VCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:tube_coral_fan", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAQAACAQAbmFtZRgAbWluZWNyYWZ0OnR1YmVfY29yYWxfZmFuBAkAbmFtZV9oYXNo9pbJbo+PphIDCgBuZXR3b3JrX2lkenDTYgoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:horn_coral_fan", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRKBAAACAQAbmFtZRgAbWluZWNyYWZ0Omhvcm5fY29yYWxfZmFuBAkAbmFtZV9oYXNoA+ri6NPDkbUDCgBuZXR3b3JrX2lkezoHNwoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:dead_fire_coral_fan", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRNBAAACAQAbmFtZR0AbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbF9mYW4ECQBuYW1lX2hhc2hpQO02NDxPvwMKAG5ldHdvcmtfaWTaOJgLCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:dead_brain_coral_fan", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRLBAAACAQAbmFtZR4AbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWxfZmFuBAkAbmFtZV9oYXNoI9/+Z4YqMhIDCgBuZXR3b3JrX2lkqYXxYgoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:dead_bubble_coral_fan", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRMBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsX2ZhbgQJAG5hbWVfaGFzaBNECtIM6VIOAwoAbmV0d29ya19pZLrNtBEKBgBzdGF0ZXMDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:dead_tube_coral_fan", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAQAACAQAbmFtZR0AbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbF9mYW4ECQBuYW1lX2hhc2hbBBM9jFKWvQMKAG5ldHdvcmtfaWSkJKUWCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:dead_horn_coral_fan", + "block_state_b64": "CgAAAwgAYmxvY2tfaWROBAAACAQAbmFtZR0AbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbF9mYW4ECQBuYW1lX2hhc2hObElFrHfPygMKAG5ldHdvcmtfaWQ1ZxvmCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:crimson_roots", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAQAACAQAbmFtZRcAbWluZWNyYWZ0OmNyaW1zb25fcm9vdHMECQBuYW1lX2hhc2j1fWgQLViv5QMKAG5ldHdvcmtfaWRLh5DXCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:warped_roots", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAQAACAQAbmFtZRYAbWluZWNyYWZ0OndhcnBlZF9yb290cwQJAG5hbWVfaGFzaBc3WvbJOLlkAwoAbmV0d29ya19pZNLgDnAKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:dandelion", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQlAAAACAQAbmFtZRMAbWluZWNyYWZ0OmRhbmRlbGlvbgQJAG5hbWVfaGFzaBJ3bEUi+Nn/AwoAbmV0d29ya19pZBjjC44KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:poppy", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnBvcHB5BAkAbmFtZV9oYXNocMF8pITMbkcDCgBuZXR3b3JrX2lk8im6ywoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:blue_orchid", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ9BAAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfb3JjaGlkBAkAbmFtZV9oYXNoBjz2MsgB21EDCgBuZXR3b3JrX2lk/iLsSwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:allium", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ+BAAACAQAbmFtZRAAbWluZWNyYWZ0OmFsbGl1bQQJAG5hbWVfaGFzaDCGQBHNDTkcAwoAbmV0d29ya19pZD9Dgr0KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:azure_bluet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ/BAAACAQAbmFtZRUAbWluZWNyYWZ0OmF6dXJlX2JsdWV0BAkAbmFtZV9oYXNo9N5egqMT2QcDCgBuZXR3b3JrX2lkwIgDnwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:red_tulip", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRABAAACAQAbmFtZRMAbWluZWNyYWZ0OnJlZF90dWxpcAQJAG5hbWVfaGFzaAjMi9Rd+6rhAwoAbmV0d29ya19pZAZCnt8KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:orange_tulip", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRBBAAACAQAbmFtZRYAbWluZWNyYWZ0Om9yYW5nZV90dWxpcAQJAG5hbWVfaGFzaP+NjxMBZ8vAAwoAbmV0d29ya19pZPYatsMKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:white_tulip", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRCBAAACAQAbmFtZRUAbWluZWNyYWZ0OndoaXRlX3R1bGlwBAkAbmFtZV9oYXNo5vbU4VRPh3ADCgBuZXR3b3JrX2lkok+4rQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:pink_tulip", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRDBAAACAQAbmFtZRQAbWluZWNyYWZ0OnBpbmtfdHVsaXAECQBuYW1lX2hhc2hxDHZa6OaNXAMKAG5ldHdvcmtfaWTiOT+VCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:oxeye_daisy", + "block_state_b64": "CgAAAwgAYmxvY2tfaWREBAAACAQAbmFtZRUAbWluZWNyYWZ0Om94ZXllX2RhaXN5BAkAbmFtZV9oYXNoXwxsqNQTN9gDCgBuZXR3b3JrX2lkw7R7dwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:cornflower", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRFBAAACAQAbmFtZRQAbWluZWNyYWZ0OmNvcm5mbG93ZXIECQBuYW1lX2hhc2gnhyC3EeqHgAMKAG5ldHdvcmtfaWR4VrvACgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:lily_of_the_valley", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRGBAAACAQAbmFtZRwAbWluZWNyYWZ0OmxpbHlfb2ZfdGhlX3ZhbGxleQQJAG5hbWVfaGFzaI64TJSf9mgQAwoAbmV0d29ya19pZFE9+nwKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:sunflower", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAAAACAQAbmFtZRMAbWluZWNyYWZ0OnN1bmZsb3dlcgQJAG5hbWVfaGFzaAMxYQLoqlZ0AwoAbmV0d29ya19pZA10iSoKBgBzdGF0ZXMBDwB1cHBlcl9ibG9ja19iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:lilac", + "block_state_b64": "CgAAAwgAYmxvY2tfaWReBAAACAQAbmFtZQ8AbWluZWNyYWZ0OmxpbGFjBAkAbmFtZV9oYXNoD3nrQJuo7NkDCgBuZXR3b3JrX2lk5W+uFAoGAHN0YXRlcwEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:rose_bush", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRhBAAACAQAbmFtZRMAbWluZWNyYWZ0OnJvc2VfYnVzaAQJAG5hbWVfaGFzaLoiFk8LVpGKAwoAbmV0d29ya19pZMZPv48KBgBzdGF0ZXMBDwB1cHBlcl9ibG9ja19iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:peony", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRiBAAACAQAbmFtZQ8AbWluZWNyYWZ0OnBlb255BAkAbmFtZV9oYXNoR4dYc4QquPADCgBuZXR3b3JrX2lkrTe7RwoGAHN0YXRlcwEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:pitcher_plant", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAwAACAQAbmFtZRcAbWluZWNyYWZ0OnBpdGNoZXJfcGxhbnQECQBuYW1lX2hhc2hRJHzsbDH+SQMKAG5ldHdvcmtfaWRnY76VCgYAc3RhdGVzAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:pink_petals", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQkAwAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfcGV0YWxzBAkAbmFtZV9oYXNo6DQwN9SwV3QDCgBuZXR3b3JrX2lkNWneGgoGAHN0YXRlcwMGAGdyb3d0aAAAAAAIHABtaW5lY3JhZnQ6Y2FyZGluYWxfZGlyZWN0aW9uBQBzb3V0aAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:wither_rose", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAQAACAQAbmFtZRUAbWluZWNyYWZ0OndpdGhlcl9yb3NlBAkAbmFtZV9oYXNoaSKxl3I516gDCgBuZXR3b3JrX2lkATXLPwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:torchflower", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ3AwAACAQAbmFtZRUAbWluZWNyYWZ0OnRvcmNoZmxvd2VyBAkAbmFtZV9oYXNoL+mHtElwbqQDCgBuZXR3b3JrX2lkI34O+AoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "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/XeXOLAMKAG5ldHdvcmtfaWSUkDtbCgYAc3RhdGVzAxMAdmluZV9kaXJlY3Rpb25fYml0cwAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:weeping_vines", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAQAACAQAbmFtZRcAbWluZWNyYWZ0OndlZXBpbmdfdmluZXMECQBuYW1lX2hhc2jrLgLHkQygiwMKAG5ldHdvcmtfaWQ8NHSJCgYAc3RhdGVzAxEAd2VlcGluZ192aW5lc19hZ2UAAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:twisting_vines", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAgAACAQAbmFtZRgAbWluZWNyYWZ0OnR3aXN0aW5nX3ZpbmVzBAkAbmFtZV9oYXNoDYR5QgVUQJADCgBuZXR3b3JrX2lk5kYVIQoGAHN0YXRlcwMSAHR3aXN0aW5nX3ZpbmVzX2FnZQAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:waterlily", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRvAAAACAQAbmFtZRMAbWluZWNyYWZ0OndhdGVybGlseQQJAG5hbWVfaGFzaEHgC4c1SXg0AwoAbmV0d29ya19pZOOerp8KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:seagrass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAQAACAQAbmFtZRIAbWluZWNyYWZ0OnNlYWdyYXNzBAkAbmFtZV9oYXNoHSBFtoHdWxIDCgBuZXR3b3JrX2lkd3lhEAoGAHN0YXRlcwgOAHNlYV9ncmFzc190eXBlBwBkZWZhdWx0AAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:kelp" + }, + { + "id": "minecraft:deadbush", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAAAACAQAbmFtZRIAbWluZWNyYWZ0OmRlYWRidXNoBAkAbmFtZV9oYXNoPFODe4IScnYDCgBuZXR3b3JrX2lkVfnl+goGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:bamboo", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhbWJvbwQJAG5hbWVfaGFzaBgpGmyzhedCAwoAbmV0d29ya19pZIZv1nYKBgBzdGF0ZXMBBwBhZ2VfYml0AAgQAGJhbWJvb19sZWFmX3NpemUJAG5vX2xlYXZlcwgWAGJhbWJvb19zdGFsa190aGlja25lc3MEAHRoaW4AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:snow", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnNub3cECQBuYW1lX2hhc2gVHr5XXdETWAMKAG5ldHdvcmtfaWQ0zCeHCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:ice", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAAAACAQAbmFtZQ0AbWluZWNyYWZ0OmljZQQJAG5hbWVfaGFzaNF26f+uUT29AwoAbmV0d29ya19pZOUMaQYKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:packed_ice", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAAAACAQAbmFtZRQAbWluZWNyYWZ0OnBhY2tlZF9pY2UECQBuYW1lX2hhc2hk4bu123ZrFgMKAG5ldHdvcmtfaWTr/ooaCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:blue_ice", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQKAQAACAQAbmFtZRIAbWluZWNyYWZ0OmJsdWVfaWNlBAkAbmFtZV9oYXNo+EKxYgFhKcgDCgBuZXR3b3JrX2lkxfsA8goGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:snow_layer", + "block_state_b64": "CgAAAwgAYmxvY2tfaWROAAAACAQAbmFtZRQAbWluZWNyYWZ0OnNub3dfbGF5ZXIECQBuYW1lX2hhc2hXka6atMYUCQMKAG5ldHdvcmtfaWRCrIPcCgYAc3RhdGVzAQsAY292ZXJlZF9iaXQAAwYAaGVpZ2h0AAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:pointed_dripstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQzAgAACAQAbmFtZRsAbWluZWNyYWZ0OnBvaW50ZWRfZHJpcHN0b25lBAkAbmFtZV9oYXNoJMISzmHQgt8DCgBuZXR3b3JrX2lkbWrtYgoGAHN0YXRlcwgTAGRyaXBzdG9uZV90aGlja25lc3MDAHRpcAEHAGhhbmdpbmcBAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:dripstone_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AgAACAQAbmFtZRkAbWluZWNyYWZ0OmRyaXBzdG9uZV9ibG9jawQJAG5hbWVfaGFzaIIXnEqY77YsAwoAbmV0d29ya19pZMZi2kwKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:moss_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWROAgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vc3NfY2FycGV0BAkAbmFtZV9oYXNo/NEDxRPTshYDCgBuZXR3b3JrX2lkaGG3QwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:moss_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ/AgAACAQAbmFtZRQAbWluZWNyYWZ0Om1vc3NfYmxvY2sECQBuYW1lX2hhc2iovcsPUYX2tgMKAG5ldHdvcmtfaWT3JSbfCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:hanging_roots", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ+AgAACAQAbmFtZRcAbWluZWNyYWZ0Omhhbmdpbmdfcm9vdHMECQBuYW1lX2hhc2jaXn+Y5UZpDAMKAG5ldHdvcmtfaWRU4c2vCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:mangrove_roots", + "block_state_b64": "CgAAAwgAYmxvY2tfaWThAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hbmdyb3ZlX3Jvb3RzBAkAbmFtZV9oYXNoa786PzQGZ6kDCgBuZXR3b3JrX2lklA0AHgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:muddy_mangrove_roots", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAgAACAQAbmFtZR4AbWluZWNyYWZ0Om11ZGR5X21hbmdyb3ZlX3Jvb3RzBAkAbmFtZV9oYXNo9YApdHpo1RkDCgBuZXR3b3JrX2lkH0Oc4woGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:big_dripleaf", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRCAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJpZ19kcmlwbGVhZgQJAG5hbWVfaGFzaGBEhXjo6qSdAwoAbmV0d29ya19pZMETsb8KBgBzdGF0ZXMBEQBiaWdfZHJpcGxlYWZfaGVhZAEIEQBiaWdfZHJpcGxlYWZfdGlsdAQAbm9uZQgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:small_dripleaf_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAgAACAQAbmFtZR4AbWluZWNyYWZ0OnNtYWxsX2RyaXBsZWFmX2Jsb2NrBAkAbmFtZV9oYXNojxRAgXP9uWADCgBuZXR3b3JrX2lkozbVPwoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24EAGVhc3QBDwB1cHBlcl9ibG9ja19iaXQBAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:spore_blossom", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRAAgAACAQAbmFtZRcAbWluZWNyYWZ0OnNwb3JlX2Jsb3Nzb20ECQBuYW1lX2hhc2il3U72Gbco2gMKAG5ldHdvcmtfaWSbbbgcCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:azalea", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAgAACAQAbmFtZRAAbWluZWNyYWZ0OmF6YWxlYQQJAG5hbWVfaGFzaNyUl+BW9JrBAwoAbmV0d29ya19pZO/XZtQKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:flowering_azalea", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAgAACAQAbmFtZRoAbWluZWNyYWZ0OmZsb3dlcmluZ19hemFsZWEECQBuYW1lX2hhc2ie9r33wz8kiwMKAG5ldHdvcmtfaWQ3ij0VCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:glow_lichen", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSaAgAACAQAbmFtZRUAbWluZWNyYWZ0Omdsb3dfbGljaGVuBAkAbmFtZV9oYXNobyPUrIYlo44DCgBuZXR3b3JrX2lkCh8lSAoGAHN0YXRlcwMZAG11bHRpX2ZhY2VfZGlyZWN0aW9uX2JpdHM/AAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:amethyst_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAgAACAQAbmFtZRgAbWluZWNyYWZ0OmFtZXRoeXN0X2Jsb2NrBAkAbmFtZV9oYXNob+JK1iiAthcDCgBuZXR3b3JrX2lk8HtpzgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:budding_amethyst", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRHAgAACAQAbmFtZRoAbWluZWNyYWZ0OmJ1ZGRpbmdfYW1ldGh5c3QECQBuYW1lX2hhc2gJvAwfI14fxgMKAG5ldHdvcmtfaWTQYqfACgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:amethyst_cluster", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAgAACAQAbmFtZRoAbWluZWNyYWZ0OmFtZXRoeXN0X2NsdXN0ZXIECQBuYW1lX2hhc2jK82S88Jgm8wMKAG5ldHdvcmtfaWSCPMPGCgYAc3RhdGVzCBQAbWluZWNyYWZ0OmJsb2NrX2ZhY2UCAHVwAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:large_amethyst_bud", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAgAACAQAbmFtZRwAbWluZWNyYWZ0OmxhcmdlX2FtZXRoeXN0X2J1ZAQJAG5hbWVfaGFzaAHhdpWD+sd5AwoAbmV0d29ya19pZKkQxOcKBgBzdGF0ZXMIFABtaW5lY3JhZnQ6YmxvY2tfZmFjZQIAdXAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:medium_amethyst_bud", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRKAgAACAQAbmFtZR0AbWluZWNyYWZ0Om1lZGl1bV9hbWV0aHlzdF9idWQECQBuYW1lX2hhc2g5lBGtC0DzZQMKAG5ldHdvcmtfaWSYiP4gCgYAc3RhdGVzCBQAbWluZWNyYWZ0OmJsb2NrX2ZhY2UCAHVwAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:small_amethyst_bud", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRLAgAACAQAbmFtZRwAbWluZWNyYWZ0OnNtYWxsX2FtZXRoeXN0X2J1ZAQJAG5hbWVfaGFzaEnb4+q9PO4YAwoAbmV0d29ya19pZGWzxrQKBgBzdGF0ZXMIFABtaW5lY3JhZnQ6YmxvY2tfZmFjZQIAdXAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:calcite", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAgAACAQAbmFtZREAbWluZWNyYWZ0OmNhbGNpdGUECQBuYW1lX2hhc2ixKLu8ZIdzDQMKAG5ldHdvcmtfaWQlSbJDCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "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/FO78WDoDCgBuZXR3b3JrX2lkLh1OXAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:red_mushroom", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAAAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZF9tdXNocm9vbQQJAG5hbWVfaGFzaPpzJua7669xAwoAbmV0d29ya19pZCvWPYkKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:crimson_fungus", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fZnVuZ3VzBAkAbmFtZV9oYXNolIcCUuFM2u0DCgBuZXR3b3JrX2lkD2NN0QoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:warped_fungus", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9mdW5ndXMECQBuYW1lX2hhc2gq8bSnRVTAFgMKAG5ldHdvcmtfaWTkwS+rCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:brown_mushroom_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAAAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkdOMhDAoGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cw4AAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:red_mushroom_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAAAACAQAbmFtZRwAbWluZWNyYWZ0OnJlZF9tdXNocm9vbV9ibG9jawQJAG5hbWVfaGFzaJTTyJbth9M9AwoAbmV0d29ya19pZM+AyboKBgBzdGF0ZXMDEgBodWdlX211c2hyb29tX2JpdHMOAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:mushroom_stem", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTvBAAACAQAbmFtZRcAbWluZWNyYWZ0Om11c2hyb29tX3N0ZW0ECQBuYW1lX2hhc2i2SozhK9NLpgMKAG5ldHdvcmtfaWTTVND+CgYAc3RhdGVzAxIAaHVnZV9tdXNocm9vbV9iaXRzDwAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:egg" + }, + { + "id": "minecraft:sugar_cane" + }, + { + "id": "minecraft:sugar" + }, + { + "id": "minecraft:rotten_flesh" + }, + { + "id": "minecraft:bone" + }, + { + "id": "minecraft:web", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAAAACAQAbmFtZQ0AbWluZWNyYWZ0OndlYgQJAG5hbWVfaGFzaA4GKQCvG4i9AwoAbmV0d29ya19pZApt+jgKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:spider_eye" + }, + { + "id": "minecraft:mob_spawner", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ0AAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vYl9zcGF3bmVyBAkAbmFtZV9oYXNoNwGrCV/Fkh8DCgBuZXR3b3JrX2lkM1wTmgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:trial_spawner", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6AgAACAQAbmFtZRcAbWluZWNyYWZ0OnRyaWFsX3NwYXduZXIECQBuYW1lX2hhc2iNLRPB4ACz+QMKAG5ldHdvcmtfaWTWFYHGCgYAc3RhdGVzAQcAb21pbm91cwADEwB0cmlhbF9zcGF3bmVyX3N0YXRlAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:vault", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5AgAACAQAbmFtZQ8AbWluZWNyYWZ0OnZhdWx0BAkAbmFtZV9oYXNoCAp9n3IAyqcDCgBuZXR3b3JrX2lk6/P+vwoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAQcAb21pbm91cwAICwB2YXVsdF9zdGF0ZQgAaW5hY3RpdmUAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:end_portal_frame", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AAAACAQAbmFtZRoAbWluZWNyYWZ0OmVuZF9wb3J0YWxfZnJhbWUECQBuYW1lX2hhc2gqofyUIjGOpQMKAG5ldHdvcmtfaWRbGHf8CgYAc3RhdGVzARIAZW5kX3BvcnRhbF9leWVfYml0AAgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:infested_stone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRgAbWluZWNyYWZ0OmluZmVzdGVkX3N0b25lBAkAbmFtZV9oYXNoxnRcHDu4zqQDCgBuZXR3b3JrX2lkpfcnsgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:infested_cobblestone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRZBAAACAQAbmFtZR4AbWluZWNyYWZ0OmluZmVzdGVkX2NvYmJsZXN0b25lBAkAbmFtZV9oYXNoy+LVCKG2kVMDCgBuZXR3b3JrX2lkpn+icAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:infested_stone_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRaBAAACAQAbmFtZR8AbWluZWNyYWZ0OmluZmVzdGVkX3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaBMnals7a32CAwoAbmV0d29ya19pZNHi2UYKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:infested_mossy_stone_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRbBAAACAQAbmFtZSUAbWluZWNyYWZ0OmluZmVzdGVkX21vc3N5X3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaAmJk+HmVq0rAwoAbmV0d29ya19pZAVH8/sKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:infested_cracked_stone_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRcBAAACAQAbmFtZScAbWluZWNyYWZ0OmluZmVzdGVkX2NyYWNrZWRfc3RvbmVfYnJpY2tzBAkAbmFtZV9oYXNoMyc60XcfcyoDCgBuZXR3b3JrX2lkaW+kbQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:infested_chiseled_stone_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRdBAAACAQAbmFtZSgAbWluZWNyYWZ0OmluZmVzdGVkX2NoaXNlbGVkX3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaNUvNIIg9dZbAwoAbmV0d29ya19pZCajGicKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:infested_deepslate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAgAACAQAbmFtZRwAbWluZWNyYWZ0OmluZmVzdGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaICF2VYccxF1AwoAbmV0d29ya19pZDa/624KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:dragon_egg", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AAAACAQAbmFtZRQAbWluZWNyYWZ0OmRyYWdvbl9lZ2cECQBuYW1lX2hhc2inMzXrV+/e1wMKAG5ldHdvcmtfaWTgO1yRCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:turtle_egg", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAQAACAQAbmFtZRQAbWluZWNyYWZ0OnR1cnRsZV9lZ2cECQBuYW1lX2hhc2iwSRcxOJIJ9gMKAG5ldHdvcmtfaWSIRNUhCgYAc3RhdGVzCA0AY3JhY2tlZF9zdGF0ZQkAbm9fY3JhY2tzCBAAdHVydGxlX2VnZ19jb3VudAcAb25lX2VnZwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:sniffer_egg", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRTAwAACAQAbmFtZRUAbWluZWNyYWZ0OnNuaWZmZXJfZWdnBAkAbmFtZV9oYXNoY1lozc8lPcYDCgBuZXR3b3JrX2lk7yb/2QoGAHN0YXRlcwgNAGNyYWNrZWRfc3RhdGUJAG5vX2NyYWNrcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:frog_spawn", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAgAACAQAbmFtZRQAbWluZWNyYWZ0OmZyb2dfc3Bhd24ECQBuYW1lX2hhc2iWmd7idp3ZZwMKAG5ldHdvcmtfaWRFzJudCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:pearlescent_froglight", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAgAACAQAbmFtZR8AbWluZWNyYWZ0OnBlYXJsZXNjZW50X2Zyb2dsaWdodAQJAG5hbWVfaGFzaKkcFRyycYGyAwoAbmV0d29ya19pZJqYakAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:verdant_froglight", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAgAACAQAbmFtZRsAbWluZWNyYWZ0OnZlcmRhbnRfZnJvZ2xpZ2h0BAkAbmFtZV9oYXNoA+eXuTBohrQDCgBuZXR3b3JrX2lkDIVnsQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:ochre_froglight", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAgAACAQAbmFtZRkAbWluZWNyYWZ0Om9jaHJlX2Zyb2dsaWdodAQJAG5hbWVfaGFzaMY59kjPe+c3AwoAbmV0d29ya19pZO2TD50KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "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:breeze_spawn_egg" + }, + { + "id": "minecraft:armadillo_spawn_egg" + }, + { + "id": "minecraft:bogged_spawn_egg" + }, + { + "id": "minecraft:obsidian", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQxAAAACAQAbmFtZRIAbWluZWNyYWZ0Om9ic2lkaWFuBAkAbmFtZV9oYXNoiz4qrb8QjyEDCgBuZXR3b3JrX2lkuqnPpQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:crying_obsidian", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAgAACAQAbmFtZRkAbWluZWNyYWZ0OmNyeWluZ19vYnNpZGlhbgQJAG5hbWVfaGFzaKT0JlA7Z1K+AwoAbmV0d29ya19pZCjbPV4KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:bedrock", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAAAACAQAbmFtZREAbWluZWNyYWZ0OmJlZHJvY2sECQBuYW1lX2hhc2hWfFrh4LVtxwMKAG5ldHdvcmtfaWT7fKz1CgYAc3RhdGVzAQ4AaW5maW5pYnVybl9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:soul_sand", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNvdWxfc2FuZAQJAG5hbWVfaGFzaMaf+bccu+KTAwoAbmV0d29ya19pZBQSHrMKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:magma", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAAAACAQAbmFtZQ8AbWluZWNyYWZ0Om1hZ21hBAkAbmFtZV9oYXNoqyTjKaIsWfYDCgBuZXR3b3JrX2lkyfWAZgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:nether_wart" + }, + { + "id": "minecraft:end_stone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AAAACAQAbmFtZRMAbWluZWNyYWZ0OmVuZF9zdG9uZQQJAG5hbWVfaGFzaH1J9jA39GJNAwoAbmV0d29ya19pZFeFQ7UKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:chorus_flower", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAAAACAQAbmFtZRcAbWluZWNyYWZ0OmNob3J1c19mbG93ZXIECQBuYW1lX2hhc2iMpSodli5uawMKAG5ldHdvcmtfaWRnd1ZWCgYAc3RhdGVzAwMAYWdlAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:chorus_plant", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAAAACAQAbmFtZRYAbWluZWNyYWZ0OmNob3J1c19wbGFudAQJAG5hbWVfaGFzaJhSrmNGKwaMAwoAbmV0d29ya19pZA3uVqMKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:chorus_fruit" + }, + { + "id": "minecraft:popped_chorus_fruit" + }, + { + "id": "minecraft:sponge", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAAAACAQAbmFtZRAAbWluZWNyYWZ0OnNwb25nZQQJAG5hbWVfaGFzaLrd2ScYRDMiAwoAbmV0d29ya19pZNmQW/oKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:wet_sponge", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTXBAAACAQAbmFtZRQAbWluZWNyYWZ0OndldF9zcG9uZ2UECQBuYW1lX2hhc2htp6nKpSHcAgMKAG5ldHdvcmtfaWQaW+fCCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:tube_coral_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRoAbWluZWNyYWZ0OnR1YmVfY29yYWxfYmxvY2sECQBuYW1lX2hhc2iGkaiR7Eot4wMKAG5ldHdvcmtfaWQPNJ6sCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:brain_coral_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRQBAAACAQAbmFtZRsAbWluZWNyYWZ0OmJyYWluX2NvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoeDNAK18yUo4DCgBuZXR3b3JrX2lkloN1vgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:bubble_coral_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRRBAAACAQAbmFtZRwAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaAI2mwMlvcNbAwoAbmV0d29ya19pZBlkxKIKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:fire_coral_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRSBAAACAQAbmFtZRoAbWluZWNyYWZ0OmZpcmVfY29yYWxfYmxvY2sECQBuYW1lX2hhc2gg1gLeXLmKaAMKAG5ldHdvcmtfaWSp3W57CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:horn_coral_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRTBAAACAQAbmFtZRoAbWluZWNyYWZ0Omhvcm5fY29yYWxfYmxvY2sECQBuYW1lX2hhc2hnZSLRWUwGhAMKAG5ldHdvcmtfaWRSK6ccCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:dead_tube_coral_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRUBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaB9+lY3hAkNNAwoAbmV0d29ya19pZF0hKKYKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:dead_brain_coral_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRVBAAACAQAbmFtZSAAbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWxfYmxvY2sECQBuYW1lX2hhc2iHyDn52AO8uwMKAG5ldHdvcmtfaWQw7yCaCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:dead_bubble_coral_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRWBAAACAQAbmFtZSEAbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsX2Jsb2NrBAkAbmFtZV9oYXNotwkk/ITrsjADCgBuZXR3b3JrX2lk56mXUgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:dead_fire_coral_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRXBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaG0qHxbIrBEyAwoAbmV0d29ya19pZFvnH88KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:dead_horn_coral_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRYBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaL7D8bu4Fm+0AwoAbmV0d29ya19pZEALRLoKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:sculk", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAgAACAQAbmFtZQ8AbWluZWNyYWZ0OnNjdWxrBAkAbmFtZV9oYXNo2Lq7T5yQF8kDCgBuZXR3b3JrX2lkyqUPPgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:sculk_vein", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAgAACAQAbmFtZRQAbWluZWNyYWZ0OnNjdWxrX3ZlaW4ECQBuYW1lX2hhc2gJUdhVooV4zwMKAG5ldHdvcmtfaWSUfn1XCgYAc3RhdGVzAxkAbXVsdGlfZmFjZV9kaXJlY3Rpb25fYml0cwAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:sculk_catalyst", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAgAACAQAbmFtZRgAbWluZWNyYWZ0OnNjdWxrX2NhdGFseXN0BAkAbmFtZV9oYXNo+gCpbrCHST4DCgBuZXR3b3JrX2lkMJ2n/woGAHN0YXRlcwEFAGJsb29tAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:sculk_shrieker", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTMAgAACAQAbmFtZRgAbWluZWNyYWZ0OnNjdWxrX3Nocmlla2VyBAkAbmFtZV9oYXNo5OXtyObniQ4DCgBuZXR3b3JrX2lkxapoNAoGAHN0YXRlcwEGAGFjdGl2ZQABCgBjYW5fc3VtbW9uAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:sculk_sensor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQyAgAACAQAbmFtZRYAbWluZWNyYWZ0OnNjdWxrX3NlbnNvcgQJAG5hbWVfaGFzaCkmHreeTgNnAwoAbmV0d29ya19pZLj2WPcKBgBzdGF0ZXMDEgBzY3Vsa19zZW5zb3JfcGhhc2UAAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:calibrated_sculk_sensor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAwAACAQAbmFtZSEAbWluZWNyYWZ0OmNhbGlicmF0ZWRfc2N1bGtfc2Vuc29yBAkAbmFtZV9oYXNoffAcXXN/iJUDCgBuZXR3b3JrX2lkwOx3QQoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAxIAc2N1bGtfc2Vuc29yX3BoYXNlAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:reinforced_deepslate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTRAgAACAQAbmFtZR4AbWluZWNyYWZ0OnJlaW5mb3JjZWRfZGVlcHNsYXRlBAkAbmFtZV9oYXNoldDmj91EapQDCgBuZXR3b3JrX2lkHIt+aQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "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:mace" + }, + { + "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:arrow", + "damage": 44 + }, + { + "id": "minecraft:arrow", + "damage": 45 + }, + { + "id": "minecraft:arrow", + "damage": 46 + }, + { + "id": "minecraft:arrow", + "damage": 47 + }, + { + "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:wind_charge" + }, + { + "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:bundle" + }, + { + "id": "minecraft:white_bundle" + }, + { + "id": "minecraft:light_gray_bundle" + }, + { + "id": "minecraft:gray_bundle" + }, + { + "id": "minecraft:black_bundle" + }, + { + "id": "minecraft:brown_bundle" + }, + { + "id": "minecraft:red_bundle" + }, + { + "id": "minecraft:orange_bundle" + }, + { + "id": "minecraft:yellow_bundle" + }, + { + "id": "minecraft:lime_bundle" + }, + { + "id": "minecraft:green_bundle" + }, + { + "id": "minecraft:cyan_bundle" + }, + { + "id": "minecraft:light_blue_bundle" + }, + { + "id": "minecraft:blue_bundle" + }, + { + "id": "minecraft:purple_bundle" + }, + { + "id": "minecraft:magenta_bundle" + }, + { + "id": "minecraft:pink_bundle" + }, + { + "id": "minecraft:leather_horse_armor" + }, + { + "id": "minecraft:iron_horse_armor" + }, + { + "id": "minecraft:golden_horse_armor" + }, + { + "id": "minecraft:diamond_horse_armor" + }, + { + "id": "minecraft:wolf_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:potion", + "damage": 43 + }, + { + "id": "minecraft:potion", + "damage": 44 + }, + { + "id": "minecraft:potion", + "damage": 45 + }, + { + "id": "minecraft:potion", + "damage": 46 + }, + { + "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:splash_potion", + "damage": 43 + }, + { + "id": "minecraft:splash_potion", + "damage": 44 + }, + { + "id": "minecraft:splash_potion", + "damage": 45 + }, + { + "id": "minecraft:splash_potion", + "damage": 46 + }, + { + "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:lingering_potion", + "damage": 43 + }, + { + "id": "minecraft:lingering_potion", + "damage": 44 + }, + { + "id": "minecraft:lingering_potion", + "damage": 45 + }, + { + "id": "minecraft:lingering_potion", + "damage": 46 + }, + { + "id": "minecraft:ominous_bottle" + }, + { + "id": "minecraft:ominous_bottle", + "damage": 1 + }, + { + "id": "minecraft:ominous_bottle", + "damage": 2 + }, + { + "id": "minecraft:ominous_bottle", + "damage": 3 + }, + { + "id": "minecraft:ominous_bottle", + "damage": 4 + }, + { + "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": "CgAAAwgAYmxvY2tfaWQyAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnRvcmNoBAkAbmFtZV9oYXNoagn7rmDBzisDCgBuZXR3b3JrX2lk+BwwuQoGAHN0YXRlcwgWAHRvcmNoX2ZhY2luZ19kaXJlY3Rpb24HAHVua25vd24AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:soul_torch", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQLAgAACAQAbmFtZRQAbWluZWNyYWZ0OnNvdWxfdG9yY2gECQBuYW1lX2hhc2huixOT04BRdQMKAG5ldHdvcmtfaWShbFILCgYAc3RhdGVzCBYAdG9yY2hfZmFjaW5nX2RpcmVjdGlvbgcAdW5rbm93bgADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:sea_pickle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAQAACAQAbmFtZRQAbWluZWNyYWZ0OnNlYV9waWNrbGUECQBuYW1lX2hhc2iONEfZJB+glgMKAG5ldHdvcmtfaWSINWQyCgYAc3RhdGVzAw0AY2x1c3Rlcl9jb3VudAAAAAABCABkZWFkX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:lantern", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTPAQAACAQAbmFtZREAbWluZWNyYWZ0OmxhbnRlcm4ECQBuYW1lX2hhc2hMw44VI2HWygMKAG5ldHdvcmtfaWRkjQvzCgYAc3RhdGVzAQcAaGFuZ2luZwAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:soul_lantern", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQMAgAACAQAbmFtZRYAbWluZWNyYWZ0OnNvdWxfbGFudGVybgQJAG5hbWVfaGFzaGjIpjxk9z+RAwoAbmV0d29ya19pZGfoP8cKBgBzdGF0ZXMBBwBoYW5naW5nAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAgAACAQAbmFtZRAAbWluZWNyYWZ0OmNhbmRsZQQJAG5hbWVfaGFzaHPd+MsNdWTfAwoAbmV0d29ya19pZHsBMA0KBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:white_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWScAgAACAQAbmFtZRYAbWluZWNyYWZ0OndoaXRlX2NhbmRsZQQJAG5hbWVfaGFzaN1EG5Q1mHiEAwoAbmV0d29ya19pZKN1mmgKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:orange_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSdAgAACAQAbmFtZRcAbWluZWNyYWZ0Om9yYW5nZV9jYW5kbGUECQBuYW1lX2hhc2jySEVWHgUIHQMKAG5ldHdvcmtfaWSfVz82CgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:magenta_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hZ2VudGFfY2FuZGxlBAkAbmFtZV9oYXNoG0u6YIOoBSEDCgBuZXR3b3JrX2lk9xGNkQoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:light_blue_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSfAgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FuZGxlBAkAbmFtZV9oYXNocXGeK0zgrG0DCgBuZXR3b3JrX2lk2m1y8goGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:yellow_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAgAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19jYW5kbGUECQBuYW1lX2hhc2i00dtusU3CqQMKAG5ldHdvcmtfaWR9LTmpCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:lime_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAgAACAQAbmFtZRUAbWluZWNyYWZ0OmxpbWVfY2FuZGxlBAkAbmFtZV9oYXNokcmrw5xvz7ADCgBuZXR3b3JrX2lkIAUu6QoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:pink_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAgAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfY2FuZGxlBAkAbmFtZV9oYXNoQJdEY4sZ0dwDCgBuZXR3b3JrX2lk23Rn5AoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:gray_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAgAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXlfY2FuZGxlBAkAbmFtZV9oYXNoS5poSo9wBDEDCgBuZXR3b3JrX2lk3trRCAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:light_gray_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FuZGxlBAkAbmFtZV9oYXNo9ruTZLBNMasDCgBuZXR3b3JrX2lkb6DOegoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:cyan_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAgAACAQAbmFtZRUAbWluZWNyYWZ0OmN5YW5fY2FuZGxlBAkAbmFtZV9oYXNoc/M8PNVcjOwDCgBuZXR3b3JrX2lkZoIQOQoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:purple_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSmAgAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnBsZV9jYW5kbGUECQBuYW1lX2hhc2jaI3xUW0/myQMKAG5ldHdvcmtfaWSnLI2BCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:blue_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAgAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfY2FuZGxlBAkAbmFtZV9oYXNoAASSPW6TgQADCgBuZXR3b3JrX2lkrxrjQAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:brown_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJyb3duX2NhbmRsZQQJAG5hbWVfaGFzaDia0l6s1+WYAwoAbmV0d29ya19pZKSkBXYKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:green_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAgAACAQAbmFtZRYAbWluZWNyYWZ0OmdyZWVuX2NhbmRsZQQJAG5hbWVfaGFzaLeFPO1l+fIoAwoAbmV0d29ya19pZBkznDsKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:red_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9jYW5kbGUECQBuYW1lX2hhc2jjAQpGf59ZdwMKAG5ldHdvcmtfaWRbb88GCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:black_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJsYWNrX2NhbmRsZQQJAG5hbWVfaGFzaB+wRDpOqREKAwoAbmV0d29ya19pZNnOnuEKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:crafting_table", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6AAAACAQAbmFtZRgAbWluZWNyYWZ0OmNyYWZ0aW5nX3RhYmxlBAkAbmFtZV9oYXNoe76VAmjvbpYDCgBuZXR3b3JrX2lkwCxwaAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:cartography_table", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTHAQAACAQAbmFtZRsAbWluZWNyYWZ0OmNhcnRvZ3JhcGh5X3RhYmxlBAkAbmFtZV9oYXNomaWiiD/znP8DCgBuZXR3b3JrX2lkI6FzMwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:fletching_table", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAQAACAQAbmFtZRkAbWluZWNyYWZ0OmZsZXRjaGluZ190YWJsZQQJAG5hbWVfaGFzaPFibh8unKyUAwoAbmV0d29ya19pZJ2mW0oKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:smithing_table", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAQAACAQAbmFtZRgAbWluZWNyYWZ0OnNtaXRoaW5nX3RhYmxlBAkAbmFtZV9oYXNo4tFES2xOXEYDCgBuZXR3b3JrX2lkXWMBzQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:beehive", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAQAACAQAbmFtZREAbWluZWNyYWZ0OmJlZWhpdmUECQBuYW1lX2hhc2hCcqn12UbNpwMKAG5ldHdvcmtfaWR/idcaCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAMLAGhvbmV5X2xldmVsAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:suspicious_sand", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAwAACAQAbmFtZRkAbWluZWNyYWZ0OnN1c3BpY2lvdXNfc2FuZAQJAG5hbWVfaGFzaL67QsuvLP00AwoAbmV0d29ya19pZKnkaIAKBgBzdGF0ZXMDEABicnVzaGVkX3Byb2dyZXNzAAAAAAEHAGhhbmdpbmcBAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:suspicious_gravel", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AwAACAQAbmFtZRsAbWluZWNyYWZ0OnN1c3BpY2lvdXNfZ3JhdmVsBAkAbmFtZV9oYXNoJSVbGNk7C3oDCgBuZXR3b3JrX2lkvIEJAAoGAHN0YXRlcwMQAGJydXNoZWRfcHJvZ3Jlc3MAAAAAAQcAaGFuZ2luZwEAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:campfire" + }, + { + "id": "minecraft:soul_campfire" + }, + { + "id": "minecraft:furnace", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ9AAAACAQAbmFtZREAbWluZWNyYWZ0OmZ1cm5hY2UECQBuYW1lX2hhc2ioOQrludYY8wMKAG5ldHdvcmtfaWRZxnDOCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:blast_furnace", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTDAQAACAQAbmFtZRcAbWluZWNyYWZ0OmJsYXN0X2Z1cm5hY2UECQBuYW1lX2hhc2ivDbnjkpGm5QMKAG5ldHdvcmtfaWTcEbV/CgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:smoker", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAQAACAQAbmFtZRAAbWluZWNyYWZ0OnNtb2tlcgQJAG5hbWVfaGFzaJd1rDMkRWomAwoAbmV0d29ya19pZGWswMwKBgBzdGF0ZXMIHABtaW5lY3JhZnQ6Y2FyZGluYWxfZGlyZWN0aW9uBQBzb3V0aAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:respawn_anchor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJlc3Bhd25fYW5jaG9yBAkAbmFtZV9oYXNoZOdcjW05qigDCgBuZXR3b3JrX2lkmhMcaQoGAHN0YXRlcwMVAHJlc3Bhd25fYW5jaG9yX2NoYXJnZQAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:brewing_stand" + }, + { + "id": "minecraft:anvil", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lkqXzNjwoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:chipped_anvil", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS+BAAACAQAbmFtZRcAbWluZWNyYWZ0OmNoaXBwZWRfYW52aWwECQBuYW1lX2hhc2ge+QY3vlS/eQMKAG5ldHdvcmtfaWRJ15iUCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:damaged_anvil", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS/BAAACAQAbmFtZRcAbWluZWNyYWZ0OmRhbWFnZWRfYW52aWwECQBuYW1lX2hhc2imJ12Be2V8+AMKAG5ldHdvcmtfaWRh5SHkCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:grindstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTCAQAACAQAbmFtZRQAbWluZWNyYWZ0OmdyaW5kc3RvbmUECQBuYW1lX2hhc2id56zc0nk99wMKAG5ldHdvcmtfaWS4Es07CgYAc3RhdGVzCAoAYXR0YWNobWVudAgAc3RhbmRpbmcDCQBkaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:enchanting_table", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR0AAAACAQAbmFtZRoAbWluZWNyYWZ0OmVuY2hhbnRpbmdfdGFibGUECQBuYW1lX2hhc2jgIx24VLvMvwMKAG5ldHdvcmtfaWRliFFJCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:bookshelf", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAAAACAQAbmFtZRMAbWluZWNyYWZ0OmJvb2tzaGVsZgQJAG5hbWVfaGFzaDU04DrgJCS9AwoAbmV0d29ya19pZBcWwIwKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:chiseled_bookshelf", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAwAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX2Jvb2tzaGVsZgQJAG5hbWVfaGFzaNXDBnsIsywYAwoAbmV0d29ya19pZIprt5IKBgBzdGF0ZXMDDABib29rc19zdG9yZWQAAAAAAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:lectern", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTBAQAACAQAbmFtZREAbWluZWNyYWZ0OmxlY3Rlcm4ECQBuYW1lX2hhc2j5Z4Mmi/1QxAMKAG5ldHdvcmtfaWR4JfDHCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgBCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cauldron" + }, + { + "id": "minecraft:composter", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAQAACAQAbmFtZRMAbWluZWNyYWZ0OmNvbXBvc3RlcgQJAG5hbWVfaGFzaPAADHptzeWJAwoAbmV0d29ya19pZHIL6i4KBgBzdGF0ZXMDFABjb21wb3N0ZXJfZmlsbF9sZXZlbAAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:chest", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2AAAACAQAbmFtZQ8AbWluZWNyYWZ0OmNoZXN0BAkAbmFtZV9oYXNog9ozMxlcA88DCgBuZXR3b3JrX2lkDkOFvAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:trapped_chest", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAAAACAQAbmFtZRcAbWluZWNyYWZ0OnRyYXBwZWRfY2hlc3QECQBuYW1lX2hhc2g2qpF9stsEjgMKAG5ldHdvcmtfaWTjJWYxCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAbm9ydGgAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:ender_chest", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAAAACAQAbmFtZRUAbWluZWNyYWZ0OmVuZGVyX2NoZXN0BAkAbmFtZV9oYXNohEZzOFdg0WUDCgBuZXR3b3JrX2lkx4jiSQoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:barrel", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhcnJlbAQJAG5hbWVfaGFzaHDkRPGymiRqAwoAbmV0d29ya19pZPnxzgsKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:undyed_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAAAACAQAbmFtZRwAbWluZWNyYWZ0OnVuZHllZF9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaOC9mypm/MlBAwoAbmV0d29ya19pZJ8rxp0KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:white_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAAAACAQAbmFtZRsAbWluZWNyYWZ0OndoaXRlX3NodWxrZXJfYm94BAkAbmFtZV9oYXNosK79m1rPUBwDCgBuZXR3b3JrX2lkjrET6goGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:light_gray_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAwAACAQAbmFtZSAAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2iBe5zq7PxHmgMKAG5ldHdvcmtfaWSCVJv0CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:gray_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRqAwAACAQAbmFtZRoAbWluZWNyYWZ0OmdyYXlfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2ga2s8ctjHUhgMKAG5ldHdvcmtfaWS3WMsWCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:black_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRyAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJsYWNrX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoPm03OZphrp8DCgBuZXR3b3JrX2lkXHztNAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:brown_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRvAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJyb3duX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoT3DD6qAL9cADCgBuZXR3b3JrX2lkaXxpYQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:red_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRxAwAACAQAbmFtZRkAbWluZWNyYWZ0OnJlZF9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaMIlKSCzqSZoAwoAbmV0d29ya19pZNrf+icKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:orange_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAwAACAQAbmFtZRwAbWluZWNyYWZ0Om9yYW5nZV9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaG2MAXU67wGrAwoAbmV0d29ya19pZGoO05gKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:yellow_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRnAwAACAQAbmFtZRwAbWluZWNyYWZ0OnllbGxvd19zaHVsa2VyX2JveAQJAG5hbWVfaGFzaIsLwQHYjcIEAwoAbmV0d29ya19pZBCBSiYKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:lime_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRoAwAACAQAbmFtZRoAbWluZWNyYWZ0OmxpbWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2hUwBkg+faUGAMKAG5ldHdvcmtfaWRJeKqqCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:green_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRwAwAACAQAbmFtZRsAbWluZWNyYWZ0OmdyZWVuX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoZgUeT3LupLUDCgBuZXR3b3JrX2lkzJiohQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:cyan_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAwAACAQAbmFtZRoAbWluZWNyYWZ0OmN5YW5fc2h1bGtlcl9ib3gECQBuYW1lX2hhc2gSfbjteXg5yAMKAG5ldHdvcmtfaWTHeliECgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:light_blue_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAwAACAQAbmFtZSAAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2h0VFCX0qsRxQMKAG5ldHdvcmtfaWQXD8U0CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:blue_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJsdWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2hn9gS0XIe6rAMKAG5ldHdvcmtfaWTO4PJaCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:purple_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAwAACAQAbmFtZRwAbWluZWNyYWZ0OnB1cnBsZV9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaEV/lkNPxRDdAwoAbmV0d29ya19pZFK25GAKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:magenta_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAwAACAQAbmFtZR0AbWluZWNyYWZ0Om1hZ2VudGFfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2iqWM7IJHxcFgMKAG5ldHdvcmtfaWTyyudTCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:pink_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRpAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBpbmtfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2in1tkJ1GNcZgMKAG5ldHdvcmtfaWQOEGXjCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:armor_stand" + }, + { + "id": "minecraft:noteblock", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAAAACAQAbmFtZRMAbWluZWNyYWZ0Om5vdGVibG9jawQJAG5hbWVfaGFzaHPA8dBBH0UaAwoAbmV0d29ya19pZH1U5QkKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:jukebox", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAAAACAQAbmFtZREAbWluZWNyYWZ0Omp1a2Vib3gECQBuYW1lX2hhc2ieAIPExf/ZfgMKAG5ldHdvcmtfaWSmR7JfCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "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:music_disc_creator" + }, + { + "id": "minecraft:music_disc_creator_music_box" + }, + { + "id": "minecraft:music_disc_precipice" + }, + { + "id": "minecraft:disc_fragment_5" + }, + { + "id": "minecraft:glowstone_dust" + }, + { + "id": "minecraft:glowstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRZAAAACAQAbmFtZRMAbWluZWNyYWZ0Omdsb3dzdG9uZQQJAG5hbWVfaGFzaFYqXNkefIlPAwoAbmV0d29ya19pZGT7WYYKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:redstone_lamp", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZHN0b25lX2xhbXAECQBuYW1lX2hhc2hJ9V80caPvEgMKAG5ldHdvcmtfaWRvNPwnCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:sea_lantern", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAAAACAQAbmFtZRUAbWluZWNyYWZ0OnNlYV9sYW50ZXJuBAkAbmFtZV9oYXNoLPsv1TX9M+QDCgBuZXR3b3JrX2lk1PPVyAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "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:player_head", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTGBAAACAQAbmFtZRUAbWluZWNyYWZ0OnBsYXllcl9oZWFkBAkAbmFtZV9oYXNonFwZb7CL8EYDCgBuZXR3b3JrX2lkZeAXqAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:zombie_head", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTFBAAACAQAbmFtZRUAbWluZWNyYWZ0OnpvbWJpZV9oZWFkBAkAbmFtZV9oYXNoixuENYuaGgEDCgBuZXR3b3JrX2lk0NsHDgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:creeper_head", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTHBAAACAQAbmFtZRYAbWluZWNyYWZ0OmNyZWVwZXJfaGVhZAQJAG5hbWVfaGFzaCvAGFMS/RqVAwoAbmV0d29ya19pZEfskXYKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:dragon_head", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTIBAAACAQAbmFtZRUAbWluZWNyYWZ0OmRyYWdvbl9oZWFkBAkAbmFtZV9oYXNozjh6bGRaa5UDCgBuZXR3b3JrX2lk/zjetgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:skeleton_skull", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAAAACAQAbmFtZRgAbWluZWNyYWZ0OnNrZWxldG9uX3NrdWxsBAkAbmFtZV9oYXNo3+kbzeMgg4kDCgBuZXR3b3JrX2lk/RqWbwoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:wither_skeleton_skull", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTEBAAACAQAbmFtZR8AbWluZWNyYWZ0OndpdGhlcl9za2VsZXRvbl9za3VsbAQJAG5hbWVfaGFzaEcZrUyy9cfRAwoAbmV0d29ya19pZJZ2G/oKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:piglin_head", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTJBAAACAQAbmFtZRUAbWluZWNyYWZ0OnBpZ2xpbl9oZWFkBAkAbmFtZV9oYXNo+jUCKgb5DskDCgBuZXR3b3JrX2lkQ1ETVwoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:beacon", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAAAACAQAbmFtZRAAbWluZWNyYWZ0OmJlYWNvbgQJAG5hbWVfaGFzaACwhhfSkdkHAwoAbmV0d29ya19pZF8jfiEKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:bell", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAQAACAQAbmFtZQ4AbWluZWNyYWZ0OmJlbGwECQBuYW1lX2hhc2iPqsgDXRcsxAMKAG5ldHdvcmtfaWT7zhOoCgYAc3RhdGVzCAoAYXR0YWNobWVudAgAc3RhbmRpbmcDCQBkaXJlY3Rpb24AAAAAAQoAdG9nZ2xlX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:conduit", + "block_state_b64": "CgAAAwgAYmxvY2tfaWScAQAACAQAbmFtZREAbWluZWNyYWZ0OmNvbmR1aXQECQBuYW1lX2hhc2jqxKAxq2EaWQMKAG5ldHdvcmtfaWTWcBVnCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:stonecutter_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lY3V0dGVyX2Jsb2NrBAkAbmFtZV9oYXNoQAXTbAM3MeYDCgBuZXR3b3JrX2lkWS4RjAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "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:armadillo_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:breeze_rod" + }, + { + "id": "minecraft:heavy_core", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ7AgAACAQAbmFtZRQAbWluZWNyYWZ0OmhlYXZ5X2NvcmUECQBuYW1lX2hhc2hhz/uNCtrC2QMKAG5ldHdvcmtfaWRaFu+8CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "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/q5cEA0hmQMKAG5ldHdvcmtfaWQ2eM8kCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:lightning_rod", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ3AgAACAQAbmFtZRcAbWluZWNyYWZ0OmxpZ2h0bmluZ19yb2QECQBuYW1lX2hhc2ioXQF1xvfHNQMKAG5ldHdvcmtfaWRLuHyACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "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:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQmAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQmAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQmAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQnAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQnAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQnAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQnAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQnAAIDAGx2bAUAAAA=" + }, + { + "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": "CgAACQQAZW5jaAoBAAAAAgIAaWQoAAIDAGx2bAQAAAA=" + }, + { + "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": "CgAAAwgAYmxvY2tfaWRCAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnJhaWwECQBuYW1lX2hhc2hUzmhUXYJDUQMKAG5ldHdvcmtfaWR+Sp6YCgYAc3RhdGVzAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:golden_rail", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQbAAAACAQAbmFtZRUAbWluZWNyYWZ0OmdvbGRlbl9yYWlsBAkAbmFtZV9oYXNoOoV5MaKipoUDCgBuZXR3b3JrX2lkfAcxLwoGAHN0YXRlcwENAHJhaWxfZGF0YV9iaXQAAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:detector_rail", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQcAAAACAQAbmFtZRcAbWluZWNyYWZ0OmRldGVjdG9yX3JhaWwECQBuYW1lX2hhc2gVUk31qOysUQMKAG5ldHdvcmtfaWRVW/aICgYAc3RhdGVzAQ0AcmFpbF9kYXRhX2JpdAADDgByYWlsX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:activator_rail", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AAAACAQAbmFtZRgAbWluZWNyYWZ0OmFjdGl2YXRvcl9yYWlsBAkAbmFtZV9oYXNosIL91qriCRkDCgBuZXR3b3JrX2lkZfckmwoGAHN0YXRlcwENAHJhaWxfZGF0YV9iaXQAAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "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": "CgAAAwgAYmxvY2tfaWSYAAAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZHN0b25lX2Jsb2NrBAkAbmFtZV9oYXNoRhULL0r8o0sDCgBuZXR3b3JrX2lklayOHgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:redstone_torch", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAAAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZHN0b25lX3RvcmNoBAkAbmFtZV9oYXNoizFRjpYMIDgDCgBuZXR3b3JrX2lkuHz7yAoGAHN0YXRlcwgWAHRvcmNoX2ZhY2luZ19kaXJlY3Rpb24HAHVua25vd24AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:lever", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmxldmVyBAkAbmFtZV9oYXNoGMJeLJsUMLYDCgBuZXR3b3JrX2lkEF/GuAoGAHN0YXRlcwgPAGxldmVyX2RpcmVjdGlvbg4AZG93bl9lYXN0X3dlc3QBCABvcGVuX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:wooden_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAAAACAQAbmFtZRcAbWluZWNyYWZ0Ondvb2Rlbl9idXR0b24ECQBuYW1lX2hhc2hR7PgSTQt0sQMKAG5ldHdvcmtfaWSU07kYCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:spruce_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAQAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9idXR0b24ECQBuYW1lX2hhc2jBW9Z8aYE7YQMKAG5ldHdvcmtfaWTkUIGuCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:birch_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSMAQAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX2J1dHRvbgQJAG5hbWVfaGFzaJXYgGuSHbTwAwoAbmV0d29ya19pZGWp3yoKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:jungle_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSOAQAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9idXR0b24ECQBuYW1lX2hhc2iCgNANcJs+BQMKAG5ldHdvcmtfaWT9fImWCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:acacia_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAQAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9idXR0b24ECQBuYW1lX2hhc2gVvmcT7LTO0wMKAG5ldHdvcmtfaWRQnxIJCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:dark_oak_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSNAQAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX2J1dHRvbgQJAG5hbWVfaGFzaIV10ZGGrCIEAwoAbmV0d29ya19pZN5vAmIKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:mangrove_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX2J1dHRvbgQJAG5hbWVfaGFzaNzeYYKLgOzJAwoAbmV0d29ya19pZAFEGQ0KBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cherry_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9idXR0b24ECQBuYW1lX2hhc2j2/IHjeAbUcwMKAG5ldHdvcmtfaWRJ1irQCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:bamboo_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT+AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19idXR0b24ECQBuYW1lX2hhc2j7AddMi+6nsgMKAG5ldHdvcmtfaWSa9w4/CgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:stone_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAAAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX2J1dHRvbgQJAG5hbWVfaGFzaM4ejMctmvohAwoAbmV0d29ya19pZMw+aC0KBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:crimson_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fYnV0dG9uBAkAbmFtZV9oYXNofnjYHaYIeWgDCgBuZXR3b3JrX2lk+n1vyQoGAHN0YXRlcwESAGJ1dHRvbl9wcmVzc2VkX2JpdAADEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:warped_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9idXR0b24ECQBuYW1lX2hhc2jwkV2EU6Cn1QMKAG5ldHdvcmtfaWTnHnk1CgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:polished_blackstone_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQnAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnV0dG9uBAkAbmFtZV9oYXNojmxzQKS0S/EDCgBuZXR3b3JrX2lkDtQ95woGAHN0YXRlcwESAGJ1dHRvbl9wcmVzc2VkX2JpdAADEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:tripwire_hook", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAAAACAQAbmFtZRcAbWluZWNyYWZ0OnRyaXB3aXJlX2hvb2sECQBuYW1lX2hhc2gQdp+oGZLNnAMKAG5ldHdvcmtfaWSy+1KJCgYAc3RhdGVzAQwAYXR0YWNoZWRfYml0AAMJAGRpcmVjdGlvbgAAAAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:wooden_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAAAACAQAbmFtZR8AbWluZWNyYWZ0Ondvb2Rlbl9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaGkGs5kCuA74AwoAbmV0d29ya19pZDRzPNwKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:spruce_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAQAACAQAbmFtZR8AbWluZWNyYWZ0OnNwcnVjZV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaNmwuq549fJKAwoAbmV0d29ya19pZLQMCw0KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:birch_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSWAQAACAQAbmFtZR4AbWluZWNyYWZ0OmJpcmNoX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNorQkT9kDdlTwDCgBuZXR3b3JrX2lkH0G97AoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:jungle_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSYAQAACAQAbmFtZR8AbWluZWNyYWZ0Omp1bmdsZV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaJ7DcteCkb8/AwoAbmV0d29ya19pZLdPBSAKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:acacia_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSVAQAACAQAbmFtZR8AbWluZWNyYWZ0OmFjYWNpYV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaC2frZtfoYqCAwoAbmV0d29ya19pZIDdI18KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:dark_oak_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAQAACAQAbmFtZSEAbWluZWNyYWZ0OmRhcmtfb2FrX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoHUCJsTy52pwDCgBuZXR3b3JrX2lkKpi8rAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:mangrove_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAgAACAQAbmFtZSEAbWluZWNyYWZ0Om1hbmdyb3ZlX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoiDsTfJaX100DCgBuZXR3b3JrX2lkuwWDyQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cherry_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAwAACAQAbmFtZR8AbWluZWNyYWZ0OmNoZXJyeV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaALMqYEZDUQHAwoAbmV0d29ya19pZPNT+r0KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:bamboo_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJhbWJvb19wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaNvxJ7NIAaqlAwoAbmV0d29ya19pZIZ8XnYKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:crimson_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAgAACAQAbmFtZSAAbWluZWNyYWZ0OmNyaW1zb25fcHJlc3N1cmVfcGxhdGUECQBuYW1lX2hhc2hqBDVDAd31/gMKAG5ldHdvcmtfaWRmV18LCgYAc3RhdGVzAw8AcmVkc3RvbmVfc2lnbmFsAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:warped_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAgAACAQAbmFtZR8AbWluZWNyYWZ0OndhcnBlZF9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaBxFoQksWtYUAwoAbmV0d29ya19pZJVRoIcKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:stone_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0b25lX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNounJuTBUTrU8DCgBuZXR3b3JrX2lkjDydwQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:light_weighted_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSTAAAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X3dlaWdodGVkX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoOyOJkNxLtkEDCgBuZXR3b3JrX2lkrr2AjgoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:heavy_weighted_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAAAACAQAbmFtZScAbWluZWNyYWZ0OmhlYXZ5X3dlaWdodGVkX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoltgDmDvTajUDCgBuZXR3b3JrX2lkFxVKuQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:polished_blackstone_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAgAACAQAbmFtZSwAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfcHJlc3N1cmVfcGxhdGUECQBuYW1lX2hhc2h65Ci6/CeGqwMKAG5ldHdvcmtfaWTaSW5xCgYAc3RhdGVzAw8AcmVkc3RvbmVfc2lnbmFsAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:observer", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT7AAAACAQAbmFtZRIAbWluZWNyYWZ0Om9ic2VydmVyBAkAbmFtZV9oYXNoYhlh1lpmHTgDCgBuZXR3b3JrX2lkQEh55goGAHN0YXRlcwgaAG1pbmVjcmFmdDpmYWNpbmdfZGlyZWN0aW9uBABkb3duAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:daylight_detector", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAAAACAQAbmFtZRsAbWluZWNyYWZ0OmRheWxpZ2h0X2RldGVjdG9yBAkAbmFtZV9oYXNoV0F0s7B7PVgDCgBuZXR3b3JrX2lkri5afQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:repeater" + }, + { + "id": "minecraft:comparator" + }, + { + "id": "minecraft:hopper" + }, + { + "id": "minecraft:dropper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AAAACAQAbmFtZREAbWluZWNyYWZ0OmRyb3BwZXIECQBuYW1lX2hhc2joXP7XqU0l3QMKAG5ldHdvcmtfaWQfQN6zCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgMAAAABDQB0cmlnZ2VyZWRfYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:dispenser", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAAAACAQAbmFtZRMAbWluZWNyYWZ0OmRpc3BlbnNlcgQJAG5hbWVfaGFzaP1RR+zAbYP2AwoAbmV0d29ya19pZGAayD0KBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAwAAAAENAHRyaWdnZXJlZF9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:crafter", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4AgAACAQAbmFtZREAbWluZWNyYWZ0OmNyYWZ0ZXIECQBuYW1lX2hhc2iLCT/rJmRN8QMKAG5ldHdvcmtfaWTPTbvrCgYAc3RhdGVzAQgAY3JhZnRpbmcACAsAb3JpZW50YXRpb24JAGRvd25fZWFzdAENAHRyaWdnZXJlZF9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:piston", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQhAAAACAQAbmFtZRAAbWluZWNyYWZ0OnBpc3RvbgQJAG5hbWVfaGFzaDs3AFh1fL0uAwoAbmV0d29ya19pZLD/5XQKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAQAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:sticky_piston", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQdAAAACAQAbmFtZRcAbWluZWNyYWZ0OnN0aWNreV9waXN0b24ECQBuYW1lX2hhc2hPFJFJSiJ0ZQMKAG5ldHdvcmtfaWT/MzCJCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgEAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:tnt", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAAAACAQAbmFtZQ0AbWluZWNyYWZ0OnRudAQJAG5hbWVfaGFzaEYOHwCvJH29AwoAbmV0d29ya19pZAXzHyUKBgBzdGF0ZXMBCwBleHBsb2RlX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:name_tag" + }, + { + "id": "minecraft:loom", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAQAACAQAbmFtZQ4AbWluZWNyYWZ0Omxvb20ECQBuYW1lX2hhc2i7DKjAXNq8TAMKAG5ldHdvcmtfaWR/49HXCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:banner", + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 8, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 7, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 15, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 12, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 14, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 1, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 4, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 5, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 13, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 9, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 3, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 11, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 10, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 2, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 6, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "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:flow_banner_pattern" + }, + { + "id": "minecraft:guster_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:flow_pottery_sherd" + }, + { + "id": "minecraft:friend_pottery_sherd" + }, + { + "id": "minecraft:guster_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:scrape_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:flow_armor_trim_smithing_template" + }, + { + "id": "minecraft:bolt_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": "CgAAAwgAYmxvY2tfaWTuAQAACAQAbmFtZRAAbWluZWNyYWZ0OnRhcmdldAQJAG5hbWVfaGFzaJc66SVbYlaxAwoAbmV0d29ya19pZPBozs0KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:decorated_pot", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAwAACAQAbmFtZRcAbWluZWNyYWZ0OmRlY29yYXRlZF9wb3QECQBuYW1lX2hhc2jjQgckn8VTvwMKAG5ldHdvcmtfaWRwvkUUCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:trial_key" + }, + { + "id": "minecraft:ominous_trial_key" + }, + { + "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_21_40.json b/core/src/main/resources/bedrock/runtime_item_states.1_21_40.json new file mode 100644 index 000000000..9ad93dd09 --- /dev/null +++ b/core/src/main/resources/bedrock/runtime_item_states.1_21_40.json @@ -0,0 +1,6994 @@ +[ + { + "name": "minecraft:acacia_boat", + "id": 405 + }, + { + "name": "minecraft:acacia_button", + "id": -140 + }, + { + "name": "minecraft:acacia_chest_boat", + "id": 678 + }, + { + "name": "minecraft:acacia_door", + "id": 589 + }, + { + "name": "minecraft:acacia_double_slab", + "id": -812 + }, + { + "name": "minecraft:acacia_fence", + "id": -575 + }, + { + "name": "minecraft:acacia_fence_gate", + "id": 187 + }, + { + "name": "minecraft:acacia_hanging_sign", + "id": -504 + }, + { + "name": "minecraft:acacia_leaves", + "id": 161 + }, + { + "name": "minecraft:acacia_log", + "id": 162 + }, + { + "name": "minecraft:acacia_planks", + "id": -742 + }, + { + "name": "minecraft:acacia_pressure_plate", + "id": -150 + }, + { + "name": "minecraft:acacia_sapling", + "id": -828 + }, + { + "name": "minecraft:acacia_sign", + "id": 612 + }, + { + "name": "minecraft:acacia_slab", + "id": -807 + }, + { + "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:acacia_wood", + "id": -817 + }, + { + "name": "minecraft:activator_rail", + "id": 126 + }, + { + "name": "minecraft:agent_spawn_egg", + "id": 515 + }, + { + "name": "minecraft:air", + "id": -158 + }, + { + "name": "minecraft:allay_spawn_egg", + "id": 667 + }, + { + "name": "minecraft:allium", + "id": -831 + }, + { + "name": "minecraft:allow", + "id": 210 + }, + { + "name": "minecraft:amethyst_block", + "id": -327 + }, + { + "name": "minecraft:amethyst_cluster", + "id": -329 + }, + { + "name": "minecraft:amethyst_shard", + "id": 660 + }, + { + "name": "minecraft:ancient_debris", + "id": -271 + }, + { + "name": "minecraft:andesite", + "id": -594 + }, + { + "name": "minecraft:andesite_double_slab", + "id": -920 + }, + { + "name": "minecraft:andesite_slab", + "id": -893 + }, + { + "name": "minecraft:andesite_stairs", + "id": -171 + }, + { + "name": "minecraft:andesite_wall", + "id": -974 + }, + { + "name": "minecraft:angler_pottery_sherd", + "id": 692 + }, + { + "name": "minecraft:anvil", + "id": 145 + }, + { + "name": "minecraft:apple", + "id": 278 + }, + { + "name": "minecraft:archer_pottery_sherd", + "id": 693 + }, + { + "name": "minecraft:armadillo_scute", + "id": 739 + }, + { + "name": "minecraft:armadillo_spawn_egg", + "id": 738 + }, + { + "name": "minecraft:armor_stand", + "id": 585 + }, + { + "name": "minecraft:arms_up_pottery_sherd", + "id": 694 + }, + { + "name": "minecraft:arrow", + "id": 325 + }, + { + "name": "minecraft:axolotl_bucket", + "id": 394 + }, + { + "name": "minecraft:axolotl_spawn_egg", + "id": 530 + }, + { + "name": "minecraft:azalea", + "id": -337 + }, + { + "name": "minecraft:azalea_leaves", + "id": -324 + }, + { + "name": "minecraft:azalea_leaves_flowered", + "id": -325 + }, + { + "name": "minecraft:azure_bluet", + "id": -832 + }, + { + "name": "minecraft:baked_potato", + "id": 303 + }, + { + "name": "minecraft:balloon", + "id": 634 + }, + { + "name": "minecraft:bamboo", + "id": -163 + }, + { + "name": "minecraft:bamboo_block", + "id": -527 + }, + { + "name": "minecraft:bamboo_button", + "id": -511 + }, + { + "name": "minecraft:bamboo_chest_raft", + "id": 690 + }, + { + "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": 689 + }, + { + "name": "minecraft:bamboo_sapling", + "id": -164 + }, + { + "name": "minecraft:bamboo_sign", + "id": 688 + }, + { + "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": 600 + }, + { + "name": "minecraft:banner_pattern", + "id": 787 + }, + { + "name": "minecraft:barrel", + "id": -203 + }, + { + "name": "minecraft:barrier", + "id": -161 + }, + { + "name": "minecraft:basalt", + "id": -234 + }, + { + "name": "minecraft:bat_spawn_egg", + "id": 480 + }, + { + "name": "minecraft:beacon", + "id": 138 + }, + { + "name": "minecraft:bed", + "id": 444 + }, + { + "name": "minecraft:bedrock", + "id": 7 + }, + { + "name": "minecraft:bee_nest", + "id": -218 + }, + { + "name": "minecraft:bee_spawn_egg", + "id": 522 + }, + { + "name": "minecraft:beef", + "id": 295 + }, + { + "name": "minecraft:beehive", + "id": -219 + }, + { + "name": "minecraft:beetroot", + "id": 307 + }, + { + "name": "minecraft:beetroot_seeds", + "id": 317 + }, + { + "name": "minecraft:beetroot_soup", + "id": 308 + }, + { + "name": "minecraft:bell", + "id": -206 + }, + { + "name": "minecraft:big_dripleaf", + "id": -323 + }, + { + "name": "minecraft:birch_boat", + "id": 402 + }, + { + "name": "minecraft:birch_button", + "id": -141 + }, + { + "name": "minecraft:birch_chest_boat", + "id": 675 + }, + { + "name": "minecraft:birch_door", + "id": 587 + }, + { + "name": "minecraft:birch_double_slab", + "id": -810 + }, + { + "name": "minecraft:birch_fence", + "id": -576 + }, + { + "name": "minecraft:birch_fence_gate", + "id": 184 + }, + { + "name": "minecraft:birch_hanging_sign", + "id": -502 + }, + { + "name": "minecraft:birch_leaves", + "id": -801 + }, + { + "name": "minecraft:birch_log", + "id": -570 + }, + { + "name": "minecraft:birch_planks", + "id": -740 + }, + { + "name": "minecraft:birch_pressure_plate", + "id": -151 + }, + { + "name": "minecraft:birch_sapling", + "id": -826 + }, + { + "name": "minecraft:birch_sign", + "id": 610 + }, + { + "name": "minecraft:birch_slab", + "id": -805 + }, + { + "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:birch_wood", + "id": -815 + }, + { + "name": "minecraft:black_bundle", + "id": 257 + }, + { + "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": 421 + }, + { + "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": 695 + }, + { + "name": "minecraft:blast_furnace", + "id": -196 + }, + { + "name": "minecraft:blaze_powder", + "id": 456 + }, + { + "name": "minecraft:blaze_rod", + "id": 449 + }, + { + "name": "minecraft:blaze_spawn_egg", + "id": 483 + }, + { + "name": "minecraft:bleach", + "id": 632 + }, + { + "name": "minecraft:blue_bundle", + "id": 258 + }, + { + "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": 425 + }, + { + "name": "minecraft:blue_glazed_terracotta", + "id": 231 + }, + { + "name": "minecraft:blue_ice", + "id": -11 + }, + { + "name": "minecraft:blue_orchid", + "id": -830 + }, + { + "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": 785 + }, + { + "name": "minecraft:bogged_spawn_egg", + "id": 490 + }, + { + "name": "minecraft:bolt_armor_trim_smithing_template", + "id": 734 + }, + { + "name": "minecraft:bone", + "id": 441 + }, + { + "name": "minecraft:bone_block", + "id": 216 + }, + { + "name": "minecraft:bone_meal", + "id": 437 + }, + { + "name": "minecraft:book", + "id": 413 + }, + { + "name": "minecraft:bookshelf", + "id": 47 + }, + { + "name": "minecraft:border_block", + "id": 212 + }, + { + "name": "minecraft:bordure_indented_banner_pattern", + "id": 619 + }, + { + "name": "minecraft:bow", + "id": 324 + }, + { + "name": "minecraft:bowl", + "id": 346 + }, + { + "name": "minecraft:brain_coral", + "id": -581 + }, + { + "name": "minecraft:brain_coral_block", + "id": -849 + }, + { + "name": "minecraft:brain_coral_fan", + "id": -840 + }, + { + "name": "minecraft:brain_coral_wall_fan", + "id": -904 + }, + { + "name": "minecraft:bread", + "id": 283 + }, + { + "name": "minecraft:breeze_rod", + "id": 274 + }, + { + "name": "minecraft:breeze_spawn_egg", + "id": 529 + }, + { + "name": "minecraft:brewer_pottery_sherd", + "id": 696 + }, + { + "name": "minecraft:brewing_stand", + "id": 458 + }, + { + "name": "minecraft:brick", + "id": 409 + }, + { + "name": "minecraft:brick_block", + "id": 45 + }, + { + "name": "minecraft:brick_double_slab", + "id": -880 + }, + { + "name": "minecraft:brick_slab", + "id": -874 + }, + { + "name": "minecraft:brick_stairs", + "id": 108 + }, + { + "name": "minecraft:brick_wall", + "id": -976 + }, + { + "name": "minecraft:brown_bundle", + "id": 259 + }, + { + "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": 424 + }, + { + "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": 715 + }, + { + "name": "minecraft:bubble_column", + "id": -160 + }, + { + "name": "minecraft:bubble_coral", + "id": -582 + }, + { + "name": "minecraft:bubble_coral_block", + "id": -850 + }, + { + "name": "minecraft:bubble_coral_fan", + "id": -841 + }, + { + "name": "minecraft:bubble_coral_wall_fan", + "id": -136 + }, + { + "name": "minecraft:bucket", + "id": 385 + }, + { + "name": "minecraft:budding_amethyst", + "id": -328 + }, + { + "name": "minecraft:bundle", + "id": 260 + }, + { + "name": "minecraft:burn_pottery_sherd", + "id": 697 + }, + { + "name": "minecraft:cactus", + "id": 81 + }, + { + "name": "minecraft:cake", + "id": 443 + }, + { + "name": "minecraft:calcite", + "id": -326 + }, + { + "name": "minecraft:calibrated_sculk_sensor", + "id": -580 + }, + { + "name": "minecraft:camel_spawn_egg", + "id": 691 + }, + { + "name": "minecraft:camera", + "id": 629 + }, + { + "name": "minecraft:campfire", + "id": 624 + }, + { + "name": "minecraft:candle", + "id": -412 + }, + { + "name": "minecraft:candle_cake", + "id": -429 + }, + { + "name": "minecraft:carpet", + "id": 744 + }, + { + "name": "minecraft:carrot", + "id": 301 + }, + { + "name": "minecraft:carrot_on_a_stick", + "id": 550 + }, + { + "name": "minecraft:carrots", + "id": 141 + }, + { + "name": "minecraft:cartography_table", + "id": -200 + }, + { + "name": "minecraft:carved_pumpkin", + "id": -155 + }, + { + "name": "minecraft:cat_spawn_egg", + "id": 516 + }, + { + "name": "minecraft:cauldron", + "id": 459 + }, + { + "name": "minecraft:cave_spider_spawn_egg", + "id": 484 + }, + { + "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": 655 + }, + { + "name": "minecraft:chain_command_block", + "id": 189 + }, + { + "name": "minecraft:chainmail_boots", + "id": 367 + }, + { + "name": "minecraft:chainmail_chestplate", + "id": 365 + }, + { + "name": "minecraft:chainmail_helmet", + "id": 364 + }, + { + "name": "minecraft:chainmail_leggings", + "id": 366 + }, + { + "name": "minecraft:charcoal", + "id": 327 + }, + { + "name": "minecraft:chemical_heat", + "id": 192 + }, + { + "name": "minecraft:chemistry_table", + "id": 779 + }, + { + "name": "minecraft:cherry_boat", + "id": 685 + }, + { + "name": "minecraft:cherry_button", + "id": -530 + }, + { + "name": "minecraft:cherry_chest_boat", + "id": 686 + }, + { + "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": 687 + }, + { + "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": 681 + }, + { + "name": "minecraft:chest_minecart", + "id": 415 + }, + { + "name": "minecraft:chicken", + "id": 297 + }, + { + "name": "minecraft:chicken_spawn_egg", + "id": 462 + }, + { + "name": "minecraft:chipped_anvil", + "id": -959 + }, + { + "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_quartz_block", + "id": -953 + }, + { + "name": "minecraft:chiseled_red_sandstone", + "id": -956 + }, + { + "name": "minecraft:chiseled_sandstone", + "id": -944 + }, + { + "name": "minecraft:chiseled_stone_bricks", + "id": -870 + }, + { + "name": "minecraft:chiseled_tuff", + "id": -753 + }, + { + "name": "minecraft:chiseled_tuff_bricks", + "id": -759 + }, + { + "name": "minecraft:chorus_flower", + "id": 200 + }, + { + "name": "minecraft:chorus_fruit", + "id": 591 + }, + { + "name": "minecraft:chorus_plant", + "id": 240 + }, + { + "name": "minecraft:clay", + "id": 82 + }, + { + "name": "minecraft:clay_ball", + "id": 410 + }, + { + "name": "minecraft:client_request_placeholder_block", + "id": -465 + }, + { + "name": "minecraft:clock", + "id": 419 + }, + { + "name": "minecraft:coal", + "id": 326 + }, + { + "name": "minecraft:coal_block", + "id": 173 + }, + { + "name": "minecraft:coal_ore", + "id": 16 + }, + { + "name": "minecraft:coarse_dirt", + "id": -962 + }, + { + "name": "minecraft:coast_armor_trim_smithing_template", + "id": 719 + }, + { + "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_double_slab", + "id": -879 + }, + { + "name": "minecraft:cobblestone_slab", + "id": -873 + }, + { + "name": "minecraft:cobblestone_wall", + "id": 139 + }, + { + "name": "minecraft:cocoa", + "id": 127 + }, + { + "name": "minecraft:cocoa_beans", + "id": 438 + }, + { + "name": "minecraft:cod", + "id": 286 + }, + { + "name": "minecraft:cod_bucket", + "id": 389 + }, + { + "name": "minecraft:cod_spawn_egg", + "id": 508 + }, + { + "name": "minecraft:colored_torch_blue", + "id": 204 + }, + { + "name": "minecraft:colored_torch_bp", + "id": 783 + }, + { + "name": "minecraft:colored_torch_green", + "id": -963 + }, + { + "name": "minecraft:colored_torch_purple", + "id": -964 + }, + { + "name": "minecraft:colored_torch_red", + "id": 202 + }, + { + "name": "minecraft:colored_torch_rg", + "id": 782 + }, + { + "name": "minecraft:command_block", + "id": 137 + }, + { + "name": "minecraft:command_block_minecart", + "id": 596 + }, + { + "name": "minecraft:comparator", + "id": 555 + }, + { + "name": "minecraft:compass", + "id": 417 + }, + { + "name": "minecraft:composter", + "id": -213 + }, + { + "name": "minecraft:compound", + "id": 630 + }, + { + "name": "minecraft:compound_creator", + "id": 238 + }, + { + "name": "minecraft:concrete", + "id": 770 + }, + { + "name": "minecraft:concrete_powder", + "id": 771 + }, + { + "name": "minecraft:conduit", + "id": -157 + }, + { + "name": "minecraft:cooked_beef", + "id": 296 + }, + { + "name": "minecraft:cooked_chicken", + "id": 298 + }, + { + "name": "minecraft:cooked_cod", + "id": 290 + }, + { + "name": "minecraft:cooked_mutton", + "id": 584 + }, + { + "name": "minecraft:cooked_porkchop", + "id": 285 + }, + { + "name": "minecraft:cooked_rabbit", + "id": 311 + }, + { + "name": "minecraft:cooked_salmon", + "id": 291 + }, + { + "name": "minecraft:cookie", + "id": 293 + }, + { + "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": 538 + }, + { + "name": "minecraft:copper_ore", + "id": -311 + }, + { + "name": "minecraft:copper_trapdoor", + "id": -792 + }, + { + "name": "minecraft:coral", + "id": 766 + }, + { + "name": "minecraft:coral_block", + "id": 748 + }, + { + "name": "minecraft:coral_fan", + "id": 757 + }, + { + "name": "minecraft:coral_fan_dead", + "id": 758 + }, + { + "name": "minecraft:cornflower", + "id": -838 + }, + { + "name": "minecraft:cow_spawn_egg", + "id": 463 + }, + { + "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:cracked_stone_bricks", + "id": -869 + }, + { + "name": "minecraft:crafter", + "id": -313 + }, + { + "name": "minecraft:crafting_table", + "id": 58 + }, + { + "name": "minecraft:creeper_banner_pattern", + "id": 615 + }, + { + "name": "minecraft:creeper_head", + "id": -968 + }, + { + "name": "minecraft:creeper_spawn_egg", + "id": 468 + }, + { + "name": "minecraft:crimson_button", + "id": -260 + }, + { + "name": "minecraft:crimson_door", + "id": 652 + }, + { + "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": 650 + }, + { + "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": 608 + }, + { + "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:cut_red_sandstone", + "id": -957 + }, + { + "name": "minecraft:cut_red_sandstone_double_slab", + "id": -928 + }, + { + "name": "minecraft:cut_red_sandstone_slab", + "id": -901 + }, + { + "name": "minecraft:cut_sandstone", + "id": -945 + }, + { + "name": "minecraft:cut_sandstone_double_slab", + "id": -927 + }, + { + "name": "minecraft:cut_sandstone_slab", + "id": -900 + }, + { + "name": "minecraft:cyan_bundle", + "id": 261 + }, + { + "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": 427 + }, + { + "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:damaged_anvil", + "id": -960 + }, + { + "name": "minecraft:dandelion", + "id": 37 + }, + { + "name": "minecraft:danger_pottery_sherd", + "id": 698 + }, + { + "name": "minecraft:dark_oak_boat", + "id": 406 + }, + { + "name": "minecraft:dark_oak_button", + "id": -142 + }, + { + "name": "minecraft:dark_oak_chest_boat", + "id": 679 + }, + { + "name": "minecraft:dark_oak_door", + "id": 590 + }, + { + "name": "minecraft:dark_oak_double_slab", + "id": -813 + }, + { + "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_leaves", + "id": -803 + }, + { + "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_sapling", + "id": -829 + }, + { + "name": "minecraft:dark_oak_sign", + "id": 613 + }, + { + "name": "minecraft:dark_oak_slab", + "id": -808 + }, + { + "name": "minecraft:dark_oak_stairs", + "id": 164 + }, + { + "name": "minecraft:dark_oak_trapdoor", + "id": -147 + }, + { + "name": "minecraft:dark_oak_wood", + "id": -818 + }, + { + "name": "minecraft:dark_prismarine", + "id": -947 + }, + { + "name": "minecraft:dark_prismarine_double_slab", + "id": -913 + }, + { + "name": "minecraft:dark_prismarine_slab", + "id": -886 + }, + { + "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_brain_coral_block", + "id": -854 + }, + { + "name": "minecraft:dead_brain_coral_fan", + "id": -844 + }, + { + "name": "minecraft:dead_brain_coral_wall_fan", + "id": -906 + }, + { + "name": "minecraft:dead_bubble_coral", + "id": -587 + }, + { + "name": "minecraft:dead_bubble_coral_block", + "id": -855 + }, + { + "name": "minecraft:dead_bubble_coral_fan", + "id": -845 + }, + { + "name": "minecraft:dead_bubble_coral_wall_fan", + "id": -908 + }, + { + "name": "minecraft:dead_fire_coral", + "id": -588 + }, + { + "name": "minecraft:dead_fire_coral_block", + "id": -856 + }, + { + "name": "minecraft:dead_fire_coral_fan", + "id": -846 + }, + { + "name": "minecraft:dead_fire_coral_wall_fan", + "id": -909 + }, + { + "name": "minecraft:dead_horn_coral", + "id": -589 + }, + { + "name": "minecraft:dead_horn_coral_block", + "id": -857 + }, + { + "name": "minecraft:dead_horn_coral_fan", + "id": -847 + }, + { + "name": "minecraft:dead_horn_coral_wall_fan", + "id": -910 + }, + { + "name": "minecraft:dead_tube_coral", + "id": -585 + }, + { + "name": "minecraft:dead_tube_coral_block", + "id": -853 + }, + { + "name": "minecraft:dead_tube_coral_fan", + "id": -134 + }, + { + "name": "minecraft:dead_tube_coral_wall_fan", + "id": -905 + }, + { + "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:deprecated_anvil", + "id": -961 + }, + { + "name": "minecraft:deprecated_purpur_block_1", + "id": -950 + }, + { + "name": "minecraft:deprecated_purpur_block_2", + "id": -952 + }, + { + "name": "minecraft:detector_rail", + "id": 28 + }, + { + "name": "minecraft:diamond", + "id": 328 + }, + { + "name": "minecraft:diamond_axe", + "id": 343 + }, + { + "name": "minecraft:diamond_block", + "id": 57 + }, + { + "name": "minecraft:diamond_boots", + "id": 375 + }, + { + "name": "minecraft:diamond_chestplate", + "id": 373 + }, + { + "name": "minecraft:diamond_helmet", + "id": 372 + }, + { + "name": "minecraft:diamond_hoe", + "id": 357 + }, + { + "name": "minecraft:diamond_horse_armor", + "id": 566 + }, + { + "name": "minecraft:diamond_leggings", + "id": 374 + }, + { + "name": "minecraft:diamond_ore", + "id": 56 + }, + { + "name": "minecraft:diamond_pickaxe", + "id": 342 + }, + { + "name": "minecraft:diamond_shovel", + "id": 341 + }, + { + "name": "minecraft:diamond_sword", + "id": 340 + }, + { + "name": "minecraft:diorite", + "id": -592 + }, + { + "name": "minecraft:diorite_double_slab", + "id": -921 + }, + { + "name": "minecraft:diorite_slab", + "id": -894 + }, + { + "name": "minecraft:diorite_stairs", + "id": -170 + }, + { + "name": "minecraft:diorite_wall", + "id": -973 + }, + { + "name": "minecraft:dirt", + "id": 3 + }, + { + "name": "minecraft:dirt_with_roots", + "id": -318 + }, + { + "name": "minecraft:disc_fragment_5", + "id": 673 + }, + { + "name": "minecraft:dispenser", + "id": 23 + }, + { + "name": "minecraft:dolphin_spawn_egg", + "id": 512 + }, + { + "name": "minecraft:donkey_spawn_egg", + "id": 493 + }, + { + "name": "minecraft:double_cut_copper_slab", + "id": -368 + }, + { + "name": "minecraft:double_plant", + "id": 764 + }, + { + "name": "minecraft:double_stone_block_slab", + "id": 753 + }, + { + "name": "minecraft:double_stone_block_slab2", + "id": 754 + }, + { + "name": "minecraft:double_stone_block_slab3", + "id": 755 + }, + { + "name": "minecraft:double_stone_block_slab4", + "id": 756 + }, + { + "name": "minecraft:dragon_breath", + "id": 593 + }, + { + "name": "minecraft:dragon_egg", + "id": 122 + }, + { + "name": "minecraft:dragon_head", + "id": -969 + }, + { + "name": "minecraft:dried_kelp", + "id": 292 + }, + { + "name": "minecraft:dried_kelp_block", + "id": -139 + }, + { + "name": "minecraft:dripstone_block", + "id": -317 + }, + { + "name": "minecraft:dropper", + "id": 125 + }, + { + "name": "minecraft:drowned_spawn_egg", + "id": 511 + }, + { + "name": "minecraft:dune_armor_trim_smithing_template", + "id": 718 + }, + { + "name": "minecraft:dye", + "id": 786 + }, + { + "name": "minecraft:echo_shard", + "id": 683 + }, + { + "name": "minecraft:egg", + "id": 416 + }, + { + "name": "minecraft:elder_guardian_spawn_egg", + "id": 499 + }, + { + "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:element_constructor", + "id": -987 + }, + { + "name": "minecraft:elytra", + "id": 597 + }, + { + "name": "minecraft:emerald", + "id": 546 + }, + { + "name": "minecraft:emerald_block", + "id": 133 + }, + { + "name": "minecraft:emerald_ore", + "id": 129 + }, + { + "name": "minecraft:empty_map", + "id": 549 + }, + { + "name": "minecraft:enchanted_book", + "id": 554 + }, + { + "name": "minecraft:enchanted_golden_apple", + "id": 281 + }, + { + "name": "minecraft:enchanting_table", + "id": 116 + }, + { + "name": "minecraft:end_brick_stairs", + "id": -178 + }, + { + "name": "minecraft:end_bricks", + "id": 206 + }, + { + "name": "minecraft:end_crystal", + "id": 789 + }, + { + "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:end_stone_brick_double_slab", + "id": -167 + }, + { + "name": "minecraft:end_stone_brick_slab", + "id": -162 + }, + { + "name": "minecraft:end_stone_brick_wall", + "id": -980 + }, + { + "name": "minecraft:ender_chest", + "id": 130 + }, + { + "name": "minecraft:ender_dragon_spawn_egg", + "id": 535 + }, + { + "name": "minecraft:ender_eye", + "id": 460 + }, + { + "name": "minecraft:ender_pearl", + "id": 448 + }, + { + "name": "minecraft:enderman_spawn_egg", + "id": 469 + }, + { + "name": "minecraft:endermite_spawn_egg", + "id": 487 + }, + { + "name": "minecraft:evoker_spawn_egg", + "id": 503 + }, + { + "name": "minecraft:experience_bottle", + "id": 542 + }, + { + "name": "minecraft:explorer_pottery_sherd", + "id": 699 + }, + { + "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": 722 + }, + { + "name": "minecraft:farmland", + "id": 60 + }, + { + "name": "minecraft:feather", + "id": 352 + }, + { + "name": "minecraft:fence", + "id": 746 + }, + { + "name": "minecraft:fence_gate", + "id": 107 + }, + { + "name": "minecraft:fermented_spider_eye", + "id": 455 + }, + { + "name": "minecraft:fern", + "id": -848 + }, + { + "name": "minecraft:field_masoned_banner_pattern", + "id": 618 + }, + { + "name": "minecraft:filled_map", + "id": 446 + }, + { + "name": "minecraft:fire", + "id": 51 + }, + { + "name": "minecraft:fire_charge", + "id": 543 + }, + { + "name": "minecraft:fire_coral", + "id": -583 + }, + { + "name": "minecraft:fire_coral_block", + "id": -851 + }, + { + "name": "minecraft:fire_coral_fan", + "id": -842 + }, + { + "name": "minecraft:fire_coral_wall_fan", + "id": -907 + }, + { + "name": "minecraft:firework_rocket", + "id": 552 + }, + { + "name": "minecraft:firework_star", + "id": 553 + }, + { + "name": "minecraft:fishing_rod", + "id": 418 + }, + { + "name": "minecraft:fletching_table", + "id": -201 + }, + { + "name": "minecraft:flint", + "id": 381 + }, + { + "name": "minecraft:flint_and_steel", + "id": 323 + }, + { + "name": "minecraft:flow_armor_trim_smithing_template", + "id": 733 + }, + { + "name": "minecraft:flow_banner_pattern", + "id": 622 + }, + { + "name": "minecraft:flow_pottery_sherd", + "id": 700 + }, + { + "name": "minecraft:flower_banner_pattern", + "id": 614 + }, + { + "name": "minecraft:flower_pot", + "id": 548 + }, + { + "name": "minecraft:flowering_azalea", + "id": -338 + }, + { + "name": "minecraft:flowing_lava", + "id": 10 + }, + { + "name": "minecraft:flowing_water", + "id": 8 + }, + { + "name": "minecraft:fox_spawn_egg", + "id": 518 + }, + { + "name": "minecraft:frame", + "id": 547 + }, + { + "name": "minecraft:friend_pottery_sherd", + "id": 701 + }, + { + "name": "minecraft:frog_spawn", + "id": -468 + }, + { + "name": "minecraft:frog_spawn_egg", + "id": 664 + }, + { + "name": "minecraft:frosted_ice", + "id": 207 + }, + { + "name": "minecraft:furnace", + "id": 61 + }, + { + "name": "minecraft:ghast_spawn_egg", + "id": 481 + }, + { + "name": "minecraft:ghast_tear", + "id": 451 + }, + { + "name": "minecraft:gilded_blackstone", + "id": -281 + }, + { + "name": "minecraft:glass", + "id": 20 + }, + { + "name": "minecraft:glass_bottle", + "id": 454 + }, + { + "name": "minecraft:glass_pane", + "id": 102 + }, + { + "name": "minecraft:glistering_melon_slice", + "id": 461 + }, + { + "name": "minecraft:globe_banner_pattern", + "id": 621 + }, + { + "name": "minecraft:glow_berries", + "id": 790 + }, + { + "name": "minecraft:glow_frame", + "id": 659 + }, + { + "name": "minecraft:glow_ink_sac", + "id": 537 + }, + { + "name": "minecraft:glow_lichen", + "id": -411 + }, + { + "name": "minecraft:glow_squid_spawn_egg", + "id": 532 + }, + { + "name": "minecraft:glow_stick", + "id": 637 + }, + { + "name": "minecraft:glowingobsidian", + "id": 246 + }, + { + "name": "minecraft:glowstone", + "id": 89 + }, + { + "name": "minecraft:glowstone_dust", + "id": 420 + }, + { + "name": "minecraft:goat_horn", + "id": 663 + }, + { + "name": "minecraft:goat_spawn_egg", + "id": 531 + }, + { + "name": "minecraft:gold_block", + "id": 41 + }, + { + "name": "minecraft:gold_ingot", + "id": 330 + }, + { + "name": "minecraft:gold_nugget", + "id": 452 + }, + { + "name": "minecraft:gold_ore", + "id": 14 + }, + { + "name": "minecraft:golden_apple", + "id": 280 + }, + { + "name": "minecraft:golden_axe", + "id": 350 + }, + { + "name": "minecraft:golden_boots", + "id": 379 + }, + { + "name": "minecraft:golden_carrot", + "id": 305 + }, + { + "name": "minecraft:golden_chestplate", + "id": 377 + }, + { + "name": "minecraft:golden_helmet", + "id": 376 + }, + { + "name": "minecraft:golden_hoe", + "id": 358 + }, + { + "name": "minecraft:golden_horse_armor", + "id": 565 + }, + { + "name": "minecraft:golden_leggings", + "id": 378 + }, + { + "name": "minecraft:golden_pickaxe", + "id": 349 + }, + { + "name": "minecraft:golden_rail", + "id": 27 + }, + { + "name": "minecraft:golden_shovel", + "id": 348 + }, + { + "name": "minecraft:golden_sword", + "id": 347 + }, + { + "name": "minecraft:granite", + "id": -590 + }, + { + "name": "minecraft:granite_double_slab", + "id": -923 + }, + { + "name": "minecraft:granite_slab", + "id": -896 + }, + { + "name": "minecraft:granite_stairs", + "id": -169 + }, + { + "name": "minecraft:granite_wall", + "id": -972 + }, + { + "name": "minecraft:grass_block", + "id": 2 + }, + { + "name": "minecraft:grass_path", + "id": 198 + }, + { + "name": "minecraft:gravel", + "id": 13 + }, + { + "name": "minecraft:gray_bundle", + "id": 262 + }, + { + "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": 429 + }, + { + "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_bundle", + "id": 263 + }, + { + "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": 423 + }, + { + "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": 488 + }, + { + "name": "minecraft:gunpowder", + "id": 353 + }, + { + "name": "minecraft:guster_banner_pattern", + "id": 623 + }, + { + "name": "minecraft:guster_pottery_sherd", + "id": 702 + }, + { + "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": 780 + }, + { + "name": "minecraft:hard_stained_glass_pane", + "id": 781 + }, + { + "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": 604 + }, + { + "name": "minecraft:heart_pottery_sherd", + "id": 703 + }, + { + "name": "minecraft:heartbreak_pottery_sherd", + "id": 704 + }, + { + "name": "minecraft:heavy_core", + "id": -316 + }, + { + "name": "minecraft:heavy_weighted_pressure_plate", + "id": 148 + }, + { + "name": "minecraft:hoglin_spawn_egg", + "id": 524 + }, + { + "name": "minecraft:honey_block", + "id": -220 + }, + { + "name": "minecraft:honey_bottle", + "id": 627 + }, + { + "name": "minecraft:honeycomb", + "id": 626 + }, + { + "name": "minecraft:honeycomb_block", + "id": -221 + }, + { + "name": "minecraft:hopper", + "id": 560 + }, + { + "name": "minecraft:hopper_minecart", + "id": 559 + }, + { + "name": "minecraft:horn_coral", + "id": -584 + }, + { + "name": "minecraft:horn_coral_block", + "id": -852 + }, + { + "name": "minecraft:horn_coral_fan", + "id": -843 + }, + { + "name": "minecraft:horn_coral_wall_fan", + "id": -137 + }, + { + "name": "minecraft:horse_spawn_egg", + "id": 485 + }, + { + "name": "minecraft:host_armor_trim_smithing_template", + "id": 732 + }, + { + "name": "minecraft:howl_pottery_sherd", + "id": 705 + }, + { + "name": "minecraft:husk_spawn_egg", + "id": 491 + }, + { + "name": "minecraft:ice", + "id": 79 + }, + { + "name": "minecraft:ice_bomb", + "id": 631 + }, + { + "name": "minecraft:infested_chiseled_stone_bricks", + "id": -862 + }, + { + "name": "minecraft:infested_cobblestone", + "id": -858 + }, + { + "name": "minecraft:infested_cracked_stone_bricks", + "id": -861 + }, + { + "name": "minecraft:infested_deepslate", + "id": -454 + }, + { + "name": "minecraft:infested_mossy_stone_bricks", + "id": -860 + }, + { + "name": "minecraft:infested_stone", + "id": 97 + }, + { + "name": "minecraft:infested_stone_bricks", + "id": -859 + }, + { + "name": "minecraft:info_update", + "id": 248 + }, + { + "name": "minecraft:info_update2", + "id": 249 + }, + { + "name": "minecraft:ink_sac", + "id": 439 + }, + { + "name": "minecraft:invisible_bedrock", + "id": 95 + }, + { + "name": "minecraft:iron_axe", + "id": 322 + }, + { + "name": "minecraft:iron_bars", + "id": 101 + }, + { + "name": "minecraft:iron_block", + "id": 42 + }, + { + "name": "minecraft:iron_boots", + "id": 371 + }, + { + "name": "minecraft:iron_chestplate", + "id": 369 + }, + { + "name": "minecraft:iron_door", + "id": 397 + }, + { + "name": "minecraft:iron_golem_spawn_egg", + "id": 533 + }, + { + "name": "minecraft:iron_helmet", + "id": 368 + }, + { + "name": "minecraft:iron_hoe", + "id": 356 + }, + { + "name": "minecraft:iron_horse_armor", + "id": 564 + }, + { + "name": "minecraft:iron_ingot", + "id": 329 + }, + { + "name": "minecraft:iron_leggings", + "id": 370 + }, + { + "name": "minecraft:iron_nugget", + "id": 602 + }, + { + "name": "minecraft:iron_ore", + "id": 15 + }, + { + "name": "minecraft:iron_pickaxe", + "id": 321 + }, + { + "name": "minecraft:iron_shovel", + "id": 320 + }, + { + "name": "minecraft:iron_sword", + "id": 331 + }, + { + "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.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": 403 + }, + { + "name": "minecraft:jungle_button", + "id": -143 + }, + { + "name": "minecraft:jungle_chest_boat", + "id": 676 + }, + { + "name": "minecraft:jungle_door", + "id": 588 + }, + { + "name": "minecraft:jungle_double_slab", + "id": -811 + }, + { + "name": "minecraft:jungle_fence", + "id": -578 + }, + { + "name": "minecraft:jungle_fence_gate", + "id": 185 + }, + { + "name": "minecraft:jungle_hanging_sign", + "id": -503 + }, + { + "name": "minecraft:jungle_leaves", + "id": -802 + }, + { + "name": "minecraft:jungle_log", + "id": -571 + }, + { + "name": "minecraft:jungle_planks", + "id": -741 + }, + { + "name": "minecraft:jungle_pressure_plate", + "id": -153 + }, + { + "name": "minecraft:jungle_sapling", + "id": -827 + }, + { + "name": "minecraft:jungle_sign", + "id": 611 + }, + { + "name": "minecraft:jungle_slab", + "id": -806 + }, + { + "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:jungle_wood", + "id": -816 + }, + { + "name": "minecraft:kelp", + "id": 408 + }, + { + "name": "minecraft:lab_table", + "id": -988 + }, + { + "name": "minecraft:ladder", + "id": 65 + }, + { + "name": "minecraft:lantern", + "id": -208 + }, + { + "name": "minecraft:lapis_block", + "id": 22 + }, + { + "name": "minecraft:lapis_lazuli", + "id": 440 + }, + { + "name": "minecraft:lapis_ore", + "id": 21 + }, + { + "name": "minecraft:large_amethyst_bud", + "id": -330 + }, + { + "name": "minecraft:large_fern", + "id": -865 + }, + { + "name": "minecraft:lava", + "id": 11 + }, + { + "name": "minecraft:lava_bucket", + "id": 388 + }, + { + "name": "minecraft:lead", + "id": 580 + }, + { + "name": "minecraft:leather", + "id": 407 + }, + { + "name": "minecraft:leather_boots", + "id": 363 + }, + { + "name": "minecraft:leather_chestplate", + "id": 361 + }, + { + "name": "minecraft:leather_helmet", + "id": 360 + }, + { + "name": "minecraft:leather_horse_armor", + "id": 563 + }, + { + "name": "minecraft:leather_leggings", + "id": 362 + }, + { + "name": "minecraft:leaves", + "id": 760 + }, + { + "name": "minecraft:leaves2", + "id": 761 + }, + { + "name": "minecraft:lectern", + "id": -194 + }, + { + "name": "minecraft:lever", + "id": 69 + }, + { + "name": "minecraft:light_block", + "id": 784 + }, + { + "name": "minecraft:light_block_0", + "id": -215 + }, + { + "name": "minecraft:light_block_1", + "id": -929 + }, + { + "name": "minecraft:light_block_10", + "id": -938 + }, + { + "name": "minecraft:light_block_11", + "id": -939 + }, + { + "name": "minecraft:light_block_12", + "id": -940 + }, + { + "name": "minecraft:light_block_13", + "id": -941 + }, + { + "name": "minecraft:light_block_14", + "id": -942 + }, + { + "name": "minecraft:light_block_15", + "id": -943 + }, + { + "name": "minecraft:light_block_2", + "id": -930 + }, + { + "name": "minecraft:light_block_3", + "id": -931 + }, + { + "name": "minecraft:light_block_4", + "id": -932 + }, + { + "name": "minecraft:light_block_5", + "id": -933 + }, + { + "name": "minecraft:light_block_6", + "id": -934 + }, + { + "name": "minecraft:light_block_7", + "id": -935 + }, + { + "name": "minecraft:light_block_8", + "id": -936 + }, + { + "name": "minecraft:light_block_9", + "id": -937 + }, + { + "name": "minecraft:light_blue_bundle", + "id": 264 + }, + { + "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": 433 + }, + { + "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_bundle", + "id": 265 + }, + { + "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": 428 + }, + { + "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:lilac", + "id": -863 + }, + { + "name": "minecraft:lily_of_the_valley", + "id": -839 + }, + { + "name": "minecraft:lime_bundle", + "id": 266 + }, + { + "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": 431 + }, + { + "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": 595 + }, + { + "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": 501 + }, + { + "name": "minecraft:lodestone", + "id": -222 + }, + { + "name": "minecraft:lodestone_compass", + "id": 638 + }, + { + "name": "minecraft:log", + "id": 745 + }, + { + "name": "minecraft:log2", + "id": 768 + }, + { + "name": "minecraft:loom", + "id": -204 + }, + { + "name": "minecraft:mace", + "id": 344 + }, + { + "name": "minecraft:magenta_bundle", + "id": 267 + }, + { + "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": 434 + }, + { + "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": 457 + }, + { + "name": "minecraft:magma_cube_spawn_egg", + "id": 482 + }, + { + "name": "minecraft:mangrove_boat", + "id": 671 + }, + { + "name": "minecraft:mangrove_button", + "id": -487 + }, + { + "name": "minecraft:mangrove_chest_boat", + "id": 680 + }, + { + "name": "minecraft:mangrove_door", + "id": 669 + }, + { + "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": 670 + }, + { + "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:material_reducer", + "id": -986 + }, + { + "name": "minecraft:medicine", + "id": 635 + }, + { + "name": "minecraft:medium_amethyst_bud", + "id": -331 + }, + { + "name": "minecraft:melon_block", + "id": 103 + }, + { + "name": "minecraft:melon_seeds", + "id": 315 + }, + { + "name": "minecraft:melon_slice", + "id": 294 + }, + { + "name": "minecraft:melon_stem", + "id": 105 + }, + { + "name": "minecraft:milk_bucket", + "id": 386 + }, + { + "name": "minecraft:minecart", + "id": 395 + }, + { + "name": "minecraft:miner_pottery_sherd", + "id": 706 + }, + { + "name": "minecraft:mob_spawner", + "id": 52 + }, + { + "name": "minecraft:mojang_banner_pattern", + "id": 617 + }, + { + "name": "minecraft:monster_egg", + "id": 769 + }, + { + "name": "minecraft:mooshroom_spawn_egg", + "id": 467 + }, + { + "name": "minecraft:moss_block", + "id": -320 + }, + { + "name": "minecraft:moss_carpet", + "id": -335 + }, + { + "name": "minecraft:mossy_cobblestone", + "id": 48 + }, + { + "name": "minecraft:mossy_cobblestone_double_slab", + "id": -915 + }, + { + "name": "minecraft:mossy_cobblestone_slab", + "id": -888 + }, + { + "name": "minecraft:mossy_cobblestone_stairs", + "id": -179 + }, + { + "name": "minecraft:mossy_cobblestone_wall", + "id": -971 + }, + { + "name": "minecraft:mossy_stone_brick_double_slab", + "id": -168 + }, + { + "name": "minecraft:mossy_stone_brick_slab", + "id": -166 + }, + { + "name": "minecraft:mossy_stone_brick_stairs", + "id": -175 + }, + { + "name": "minecraft:mossy_stone_brick_wall", + "id": -978 + }, + { + "name": "minecraft:mossy_stone_bricks", + "id": -868 + }, + { + "name": "minecraft:mourner_pottery_sherd", + "id": 707 + }, + { + "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": 494 + }, + { + "name": "minecraft:mushroom_stem", + "id": -1008 + }, + { + "name": "minecraft:mushroom_stew", + "id": 282 + }, + { + "name": "minecraft:music_disc_11", + "id": 577 + }, + { + "name": "minecraft:music_disc_13", + "id": 567 + }, + { + "name": "minecraft:music_disc_5", + "id": 672 + }, + { + "name": "minecraft:music_disc_blocks", + "id": 569 + }, + { + "name": "minecraft:music_disc_cat", + "id": 568 + }, + { + "name": "minecraft:music_disc_chirp", + "id": 570 + }, + { + "name": "minecraft:music_disc_creator", + "id": 776 + }, + { + "name": "minecraft:music_disc_creator_music_box", + "id": 777 + }, + { + "name": "minecraft:music_disc_far", + "id": 571 + }, + { + "name": "minecraft:music_disc_mall", + "id": 572 + }, + { + "name": "minecraft:music_disc_mellohi", + "id": 573 + }, + { + "name": "minecraft:music_disc_otherside", + "id": 662 + }, + { + "name": "minecraft:music_disc_pigstep", + "id": 656 + }, + { + "name": "minecraft:music_disc_precipice", + "id": 778 + }, + { + "name": "minecraft:music_disc_relic", + "id": 735 + }, + { + "name": "minecraft:music_disc_stal", + "id": 574 + }, + { + "name": "minecraft:music_disc_strad", + "id": 575 + }, + { + "name": "minecraft:music_disc_wait", + "id": 578 + }, + { + "name": "minecraft:music_disc_ward", + "id": 576 + }, + { + "name": "minecraft:mutton", + "id": 583 + }, + { + "name": "minecraft:mycelium", + "id": 110 + }, + { + "name": "minecraft:name_tag", + "id": 581 + }, + { + "name": "minecraft:nautilus_shell", + "id": 603 + }, + { + "name": "minecraft:nether_brick", + "id": 112 + }, + { + "name": "minecraft:nether_brick_double_slab", + "id": -883 + }, + { + "name": "minecraft:nether_brick_fence", + "id": 113 + }, + { + "name": "minecraft:nether_brick_slab", + "id": -877 + }, + { + "name": "minecraft:nether_brick_stairs", + "id": 114 + }, + { + "name": "minecraft:nether_brick_wall", + "id": -979 + }, + { + "name": "minecraft:nether_gold_ore", + "id": -288 + }, + { + "name": "minecraft:nether_sprouts", + "id": 657 + }, + { + "name": "minecraft:nether_star", + "id": 551 + }, + { + "name": "minecraft:nether_wart", + "id": 316 + }, + { + "name": "minecraft:nether_wart_block", + "id": 214 + }, + { + "name": "minecraft:netherbrick", + "id": 556 + }, + { + "name": "minecraft:netherite_axe", + "id": 642 + }, + { + "name": "minecraft:netherite_block", + "id": -270 + }, + { + "name": "minecraft:netherite_boots", + "id": 648 + }, + { + "name": "minecraft:netherite_chestplate", + "id": 646 + }, + { + "name": "minecraft:netherite_helmet", + "id": 645 + }, + { + "name": "minecraft:netherite_hoe", + "id": 643 + }, + { + "name": "minecraft:netherite_ingot", + "id": 644 + }, + { + "name": "minecraft:netherite_leggings", + "id": 647 + }, + { + "name": "minecraft:netherite_pickaxe", + "id": 641 + }, + { + "name": "minecraft:netherite_scrap", + "id": 649 + }, + { + "name": "minecraft:netherite_shovel", + "id": 640 + }, + { + "name": "minecraft:netherite_sword", + "id": 639 + }, + { + "name": "minecraft:netherite_upgrade_smithing_template", + "id": 716 + }, + { + "name": "minecraft:netherrack", + "id": 87 + }, + { + "name": "minecraft:netherreactor", + "id": 247 + }, + { + "name": "minecraft:normal_stone_double_slab", + "id": -926 + }, + { + "name": "minecraft:normal_stone_slab", + "id": -899 + }, + { + "name": "minecraft:normal_stone_stairs", + "id": -180 + }, + { + "name": "minecraft:noteblock", + "id": 25 + }, + { + "name": "minecraft:npc_spawn_egg", + "id": 498 + }, + { + "name": "minecraft:oak_boat", + "id": 401 + }, + { + "name": "minecraft:oak_chest_boat", + "id": 674 + }, + { + "name": "minecraft:oak_double_slab", + "id": 157 + }, + { + "name": "minecraft:oak_fence", + "id": 85 + }, + { + "name": "minecraft:oak_hanging_sign", + "id": -500 + }, + { + "name": "minecraft:oak_leaves", + "id": 18 + }, + { + "name": "minecraft:oak_log", + "id": 17 + }, + { + "name": "minecraft:oak_planks", + "id": 5 + }, + { + "name": "minecraft:oak_sapling", + "id": 6 + }, + { + "name": "minecraft:oak_sign", + "id": 383 + }, + { + "name": "minecraft:oak_slab", + "id": 158 + }, + { + "name": "minecraft:oak_stairs", + "id": 53 + }, + { + "name": "minecraft:oak_wood", + "id": -212 + }, + { + "name": "minecraft:observer", + "id": 251 + }, + { + "name": "minecraft:obsidian", + "id": 49 + }, + { + "name": "minecraft:ocelot_spawn_egg", + "id": 478 + }, + { + "name": "minecraft:ochre_froglight", + "id": -471 + }, + { + "name": "minecraft:ominous_bottle", + "id": 628 + }, + { + "name": "minecraft:ominous_trial_key", + "id": 275 + }, + { + "name": "minecraft:orange_bundle", + "id": 268 + }, + { + "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": 435 + }, + { + "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_tulip", + "id": -834 + }, + { + "name": "minecraft:orange_wool", + "id": -557 + }, + { + "name": "minecraft:oxeye_daisy", + "id": -837 + }, + { + "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": 382 + }, + { + "name": "minecraft:panda_spawn_egg", + "id": 517 + }, + { + "name": "minecraft:paper", + "id": 412 + }, + { + "name": "minecraft:parrot_spawn_egg", + "id": 506 + }, + { + "name": "minecraft:pearlescent_froglight", + "id": -469 + }, + { + "name": "minecraft:peony", + "id": -867 + }, + { + "name": "minecraft:petrified_oak_double_slab", + "id": -903 + }, + { + "name": "minecraft:petrified_oak_slab", + "id": -902 + }, + { + "name": "minecraft:phantom_membrane", + "id": 607 + }, + { + "name": "minecraft:phantom_spawn_egg", + "id": 514 + }, + { + "name": "minecraft:pig_spawn_egg", + "id": 464 + }, + { + "name": "minecraft:piglin_banner_pattern", + "id": 620 + }, + { + "name": "minecraft:piglin_brute_spawn_egg", + "id": 527 + }, + { + "name": "minecraft:piglin_head", + "id": -970 + }, + { + "name": "minecraft:piglin_spawn_egg", + "id": 525 + }, + { + "name": "minecraft:pillager_spawn_egg", + "id": 519 + }, + { + "name": "minecraft:pink_bundle", + "id": 269 + }, + { + "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": 430 + }, + { + "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_tulip", + "id": -836 + }, + { + "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": 319 + }, + { + "name": "minecraft:planks", + "id": 765 + }, + { + "name": "minecraft:player_head", + "id": -967 + }, + { + "name": "minecraft:plenty_pottery_sherd", + "id": 708 + }, + { + "name": "minecraft:podzol", + "id": 243 + }, + { + "name": "minecraft:pointed_dripstone", + "id": -308 + }, + { + "name": "minecraft:poisonous_potato", + "id": 304 + }, + { + "name": "minecraft:polar_bear_spawn_egg", + "id": 500 + }, + { + "name": "minecraft:polished_andesite", + "id": -595 + }, + { + "name": "minecraft:polished_andesite_double_slab", + "id": -919 + }, + { + "name": "minecraft:polished_andesite_slab", + "id": -892 + }, + { + "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_double_slab", + "id": -922 + }, + { + "name": "minecraft:polished_diorite_slab", + "id": -895 + }, + { + "name": "minecraft:polished_diorite_stairs", + "id": -173 + }, + { + "name": "minecraft:polished_granite", + "id": -591 + }, + { + "name": "minecraft:polished_granite_double_slab", + "id": -924 + }, + { + "name": "minecraft:polished_granite_slab", + "id": -897 + }, + { + "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": 592 + }, + { + "name": "minecraft:poppy", + "id": 38 + }, + { + "name": "minecraft:porkchop", + "id": 284 + }, + { + "name": "minecraft:portal", + "id": 90 + }, + { + "name": "minecraft:potato", + "id": 302 + }, + { + "name": "minecraft:potatoes", + "id": 142 + }, + { + "name": "minecraft:potion", + "id": 453 + }, + { + "name": "minecraft:powder_snow", + "id": -306 + }, + { + "name": "minecraft:powder_snow_bucket", + "id": 393 + }, + { + "name": "minecraft:powered_comparator", + "id": 150 + }, + { + "name": "minecraft:powered_repeater", + "id": 94 + }, + { + "name": "minecraft:prismarine", + "id": 168 + }, + { + "name": "minecraft:prismarine_brick_double_slab", + "id": -914 + }, + { + "name": "minecraft:prismarine_brick_slab", + "id": -887 + }, + { + "name": "minecraft:prismarine_bricks", + "id": -948 + }, + { + "name": "minecraft:prismarine_bricks_stairs", + "id": -4 + }, + { + "name": "minecraft:prismarine_crystals", + "id": 582 + }, + { + "name": "minecraft:prismarine_double_slab", + "id": -912 + }, + { + "name": "minecraft:prismarine_shard", + "id": 598 + }, + { + "name": "minecraft:prismarine_slab", + "id": -885 + }, + { + "name": "minecraft:prismarine_stairs", + "id": -2 + }, + { + "name": "minecraft:prismarine_wall", + "id": -981 + }, + { + "name": "minecraft:prize_pottery_sherd", + "id": 709 + }, + { + "name": "minecraft:pufferfish", + "id": 289 + }, + { + "name": "minecraft:pufferfish_bucket", + "id": 392 + }, + { + "name": "minecraft:pufferfish_spawn_egg", + "id": 509 + }, + { + "name": "minecraft:pumpkin", + "id": 86 + }, + { + "name": "minecraft:pumpkin_pie", + "id": 306 + }, + { + "name": "minecraft:pumpkin_seeds", + "id": 314 + }, + { + "name": "minecraft:pumpkin_stem", + "id": 104 + }, + { + "name": "minecraft:purple_bundle", + "id": 270 + }, + { + "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": 426 + }, + { + "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_double_slab", + "id": -911 + }, + { + "name": "minecraft:purpur_pillar", + "id": -951 + }, + { + "name": "minecraft:purpur_slab", + "id": -884 + }, + { + "name": "minecraft:purpur_stairs", + "id": 203 + }, + { + "name": "minecraft:quartz", + "id": 557 + }, + { + "name": "minecraft:quartz_block", + "id": 155 + }, + { + "name": "minecraft:quartz_bricks", + "id": -304 + }, + { + "name": "minecraft:quartz_double_slab", + "id": -882 + }, + { + "name": "minecraft:quartz_ore", + "id": 153 + }, + { + "name": "minecraft:quartz_pillar", + "id": -954 + }, + { + "name": "minecraft:quartz_slab", + "id": -876 + }, + { + "name": "minecraft:quartz_stairs", + "id": 156 + }, + { + "name": "minecraft:rabbit", + "id": 310 + }, + { + "name": "minecraft:rabbit_foot", + "id": 561 + }, + { + "name": "minecraft:rabbit_hide", + "id": 562 + }, + { + "name": "minecraft:rabbit_spawn_egg", + "id": 486 + }, + { + "name": "minecraft:rabbit_stew", + "id": 312 + }, + { + "name": "minecraft:rail", + "id": 66 + }, + { + "name": "minecraft:raiser_armor_trim_smithing_template", + "id": 730 + }, + { + "name": "minecraft:rapid_fertilizer", + "id": 633 + }, + { + "name": "minecraft:ravager_spawn_egg", + "id": 521 + }, + { + "name": "minecraft:raw_copper", + "id": 541 + }, + { + "name": "minecraft:raw_copper_block", + "id": -452 + }, + { + "name": "minecraft:raw_gold", + "id": 540 + }, + { + "name": "minecraft:raw_gold_block", + "id": -453 + }, + { + "name": "minecraft:raw_iron", + "id": 539 + }, + { + "name": "minecraft:raw_iron_block", + "id": -451 + }, + { + "name": "minecraft:recovery_compass", + "id": 682 + }, + { + "name": "minecraft:red_bundle", + "id": 271 + }, + { + "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": 422 + }, + { + "name": "minecraft:red_flower", + "id": 763 + }, + { + "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_double_slab", + "id": -917 + }, + { + "name": "minecraft:red_nether_brick_slab", + "id": -890 + }, + { + "name": "minecraft:red_nether_brick_stairs", + "id": -184 + }, + { + "name": "minecraft:red_nether_brick_wall", + "id": -983 + }, + { + "name": "minecraft:red_sand", + "id": -949 + }, + { + "name": "minecraft:red_sandstone", + "id": 179 + }, + { + "name": "minecraft:red_sandstone_double_slab", + "id": 181 + }, + { + "name": "minecraft:red_sandstone_slab", + "id": 182 + }, + { + "name": "minecraft:red_sandstone_stairs", + "id": 180 + }, + { + "name": "minecraft:red_sandstone_wall", + "id": -982 + }, + { + "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_tulip", + "id": -833 + }, + { + "name": "minecraft:red_wool", + "id": -556 + }, + { + "name": "minecraft:redstone", + "id": 398 + }, + { + "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": 445 + }, + { + "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": 726 + }, + { + "name": "minecraft:rose_bush", + "id": -866 + }, + { + "name": "minecraft:rotten_flesh", + "id": 299 + }, + { + "name": "minecraft:saddle", + "id": 396 + }, + { + "name": "minecraft:salmon", + "id": 287 + }, + { + "name": "minecraft:salmon_bucket", + "id": 390 + }, + { + "name": "minecraft:salmon_spawn_egg", + "id": 510 + }, + { + "name": "minecraft:sand", + "id": 12 + }, + { + "name": "minecraft:sandstone", + "id": 24 + }, + { + "name": "minecraft:sandstone_double_slab", + "id": -878 + }, + { + "name": "minecraft:sandstone_slab", + "id": -872 + }, + { + "name": "minecraft:sandstone_stairs", + "id": 128 + }, + { + "name": "minecraft:sandstone_wall", + "id": -975 + }, + { + "name": "minecraft:sapling", + "id": 759 + }, + { + "name": "minecraft:scaffolding", + "id": -165 + }, + { + "name": "minecraft:scrape_pottery_sherd", + "id": 710 + }, + { + "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": 717 + }, + { + "name": "minecraft:shaper_armor_trim_smithing_template", + "id": 731 + }, + { + "name": "minecraft:sheaf_pottery_sherd", + "id": 711 + }, + { + "name": "minecraft:shears", + "id": 447 + }, + { + "name": "minecraft:sheep_spawn_egg", + "id": 465 + }, + { + "name": "minecraft:shelter_pottery_sherd", + "id": 712 + }, + { + "name": "minecraft:shield", + "id": 380 + }, + { + "name": "minecraft:short_grass", + "id": 31 + }, + { + "name": "minecraft:shroomlight", + "id": -230 + }, + { + "name": "minecraft:shulker_box", + "id": 774 + }, + { + "name": "minecraft:shulker_shell", + "id": 599 + }, + { + "name": "minecraft:shulker_spawn_egg", + "id": 497 + }, + { + "name": "minecraft:silence_armor_trim_smithing_template", + "id": 728 + }, + { + "name": "minecraft:silver_glazed_terracotta", + "id": 228 + }, + { + "name": "minecraft:silverfish_spawn_egg", + "id": 470 + }, + { + "name": "minecraft:skeleton_horse_spawn_egg", + "id": 495 + }, + { + "name": "minecraft:skeleton_skull", + "id": 144 + }, + { + "name": "minecraft:skeleton_spawn_egg", + "id": 471 + }, + { + "name": "minecraft:skull", + "id": 736 + }, + { + "name": "minecraft:skull_banner_pattern", + "id": 616 + }, + { + "name": "minecraft:skull_pottery_sherd", + "id": 713 + }, + { + "name": "minecraft:slime", + "id": 165 + }, + { + "name": "minecraft:slime_ball", + "id": 414 + }, + { + "name": "minecraft:slime_spawn_egg", + "id": 472 + }, + { + "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", + "id": -955 + }, + { + "name": "minecraft:smooth_quartz_double_slab", + "id": -925 + }, + { + "name": "minecraft:smooth_quartz_slab", + "id": -898 + }, + { + "name": "minecraft:smooth_quartz_stairs", + "id": -185 + }, + { + "name": "minecraft:smooth_red_sandstone", + "id": -958 + }, + { + "name": "minecraft:smooth_red_sandstone_double_slab", + "id": -918 + }, + { + "name": "minecraft:smooth_red_sandstone_slab", + "id": -891 + }, + { + "name": "minecraft:smooth_red_sandstone_stairs", + "id": -176 + }, + { + "name": "minecraft:smooth_sandstone", + "id": -946 + }, + { + "name": "minecraft:smooth_sandstone_double_slab", + "id": -916 + }, + { + "name": "minecraft:smooth_sandstone_slab", + "id": -889 + }, + { + "name": "minecraft:smooth_sandstone_stairs", + "id": -177 + }, + { + "name": "minecraft:smooth_stone", + "id": -183 + }, + { + "name": "minecraft:smooth_stone_double_slab", + "id": 43 + }, + { + "name": "minecraft:smooth_stone_slab", + "id": 44 + }, + { + "name": "minecraft:sniffer_egg", + "id": -596 + }, + { + "name": "minecraft:sniffer_spawn_egg", + "id": 528 + }, + { + "name": "minecraft:snort_pottery_sherd", + "id": 714 + }, + { + "name": "minecraft:snout_armor_trim_smithing_template", + "id": 725 + }, + { + "name": "minecraft:snow", + "id": 80 + }, + { + "name": "minecraft:snow_golem_spawn_egg", + "id": 534 + }, + { + "name": "minecraft:snow_layer", + "id": 78 + }, + { + "name": "minecraft:snowball", + "id": 399 + }, + { + "name": "minecraft:soul_campfire", + "id": 658 + }, + { + "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": 636 + }, + { + "name": "minecraft:spawn_egg", + "id": 788 + }, + { + "name": "minecraft:spider_eye", + "id": 300 + }, + { + "name": "minecraft:spider_spawn_egg", + "id": 473 + }, + { + "name": "minecraft:spire_armor_trim_smithing_template", + "id": 727 + }, + { + "name": "minecraft:splash_potion", + "id": 594 + }, + { + "name": "minecraft:sponge", + "id": 19 + }, + { + "name": "minecraft:spore_blossom", + "id": -321 + }, + { + "name": "minecraft:spruce_boat", + "id": 404 + }, + { + "name": "minecraft:spruce_button", + "id": -144 + }, + { + "name": "minecraft:spruce_chest_boat", + "id": 677 + }, + { + "name": "minecraft:spruce_door", + "id": 586 + }, + { + "name": "minecraft:spruce_double_slab", + "id": -809 + }, + { + "name": "minecraft:spruce_fence", + "id": -579 + }, + { + "name": "minecraft:spruce_fence_gate", + "id": 183 + }, + { + "name": "minecraft:spruce_hanging_sign", + "id": -501 + }, + { + "name": "minecraft:spruce_leaves", + "id": -800 + }, + { + "name": "minecraft:spruce_log", + "id": -569 + }, + { + "name": "minecraft:spruce_planks", + "id": -739 + }, + { + "name": "minecraft:spruce_pressure_plate", + "id": -154 + }, + { + "name": "minecraft:spruce_sapling", + "id": -825 + }, + { + "name": "minecraft:spruce_sign", + "id": 609 + }, + { + "name": "minecraft:spruce_slab", + "id": -804 + }, + { + "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:spruce_wood", + "id": -814 + }, + { + "name": "minecraft:spyglass", + "id": 661 + }, + { + "name": "minecraft:squid_spawn_egg", + "id": 477 + }, + { + "name": "minecraft:stained_glass", + "id": 772 + }, + { + "name": "minecraft:stained_glass_pane", + "id": 773 + }, + { + "name": "minecraft:stained_hardened_clay", + "id": 737 + }, + { + "name": "minecraft:standing_banner", + "id": 176 + }, + { + "name": "minecraft:standing_sign", + "id": 63 + }, + { + "name": "minecraft:stick", + "id": 345 + }, + { + "name": "minecraft:sticky_piston", + "id": 29 + }, + { + "name": "minecraft:sticky_piston_arm_collision", + "id": -217 + }, + { + "name": "minecraft:stone", + "id": 1 + }, + { + "name": "minecraft:stone_axe", + "id": 339 + }, + { + "name": "minecraft:stone_block_slab", + "id": 749 + }, + { + "name": "minecraft:stone_block_slab2", + "id": 750 + }, + { + "name": "minecraft:stone_block_slab3", + "id": 751 + }, + { + "name": "minecraft:stone_block_slab4", + "id": 752 + }, + { + "name": "minecraft:stone_brick_double_slab", + "id": -881 + }, + { + "name": "minecraft:stone_brick_slab", + "id": -875 + }, + { + "name": "minecraft:stone_brick_stairs", + "id": 109 + }, + { + "name": "minecraft:stone_brick_wall", + "id": -977 + }, + { + "name": "minecraft:stone_bricks", + "id": 98 + }, + { + "name": "minecraft:stone_button", + "id": 77 + }, + { + "name": "minecraft:stone_hoe", + "id": 355 + }, + { + "name": "minecraft:stone_pickaxe", + "id": 338 + }, + { + "name": "minecraft:stone_pressure_plate", + "id": 70 + }, + { + "name": "minecraft:stone_shovel", + "id": 337 + }, + { + "name": "minecraft:stone_stairs", + "id": 67 + }, + { + "name": "minecraft:stone_sword", + "id": 336 + }, + { + "name": "minecraft:stonebrick", + "id": 747 + }, + { + "name": "minecraft:stonecutter", + "id": 245 + }, + { + "name": "minecraft:stonecutter_block", + "id": -197 + }, + { + "name": "minecraft:stray_spawn_egg", + "id": 489 + }, + { + "name": "minecraft:strider_spawn_egg", + "id": 523 + }, + { + "name": "minecraft:string", + "id": 351 + }, + { + "name": "minecraft:stripped_acacia_log", + "id": -8 + }, + { + "name": "minecraft:stripped_acacia_wood", + "id": -823 + }, + { + "name": "minecraft:stripped_bamboo_block", + "id": -528 + }, + { + "name": "minecraft:stripped_birch_log", + "id": -6 + }, + { + "name": "minecraft:stripped_birch_wood", + "id": -821 + }, + { + "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_dark_oak_wood", + "id": -824 + }, + { + "name": "minecraft:stripped_jungle_log", + "id": -7 + }, + { + "name": "minecraft:stripped_jungle_wood", + "id": -822 + }, + { + "name": "minecraft:stripped_mangrove_log", + "id": -485 + }, + { + "name": "minecraft:stripped_mangrove_wood", + "id": -498 + }, + { + "name": "minecraft:stripped_oak_log", + "id": -10 + }, + { + "name": "minecraft:stripped_oak_wood", + "id": -819 + }, + { + "name": "minecraft:stripped_spruce_log", + "id": -5 + }, + { + "name": "minecraft:stripped_spruce_wood", + "id": -820 + }, + { + "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": 442 + }, + { + "name": "minecraft:sugar_cane", + "id": 411 + }, + { + "name": "minecraft:sunflower", + "id": 175 + }, + { + "name": "minecraft:suspicious_gravel", + "id": -573 + }, + { + "name": "minecraft:suspicious_sand", + "id": -529 + }, + { + "name": "minecraft:suspicious_stew", + "id": 625 + }, + { + "name": "minecraft:sweet_berries", + "id": 309 + }, + { + "name": "minecraft:sweet_berry_bush", + "id": -207 + }, + { + "name": "minecraft:tadpole_bucket", + "id": 666 + }, + { + "name": "minecraft:tadpole_spawn_egg", + "id": 665 + }, + { + "name": "minecraft:tall_grass", + "id": -864 + }, + { + "name": "minecraft:tallgrass", + "id": 767 + }, + { + "name": "minecraft:target", + "id": -239 + }, + { + "name": "minecraft:tide_armor_trim_smithing_template", + "id": 724 + }, + { + "name": "minecraft:tinted_glass", + "id": -334 + }, + { + "name": "minecraft:tnt", + "id": 46 + }, + { + "name": "minecraft:tnt_minecart", + "id": 558 + }, + { + "name": "minecraft:torch", + "id": 50 + }, + { + "name": "minecraft:torchflower", + "id": -568 + }, + { + "name": "minecraft:torchflower_crop", + "id": -567 + }, + { + "name": "minecraft:torchflower_seeds", + "id": 318 + }, + { + "name": "minecraft:totem_of_undying", + "id": 601 + }, + { + "name": "minecraft:trader_llama_spawn_egg", + "id": 684 + }, + { + "name": "minecraft:trapdoor", + "id": 96 + }, + { + "name": "minecraft:trapped_chest", + "id": 146 + }, + { + "name": "minecraft:trial_key", + "id": 276 + }, + { + "name": "minecraft:trial_spawner", + "id": -315 + }, + { + "name": "minecraft:trident", + "id": 579 + }, + { + "name": "minecraft:trip_wire", + "id": 132 + }, + { + "name": "minecraft:tripwire_hook", + "id": 131 + }, + { + "name": "minecraft:tropical_fish", + "id": 288 + }, + { + "name": "minecraft:tropical_fish_bucket", + "id": 391 + }, + { + "name": "minecraft:tropical_fish_spawn_egg", + "id": 507 + }, + { + "name": "minecraft:tube_coral", + "id": -131 + }, + { + "name": "minecraft:tube_coral_block", + "id": -132 + }, + { + "name": "minecraft:tube_coral_fan", + "id": -133 + }, + { + "name": "minecraft:tube_coral_wall_fan", + "id": -135 + }, + { + "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": 606 + }, + { + "name": "minecraft:turtle_scute", + "id": 605 + }, + { + "name": "minecraft:turtle_spawn_egg", + "id": 513 + }, + { + "name": "minecraft:twisting_vines", + "id": -287 + }, + { + "name": "minecraft:underwater_tnt", + "id": -985 + }, + { + "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:vault", + "id": -314 + }, + { + "name": "minecraft:verdant_froglight", + "id": -470 + }, + { + "name": "minecraft:vex_armor_trim_smithing_template", + "id": 723 + }, + { + "name": "minecraft:vex_spawn_egg", + "id": 504 + }, + { + "name": "minecraft:villager_spawn_egg", + "id": 476 + }, + { + "name": "minecraft:vindicator_spawn_egg", + "id": 502 + }, + { + "name": "minecraft:vine", + "id": 106 + }, + { + "name": "minecraft:wall_banner", + "id": 177 + }, + { + "name": "minecraft:wall_sign", + "id": 68 + }, + { + "name": "minecraft:wandering_trader_spawn_egg", + "id": 520 + }, + { + "name": "minecraft:ward_armor_trim_smithing_template", + "id": 721 + }, + { + "name": "minecraft:warden_spawn_egg", + "id": 668 + }, + { + "name": "minecraft:warped_button", + "id": -261 + }, + { + "name": "minecraft:warped_door", + "id": 653 + }, + { + "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": 654 + }, + { + "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": 651 + }, + { + "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": 387 + }, + { + "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": 729 + }, + { + "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:wet_sponge", + "id": -984 + }, + { + "name": "minecraft:wheat", + "id": 359 + }, + { + "name": "minecraft:wheat_seeds", + "id": 313 + }, + { + "name": "minecraft:white_bundle", + "id": 272 + }, + { + "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": 436 + }, + { + "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_tulip", + "id": -835 + }, + { + "name": "minecraft:white_wool", + "id": 35 + }, + { + "name": "minecraft:wild_armor_trim_smithing_template", + "id": 720 + }, + { + "name": "minecraft:wind_charge", + "id": 277 + }, + { + "name": "minecraft:witch_spawn_egg", + "id": 479 + }, + { + "name": "minecraft:wither_rose", + "id": -216 + }, + { + "name": "minecraft:wither_skeleton_skull", + "id": -965 + }, + { + "name": "minecraft:wither_skeleton_spawn_egg", + "id": 492 + }, + { + "name": "minecraft:wither_spawn_egg", + "id": 536 + }, + { + "name": "minecraft:wolf_armor", + "id": 740 + }, + { + "name": "minecraft:wolf_spawn_egg", + "id": 466 + }, + { + "name": "minecraft:wood", + "id": 775 + }, + { + "name": "minecraft:wooden_axe", + "id": 335 + }, + { + "name": "minecraft:wooden_button", + "id": 143 + }, + { + "name": "minecraft:wooden_door", + "id": 384 + }, + { + "name": "minecraft:wooden_hoe", + "id": 354 + }, + { + "name": "minecraft:wooden_pickaxe", + "id": 334 + }, + { + "name": "minecraft:wooden_pressure_plate", + "id": 72 + }, + { + "name": "minecraft:wooden_shovel", + "id": 333 + }, + { + "name": "minecraft:wooden_slab", + "id": 762 + }, + { + "name": "minecraft:wooden_sword", + "id": 332 + }, + { + "name": "minecraft:wool", + "id": 743 + }, + { + "name": "minecraft:writable_book", + "id": 544 + }, + { + "name": "minecraft:written_book", + "id": 545 + }, + { + "name": "minecraft:yellow_bundle", + "id": 273 + }, + { + "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": 432 + }, + { + "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": 526 + }, + { + "name": "minecraft:zombie_head", + "id": -966 + }, + { + "name": "minecraft:zombie_horse_spawn_egg", + "id": 496 + }, + { + "name": "minecraft:zombie_pigman_spawn_egg", + "id": 475 + }, + { + "name": "minecraft:zombie_spawn_egg", + "id": 474 + }, + { + "name": "minecraft:zombie_villager_spawn_egg", + "id": 505 + } +] \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3a3831044..dc9329b91 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,9 +10,9 @@ netty-io-uring = "0.0.25.Final-SNAPSHOT" guava = "29.0-jre" gson = "2.3.1" # Provided by Spigot 1.8.8 websocket = "1.5.1" -protocol-connection = "3.0.0.Beta5-20240916.181041-6" -protocol-common = "3.0.0.Beta5-20240916.181041-6" -protocol-codec = "3.0.0.Beta5-20240916.181041-6" +protocol-connection = "3.0.0.Beta5-20241021.154858-12" +protocol-common = "3.0.0.Beta5-20241021.154858-12" +protocol-codec = "3.0.0.Beta5-20241021.154858-12" raknet = "1.0.0.CR3-20240416.144209-1" minecraftauth = "4.1.1" mcprotocollib = "1.21-20241010.155958-24" From 264a914d41f34c48d9a79aaf94d8a2940d51e583 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Tue, 22 Oct 2024 12:41:55 -0400 Subject: [PATCH 008/165] Clean up inventory packet sending --- README.md | 2 +- .../updater/AnvilInventoryUpdater.java | 10 ------- .../updater/ChestInventoryUpdater.java | 8 +----- .../updater/ContainerInventoryUpdater.java | 6 ----- .../updater/CrafterInventoryUpdater.java | 8 ------ .../updater/HorseInventoryUpdater.java | 6 ----- .../inventory/updater/InventoryUpdater.java | 6 ----- .../inventory/updater/UIInventoryUpdater.java | 7 ----- .../inventory/OldSmithingTableTranslator.java | 9 ++++--- .../inventory/PlayerInventoryTranslator.java | 26 ++++++++----------- .../ChestedHorseInventoryTranslator.java | 5 ---- .../entity/JavaEntityEventTranslator.java | 5 ---- .../JavaContainerSetSlotTranslator.java | 12 +++------ .../geysermc/geyser/util/InventoryUtils.java | 10 +++---- gradle/libs.versions.toml | 6 ++--- 15 files changed, 29 insertions(+), 97 deletions(-) diff --git a/README.md b/README.md index dec1e9dd1..418bfcdeb 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,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! ## Supported Versions -Geyser is currently supporting Minecraft Bedrock 1.20.80 - 1.21.30 and Minecraft Java 1.21/1.21.1. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). +Geyser is currently supporting Minecraft Bedrock 1.20.80 - 1.21.40 and Minecraft Java 1.21/1.21.1. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). ## Setting Up Take a look [here](https://geysermc.org/wiki/geyser/setup/) for how to set up Geyser. 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 cc98d0ae5..dc532cc62 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 @@ -31,8 +31,6 @@ import net.kyori.adventure.text.Component; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId; -import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; -import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket; import org.geysermc.geyser.GeyserImpl; @@ -80,8 +78,6 @@ public class AnvilInventoryUpdater extends InventoryUpdater { slotPacket.setContainerId(ContainerId.UI); slotPacket.setSlot(bedrockSlot); slotPacket.setItem(inventory.getItem(i).getItemData(session)); - slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); } } @@ -102,8 +98,6 @@ public class AnvilInventoryUpdater extends InventoryUpdater { slotPacket.setContainerId(ContainerId.UI); slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot)); slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session)); - slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); } else if (lastTargetSlot != javaSlot) { // Update the previous target slot to remove repair cost changes @@ -111,8 +105,6 @@ public class AnvilInventoryUpdater extends InventoryUpdater { slotPacket.setContainerId(ContainerId.UI); slotPacket.setSlot(translator.javaSlotToBedrock(lastTargetSlot)); slotPacket.setItem(inventory.getItem(lastTargetSlot).getItemData(session)); - slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); } @@ -176,8 +168,6 @@ public class AnvilInventoryUpdater extends InventoryUpdater { slotPacket.setContainerId(ContainerId.UI); slotPacket.setSlot(translator.javaSlotToBedrock(slot)); slotPacket.setItem(itemData); - slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/ChestInventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/ChestInventoryUpdater.java index b28bd23d1..a67f594ab 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/ChestInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/ChestInventoryUpdater.java @@ -25,12 +25,10 @@ package org.geysermc.geyser.inventory.updater; -import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; -import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName; +import lombok.AllArgsConstructor; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket; import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket; -import lombok.AllArgsConstructor; import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.GeyserLocale; @@ -63,8 +61,6 @@ public class ChestInventoryUpdater extends InventoryUpdater { InventoryContentPacket contentPacket = new InventoryContentPacket(); contentPacket.setContainerId(inventory.getBedrockId()); contentPacket.setContents(bedrockItems); - contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - contentPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(contentPacket); } @@ -77,8 +73,6 @@ public class ChestInventoryUpdater extends InventoryUpdater { slotPacket.setContainerId(inventory.getBedrockId()); slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot)); slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session)); - slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); return true; } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/ContainerInventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/ContainerInventoryUpdater.java index 224b7d4c9..c9f313f2a 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/ContainerInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/ContainerInventoryUpdater.java @@ -25,8 +25,6 @@ package org.geysermc.geyser.inventory.updater; -import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; -import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket; import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket; @@ -51,8 +49,6 @@ public class ContainerInventoryUpdater extends InventoryUpdater { InventoryContentPacket contentPacket = new InventoryContentPacket(); contentPacket.setContainerId(inventory.getBedrockId()); contentPacket.setContents(Arrays.asList(bedrockItems)); - contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - contentPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(contentPacket); } @@ -65,8 +61,6 @@ public class ContainerInventoryUpdater extends InventoryUpdater { slotPacket.setContainerId(inventory.getBedrockId()); slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot)); slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session)); - slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); return true; } 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 index d3135c97e..4474d420c 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/CrafterInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/CrafterInventoryUpdater.java @@ -26,8 +26,6 @@ package org.geysermc.geyser.inventory.updater; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId; -import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; -import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket; import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket; @@ -58,8 +56,6 @@ public class CrafterInventoryUpdater extends InventoryUpdater { contentPacket = new InventoryContentPacket(); contentPacket.setContainerId(inventory.getBedrockId()); contentPacket.setContents(Arrays.asList(bedrockItems)); - contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - contentPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(contentPacket); // inventory and hotbar @@ -71,8 +67,6 @@ public class CrafterInventoryUpdater extends InventoryUpdater { contentPacket = new InventoryContentPacket(); contentPacket.setContainerId(ContainerId.INVENTORY); contentPacket.setContents(Arrays.asList(bedrockItems)); - contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - contentPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(contentPacket); // Crafter result - it doesn't come after the grid, as explained elsewhere. @@ -94,8 +88,6 @@ public class CrafterInventoryUpdater extends InventoryUpdater { packet.setContainerId(containerId); packet.setSlot(translator.javaSlotToBedrock(javaSlot)); packet.setItem(inventory.getItem(javaSlot).getItemData(session)); - packet.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - packet.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(packet); return true; } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/HorseInventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/HorseInventoryUpdater.java index 657c91604..7441e66d0 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/HorseInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/HorseInventoryUpdater.java @@ -25,8 +25,6 @@ package org.geysermc.geyser.inventory.updater; -import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; -import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket; import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket; @@ -51,8 +49,6 @@ public class HorseInventoryUpdater extends InventoryUpdater { InventoryContentPacket contentPacket = new InventoryContentPacket(); contentPacket.setContainerId(inventory.getBedrockId()); contentPacket.setContents(Arrays.asList(bedrockItems)); - contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - contentPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(contentPacket); } @@ -65,8 +61,6 @@ public class HorseInventoryUpdater extends InventoryUpdater { slotPacket.setContainerId(4); // Horse GUI? slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot)); slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session)); - slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); return true; } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/InventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/InventoryUpdater.java index c57f59bfd..68ee334ba 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/InventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/InventoryUpdater.java @@ -26,8 +26,6 @@ package org.geysermc.geyser.inventory.updater; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId; -import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; -import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket; import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket; @@ -47,8 +45,6 @@ public class InventoryUpdater { InventoryContentPacket contentPacket = new InventoryContentPacket(); contentPacket.setContainerId(ContainerId.INVENTORY); contentPacket.setContents(Arrays.asList(bedrockItems)); - contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - contentPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(contentPacket); } @@ -58,8 +54,6 @@ public class InventoryUpdater { slotPacket.setContainerId(ContainerId.INVENTORY); slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot)); slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session)); - slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); return true; } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/UIInventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/UIInventoryUpdater.java index 23cfc79f5..a23385b53 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/UIInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/UIInventoryUpdater.java @@ -26,9 +26,6 @@ package org.geysermc.geyser.inventory.updater; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId; -import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; -import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName; -import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket; import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.session.GeyserSession; @@ -49,8 +46,6 @@ public class UIInventoryUpdater extends InventoryUpdater { slotPacket.setContainerId(ContainerId.UI); slotPacket.setSlot(bedrockSlot); slotPacket.setItem(inventory.getItem(i).getItemData(session)); - slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); } } @@ -64,8 +59,6 @@ public class UIInventoryUpdater extends InventoryUpdater { slotPacket.setContainerId(ContainerId.UI); slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot)); slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session)); - slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); return true; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/OldSmithingTableTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/OldSmithingTableTranslator.java index 125614e77..38bb6ddcd 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/OldSmithingTableTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/OldSmithingTableTranslator.java @@ -28,11 +28,14 @@ package org.geysermc.geyser.translator.inventory; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType; -import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequest; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequestSlotData; -import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.*; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.DropAction; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.ItemStackRequestAction; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.PlaceAction; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.SwapAction; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.TakeAction; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.response.ItemStackResponse; import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket; import org.geysermc.geyser.inventory.BedrockContainerSlot; @@ -140,8 +143,6 @@ public class OldSmithingTableTranslator extends AbstractBlockInventoryTranslator slotPacket.setContainerId(ContainerId.UI); slotPacket.setSlot(53); slotPacket.setItem(UPGRADE_TEMPLATE.apply(session.getUpstream().getProtocolVersion())); - slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java index 65fd87c83..8fd365d7f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java @@ -30,17 +30,25 @@ import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntSet; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; -import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequest; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequestSlotData; -import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.*; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.CraftCreativeAction; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.DestroyAction; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.DropAction; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.ItemStackRequestAction; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.SwapAction; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.TransferItemStackRequestAction; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.response.ItemStackResponse; import org.cloudburstmc.protocol.bedrock.packet.ContainerClosePacket; import org.cloudburstmc.protocol.bedrock.packet.ContainerOpenPacket; import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket; import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket; -import org.geysermc.geyser.inventory.*; +import org.geysermc.geyser.inventory.BedrockContainerSlot; +import org.geysermc.geyser.inventory.GeyserItemStack; +import org.geysermc.geyser.inventory.Inventory; +import org.geysermc.geyser.inventory.PlayerInventory; +import org.geysermc.geyser.inventory.SlotType; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.skin.FakeHeadProvider; @@ -84,8 +92,6 @@ public class PlayerInventoryTranslator extends InventoryTranslator { contents[i - 36] = inventory.getItem(i).getItemData(session); } inventoryContentPacket.setContents(Arrays.asList(contents)); - inventoryContentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - inventoryContentPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(inventoryContentPacket); // Armor @@ -102,16 +108,12 @@ public class PlayerInventoryTranslator extends InventoryTranslator { } } armorContentPacket.setContents(Arrays.asList(contents)); - armorContentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - armorContentPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(armorContentPacket); // Offhand InventoryContentPacket offhandPacket = new InventoryContentPacket(); offhandPacket.setContainerId(ContainerId.OFFHAND); offhandPacket.setContents(Collections.singletonList(inventory.getItem(45).getItemData(session))); - offhandPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - offhandPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(offhandPacket); } @@ -133,8 +135,6 @@ public class PlayerInventoryTranslator extends InventoryTranslator { slotPacket.setItem(inventory.getItem(i).getItemData(session)); } - slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); } } @@ -171,15 +171,11 @@ public class PlayerInventoryTranslator extends InventoryTranslator { slotPacket.setSlot(slot + 27); } slotPacket.setItem(bedrockItem); - slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); } else if (slot == 45) { InventoryContentPacket offhandPacket = new InventoryContentPacket(); offhandPacket.setContainerId(ContainerId.OFFHAND); offhandPacket.setContents(Collections.singletonList(bedrockItem)); - offhandPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - offhandPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(offhandPacket); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/ChestedHorseInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/ChestedHorseInventoryTranslator.java index 363761e47..f1a5723c8 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/ChestedHorseInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/ChestedHorseInventoryTranslator.java @@ -27,7 +27,6 @@ package org.geysermc.geyser.translator.inventory.horse; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; -import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequestSlotData; import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket; @@ -95,8 +94,6 @@ public abstract class ChestedHorseInventoryTranslator extends AbstractHorseInven InventoryContentPacket contentPacket = new InventoryContentPacket(); contentPacket.setContainerId(ContainerId.INVENTORY); contentPacket.setContents(Arrays.asList(bedrockItems)); - contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - contentPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(contentPacket); ItemData[] horseItems = new ItemData[chestSize + 1]; @@ -110,8 +107,6 @@ public abstract class ChestedHorseInventoryTranslator extends AbstractHorseInven InventoryContentPacket horseContentsPacket = new InventoryContentPacket(); horseContentsPacket.setContainerId(inventory.getBedrockId()); horseContentsPacket.setContents(Arrays.asList(horseItems)); - horseContentsPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - horseContentsPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(horseContentsPacket); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java index a37ba88b3..6c2e02cd3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java @@ -30,9 +30,6 @@ import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityEventType; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId; -import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; -import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName; -import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.packet.EntityEventPacket; import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket; import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket; @@ -170,8 +167,6 @@ public class JavaEntityEventTranslator extends PacketTranslator<ClientboundEntit InventoryContentPacket offhandPacket = new InventoryContentPacket(); offhandPacket.setContainerId(ContainerId.OFFHAND); offhandPacket.setContents(Collections.singletonList(InventoryUtils.getTotemOfUndying().apply(session.getUpstream().getProtocolVersion()))); - offhandPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - offhandPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(offhandPacket); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java index 732eb6be5..2ff2470e7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java @@ -25,11 +25,6 @@ package org.geysermc.geyser.translator.protocol.java.inventory; -import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; -import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName; -import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; -import org.geysermc.mcprotocollib.protocol.data.game.recipe.Ingredient; -import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.inventory.ClientboundContainerSetSlotPacket; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.RecipeUnlockingRequirement; @@ -48,6 +43,9 @@ import org.geysermc.geyser.translator.item.ItemTranslator; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.util.InventoryUtils; +import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.Ingredient; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.inventory.ClientboundContainerSetSlotPacket; import java.util.Arrays; import java.util.Collections; @@ -182,8 +180,6 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound slotPacket.setContainerId(ContainerId.UI); slotPacket.setSlot(col + (row * gridDimensions) + offset); slotPacket.setItem(ItemData.AIR); - slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); index++; } @@ -216,8 +212,6 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound slotPacket.setContainerId(ContainerId.UI); slotPacket.setSlot(col + (row * gridDimensions) + offset); slotPacket.setItem(ingredients[index]); - slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - slotPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(slotPacket); index++; } 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 4011cc1bd..dd7be0136 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java @@ -32,13 +32,15 @@ import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId; -import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; -import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket; import org.cloudburstmc.protocol.bedrock.packet.PlayerHotbarPacket; import org.geysermc.geyser.GeyserImpl; -import org.geysermc.geyser.inventory.*; +import org.geysermc.geyser.inventory.Container; +import org.geysermc.geyser.inventory.GeyserItemStack; +import org.geysermc.geyser.inventory.Inventory; +import org.geysermc.geyser.inventory.LecternContainer; +import org.geysermc.geyser.inventory.PlayerInventory; import org.geysermc.geyser.inventory.click.Click; import org.geysermc.geyser.inventory.recipe.GeyserRecipe; import org.geysermc.geyser.inventory.recipe.GeyserShapedRecipe; @@ -182,8 +184,6 @@ public class InventoryUtils { cursorPacket.setContainerId(ContainerId.UI); cursorPacket.setSlot(0); cursorPacket.setItem(session.getPlayerInventory().getCursor().getItemData(session)); - cursorPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null)); - cursorPacket.setStorageItem(ItemData.AIR); session.sendUpstreamPacket(cursorPacket); } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index dc9329b91..e50809b52 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,9 +10,9 @@ netty-io-uring = "0.0.25.Final-SNAPSHOT" guava = "29.0-jre" gson = "2.3.1" # Provided by Spigot 1.8.8 websocket = "1.5.1" -protocol-connection = "3.0.0.Beta5-20241021.154858-12" -protocol-common = "3.0.0.Beta5-20241021.154858-12" -protocol-codec = "3.0.0.Beta5-20241021.154858-12" +protocol-connection = "3.0.0.Beta5-20241022.154658-14" +protocol-common = "3.0.0.Beta5-20241022.154658-14" +protocol-codec = "3.0.0.Beta5-20241022.154658-14" raknet = "1.0.0.CR3-20240416.144209-1" minecraftauth = "4.1.1" mcprotocollib = "1.21-20241010.155958-24" From d94c6ffcb6df79359390b8a295acafd80c252b91 Mon Sep 17 00:00:00 2001 From: chris <github@onechris.mozmail.com> Date: Wed, 23 Oct 2024 03:49:04 +0800 Subject: [PATCH 009/165] API: Expose a GeyserConnection's protocol version (#5083) * Add protocolVersion() to GeyserConnection * specify which protocol --- .../org/geysermc/geyser/api/connection/GeyserConnection.java | 5 +++++ .../main/java/org/geysermc/geyser/session/GeyserSession.java | 5 +++++ gradle.properties | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) 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 0a580f975..ede4c1bc4 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 @@ -70,6 +70,11 @@ public interface GeyserConnection extends Connection, CommandSource { */ void closeForm(); + /** + * Gets the Bedrock protocol version of the player. + */ + int protocolVersion(); + /** * @param javaId the Java entity ID to look up. * @return a {@link GeyserEntity} if present in this connection's entity tracker. 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 9c20e9909..b8a991013 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -2229,6 +2229,11 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { return (int) Math.floor(rakSessionCodec.getPing()); } + @Override + public int protocolVersion() { + return upstream.getProtocolVersion(); + } + @Override public void closeForm() { if (!GameProtocol.isPre1_21_2(this)) { diff --git a/gradle.properties b/gradle.properties index 1ee0e12cc..86cf4e922 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,5 +8,5 @@ org.gradle.vfs.watch=false group=org.geysermc id=geyser -version=2.4.3-SNAPSHOT +version=2.4.4-SNAPSHOT description=Allows for players from Minecraft: Bedrock Edition to join Minecraft: Java Edition servers. From e7ecb55f33abd6e951aeac9ce0b462205cbd3339 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Tue, 22 Oct 2024 18:10:27 -0400 Subject: [PATCH 010/165] Indicate support for Bedrock 1.21.41 --- README.md | 2 +- .../java/org/geysermc/geyser/network/GameProtocol.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 418bfcdeb..3e99a96a7 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,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! ## Supported Versions -Geyser is currently supporting Minecraft Bedrock 1.20.80 - 1.21.40 and Minecraft Java 1.21/1.21.1. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). +Geyser is currently supporting Minecraft Bedrock 1.20.80 - 1.21.41 and Minecraft Java 1.21/1.21.1. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). ## Setting Up Take a look [here](https://geysermc.org/wiki/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 c76958777..c39629917 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -52,7 +52,7 @@ public final class GameProtocol { * release of the game that Geyser supports. */ public static final BedrockCodec DEFAULT_BEDROCK_CODEC = CodecProcessor.processCodec(Bedrock_v748.CODEC.toBuilder() - .minecraftVersion("1.21.40") + .minecraftVersion("1.21.41") .build()); /** @@ -80,10 +80,10 @@ public final class GameProtocol { .minecraftVersion("1.21.20 - 1.21.23") .build())); SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v729.CODEC.toBuilder() - .minecraftVersion("1.21.30/1.21.31") - .build())); + .minecraftVersion("1.21.30/1.21.31") + .build())); SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC.toBuilder() - .minecraftVersion("1.21.40") + .minecraftVersion("1.21.40/1.21.41") .build()); } From e78b24830de8a72ce6e66867050d073e66503bd1 Mon Sep 17 00:00:00 2001 From: Eclipse <eclipse@eclipseisoffline.xyz> Date: Tue, 22 Oct 2024 22:31:37 +0000 Subject: [PATCH 011/165] Improve tag loading and load non-vanilla tags as well (#4849) * Work on new tag system, still largely unfinished * Continue work on new tag system, closer to testing now * Add holderset class for geyser * My IDE did some stuff it shouldn't have done * Add is method for HolderSets to TagCache * Add some documentation * Fix build and slightly adjust documentation * Fix some issues, still broken * Fix more issues with registering vanilla tags, works better now * Fix all issues with vanilla and non-vanilla tags, fix documentation a bit. * Small cleanup * Use IllegalArgumentException instead of asserting and make TagRegistry#getVanillaTags return original map * Generics - still untested * Remove different lookups for vanilla- and non-vanilla tags * Add toNetworkId and fromNetworkId methods to JavaRegistryKey, simplify TagCache * More cleanup, add documentation * Fix registry loading * Rename HolderSet to GeyserHolderSet and address reviews by camotoy * Make holder set reader method not throw an exception, clean up * Make holder set reader warn when failing to read * Add comment to make clearer why a cast is make --------- Co-authored-by: chris <github@onechris.mozmail.com> --- .../type/living/animal/AnimalEntity.java | 7 +- .../type/living/animal/ArmadilloEntity.java | 4 +- .../type/living/animal/AxolotlEntity.java | 4 +- .../entity/type/living/animal/BeeEntity.java | 4 +- .../type/living/animal/ChickenEntity.java | 4 +- .../entity/type/living/animal/CowEntity.java | 4 +- .../entity/type/living/animal/FoxEntity.java | 4 +- .../entity/type/living/animal/FrogEntity.java | 4 +- .../entity/type/living/animal/GoatEntity.java | 4 +- .../type/living/animal/HoglinEntity.java | 4 +- .../type/living/animal/OcelotEntity.java | 4 +- .../type/living/animal/PandaEntity.java | 4 +- .../entity/type/living/animal/PigEntity.java | 4 +- .../type/living/animal/PolarBearEntity.java | 5 +- .../type/living/animal/RabbitEntity.java | 4 +- .../type/living/animal/SheepEntity.java | 6 +- .../type/living/animal/SnifferEntity.java | 4 +- .../type/living/animal/StriderEntity.java | 4 +- .../type/living/animal/TurtleEntity.java | 4 +- .../animal/horse/AbstractHorseEntity.java | 4 +- .../type/living/animal/horse/CamelEntity.java | 4 +- .../type/living/animal/horse/LlamaEntity.java | 4 +- .../living/animal/tameable/CatEntity.java | 4 +- .../living/animal/tameable/ParrotEntity.java | 3 +- .../living/animal/tameable/WolfEntity.java | 4 +- .../updater/AnvilInventoryUpdater.java | 14 +- .../geyser/item/enchantment/Enchantment.java | 37 +- .../geyser/session/GeyserSession.java | 2 +- .../geyser/session/cache/RegistryCache.java | 48 +-- .../geyser/session/cache/TagCache.java | 140 +++--- .../cache/registry/JavaRegistries.java | 112 +++++ .../cache/registry/JavaRegistryKey.java | 86 ++++ .../geyser/session/cache/tags/BlockTag.java | 399 +++++++++--------- .../session/cache/tags/EnchantmentTag.java | 102 ++--- .../session/cache/tags/GeyserHolderSet.java | 118 ++++++ .../geyser/session/cache/tags/ItemTag.java | 324 +++++++------- .../geyser/session/cache/tags/Tag.java | 35 ++ 37 files changed, 927 insertions(+), 595 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/session/cache/registry/JavaRegistries.java create mode 100644 core/src/main/java/org/geysermc/geyser/session/cache/registry/JavaRegistryKey.java create mode 100644 core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java create mode 100644 core/src/main/java/org/geysermc/geyser/session/cache/tags/Tag.java 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 2e627b461..57cbdc783 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 @@ -33,8 +33,9 @@ import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.entity.type.living.AgeableEntity; import org.geysermc.geyser.inventory.GeyserItemStack; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; @@ -48,7 +49,7 @@ public abstract class AnimalEntity extends AgeableEntity { } protected final boolean canEat(GeyserItemStack itemStack) { - ItemTag tag = getFoodTag(); + Tag<Item> tag = getFoodTag(); if (tag == null) { return false; } @@ -58,7 +59,7 @@ public abstract class AnimalEntity extends AgeableEntity { /** * @return the tag associated with this animal for eating food. Null for nothing or different behavior. */ - protected abstract @Nullable ItemTag getFoodTag(); + protected abstract @Nullable Tag<Item> getFoodTag(); @NonNull @Override diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/ArmadilloEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/ArmadilloEntity.java index 968520bb6..2b443f5e4 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/ArmadilloEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/ArmadilloEntity.java @@ -28,8 +28,10 @@ package org.geysermc.geyser.entity.type.living.animal; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.ArmadilloState; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ObjectEntityMetadata; @@ -75,7 +77,7 @@ public class ArmadilloEntity extends AnimalEntity { @Override @Nullable - protected ItemTag getFoodTag() { + protected Tag<Item> getFoodTag() { return ItemTag.ARMADILLO_FOOD; } } 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 a0ab56ead..0a87f59bc 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 @@ -32,8 +32,10 @@ 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.inventory.GeyserItemStack; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.util.EntityUtils; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; @@ -62,7 +64,7 @@ public class AxolotlEntity extends AnimalEntity { @Override @Nullable - protected ItemTag getFoodTag() { + protected Tag<Item> getFoodTag() { return ItemTag.AXOLOTL_FOOD; } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/BeeEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/BeeEntity.java index 4fcf0e178..5f8956b6a 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/BeeEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/BeeEntity.java @@ -32,8 +32,10 @@ import org.cloudburstmc.protocol.bedrock.data.entity.EntityEventType; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.cloudburstmc.protocol.bedrock.packet.EntityEventPacket; import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ByteEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata; @@ -69,7 +71,7 @@ public class BeeEntity extends AnimalEntity { @Override @Nullable - protected ItemTag getFoodTag() { + protected Tag<Item> getFoodTag() { return ItemTag.BEE_FOOD; } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/ChickenEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/ChickenEntity.java index 075a49923..0c8e437c8 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/ChickenEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/ChickenEntity.java @@ -28,8 +28,10 @@ package org.geysermc.geyser.entity.type.living.animal; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import java.util.UUID; @@ -41,7 +43,7 @@ public class ChickenEntity extends AnimalEntity { @Override @Nullable - protected ItemTag getFoodTag() { + protected Tag<Item> getFoodTag() { return ItemTag.CHICKEN_FOOD; } } 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 64e7de193..66210068b 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 @@ -33,8 +33,10 @@ import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.item.Items; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; @@ -69,7 +71,7 @@ public class CowEntity extends AnimalEntity { @Override @Nullable - protected ItemTag getFoodTag() { + protected Tag<Item> getFoodTag() { return ItemTag.COW_FOOD; } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FoxEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FoxEntity.java index e20031baa..b140b7956 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FoxEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FoxEntity.java @@ -30,8 +30,10 @@ import org.cloudburstmc.math.vector.Vector3f; 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.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ByteEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata; @@ -57,7 +59,7 @@ public class FoxEntity extends AnimalEntity { @Override @Nullable - protected ItemTag getFoodTag() { + protected Tag<Item> getFoodTag() { return ItemTag.FOX_FOOD; } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FrogEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FrogEntity.java index 120bfcdd4..a0b909b75 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FrogEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FrogEntity.java @@ -31,8 +31,10 @@ 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.entity.type.Entity; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.Pose; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ObjectEntityMetadata; @@ -77,7 +79,7 @@ public class FrogEntity extends AnimalEntity { @Override @Nullable - protected ItemTag getFoodTag() { + protected Tag<Item> getFoodTag() { return ItemTag.FROG_FOOD; } } 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 4e919b81c..b5e4ad117 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 @@ -34,8 +34,10 @@ import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.item.Items; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.Pose; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; @@ -99,7 +101,7 @@ public class GoatEntity extends AnimalEntity { @Override @Nullable - protected ItemTag getFoodTag() { + protected Tag<Item> getFoodTag() { return ItemTag.GOAT_FOOD; } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HoglinEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HoglinEntity.java index cc23fc607..b506f1425 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HoglinEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HoglinEntity.java @@ -30,8 +30,10 @@ import org.cloudburstmc.math.vector.Vector3f; 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.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; import java.util.UUID; @@ -58,7 +60,7 @@ public class HoglinEntity extends AnimalEntity { @Override @Nullable - protected ItemTag getFoodTag() { + protected Tag<Item> getFoodTag() { return ItemTag.HOGLIN_FOOD; } 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 9d6d33227..c45092b02 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 @@ -31,8 +31,10 @@ import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.inventory.GeyserItemStack; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; @@ -47,7 +49,7 @@ public class OcelotEntity extends AnimalEntity { @Override @Nullable - protected ItemTag getFoodTag() { + protected Tag<Item> getFoodTag() { return ItemTag.OCELOT_FOOD; } 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 aaa7c2d7e..022e58bc0 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 @@ -34,8 +34,10 @@ import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.cloudburstmc.protocol.bedrock.packet.EntityEventPacket; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.inventory.GeyserItemStack; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ByteEntityMetadata; @@ -90,7 +92,7 @@ public class PandaEntity extends AnimalEntity { @Override @Nullable - protected ItemTag getFoodTag() { + protected Tag<Item> getFoodTag() { return ItemTag.PANDA_FOOD; } 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 2ec23d673..b8ba2c94f 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 @@ -38,9 +38,11 @@ import org.geysermc.geyser.entity.vehicle.BoostableVehicleComponent; import org.geysermc.geyser.entity.vehicle.ClientVehicle; import org.geysermc.geyser.entity.vehicle.VehicleComponent; import org.geysermc.geyser.inventory.GeyserItemStack; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.util.EntityUtils; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; @@ -58,7 +60,7 @@ public class PigEntity extends AnimalEntity implements Tickable, ClientVehicle { @Override @Nullable - protected ItemTag getFoodTag() { + protected Tag<Item> getFoodTag() { return ItemTag.PIG_FOOD; } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PolarBearEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PolarBearEntity.java index 0e83615f7..900878dbd 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PolarBearEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PolarBearEntity.java @@ -28,8 +28,9 @@ package org.geysermc.geyser.entity.type.living.animal; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import java.util.UUID; @@ -41,7 +42,7 @@ public class PolarBearEntity extends AnimalEntity { @Override @Nullable - protected ItemTag getFoodTag() { + protected Tag<Item> getFoodTag() { return null; } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/RabbitEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/RabbitEntity.java index fbfc5d40a..dca6fe5ff 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/RabbitEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/RabbitEntity.java @@ -31,8 +31,10 @@ import org.cloudburstmc.math.vector.Vector3f; 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.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.util.EntityUtils; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata; @@ -79,7 +81,7 @@ public class RabbitEntity extends AnimalEntity { @Override @Nullable - protected ItemTag getFoodTag() { + protected Tag<Item> getFoodTag() { return ItemTag.RABBIT_FOOD; } } 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 155ddf00c..e26b0be61 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 @@ -34,8 +34,10 @@ import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.type.DyeItem; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ByteEntityMetadata; @@ -59,7 +61,7 @@ public class SheepEntity extends AnimalEntity { @Override @Nullable - protected ItemTag getFoodTag() { + protected Tag<Item> getFoodTag() { return ItemTag.SHEEP_FOOD; } @@ -103,4 +105,4 @@ public class SheepEntity extends AnimalEntity { private boolean canDye(GeyserItemStack item) { return item.asItem() instanceof DyeItem dyeItem && dyeItem.dyeColor() != this.color && !getFlag(EntityFlag.SHEARED); } -} \ No newline at end of file +} diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SnifferEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SnifferEntity.java index 11fee5bbf..203a48f19 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SnifferEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SnifferEntity.java @@ -35,8 +35,10 @@ import org.cloudburstmc.protocol.bedrock.packet.LevelSoundEventPacket; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.type.Tickable; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.Pose; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.SnifferState; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ObjectEntityMetadata; @@ -73,7 +75,7 @@ public class SnifferEntity extends AnimalEntity implements Tickable { @Override @Nullable - protected ItemTag getFoodTag() { + protected Tag<Item> getFoodTag() { return ItemTag.SNIFFER_FOOD; } 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 e06af2786..62318e255 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 @@ -39,9 +39,11 @@ import org.geysermc.geyser.entity.vehicle.BoostableVehicleComponent; import org.geysermc.geyser.entity.vehicle.ClientVehicle; import org.geysermc.geyser.entity.vehicle.VehicleComponent; import org.geysermc.geyser.inventory.GeyserItemStack; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.util.EntityUtils; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; @@ -105,7 +107,7 @@ public class StriderEntity extends AnimalEntity implements Tickable, ClientVehic @Override @Nullable - protected ItemTag getFoodTag() { + protected Tag<Item> getFoodTag() { return ItemTag.STRIDER_FOOD; } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/TurtleEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/TurtleEntity.java index ae7f2d2bd..1f700f12b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/TurtleEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/TurtleEntity.java @@ -29,8 +29,10 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; import java.util.UUID; @@ -51,7 +53,7 @@ public class TurtleEntity extends AnimalEntity { @Override @Nullable - protected ItemTag getFoodTag() { + protected Tag<Item> getFoodTag() { return ItemTag.TURTLE_FOOD; } 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 ddc212053..100a29299 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 @@ -39,8 +39,10 @@ import org.geysermc.geyser.entity.attribute.GeyserAttributeType; import org.geysermc.geyser.entity.type.living.animal.AnimalEntity; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.item.Items; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ByteEntityMetadata; @@ -119,7 +121,7 @@ public class AbstractHorseEntity extends AnimalEntity { @Override @Nullable - protected ItemTag getFoodTag() { + protected Tag<Item> getFoodTag() { return ItemTag.HORSE_FOOD; } 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 b83a85bfb..ca39bd1e6 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 @@ -35,12 +35,14 @@ import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType; import org.cloudburstmc.protocol.bedrock.packet.EntityEventPacket; import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.entity.attribute.GeyserAttributeType; import org.geysermc.geyser.entity.vehicle.CamelVehicleComponent; import org.geysermc.geyser.entity.vehicle.ClientVehicle; import org.geysermc.geyser.entity.vehicle.VehicleComponent; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.mcprotocollib.protocol.data.game.entity.attribute.Attribute; import org.geysermc.mcprotocollib.protocol.data.game.entity.attribute.AttributeType; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.Pose; @@ -100,7 +102,7 @@ public class CamelEntity extends AbstractHorseEntity implements ClientVehicle { } @Override - protected @Nullable ItemTag getFoodTag() { + protected @Nullable Tag<Item> getFoodTag() { return ItemTag.CAMEL_FOOD; } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/LlamaEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/LlamaEntity.java index 76939ceb9..d27a1fff3 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/LlamaEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/LlamaEntity.java @@ -30,8 +30,10 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.util.MathUtils; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata; @@ -56,7 +58,7 @@ public class LlamaEntity extends ChestedHorseEntity { } @Override - protected @Nullable ItemTag getFoodTag() { + protected @Nullable Tag<Item> getFoodTag() { return ItemTag.LLAMA_FOOD; } } 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 bf1555e9d..fb53c18ed 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 @@ -32,8 +32,10 @@ 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.inventory.GeyserItemStack; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; @@ -109,7 +111,7 @@ public class CatEntity extends TameableEntity { } @Override - protected @Nullable ItemTag getFoodTag() { + protected @Nullable Tag<Item> getFoodTag() { return ItemTag.CAT_FOOD; } 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 69b19b1b9..95e9c901b 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 @@ -34,6 +34,7 @@ import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; @@ -47,7 +48,7 @@ public class ParrotEntity extends TameableEntity { @Override @Nullable - protected ItemTag getFoodTag() { + protected Tag<Item> getFoodTag() { return null; } 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 e7fde2be8..f0b554ef9 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 @@ -36,8 +36,10 @@ import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.enchantment.EnchantmentComponent; import org.geysermc.geyser.item.type.DyeItem; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; import org.geysermc.geyser.util.ItemUtils; @@ -116,7 +118,7 @@ public class WolfEntity extends TameableEntity { @Override @Nullable - protected ItemTag getFoodTag() { + protected Tag<Item> getFoodTag() { return ItemTag.WOLF_FOOD; } 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 dc532cc62..0ffb74082 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 @@ -41,17 +41,15 @@ import org.geysermc.geyser.inventory.item.BedrockEnchantment; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.enchantment.Enchantment; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.session.cache.tags.EnchantmentTag; -import org.geysermc.geyser.session.cache.tags.ItemTag; import org.geysermc.geyser.translator.inventory.InventoryTranslator; import org.geysermc.geyser.translator.text.MessageTranslator; import org.geysermc.geyser.util.ItemUtils; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; import org.geysermc.mcprotocollib.protocol.data.game.item.component.ItemEnchantments; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundRenameItemPacket; +import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.IntStream; @@ -314,14 +312,10 @@ public class AnvilInventoryUpdater extends InventoryUpdater { for (Object2IntMap.Entry<Enchantment> entry : getEnchantments(session, material).object2IntEntrySet()) { Enchantment enchantment = entry.getKey(); - HolderSet supportedItems = enchantment.supportedItems(); - int[] supportedItemIds = supportedItems.resolve(tagId -> session.getTagCache().get(ItemTag.ALL_ITEM_TAGS.get(tagId))); - boolean canApply = isEnchantedBook(input) || IntStream.of(supportedItemIds).anyMatch(id -> id == input.getJavaId()); + boolean canApply = isEnchantedBook(input) || session.getTagCache().is(enchantment.supportedItems(), input.asItem()); - HolderSet exclusiveSet = enchantment.exclusiveSet(); - int[] incompatibleEnchantments = exclusiveSet.resolve(tagId -> session.getTagCache().get(EnchantmentTag.ALL_ENCHANTMENT_TAGS.get(tagId))); - for (int i : incompatibleEnchantments) { - Enchantment incompatible = session.getRegistryCache().enchantments().byId(i); + List<Enchantment> incompatibleEnchantments = enchantment.exclusiveSet().resolve(session); + for (Enchantment incompatible : incompatibleEnchantments) { if (combinedEnchantments.containsKey(incompatible)) { canApply = false; if (!bedrock) { diff --git a/core/src/main/java/org/geysermc/geyser/item/enchantment/Enchantment.java b/core/src/main/java/org/geysermc/geyser/item/enchantment/Enchantment.java index 301f69a5f..9088d9626 100644 --- a/core/src/main/java/org/geysermc/geyser/item/enchantment/Enchantment.java +++ b/core/src/main/java/org/geysermc/geyser/item/enchantment/Enchantment.java @@ -25,23 +25,20 @@ package org.geysermc.geyser.item.enchantment; -import it.unimi.dsi.fastutil.ints.IntArrays; -import net.kyori.adventure.key.Key; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.nbt.NbtMap; import org.geysermc.geyser.inventory.item.BedrockEnchantment; import org.geysermc.geyser.item.Items; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.registry.Registries; +import org.geysermc.geyser.session.cache.registry.JavaRegistries; import org.geysermc.geyser.session.cache.registry.RegistryEntryContext; +import org.geysermc.geyser.session.cache.tags.GeyserHolderSet; import org.geysermc.geyser.translator.text.MessageTranslator; -import org.geysermc.geyser.util.MinecraftKey; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Set; -import java.util.function.ToIntFunction; /** * @param description only populated if {@link #bedrockEnchantment()} is not null. @@ -49,23 +46,23 @@ import java.util.function.ToIntFunction; */ public record Enchantment(String identifier, Set<EnchantmentComponent> effects, - HolderSet supportedItems, + GeyserHolderSet<Item> supportedItems, int maxLevel, String description, int anvilCost, - HolderSet exclusiveSet, + GeyserHolderSet<Enchantment> exclusiveSet, @Nullable BedrockEnchantment bedrockEnchantment) { public static Enchantment read(RegistryEntryContext context) { NbtMap data = context.data(); Set<EnchantmentComponent> effects = readEnchantmentComponents(data.getCompound("effects")); - HolderSet supportedItems = readHolderSet(data.get("supported_items"), itemId -> Registries.JAVA_ITEM_IDENTIFIERS.getOrDefault(itemId.asString(), Items.AIR).javaId()); + GeyserHolderSet<Item> supportedItems = GeyserHolderSet.readHolderSet(context.session(), JavaRegistries.ITEM, data.get("supported_items"), itemId -> Registries.JAVA_ITEM_IDENTIFIERS.getOrDefault(itemId.asString(), Items.AIR).javaId()); int maxLevel = data.getInt("max_level"); int anvilCost = data.getInt("anvil_cost"); - HolderSet exclusiveSet = readHolderSet(data.getOrDefault("exclusive_set", null), context::getNetworkId); + GeyserHolderSet<Enchantment> exclusiveSet = GeyserHolderSet.readHolderSet(context.session(), JavaRegistries.ENCHANTMENT, data.get("exclusive_set"), context::getNetworkId); BedrockEnchantment bedrockEnchantment = BedrockEnchantment.getByJavaIdentifier(context.id().asString()); @@ -86,24 +83,4 @@ public record Enchantment(String identifier, } return Set.copyOf(components); // Also ensures any empty sets are consolidated } - - // TODO holder set util? - private static HolderSet readHolderSet(@Nullable Object holderSet, ToIntFunction<Key> keyIdMapping) { - if (holderSet == null) { - return new HolderSet(IntArrays.EMPTY_ARRAY); - } - - if (holderSet instanceof String stringTag) { - // Tag - if (stringTag.startsWith("#")) { - return new HolderSet(MinecraftKey.key(stringTag.substring(1))); // Remove '#' at beginning that indicates tag - } else { - return new HolderSet(new int[]{keyIdMapping.applyAsInt(MinecraftKey.key(stringTag))}); - } - } else if (holderSet instanceof List<?> list) { - // Assume the list is a list of strings - return new HolderSet(list.stream().map(o -> (String) o).map(Key::key).mapToInt(keyIdMapping).toArray()); - } - throw new IllegalArgumentException("Holder set must either be a tag, a string ID or a list of string IDs"); - } } 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 bf396a3c3..fb64cfc41 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -679,7 +679,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { this.registryCache = new RegistryCache(this); this.skullCache = new SkullCache(this); this.structureBlockCache = new StructureBlockCache(); - this.tagCache = new TagCache(); + this.tagCache = new TagCache(this); this.worldCache = new WorldCache(this); this.cameraData = new GeyserCameraData(this); this.entityData = new GeyserEntityData(this); diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java index 4a4167f15..fcbc7c64c 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java @@ -46,7 +46,9 @@ import org.geysermc.geyser.level.JavaDimension; import org.geysermc.geyser.level.JukeboxSong; import org.geysermc.geyser.level.PaintingType; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.session.cache.registry.JavaRegistries; import org.geysermc.geyser.session.cache.registry.JavaRegistry; +import org.geysermc.geyser.session.cache.registry.JavaRegistryKey; import org.geysermc.geyser.session.cache.registry.RegistryEntryContext; import org.geysermc.geyser.session.cache.registry.SimpleJavaRegistry; import org.geysermc.geyser.text.ChatDecoration; @@ -74,35 +76,34 @@ import java.util.function.ToIntFunction; @Accessors(fluent = true) @Getter public final class RegistryCache { - private static final Map<Key, Map<Key, NbtMap>> DEFAULTS; - private static final Map<Key, BiConsumer<RegistryCache, List<RegistryEntry>>> REGISTRIES = new HashMap<>(); + private static final Map<JavaRegistryKey<?>, Map<Key, NbtMap>> DEFAULTS; + private static final Map<JavaRegistryKey<?>, BiConsumer<RegistryCache, List<RegistryEntry>>> REGISTRIES = new HashMap<>(); static { - register("chat_type", cache -> cache.chatTypes, ChatDecoration::readChatType); - register("dimension_type", cache -> cache.dimensions, JavaDimension::read); - register("enchantment", cache -> cache.enchantments, Enchantment::read); - register("jukebox_song", cache -> cache.jukeboxSongs, JukeboxSong::read); - register("painting_variant", cache -> cache.paintings, context -> PaintingType.getByName(context.id())); - register("trim_material", cache -> cache.trimMaterials, TrimRecipe::readTrimMaterial); - register("trim_pattern", cache -> cache.trimPatterns, TrimRecipe::readTrimPattern); - register("worldgen/biome", (cache, array) -> cache.biomeTranslations = array, BiomeTranslator::loadServerBiome); - register("banner_pattern", cache -> cache.bannerPatterns, context -> BannerPattern.getByJavaIdentifier(context.id())); - register("wolf_variant", cache -> cache.wolfVariants, context -> WolfEntity.BuiltInWolfVariant.getByJavaIdentifier(context.id().asString())); + register(JavaRegistries.CHAT_TYPE, cache -> cache.chatTypes, ChatDecoration::readChatType); + register(JavaRegistries.DIMENSION_TYPE, cache -> cache.dimensions, JavaDimension::read); + register(JavaRegistries.ENCHANTMENT, cache -> cache.enchantments, Enchantment::read); + register(JavaRegistries.JUKEBOX_SONG, cache -> cache.jukeboxSongs, JukeboxSong::read); + register(JavaRegistries.PAINTING_VARIANT, cache -> cache.paintings, context -> PaintingType.getByName(context.id())); + register(JavaRegistries.TRIM_MATERIAL, cache -> cache.trimMaterials, TrimRecipe::readTrimMaterial); + register(JavaRegistries.TRIM_PATTERN, cache -> cache.trimPatterns, TrimRecipe::readTrimPattern); + register(JavaRegistries.BIOME, (cache, array) -> cache.biomeTranslations = array, BiomeTranslator::loadServerBiome); + register(JavaRegistries.BANNER_PATTERN, cache -> cache.bannerPatterns, context -> BannerPattern.getByJavaIdentifier(context.id())); + register(JavaRegistries.WOLF_VARIANT, cache -> cache.wolfVariants, context -> WolfEntity.BuiltInWolfVariant.getByJavaIdentifier(context.id().asString())); // Load from MCProtocolLib's classloader NbtMap tag = MinecraftProtocol.loadNetworkCodec(); - Map<Key, Map<Key, NbtMap>> defaults = new HashMap<>(); + Map<JavaRegistryKey<?>, Map<Key, NbtMap>> defaults = new HashMap<>(); // Don't create a keySet - no need to create the cached object in HashMap if we don't use it again - REGISTRIES.forEach((key, $) -> { - List<NbtMap> rawValues = tag.getCompound(key.asString()) - .getList("value", NbtType.COMPOUND); + REGISTRIES.forEach((registry, $) -> { + List<NbtMap> rawValues = tag.getCompound(registry.registryKey().asString()).getList("value", NbtType.COMPOUND); Map<Key, NbtMap> values = new HashMap<>(); for (NbtMap value : rawValues) { Key name = MinecraftKey.key(value.getString("name")); values.put(name, value.getCompound("element")); } // Can make these maps immutable and as efficient as possible after initialization - defaults.put(key, Map.copyOf(values)); + defaults.put(registry, Map.copyOf(values)); }); DEFAULTS = Map.copyOf(defaults); @@ -137,7 +138,7 @@ public final class RegistryCache { * Loads a registry in, if we are tracking it. */ public void load(ClientboundRegistryDataPacket packet) { - var reader = REGISTRIES.get(packet.getRegistry()); + var reader = REGISTRIES.get(JavaRegistries.fromKey(packet.getRegistry())); if (reader != null) { reader.accept(this, packet.getEntries()); } else { @@ -151,9 +152,8 @@ public final class RegistryCache { * @param reader converts the RegistryEntry NBT into a class file * @param <T> the class that represents these entries. */ - private static <T> void register(String registry, Function<RegistryCache, JavaRegistry<T>> localCacheFunction, Function<RegistryEntryContext, T> reader) { - Key registryKey = MinecraftKey.key(registry); - REGISTRIES.put(registryKey, (registryCache, entries) -> { + private static <T> void register(JavaRegistryKey<T> registry, Function<RegistryCache, JavaRegistry<T>> localCacheFunction, Function<RegistryEntryContext, T> reader) { + REGISTRIES.put(registry, (registryCache, entries) -> { Map<Key, NbtMap> localRegistry = null; JavaRegistry<T> localCache = localCacheFunction.apply(registryCache); // Clear each local cache every time a new registry entry is given to us @@ -172,7 +172,7 @@ public final class RegistryCache { // If the data is null, that's the server telling us we need to use our default values. if (entry.getData() == null) { if (localRegistry == null) { // Lazy initialize - localRegistry = DEFAULTS.get(registryKey); + localRegistry = DEFAULTS.get(registry); } entry = new RegistryEntry(entry.getId(), localRegistry.get(entry.getId())); } @@ -189,8 +189,8 @@ public final class RegistryCache { /** * @param localCacheFunction the int array to set the final values to. */ - private static void register(String registry, BiConsumer<RegistryCache, int[]> localCacheFunction, ToIntFunction<RegistryEntry> reader) { - REGISTRIES.put(MinecraftKey.key(registry), (registryCache, entries) -> { + private static void register(JavaRegistryKey<?> registry, BiConsumer<RegistryCache, int[]> localCacheFunction, ToIntFunction<RegistryEntry> reader) { + REGISTRIES.put(registry, (registryCache, entries) -> { Int2IntMap temp = new Int2IntOpenHashMap(); int greatestId = 0; for (int i = 0; i < entries.size(); i++) { diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java index f4d69dcdb..f01ef64c5 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java @@ -26,116 +26,114 @@ package org.geysermc.geyser.session.cache; import it.unimi.dsi.fastutil.ints.IntArrays; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import net.kyori.adventure.key.Key; -import org.checkerframework.checker.nullness.qual.Nullable; -import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.item.type.Item; -import org.geysermc.geyser.level.block.type.Block; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.session.cache.tags.BlockTag; -import org.geysermc.geyser.session.cache.tags.EnchantmentTag; -import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.session.cache.registry.JavaRegistries; +import org.geysermc.geyser.session.cache.registry.JavaRegistryKey; +import org.geysermc.geyser.session.cache.tags.GeyserHolderSet; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.util.MinecraftKey; -import org.geysermc.geyser.util.Ordered; import org.geysermc.mcprotocollib.protocol.packet.common.clientbound.ClientboundUpdateTagsPacket; import javax.annotation.ParametersAreNonnullByDefault; import java.util.Arrays; +import java.util.List; import java.util.Map; -import static org.geysermc.geyser.session.cache.tags.BlockTag.ALL_BLOCK_TAGS; -import static org.geysermc.geyser.session.cache.tags.EnchantmentTag.ALL_ENCHANTMENT_TAGS; -import static org.geysermc.geyser.session.cache.tags.ItemTag.ALL_ITEM_TAGS; - /** * Manages information sent from the {@link ClientboundUpdateTagsPacket}. If that packet is not sent, all lists here - * will remain empty, matching Java Edition behavior. + * will remain empty, matching Java Edition behavior. Looking up a tag that wasn't listed in that packet will return an empty array. + * Only tags from suitable registries in {@link JavaRegistries} are stored. Read {@link JavaRegistryKey} for more information. */ @ParametersAreNonnullByDefault public final class TagCache { - private final int[][] blocks = new int[ALL_BLOCK_TAGS.size()][]; - private final int[][] items = new int[ALL_ITEM_TAGS.size()][]; - private final int[][] enchantments = new int[ALL_ENCHANTMENT_TAGS.size()][]; + private final GeyserSession session; + private final Map<Tag<?>, int[]> tags = new Object2ObjectOpenHashMap<>(); + + public TagCache(GeyserSession session) { + this.session = session; + } public void loadPacket(GeyserSession session, ClientboundUpdateTagsPacket packet) { - Map<Key, int[]> blockTags = packet.getTags().get(MinecraftKey.key("block")); - loadTags("Block", blockTags, ALL_BLOCK_TAGS, this.blocks); - - // Hack btw + Map<Key, Map<Key, int[]>> allTags = packet.getTags(); GeyserLogger logger = session.getGeyser().getLogger(); - int[] convertableToMud = blockTags.get(MinecraftKey.key("convertable_to_mud")); - boolean emulatePost1_18Logic = convertableToMud != null && convertableToMud.length != 0; - session.setEmulatePost1_18Logic(emulatePost1_18Logic); - if (logger.isDebug()) { - logger.debug("Emulating post 1.18 block predication logic for " + session.bedrockUsername() + "? " + emulatePost1_18Logic); - } - Map<Key, int[]> itemTags = packet.getTags().get(MinecraftKey.key("item")); - loadTags("Item", itemTags, ALL_ITEM_TAGS, this.items); + this.tags.clear(); - // Hack btw - boolean emulatePost1_13Logic = itemTags.get(MinecraftKey.key("signs")).length > 1; - session.setEmulatePost1_13Logic(emulatePost1_13Logic); - if (logger.isDebug()) { - logger.debug("Emulating post 1.13 villager logic for " + session.bedrockUsername() + "? " + emulatePost1_13Logic); - } - - Map<Key, int[]> enchantmentTags = packet.getTags().get(MinecraftKey.key("enchantment")); - loadTags("Enchantment", enchantmentTags, ALL_ENCHANTMENT_TAGS, this.enchantments); - } - - private <T extends Ordered> void loadTags(String type, @Nullable Map<Key, int[]> packetTags, Map<Key, T> allTags, int[][] localValues) { - if (packetTags == null) { - Arrays.fill(localValues, IntArrays.EMPTY_ARRAY); - GeyserImpl.getInstance().getLogger().debug("Not loading " + type + " tags; they do not exist here."); - return; - } - allTags.forEach((location, tag) -> { - int[] values = packetTags.get(location); - if (values != null) { - if (values.length != 0) { - localValues[tag.ordinal()] = values; - } else { - localValues[tag.ordinal()] = IntArrays.EMPTY_ARRAY; - } - } else { - localValues[tag.ordinal()] = IntArrays.EMPTY_ARRAY; - GeyserImpl.getInstance().getLogger().debug(type + " tag not found from server: " + location); + for (Key registryKey : allTags.keySet()) { + JavaRegistryKey<?> registry = JavaRegistries.fromKey(registryKey); + if (registry == null || !registry.shouldStoreTags()) { + logger.debug("Not loading tags for registry " + registryKey + " (registry not listed in JavaRegistries, or was not suitable to load tags)"); + continue; } - }); + + Map<Key, int[]> registryTags = allTags.get(registryKey); + + if (registry == JavaRegistries.BLOCK) { + // Hack btw + int[] convertableToMud = registryTags.get(MinecraftKey.key("convertable_to_mud")); + boolean emulatePost1_18Logic = convertableToMud != null && convertableToMud.length != 0; + session.setEmulatePost1_18Logic(emulatePost1_18Logic); + if (logger.isDebug()) { + logger.debug("Emulating post 1.18 block predication logic for " + session.bedrockUsername() + "? " + emulatePost1_18Logic); + } + } else if (registry == JavaRegistries.ITEM) { + // Hack btw + boolean emulatePost1_13Logic = registryTags.get(MinecraftKey.key("signs")).length > 1; + session.setEmulatePost1_13Logic(emulatePost1_13Logic); + if (logger.isDebug()) { + logger.debug("Emulating post 1.13 villager logic for " + session.bedrockUsername() + "? " + emulatePost1_13Logic); + } + } + + loadTags(registryTags, registry); + } } - /** - * @return true if the block tag is present and contains this block mapping's Java ID. - */ - public boolean is(BlockTag tag, Block block) { - int[] values = this.blocks[tag.ordinal()]; - return contains(values, block.javaId()); + private void loadTags(Map<Key, int[]> packetTags, JavaRegistryKey<?> registry) { + for (Map.Entry<Key, int[]> tag : packetTags.entrySet()) { + this.tags.put(new Tag<>(registry, tag.getKey()), tag.getValue()); + } + } + + public <T> boolean is(Tag<T> tag, T object) { + return contains(getRaw(tag), tag.registry().toNetworkId(session, object)); } /** * @return true if the item tag is present and contains this item stack's Java ID. */ - public boolean is(ItemTag tag, GeyserItemStack itemStack) { + public boolean is(Tag<Item> tag, GeyserItemStack itemStack) { return is(tag, itemStack.asItem()); } /** - * @return true if the item tag is present and contains this item's Java ID. + * @return true if the specified network ID is in the given holder set. */ - public boolean is(ItemTag tag, Item item) { - int[] values = this.items[tag.ordinal()]; - return contains(values, item.javaId()); + public <T> boolean is(GeyserHolderSet<T> holderSet, T object) { + return contains(holderSet.resolveRaw(this), holderSet.getRegistry().toNetworkId(session, object)); } - public int[] get(ItemTag itemTag) { - return this.items[itemTag.ordinal()]; + public <T> List<T> get(Tag<T> tag) { + return mapRawArray(session, getRaw(tag), tag.registry()); } - public int[] get(EnchantmentTag enchantmentTag) { - return this.enchantments[enchantmentTag.ordinal()]; + /** + * @return the network IDs in the given tag. This can be an empty list. + */ + public int[] getRaw(Tag<?> tag) { + return this.tags.getOrDefault(tag, IntArrays.EMPTY_ARRAY); + } + + /** + * Maps a raw array of network IDs to their respective objects. + */ + public static <T> List<T> mapRawArray(GeyserSession session, int[] array, JavaRegistryKey<T> registry) { + return Arrays.stream(array).mapToObj(i -> registry.fromNetworkId(session, i)).toList(); } private static boolean contains(int[] array, int i) { diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/registry/JavaRegistries.java b/core/src/main/java/org/geysermc/geyser/session/cache/registry/JavaRegistries.java new file mode 100644 index 000000000..cb51f488e --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/session/cache/registry/JavaRegistries.java @@ -0,0 +1,112 @@ +/* + * Copyright (c) 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.session.cache.registry; + +import net.kyori.adventure.key.Key; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.cloudburstmc.protocol.bedrock.data.TrimMaterial; +import org.cloudburstmc.protocol.bedrock.data.TrimPattern; +import org.geysermc.geyser.entity.type.living.animal.tameable.WolfEntity; +import org.geysermc.geyser.inventory.item.BannerPattern; +import org.geysermc.geyser.item.enchantment.Enchantment; +import org.geysermc.geyser.item.type.Item; +import org.geysermc.geyser.level.JavaDimension; +import org.geysermc.geyser.level.JukeboxSong; +import org.geysermc.geyser.level.PaintingType; +import org.geysermc.geyser.level.block.type.Block; +import org.geysermc.geyser.registry.BlockRegistries; +import org.geysermc.geyser.registry.ListRegistry; +import org.geysermc.geyser.registry.Registries; +import org.geysermc.geyser.session.cache.RegistryCache; +import org.geysermc.geyser.util.MinecraftKey; +import org.geysermc.mcprotocollib.protocol.data.game.chat.ChatType; + +import java.util.ArrayList; +import java.util.List; + +/** + * Stores {@link JavaRegistryKey} for Java registries that are used for loading of data-driven objects, tags, or both. Read {@link JavaRegistryKey} for more information on how to use one. + */ +public class JavaRegistries { + private static final List<JavaRegistryKey<?>> VALUES = new ArrayList<>(); + + public static final JavaRegistryKey<Block> BLOCK = create("block", BlockRegistries.JAVA_BLOCKS, Block::javaId); + public static final JavaRegistryKey<Item> ITEM = create("item", Registries.JAVA_ITEMS, Item::javaId); + public static final JavaRegistryKey<ChatType> CHAT_TYPE = create("chat_type", RegistryCache::chatTypes); + public static final JavaRegistryKey<JavaDimension> DIMENSION_TYPE = create("dimension_type", RegistryCache::dimensions); + public static final JavaRegistryKey<Enchantment> ENCHANTMENT = create("enchantment", RegistryCache::enchantments); + public static final JavaRegistryKey<JukeboxSong> JUKEBOX_SONG = create("jukebox_song", RegistryCache::jukeboxSongs); + public static final JavaRegistryKey<PaintingType> PAINTING_VARIANT = create("painting_variant", RegistryCache::paintings); + public static final JavaRegistryKey<TrimMaterial> TRIM_MATERIAL = create("trim_material", RegistryCache::trimMaterials); + public static final JavaRegistryKey<TrimPattern> TRIM_PATTERN = create("trim_pattern", RegistryCache::trimPatterns); + /** + * This registry should not be used in holder sets, tags, etc. It's simply used as a mapping from Java biomes to Bedrock ones. + */ + public static final JavaRegistryKey<Integer> BIOME = create("worldgen/biome"); + public static final JavaRegistryKey<BannerPattern> BANNER_PATTERN = create("banner_pattern", RegistryCache::bannerPatterns); + public static final JavaRegistryKey<WolfEntity.BuiltInWolfVariant> WOLF_VARIANT = create("wolf_variant", RegistryCache::wolfVariants); + + private static <T> JavaRegistryKey<T> create(String key, JavaRegistryKey.NetworkSerializer<T> networkSerializer, JavaRegistryKey.NetworkDeserializer<T> networkDeserializer) { + JavaRegistryKey<T> registry = new JavaRegistryKey<>(MinecraftKey.key(key), networkSerializer, networkDeserializer); + VALUES.add(registry); + return registry; + } + + private static <T> JavaRegistryKey<T> create(String key, ListRegistry<T> registry, RegistryNetworkMapper<T> networkSerializer) { + return create(key, (session, object) -> networkSerializer.get(object), (session, id) -> registry.get(id)); + } + + private static <T> JavaRegistryKey<T> create(String key, RegistryGetter<T> getter) { + return create(key, (session, object) -> getter.get(session.getRegistryCache()).byValue(object), (session, id) -> getter.get(session.getRegistryCache()).byId(id)); + } + + private static <T> JavaRegistryKey<T> create(String key) { + // Cast for ambiguous call + return create(key, (JavaRegistryKey.NetworkSerializer<T>) null, null); + } + + @Nullable + public static JavaRegistryKey<?> fromKey(Key registryKey) { + for (JavaRegistryKey<?> registry : VALUES) { + if (registry.registryKey().equals(registryKey)) { + return registry; + } + } + return null; + } + + @FunctionalInterface + interface RegistryGetter<T> { + + JavaRegistry<T> get(RegistryCache cache); + } + + @FunctionalInterface + interface RegistryNetworkMapper<T> { + + int get(T object); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/registry/JavaRegistryKey.java b/core/src/main/java/org/geysermc/geyser/session/cache/registry/JavaRegistryKey.java new file mode 100644 index 000000000..369bea7a4 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/session/cache/registry/JavaRegistryKey.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 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.session.cache.registry; + +import net.kyori.adventure.key.Key; +import org.geysermc.geyser.session.GeyserSession; + +import javax.annotation.Nullable; + +/** + * Defines a Java registry, which can be hardcoded or data-driven. This class doesn't store registry contents itself, that is handled by {@link org.geysermc.geyser.session.cache.RegistryCache} in the case of + * data-driven registries and other classes in the case of hardcoded registries. + * + * <p>This class is used when, for a Java registry, data-driven objects or tags need to be loaded. Only one instance of this class should be created for each Java registry. Instances of this + * class are kept in {@link JavaRegistries}, which also has useful methods for creating instances of this class. When only using a registry to load data-driven objects, the network (de)serializer parameters + * can be null. For tag loading however, these are required, as {@link org.geysermc.geyser.session.cache.TagCache} relies on their functionality.</p> + * + * @param registryKey the registry key, as it appears on Java. + * @param networkSerializer a method that converts an object in this registry to its network ID. + * @param networkDeserializer a method that converts a network ID to an object in this registry. + * @param <T> the object type this registry holds. + */ +public record JavaRegistryKey<T>(Key registryKey, @Nullable NetworkSerializer<T> networkSerializer, @Nullable NetworkDeserializer<T> networkDeserializer) { + + /** + * Converts an object in this registry to its network ID. This will fail if this registry doesn't have a network serializer. + */ + public int toNetworkId(GeyserSession session, T object) { + if (networkSerializer == null) { + throw new UnsupportedOperationException("Registry does not hava a network serializer"); + } + return networkSerializer.toNetworkId(session, object); + } + + /** + * Converts a network ID to an object in this registry. This will fail if this registry doesn't have a network deserializer. + */ + public T fromNetworkId(GeyserSession session, int networkId) { + if (networkDeserializer == null) { + throw new UnsupportedOperationException("Registry does not hava a network deserializer"); + } + return networkDeserializer.fromNetworkId(session, networkId); + } + + /** + * @return true if this registry has a network serializer and deserializer. + */ + public boolean shouldStoreTags() { + return networkSerializer != null && networkDeserializer != null; + } + + @FunctionalInterface + public interface NetworkSerializer<T> { + + int toNetworkId(GeyserSession session, T object); + } + + @FunctionalInterface + public interface NetworkDeserializer<T> { + + T fromNetworkId(GeyserSession session, int networkId); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/tags/BlockTag.java b/core/src/main/java/org/geysermc/geyser/session/cache/tags/BlockTag.java index 1dca7843a..6ad666780 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/tags/BlockTag.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/tags/BlockTag.java @@ -25,214 +25,203 @@ package org.geysermc.geyser.session.cache.tags; -import net.kyori.adventure.key.Key; -import org.geysermc.geyser.util.Ordered; - -import java.util.HashMap; -import java.util.Map; +import org.geysermc.geyser.level.block.type.Block; +import org.geysermc.geyser.session.cache.registry.JavaRegistries; +import org.geysermc.geyser.util.MinecraftKey; +/** + * Lists vanilla block tags. + */ @SuppressWarnings("unused") -public final class BlockTag implements Ordered { - public static final Map<Key, BlockTag> ALL_BLOCK_TAGS = new HashMap<>(); +public final class BlockTag { + public static final Tag<Block> WOOL = create("wool"); + public static final Tag<Block> PLANKS = create("planks"); + public static final Tag<Block> STONE_BRICKS = create("stone_bricks"); + public static final Tag<Block> WOODEN_BUTTONS = create("wooden_buttons"); + public static final Tag<Block> STONE_BUTTONS = create("stone_buttons"); + public static final Tag<Block> BUTTONS = create("buttons"); + public static final Tag<Block> WOOL_CARPETS = create("wool_carpets"); + public static final Tag<Block> WOODEN_DOORS = create("wooden_doors"); + public static final Tag<Block> MOB_INTERACTABLE_DOORS = create("mob_interactable_doors"); + public static final Tag<Block> WOODEN_STAIRS = create("wooden_stairs"); + public static final Tag<Block> WOODEN_SLABS = create("wooden_slabs"); + public static final Tag<Block> WOODEN_FENCES = create("wooden_fences"); + public static final Tag<Block> PRESSURE_PLATES = create("pressure_plates"); + public static final Tag<Block> WOODEN_PRESSURE_PLATES = create("wooden_pressure_plates"); + public static final Tag<Block> STONE_PRESSURE_PLATES = create("stone_pressure_plates"); + public static final Tag<Block> WOODEN_TRAPDOORS = create("wooden_trapdoors"); + public static final Tag<Block> DOORS = create("doors"); + public static final Tag<Block> SAPLINGS = create("saplings"); + public static final Tag<Block> LOGS_THAT_BURN = create("logs_that_burn"); + public static final Tag<Block> OVERWORLD_NATURAL_LOGS = create("overworld_natural_logs"); + public static final Tag<Block> LOGS = create("logs"); + public static final Tag<Block> DARK_OAK_LOGS = create("dark_oak_logs"); + public static final Tag<Block> OAK_LOGS = create("oak_logs"); + public static final Tag<Block> BIRCH_LOGS = create("birch_logs"); + public static final Tag<Block> ACACIA_LOGS = create("acacia_logs"); + public static final Tag<Block> CHERRY_LOGS = create("cherry_logs"); + public static final Tag<Block> JUNGLE_LOGS = create("jungle_logs"); + public static final Tag<Block> SPRUCE_LOGS = create("spruce_logs"); + public static final Tag<Block> MANGROVE_LOGS = create("mangrove_logs"); + public static final Tag<Block> CRIMSON_STEMS = create("crimson_stems"); + public static final Tag<Block> WARPED_STEMS = create("warped_stems"); + public static final Tag<Block> BAMBOO_BLOCKS = create("bamboo_blocks"); + public static final Tag<Block> WART_BLOCKS = create("wart_blocks"); + public static final Tag<Block> BANNERS = create("banners"); + public static final Tag<Block> SAND = create("sand"); + public static final Tag<Block> SMELTS_TO_GLASS = create("smelts_to_glass"); + public static final Tag<Block> STAIRS = create("stairs"); + public static final Tag<Block> SLABS = create("slabs"); + public static final Tag<Block> WALLS = create("walls"); + public static final Tag<Block> ANVIL = create("anvil"); + public static final Tag<Block> RAILS = create("rails"); + public static final Tag<Block> LEAVES = create("leaves"); + public static final Tag<Block> TRAPDOORS = create("trapdoors"); + public static final Tag<Block> SMALL_FLOWERS = create("small_flowers"); + public static final Tag<Block> BEDS = create("beds"); + public static final Tag<Block> FENCES = create("fences"); + public static final Tag<Block> TALL_FLOWERS = create("tall_flowers"); + public static final Tag<Block> FLOWERS = create("flowers"); + public static final Tag<Block> PIGLIN_REPELLENTS = create("piglin_repellents"); + public static final Tag<Block> GOLD_ORES = create("gold_ores"); + public static final Tag<Block> IRON_ORES = create("iron_ores"); + public static final Tag<Block> DIAMOND_ORES = create("diamond_ores"); + public static final Tag<Block> REDSTONE_ORES = create("redstone_ores"); + public static final Tag<Block> LAPIS_ORES = create("lapis_ores"); + public static final Tag<Block> COAL_ORES = create("coal_ores"); + public static final Tag<Block> EMERALD_ORES = create("emerald_ores"); + public static final Tag<Block> COPPER_ORES = create("copper_ores"); + public static final Tag<Block> CANDLES = create("candles"); + public static final Tag<Block> DIRT = create("dirt"); + public static final Tag<Block> TERRACOTTA = create("terracotta"); + public static final Tag<Block> BADLANDS_TERRACOTTA = create("badlands_terracotta"); + public static final Tag<Block> CONCRETE_POWDER = create("concrete_powder"); + public static final Tag<Block> COMPLETES_FIND_TREE_TUTORIAL = create("completes_find_tree_tutorial"); + public static final Tag<Block> FLOWER_POTS = create("flower_pots"); + public static final Tag<Block> ENDERMAN_HOLDABLE = create("enderman_holdable"); + public static final Tag<Block> ICE = create("ice"); + public static final Tag<Block> VALID_SPAWN = create("valid_spawn"); + public static final Tag<Block> IMPERMEABLE = create("impermeable"); + public static final Tag<Block> UNDERWATER_BONEMEALS = create("underwater_bonemeals"); + public static final Tag<Block> CORAL_BLOCKS = create("coral_blocks"); + public static final Tag<Block> WALL_CORALS = create("wall_corals"); + public static final Tag<Block> CORAL_PLANTS = create("coral_plants"); + public static final Tag<Block> CORALS = create("corals"); + public static final Tag<Block> BAMBOO_PLANTABLE_ON = create("bamboo_plantable_on"); + public static final Tag<Block> STANDING_SIGNS = create("standing_signs"); + public static final Tag<Block> WALL_SIGNS = create("wall_signs"); + public static final Tag<Block> SIGNS = create("signs"); + public static final Tag<Block> CEILING_HANGING_SIGNS = create("ceiling_hanging_signs"); + public static final Tag<Block> WALL_HANGING_SIGNS = create("wall_hanging_signs"); + public static final Tag<Block> ALL_HANGING_SIGNS = create("all_hanging_signs"); + public static final Tag<Block> ALL_SIGNS = create("all_signs"); + public static final Tag<Block> DRAGON_IMMUNE = create("dragon_immune"); + public static final Tag<Block> DRAGON_TRANSPARENT = create("dragon_transparent"); + public static final Tag<Block> WITHER_IMMUNE = create("wither_immune"); + public static final Tag<Block> WITHER_SUMMON_BASE_BLOCKS = create("wither_summon_base_blocks"); + public static final Tag<Block> BEEHIVES = create("beehives"); + public static final Tag<Block> CROPS = create("crops"); + public static final Tag<Block> BEE_GROWABLES = create("bee_growables"); + public static final Tag<Block> PORTALS = create("portals"); + public static final Tag<Block> FIRE = create("fire"); + public static final Tag<Block> NYLIUM = create("nylium"); + public static final Tag<Block> BEACON_BASE_BLOCKS = create("beacon_base_blocks"); + public static final Tag<Block> SOUL_SPEED_BLOCKS = create("soul_speed_blocks"); + public static final Tag<Block> WALL_POST_OVERRIDE = create("wall_post_override"); + public static final Tag<Block> CLIMBABLE = create("climbable"); + public static final Tag<Block> FALL_DAMAGE_RESETTING = create("fall_damage_resetting"); + public static final Tag<Block> SHULKER_BOXES = create("shulker_boxes"); + public static final Tag<Block> HOGLIN_REPELLENTS = create("hoglin_repellents"); + public static final Tag<Block> SOUL_FIRE_BASE_BLOCKS = create("soul_fire_base_blocks"); + public static final Tag<Block> STRIDER_WARM_BLOCKS = create("strider_warm_blocks"); + public static final Tag<Block> CAMPFIRES = create("campfires"); + public static final Tag<Block> GUARDED_BY_PIGLINS = create("guarded_by_piglins"); + public static final Tag<Block> PREVENT_MOB_SPAWNING_INSIDE = create("prevent_mob_spawning_inside"); + public static final Tag<Block> FENCE_GATES = create("fence_gates"); + public static final Tag<Block> UNSTABLE_BOTTOM_CENTER = create("unstable_bottom_center"); + public static final Tag<Block> MUSHROOM_GROW_BLOCK = create("mushroom_grow_block"); + public static final Tag<Block> INFINIBURN_OVERWORLD = create("infiniburn_overworld"); + public static final Tag<Block> INFINIBURN_NETHER = create("infiniburn_nether"); + public static final Tag<Block> INFINIBURN_END = create("infiniburn_end"); + public static final Tag<Block> BASE_STONE_OVERWORLD = create("base_stone_overworld"); + public static final Tag<Block> STONE_ORE_REPLACEABLES = create("stone_ore_replaceables"); + public static final Tag<Block> DEEPSLATE_ORE_REPLACEABLES = create("deepslate_ore_replaceables"); + public static final Tag<Block> BASE_STONE_NETHER = create("base_stone_nether"); + public static final Tag<Block> OVERWORLD_CARVER_REPLACEABLES = create("overworld_carver_replaceables"); + public static final Tag<Block> NETHER_CARVER_REPLACEABLES = create("nether_carver_replaceables"); + public static final Tag<Block> CANDLE_CAKES = create("candle_cakes"); + public static final Tag<Block> CAULDRONS = create("cauldrons"); + public static final Tag<Block> CRYSTAL_SOUND_BLOCKS = create("crystal_sound_blocks"); + public static final Tag<Block> INSIDE_STEP_SOUND_BLOCKS = create("inside_step_sound_blocks"); + public static final Tag<Block> COMBINATION_STEP_SOUND_BLOCKS = create("combination_step_sound_blocks"); + public static final Tag<Block> CAMEL_SAND_STEP_SOUND_BLOCKS = create("camel_sand_step_sound_blocks"); + public static final Tag<Block> OCCLUDES_VIBRATION_SIGNALS = create("occludes_vibration_signals"); + public static final Tag<Block> DAMPENS_VIBRATIONS = create("dampens_vibrations"); + public static final Tag<Block> DRIPSTONE_REPLACEABLE_BLOCKS = create("dripstone_replaceable_blocks"); + public static final Tag<Block> CAVE_VINES = create("cave_vines"); + public static final Tag<Block> MOSS_REPLACEABLE = create("moss_replaceable"); + public static final Tag<Block> LUSH_GROUND_REPLACEABLE = create("lush_ground_replaceable"); + public static final Tag<Block> AZALEA_ROOT_REPLACEABLE = create("azalea_root_replaceable"); + public static final Tag<Block> SMALL_DRIPLEAF_PLACEABLE = create("small_dripleaf_placeable"); + public static final Tag<Block> BIG_DRIPLEAF_PLACEABLE = create("big_dripleaf_placeable"); + public static final Tag<Block> SNOW = create("snow"); + public static final Tag<Block> MINEABLE_AXE = create("mineable/axe"); + public static final Tag<Block> MINEABLE_HOE = create("mineable/hoe"); + public static final Tag<Block> MINEABLE_PICKAXE = create("mineable/pickaxe"); + public static final Tag<Block> MINEABLE_SHOVEL = create("mineable/shovel"); + public static final Tag<Block> SWORD_EFFICIENT = create("sword_efficient"); + public static final Tag<Block> NEEDS_DIAMOND_TOOL = create("needs_diamond_tool"); + public static final Tag<Block> NEEDS_IRON_TOOL = create("needs_iron_tool"); + public static final Tag<Block> NEEDS_STONE_TOOL = create("needs_stone_tool"); + public static final Tag<Block> INCORRECT_FOR_NETHERITE_TOOL = create("incorrect_for_netherite_tool"); + public static final Tag<Block> INCORRECT_FOR_DIAMOND_TOOL = create("incorrect_for_diamond_tool"); + public static final Tag<Block> INCORRECT_FOR_IRON_TOOL = create("incorrect_for_iron_tool"); + public static final Tag<Block> INCORRECT_FOR_STONE_TOOL = create("incorrect_for_stone_tool"); + public static final Tag<Block> INCORRECT_FOR_GOLD_TOOL = create("incorrect_for_gold_tool"); + public static final Tag<Block> INCORRECT_FOR_WOODEN_TOOL = create("incorrect_for_wooden_tool"); + public static final Tag<Block> FEATURES_CANNOT_REPLACE = create("features_cannot_replace"); + public static final Tag<Block> LAVA_POOL_STONE_CANNOT_REPLACE = create("lava_pool_stone_cannot_replace"); + public static final Tag<Block> GEODE_INVALID_BLOCKS = create("geode_invalid_blocks"); + public static final Tag<Block> FROG_PREFER_JUMP_TO = create("frog_prefer_jump_to"); + public static final Tag<Block> SCULK_REPLACEABLE = create("sculk_replaceable"); + public static final Tag<Block> SCULK_REPLACEABLE_WORLD_GEN = create("sculk_replaceable_world_gen"); + public static final Tag<Block> ANCIENT_CITY_REPLACEABLE = create("ancient_city_replaceable"); + public static final Tag<Block> VIBRATION_RESONATORS = create("vibration_resonators"); + public static final Tag<Block> ANIMALS_SPAWNABLE_ON = create("animals_spawnable_on"); + public static final Tag<Block> ARMADILLO_SPAWNABLE_ON = create("armadillo_spawnable_on"); + public static final Tag<Block> AXOLOTLS_SPAWNABLE_ON = create("axolotls_spawnable_on"); + public static final Tag<Block> GOATS_SPAWNABLE_ON = create("goats_spawnable_on"); + public static final Tag<Block> MOOSHROOMS_SPAWNABLE_ON = create("mooshrooms_spawnable_on"); + public static final Tag<Block> PARROTS_SPAWNABLE_ON = create("parrots_spawnable_on"); + public static final Tag<Block> POLAR_BEARS_SPAWNABLE_ON_ALTERNATE = create("polar_bears_spawnable_on_alternate"); + public static final Tag<Block> RABBITS_SPAWNABLE_ON = create("rabbits_spawnable_on"); + public static final Tag<Block> FOXES_SPAWNABLE_ON = create("foxes_spawnable_on"); + public static final Tag<Block> WOLVES_SPAWNABLE_ON = create("wolves_spawnable_on"); + public static final Tag<Block> FROGS_SPAWNABLE_ON = create("frogs_spawnable_on"); + public static final Tag<Block> AZALEA_GROWS_ON = create("azalea_grows_on"); + public static final Tag<Block> CONVERTABLE_TO_MUD = create("convertable_to_mud"); + public static final Tag<Block> MANGROVE_LOGS_CAN_GROW_THROUGH = create("mangrove_logs_can_grow_through"); + public static final Tag<Block> MANGROVE_ROOTS_CAN_GROW_THROUGH = create("mangrove_roots_can_grow_through"); + public static final Tag<Block> DEAD_BUSH_MAY_PLACE_ON = create("dead_bush_may_place_on"); + public static final Tag<Block> SNAPS_GOAT_HORN = create("snaps_goat_horn"); + public static final Tag<Block> REPLACEABLE_BY_TREES = create("replaceable_by_trees"); + public static final Tag<Block> SNOW_LAYER_CANNOT_SURVIVE_ON = create("snow_layer_cannot_survive_on"); + public static final Tag<Block> SNOW_LAYER_CAN_SURVIVE_ON = create("snow_layer_can_survive_on"); + public static final Tag<Block> INVALID_SPAWN_INSIDE = create("invalid_spawn_inside"); + public static final Tag<Block> SNIFFER_DIGGABLE_BLOCK = create("sniffer_diggable_block"); + public static final Tag<Block> SNIFFER_EGG_HATCH_BOOST = create("sniffer_egg_hatch_boost"); + public static final Tag<Block> TRAIL_RUINS_REPLACEABLE = create("trail_ruins_replaceable"); + public static final Tag<Block> REPLACEABLE = create("replaceable"); + public static final Tag<Block> ENCHANTMENT_POWER_PROVIDER = create("enchantment_power_provider"); + public static final Tag<Block> ENCHANTMENT_POWER_TRANSMITTER = create("enchantment_power_transmitter"); + public static final Tag<Block> MAINTAINS_FARMLAND = create("maintains_farmland"); + public static final Tag<Block> BLOCKS_WIND_CHARGE_EXPLOSIONS = create("blocks_wind_charge_explosions"); + public static final Tag<Block> DOES_NOT_BLOCK_HOPPERS = create("does_not_block_hoppers"); + public static final Tag<Block> AIR = create("air"); - public static final BlockTag WOOL = new BlockTag("wool"); - public static final BlockTag PLANKS = new BlockTag("planks"); - public static final BlockTag STONE_BRICKS = new BlockTag("stone_bricks"); - public static final BlockTag WOODEN_BUTTONS = new BlockTag("wooden_buttons"); - public static final BlockTag STONE_BUTTONS = new BlockTag("stone_buttons"); - public static final BlockTag BUTTONS = new BlockTag("buttons"); - public static final BlockTag WOOL_CARPETS = new BlockTag("wool_carpets"); - public static final BlockTag WOODEN_DOORS = new BlockTag("wooden_doors"); - public static final BlockTag MOB_INTERACTABLE_DOORS = new BlockTag("mob_interactable_doors"); - public static final BlockTag WOODEN_STAIRS = new BlockTag("wooden_stairs"); - public static final BlockTag WOODEN_SLABS = new BlockTag("wooden_slabs"); - public static final BlockTag WOODEN_FENCES = new BlockTag("wooden_fences"); - public static final BlockTag PRESSURE_PLATES = new BlockTag("pressure_plates"); - public static final BlockTag WOODEN_PRESSURE_PLATES = new BlockTag("wooden_pressure_plates"); - public static final BlockTag STONE_PRESSURE_PLATES = new BlockTag("stone_pressure_plates"); - public static final BlockTag WOODEN_TRAPDOORS = new BlockTag("wooden_trapdoors"); - public static final BlockTag DOORS = new BlockTag("doors"); - public static final BlockTag SAPLINGS = new BlockTag("saplings"); - public static final BlockTag LOGS_THAT_BURN = new BlockTag("logs_that_burn"); - public static final BlockTag OVERWORLD_NATURAL_LOGS = new BlockTag("overworld_natural_logs"); - public static final BlockTag LOGS = new BlockTag("logs"); - public static final BlockTag DARK_OAK_LOGS = new BlockTag("dark_oak_logs"); - public static final BlockTag OAK_LOGS = new BlockTag("oak_logs"); - public static final BlockTag BIRCH_LOGS = new BlockTag("birch_logs"); - public static final BlockTag ACACIA_LOGS = new BlockTag("acacia_logs"); - public static final BlockTag CHERRY_LOGS = new BlockTag("cherry_logs"); - public static final BlockTag JUNGLE_LOGS = new BlockTag("jungle_logs"); - public static final BlockTag SPRUCE_LOGS = new BlockTag("spruce_logs"); - public static final BlockTag MANGROVE_LOGS = new BlockTag("mangrove_logs"); - public static final BlockTag CRIMSON_STEMS = new BlockTag("crimson_stems"); - public static final BlockTag WARPED_STEMS = new BlockTag("warped_stems"); - public static final BlockTag BAMBOO_BLOCKS = new BlockTag("bamboo_blocks"); - public static final BlockTag WART_BLOCKS = new BlockTag("wart_blocks"); - public static final BlockTag BANNERS = new BlockTag("banners"); - public static final BlockTag SAND = new BlockTag("sand"); - public static final BlockTag SMELTS_TO_GLASS = new BlockTag("smelts_to_glass"); - public static final BlockTag STAIRS = new BlockTag("stairs"); - public static final BlockTag SLABS = new BlockTag("slabs"); - public static final BlockTag WALLS = new BlockTag("walls"); - public static final BlockTag ANVIL = new BlockTag("anvil"); - public static final BlockTag RAILS = new BlockTag("rails"); - public static final BlockTag LEAVES = new BlockTag("leaves"); - public static final BlockTag TRAPDOORS = new BlockTag("trapdoors"); - public static final BlockTag SMALL_FLOWERS = new BlockTag("small_flowers"); - public static final BlockTag BEDS = new BlockTag("beds"); - public static final BlockTag FENCES = new BlockTag("fences"); - public static final BlockTag TALL_FLOWERS = new BlockTag("tall_flowers"); - public static final BlockTag FLOWERS = new BlockTag("flowers"); - public static final BlockTag PIGLIN_REPELLENTS = new BlockTag("piglin_repellents"); - public static final BlockTag GOLD_ORES = new BlockTag("gold_ores"); - public static final BlockTag IRON_ORES = new BlockTag("iron_ores"); - public static final BlockTag DIAMOND_ORES = new BlockTag("diamond_ores"); - public static final BlockTag REDSTONE_ORES = new BlockTag("redstone_ores"); - public static final BlockTag LAPIS_ORES = new BlockTag("lapis_ores"); - public static final BlockTag COAL_ORES = new BlockTag("coal_ores"); - public static final BlockTag EMERALD_ORES = new BlockTag("emerald_ores"); - public static final BlockTag COPPER_ORES = new BlockTag("copper_ores"); - public static final BlockTag CANDLES = new BlockTag("candles"); - public static final BlockTag DIRT = new BlockTag("dirt"); - public static final BlockTag TERRACOTTA = new BlockTag("terracotta"); - public static final BlockTag BADLANDS_TERRACOTTA = new BlockTag("badlands_terracotta"); - public static final BlockTag CONCRETE_POWDER = new BlockTag("concrete_powder"); - public static final BlockTag COMPLETES_FIND_TREE_TUTORIAL = new BlockTag("completes_find_tree_tutorial"); - public static final BlockTag FLOWER_POTS = new BlockTag("flower_pots"); - public static final BlockTag ENDERMAN_HOLDABLE = new BlockTag("enderman_holdable"); - public static final BlockTag ICE = new BlockTag("ice"); - public static final BlockTag VALID_SPAWN = new BlockTag("valid_spawn"); - public static final BlockTag IMPERMEABLE = new BlockTag("impermeable"); - public static final BlockTag UNDERWATER_BONEMEALS = new BlockTag("underwater_bonemeals"); - public static final BlockTag CORAL_BLOCKS = new BlockTag("coral_blocks"); - public static final BlockTag WALL_CORALS = new BlockTag("wall_corals"); - public static final BlockTag CORAL_PLANTS = new BlockTag("coral_plants"); - public static final BlockTag CORALS = new BlockTag("corals"); - public static final BlockTag BAMBOO_PLANTABLE_ON = new BlockTag("bamboo_plantable_on"); - public static final BlockTag STANDING_SIGNS = new BlockTag("standing_signs"); - public static final BlockTag WALL_SIGNS = new BlockTag("wall_signs"); - public static final BlockTag SIGNS = new BlockTag("signs"); - public static final BlockTag CEILING_HANGING_SIGNS = new BlockTag("ceiling_hanging_signs"); - public static final BlockTag WALL_HANGING_SIGNS = new BlockTag("wall_hanging_signs"); - public static final BlockTag ALL_HANGING_SIGNS = new BlockTag("all_hanging_signs"); - public static final BlockTag ALL_SIGNS = new BlockTag("all_signs"); - public static final BlockTag DRAGON_IMMUNE = new BlockTag("dragon_immune"); - public static final BlockTag DRAGON_TRANSPARENT = new BlockTag("dragon_transparent"); - public static final BlockTag WITHER_IMMUNE = new BlockTag("wither_immune"); - public static final BlockTag WITHER_SUMMON_BASE_BLOCKS = new BlockTag("wither_summon_base_blocks"); - public static final BlockTag BEEHIVES = new BlockTag("beehives"); - public static final BlockTag CROPS = new BlockTag("crops"); - public static final BlockTag BEE_GROWABLES = new BlockTag("bee_growables"); - public static final BlockTag PORTALS = new BlockTag("portals"); - public static final BlockTag FIRE = new BlockTag("fire"); - public static final BlockTag NYLIUM = new BlockTag("nylium"); - public static final BlockTag BEACON_BASE_BLOCKS = new BlockTag("beacon_base_blocks"); - public static final BlockTag SOUL_SPEED_BLOCKS = new BlockTag("soul_speed_blocks"); - public static final BlockTag WALL_POST_OVERRIDE = new BlockTag("wall_post_override"); - public static final BlockTag CLIMBABLE = new BlockTag("climbable"); - public static final BlockTag FALL_DAMAGE_RESETTING = new BlockTag("fall_damage_resetting"); - public static final BlockTag SHULKER_BOXES = new BlockTag("shulker_boxes"); - public static final BlockTag HOGLIN_REPELLENTS = new BlockTag("hoglin_repellents"); - public static final BlockTag SOUL_FIRE_BASE_BLOCKS = new BlockTag("soul_fire_base_blocks"); - public static final BlockTag STRIDER_WARM_BLOCKS = new BlockTag("strider_warm_blocks"); - public static final BlockTag CAMPFIRES = new BlockTag("campfires"); - public static final BlockTag GUARDED_BY_PIGLINS = new BlockTag("guarded_by_piglins"); - public static final BlockTag PREVENT_MOB_SPAWNING_INSIDE = new BlockTag("prevent_mob_spawning_inside"); - public static final BlockTag FENCE_GATES = new BlockTag("fence_gates"); - public static final BlockTag UNSTABLE_BOTTOM_CENTER = new BlockTag("unstable_bottom_center"); - public static final BlockTag MUSHROOM_GROW_BLOCK = new BlockTag("mushroom_grow_block"); - public static final BlockTag INFINIBURN_OVERWORLD = new BlockTag("infiniburn_overworld"); - public static final BlockTag INFINIBURN_NETHER = new BlockTag("infiniburn_nether"); - public static final BlockTag INFINIBURN_END = new BlockTag("infiniburn_end"); - public static final BlockTag BASE_STONE_OVERWORLD = new BlockTag("base_stone_overworld"); - public static final BlockTag STONE_ORE_REPLACEABLES = new BlockTag("stone_ore_replaceables"); - public static final BlockTag DEEPSLATE_ORE_REPLACEABLES = new BlockTag("deepslate_ore_replaceables"); - public static final BlockTag BASE_STONE_NETHER = new BlockTag("base_stone_nether"); - public static final BlockTag OVERWORLD_CARVER_REPLACEABLES = new BlockTag("overworld_carver_replaceables"); - public static final BlockTag NETHER_CARVER_REPLACEABLES = new BlockTag("nether_carver_replaceables"); - public static final BlockTag CANDLE_CAKES = new BlockTag("candle_cakes"); - public static final BlockTag CAULDRONS = new BlockTag("cauldrons"); - public static final BlockTag CRYSTAL_SOUND_BLOCKS = new BlockTag("crystal_sound_blocks"); - public static final BlockTag INSIDE_STEP_SOUND_BLOCKS = new BlockTag("inside_step_sound_blocks"); - public static final BlockTag COMBINATION_STEP_SOUND_BLOCKS = new BlockTag("combination_step_sound_blocks"); - public static final BlockTag CAMEL_SAND_STEP_SOUND_BLOCKS = new BlockTag("camel_sand_step_sound_blocks"); - public static final BlockTag OCCLUDES_VIBRATION_SIGNALS = new BlockTag("occludes_vibration_signals"); - public static final BlockTag DAMPENS_VIBRATIONS = new BlockTag("dampens_vibrations"); - public static final BlockTag DRIPSTONE_REPLACEABLE_BLOCKS = new BlockTag("dripstone_replaceable_blocks"); - public static final BlockTag CAVE_VINES = new BlockTag("cave_vines"); - public static final BlockTag MOSS_REPLACEABLE = new BlockTag("moss_replaceable"); - public static final BlockTag LUSH_GROUND_REPLACEABLE = new BlockTag("lush_ground_replaceable"); - public static final BlockTag AZALEA_ROOT_REPLACEABLE = new BlockTag("azalea_root_replaceable"); - public static final BlockTag SMALL_DRIPLEAF_PLACEABLE = new BlockTag("small_dripleaf_placeable"); - public static final BlockTag BIG_DRIPLEAF_PLACEABLE = new BlockTag("big_dripleaf_placeable"); - public static final BlockTag SNOW = new BlockTag("snow"); - public static final BlockTag MINEABLE_AXE = new BlockTag("mineable/axe"); - public static final BlockTag MINEABLE_HOE = new BlockTag("mineable/hoe"); - public static final BlockTag MINEABLE_PICKAXE = new BlockTag("mineable/pickaxe"); - public static final BlockTag MINEABLE_SHOVEL = new BlockTag("mineable/shovel"); - public static final BlockTag SWORD_EFFICIENT = new BlockTag("sword_efficient"); - public static final BlockTag NEEDS_DIAMOND_TOOL = new BlockTag("needs_diamond_tool"); - public static final BlockTag NEEDS_IRON_TOOL = new BlockTag("needs_iron_tool"); - public static final BlockTag NEEDS_STONE_TOOL = new BlockTag("needs_stone_tool"); - public static final BlockTag INCORRECT_FOR_NETHERITE_TOOL = new BlockTag("incorrect_for_netherite_tool"); - public static final BlockTag INCORRECT_FOR_DIAMOND_TOOL = new BlockTag("incorrect_for_diamond_tool"); - public static final BlockTag INCORRECT_FOR_IRON_TOOL = new BlockTag("incorrect_for_iron_tool"); - public static final BlockTag INCORRECT_FOR_STONE_TOOL = new BlockTag("incorrect_for_stone_tool"); - public static final BlockTag INCORRECT_FOR_GOLD_TOOL = new BlockTag("incorrect_for_gold_tool"); - public static final BlockTag INCORRECT_FOR_WOODEN_TOOL = new BlockTag("incorrect_for_wooden_tool"); - public static final BlockTag FEATURES_CANNOT_REPLACE = new BlockTag("features_cannot_replace"); - public static final BlockTag LAVA_POOL_STONE_CANNOT_REPLACE = new BlockTag("lava_pool_stone_cannot_replace"); - public static final BlockTag GEODE_INVALID_BLOCKS = new BlockTag("geode_invalid_blocks"); - public static final BlockTag FROG_PREFER_JUMP_TO = new BlockTag("frog_prefer_jump_to"); - public static final BlockTag SCULK_REPLACEABLE = new BlockTag("sculk_replaceable"); - public static final BlockTag SCULK_REPLACEABLE_WORLD_GEN = new BlockTag("sculk_replaceable_world_gen"); - public static final BlockTag ANCIENT_CITY_REPLACEABLE = new BlockTag("ancient_city_replaceable"); - public static final BlockTag VIBRATION_RESONATORS = new BlockTag("vibration_resonators"); - public static final BlockTag ANIMALS_SPAWNABLE_ON = new BlockTag("animals_spawnable_on"); - public static final BlockTag ARMADILLO_SPAWNABLE_ON = new BlockTag("armadillo_spawnable_on"); - public static final BlockTag AXOLOTLS_SPAWNABLE_ON = new BlockTag("axolotls_spawnable_on"); - public static final BlockTag GOATS_SPAWNABLE_ON = new BlockTag("goats_spawnable_on"); - public static final BlockTag MOOSHROOMS_SPAWNABLE_ON = new BlockTag("mooshrooms_spawnable_on"); - public static final BlockTag PARROTS_SPAWNABLE_ON = new BlockTag("parrots_spawnable_on"); - public static final BlockTag POLAR_BEARS_SPAWNABLE_ON_ALTERNATE = new BlockTag("polar_bears_spawnable_on_alternate"); - public static final BlockTag RABBITS_SPAWNABLE_ON = new BlockTag("rabbits_spawnable_on"); - public static final BlockTag FOXES_SPAWNABLE_ON = new BlockTag("foxes_spawnable_on"); - public static final BlockTag WOLVES_SPAWNABLE_ON = new BlockTag("wolves_spawnable_on"); - public static final BlockTag FROGS_SPAWNABLE_ON = new BlockTag("frogs_spawnable_on"); - public static final BlockTag AZALEA_GROWS_ON = new BlockTag("azalea_grows_on"); - public static final BlockTag CONVERTABLE_TO_MUD = new BlockTag("convertable_to_mud"); - public static final BlockTag MANGROVE_LOGS_CAN_GROW_THROUGH = new BlockTag("mangrove_logs_can_grow_through"); - public static final BlockTag MANGROVE_ROOTS_CAN_GROW_THROUGH = new BlockTag("mangrove_roots_can_grow_through"); - public static final BlockTag DEAD_BUSH_MAY_PLACE_ON = new BlockTag("dead_bush_may_place_on"); - public static final BlockTag SNAPS_GOAT_HORN = new BlockTag("snaps_goat_horn"); - public static final BlockTag REPLACEABLE_BY_TREES = new BlockTag("replaceable_by_trees"); - public static final BlockTag SNOW_LAYER_CANNOT_SURVIVE_ON = new BlockTag("snow_layer_cannot_survive_on"); - public static final BlockTag SNOW_LAYER_CAN_SURVIVE_ON = new BlockTag("snow_layer_can_survive_on"); - public static final BlockTag INVALID_SPAWN_INSIDE = new BlockTag("invalid_spawn_inside"); - public static final BlockTag SNIFFER_DIGGABLE_BLOCK = new BlockTag("sniffer_diggable_block"); - public static final BlockTag SNIFFER_EGG_HATCH_BOOST = new BlockTag("sniffer_egg_hatch_boost"); - public static final BlockTag TRAIL_RUINS_REPLACEABLE = new BlockTag("trail_ruins_replaceable"); - public static final BlockTag REPLACEABLE = new BlockTag("replaceable"); - public static final BlockTag ENCHANTMENT_POWER_PROVIDER = new BlockTag("enchantment_power_provider"); - public static final BlockTag ENCHANTMENT_POWER_TRANSMITTER = new BlockTag("enchantment_power_transmitter"); - public static final BlockTag MAINTAINS_FARMLAND = new BlockTag("maintains_farmland"); - public static final BlockTag BLOCKS_WIND_CHARGE_EXPLOSIONS = new BlockTag("blocks_wind_charge_explosions"); - public static final BlockTag DOES_NOT_BLOCK_HOPPERS = new BlockTag("does_not_block_hoppers"); - public static final BlockTag AIR = new BlockTag("air"); + private BlockTag() {} - private final int id; - - private BlockTag(String identifier) { - this.id = ALL_BLOCK_TAGS.size(); - register(identifier, this); - } - - @Override - public int ordinal() { - return id; - } - - private static void register(String name, BlockTag tag) { - ALL_BLOCK_TAGS.put(Key.key(name), tag); + private static Tag<Block> create(String name) { + return new Tag<>(JavaRegistries.BLOCK, MinecraftKey.key(name)); } } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/tags/EnchantmentTag.java b/core/src/main/java/org/geysermc/geyser/session/cache/tags/EnchantmentTag.java index 0af690abd..1ef875642 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/tags/EnchantmentTag.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/tags/EnchantmentTag.java @@ -25,67 +25,55 @@ package org.geysermc.geyser.session.cache.tags; -import net.kyori.adventure.key.Key; +import org.geysermc.geyser.item.enchantment.Enchantment; +import org.geysermc.geyser.session.cache.registry.JavaRegistries; import org.geysermc.geyser.util.MinecraftKey; -import org.geysermc.geyser.util.Ordered; - -import java.util.HashMap; -import java.util.Map; +/** + * Lists vanilla enchantment tags. + */ @SuppressWarnings("unused") -public final class EnchantmentTag implements Ordered { - public static final Map<Key, EnchantmentTag> ALL_ENCHANTMENT_TAGS = new HashMap<>(); +public final class EnchantmentTag { + public static final Tag<Enchantment> TOOLTIP_ORDER = create("tooltip_order"); + public static final Tag<Enchantment> EXCLUSIVE_SET_ARMOR = create("exclusive_set/armor"); + public static final Tag<Enchantment> EXCLUSIVE_SET_BOOTS = create("exclusive_set/boots"); + public static final Tag<Enchantment> EXCLUSIVE_SET_BOW = create("exclusive_set/bow"); + public static final Tag<Enchantment> EXCLUSIVE_SET_CROSSBOW = create("exclusive_set/crossbow"); + public static final Tag<Enchantment> EXCLUSIVE_SET_DAMAGE = create("exclusive_set/damage"); + public static final Tag<Enchantment> EXCLUSIVE_SET_MINING = create("exclusive_set/mining"); + public static final Tag<Enchantment> EXCLUSIVE_SET_RIPTIDE = create("exclusive_set/riptide"); + public static final Tag<Enchantment> TRADEABLE = create("tradeable"); + public static final Tag<Enchantment> DOUBLE_TRADE_PRICE = create("double_trade_price"); + public static final Tag<Enchantment> IN_ENCHANTING_TABLE = create("in_enchanting_table"); + public static final Tag<Enchantment> ON_MOB_SPAWN_EQUIPMENT = create("on_mob_spawn_equipment"); + public static final Tag<Enchantment> ON_TRADED_EQUIPMENT = create("on_traded_equipment"); + public static final Tag<Enchantment> ON_RANDOM_LOOT = create("on_random_loot"); + public static final Tag<Enchantment> CURSE = create("curse"); + public static final Tag<Enchantment> SMELTS_LOOT = create("smelts_loot"); + public static final Tag<Enchantment> PREVENTS_BEE_SPAWNS_WHEN_MINING = create("prevents_bee_spawns_when_mining"); + public static final Tag<Enchantment> PREVENTS_DECORATED_POT_SHATTERING = create("prevents_decorated_pot_shattering"); + public static final Tag<Enchantment> PREVENTS_ICE_MELTING = create("prevents_ice_melting"); + public static final Tag<Enchantment> PREVENTS_INFESTED_SPAWNS = create("prevents_infested_spawns"); + public static final Tag<Enchantment> TREASURE = create("treasure"); + public static final Tag<Enchantment> NON_TREASURE = create("non_treasure"); + public static final Tag<Enchantment> TRADES_DESERT_COMMON = create("trades/desert_common"); + public static final Tag<Enchantment> TRADES_JUNGLE_COMMON = create("trades/jungle_common"); + public static final Tag<Enchantment> TRADES_PLAINS_COMMON = create("trades/plains_common"); + public static final Tag<Enchantment> TRADES_SAVANNA_COMMON = create("trades/savanna_common"); + public static final Tag<Enchantment> TRADES_SNOW_COMMON = create("trades/snow_common"); + public static final Tag<Enchantment> TRADES_SWAMP_COMMON = create("trades/swamp_common"); + public static final Tag<Enchantment> TRADES_TAIGA_COMMON = create("trades/taiga_common"); + public static final Tag<Enchantment> TRADES_DESERT_SPECIAL = create("trades/desert_special"); + public static final Tag<Enchantment> TRADES_JUNGLE_SPECIAL = create("trades/jungle_special"); + public static final Tag<Enchantment> TRADES_PLAINS_SPECIAL = create("trades/plains_special"); + public static final Tag<Enchantment> TRADES_SAVANNA_SPECIAL = create("trades/savanna_special"); + public static final Tag<Enchantment> TRADES_SNOW_SPECIAL = create("trades/snow_special"); + public static final Tag<Enchantment> TRADES_SWAMP_SPECIAL = create("trades/swamp_special"); + public static final Tag<Enchantment> TRADES_TAIGA_SPECIAL = create("trades/taiga_special"); - public static final EnchantmentTag TOOLTIP_ORDER = new EnchantmentTag("tooltip_order"); - public static final EnchantmentTag EXCLUSIVE_SET_ARMOR = new EnchantmentTag("exclusive_set/armor"); - public static final EnchantmentTag EXCLUSIVE_SET_BOOTS = new EnchantmentTag("exclusive_set/boots"); - public static final EnchantmentTag EXCLUSIVE_SET_BOW = new EnchantmentTag("exclusive_set/bow"); - public static final EnchantmentTag EXCLUSIVE_SET_CROSSBOW = new EnchantmentTag("exclusive_set/crossbow"); - public static final EnchantmentTag EXCLUSIVE_SET_DAMAGE = new EnchantmentTag("exclusive_set/damage"); - public static final EnchantmentTag EXCLUSIVE_SET_MINING = new EnchantmentTag("exclusive_set/mining"); - public static final EnchantmentTag EXCLUSIVE_SET_RIPTIDE = new EnchantmentTag("exclusive_set/riptide"); - public static final EnchantmentTag TRADEABLE = new EnchantmentTag("tradeable"); - public static final EnchantmentTag DOUBLE_TRADE_PRICE = new EnchantmentTag("double_trade_price"); - public static final EnchantmentTag IN_ENCHANTING_TABLE = new EnchantmentTag("in_enchanting_table"); - public static final EnchantmentTag ON_MOB_SPAWN_EQUIPMENT = new EnchantmentTag("on_mob_spawn_equipment"); - public static final EnchantmentTag ON_TRADED_EQUIPMENT = new EnchantmentTag("on_traded_equipment"); - public static final EnchantmentTag ON_RANDOM_LOOT = new EnchantmentTag("on_random_loot"); - public static final EnchantmentTag CURSE = new EnchantmentTag("curse"); - public static final EnchantmentTag SMELTS_LOOT = new EnchantmentTag("smelts_loot"); - public static final EnchantmentTag PREVENTS_BEE_SPAWNS_WHEN_MINING = new EnchantmentTag("prevents_bee_spawns_when_mining"); - public static final EnchantmentTag PREVENTS_DECORATED_POT_SHATTERING = new EnchantmentTag("prevents_decorated_pot_shattering"); - public static final EnchantmentTag PREVENTS_ICE_MELTING = new EnchantmentTag("prevents_ice_melting"); - public static final EnchantmentTag PREVENTS_INFESTED_SPAWNS = new EnchantmentTag("prevents_infested_spawns"); - public static final EnchantmentTag TREASURE = new EnchantmentTag("treasure"); - public static final EnchantmentTag NON_TREASURE = new EnchantmentTag("non_treasure"); - public static final EnchantmentTag TRADES_DESERT_COMMON = new EnchantmentTag("trades/desert_common"); - public static final EnchantmentTag TRADES_JUNGLE_COMMON = new EnchantmentTag("trades/jungle_common"); - public static final EnchantmentTag TRADES_PLAINS_COMMON = new EnchantmentTag("trades/plains_common"); - public static final EnchantmentTag TRADES_SAVANNA_COMMON = new EnchantmentTag("trades/savanna_common"); - public static final EnchantmentTag TRADES_SNOW_COMMON = new EnchantmentTag("trades/snow_common"); - public static final EnchantmentTag TRADES_SWAMP_COMMON = new EnchantmentTag("trades/swamp_common"); - public static final EnchantmentTag TRADES_TAIGA_COMMON = new EnchantmentTag("trades/taiga_common"); - public static final EnchantmentTag TRADES_DESERT_SPECIAL = new EnchantmentTag("trades/desert_special"); - public static final EnchantmentTag TRADES_JUNGLE_SPECIAL = new EnchantmentTag("trades/jungle_special"); - public static final EnchantmentTag TRADES_PLAINS_SPECIAL = new EnchantmentTag("trades/plains_special"); - public static final EnchantmentTag TRADES_SAVANNA_SPECIAL = new EnchantmentTag("trades/savanna_special"); - public static final EnchantmentTag TRADES_SNOW_SPECIAL = new EnchantmentTag("trades/snow_special"); - public static final EnchantmentTag TRADES_SWAMP_SPECIAL = new EnchantmentTag("trades/swamp_special"); - public static final EnchantmentTag TRADES_TAIGA_SPECIAL = new EnchantmentTag("trades/taiga_special"); + private EnchantmentTag() {} - private final int id; - - private EnchantmentTag(String identifier) { - this.id = ALL_ENCHANTMENT_TAGS.size(); - register(identifier, this); - } - - @Override - public int ordinal() { - return id; - } - - private static void register(String name, EnchantmentTag tag) { - ALL_ENCHANTMENT_TAGS.put(MinecraftKey.key(name), tag); + private static Tag<Enchantment> create(String name) { + return new Tag<>(JavaRegistries.ENCHANTMENT, MinecraftKey.key(name)); } } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java b/core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java new file mode 100644 index 000000000..3c6e02e53 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 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.session.cache.tags; + +import java.util.List; +import java.util.Objects; +import java.util.function.ToIntFunction; + +import it.unimi.dsi.fastutil.ints.IntArrays; +import lombok.Data; +import net.kyori.adventure.key.Key; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.session.cache.TagCache; +import org.geysermc.geyser.session.cache.registry.JavaRegistryKey; + +/** + * Similar to vanilla Minecraft's HolderSets, stores either a tag or a list of IDs (this list can also be represented as a single ID in vanilla HolderSets). + * + * <p>Because HolderSets utilise tags, when loading a HolderSet, Geyser must store tags for the registry the HolderSet is for (see {@link JavaRegistryKey}).</p> + * + * <p>Use the {@link GeyserHolderSet#readHolderSet} method to easily read a HolderSet from NBT sent by a server. To turn the HolderSet into a list of network IDs, use the {@link GeyserHolderSet#resolveRaw} method. + * To turn the HolderSet into a list of objects, use the {@link GeyserHolderSet#resolve} method.</p> + */ +@Data +public final class GeyserHolderSet<T> { + + private final JavaRegistryKey<T> registry; + private final @Nullable Tag<T> tag; + private final int @Nullable [] holders; + + public GeyserHolderSet(JavaRegistryKey<T> registry, int @NonNull [] holders) { + this.registry = registry; + this.tag = null; + this.holders = holders; + } + + public GeyserHolderSet(JavaRegistryKey<T> registry, @NonNull Tag<T> tagId) { + this.registry = registry; + this.tag = tagId; + this.holders = null; + } + + /** + * Resolves the HolderSet, and automatically maps the network IDs to their respective object types. If the HolderSet is a list of IDs, this will be returned. If it is a tag, the tag will be resolved from the tag cache. + * + * @return the HolderSet turned into a list of objects. + */ + public List<T> resolve(GeyserSession session) { + return TagCache.mapRawArray(session, resolveRaw(session.getTagCache()), registry); + } + + /** + * Resolves the HolderSet. If the HolderSet is a list of IDs, this will be returned. If it is a tag, the tag will be resolved from the tag cache. + * + * @return the HolderSet turned into a list of objects. + */ + public int[] resolveRaw(TagCache tagCache) { + if (holders != null) { + return holders; + } + + return tagCache.getRaw(Objects.requireNonNull(tag, "HolderSet must have a tag if it doesn't have a list of IDs")); + } + + /** + * Reads a HolderSet from an object from NBT. + * + * @param session session, only used for logging purposes. + * @param registry the registry the HolderSet contains IDs from. + * @param holderSet the HolderSet as an object from NBT. + * @param keyIdMapping a function that maps resource location IDs in the HolderSet's registry to their network IDs. + */ + public static <T> GeyserHolderSet<T> readHolderSet(GeyserSession session, JavaRegistryKey<T> registry, @Nullable Object holderSet, ToIntFunction<Key> keyIdMapping) { + if (holderSet == null) { + return new GeyserHolderSet<>(registry, IntArrays.EMPTY_ARRAY); + } + + if (holderSet instanceof String stringTag) { + if (stringTag.startsWith("#")) { + // Tag + return new GeyserHolderSet<>(registry, new Tag<>(registry, Key.key(stringTag.substring(1)))); // Remove '#' at beginning that indicates tag + } else if (stringTag.isEmpty()) { + return new GeyserHolderSet<>(registry, IntArrays.EMPTY_ARRAY); + } + return new GeyserHolderSet<>(registry, new int[]{keyIdMapping.applyAsInt(Key.key(stringTag))}); + } else if (holderSet instanceof List<?> list) { + // Assume the list is a list of strings + return new GeyserHolderSet<>(registry, list.stream().map(o -> (String) o).map(Key::key).mapToInt(keyIdMapping).toArray()); + } + session.getGeyser().getLogger().warning("Failed parsing HolderSet for registry + " + registry + "! Expected either a tag, a string ID or a list of string IDs, found " + holderSet); + return new GeyserHolderSet<>(registry, IntArrays.EMPTY_ARRAY); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/tags/ItemTag.java b/core/src/main/java/org/geysermc/geyser/session/cache/tags/ItemTag.java index a2e861dd6..4f42f146a 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/tags/ItemTag.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/tags/ItemTag.java @@ -25,178 +25,166 @@ package org.geysermc.geyser.session.cache.tags; -import net.kyori.adventure.key.Key; +import org.geysermc.geyser.item.type.Item; +import org.geysermc.geyser.session.cache.registry.JavaRegistries; import org.geysermc.geyser.util.MinecraftKey; -import org.geysermc.geyser.util.Ordered; - -import java.util.HashMap; -import java.util.Map; +/** + * Lists vanilla item tags. + */ @SuppressWarnings("unused") -public final class ItemTag implements Ordered { - public static final Map<Key, ItemTag> ALL_ITEM_TAGS = new HashMap<>(); +public final class ItemTag { + public static final Tag<Item> WOOL = create("wool"); + public static final Tag<Item> PLANKS = create("planks"); + public static final Tag<Item> STONE_BRICKS = create("stone_bricks"); + public static final Tag<Item> WOODEN_BUTTONS = create("wooden_buttons"); + public static final Tag<Item> STONE_BUTTONS = create("stone_buttons"); + public static final Tag<Item> BUTTONS = create("buttons"); + public static final Tag<Item> WOOL_CARPETS = create("wool_carpets"); + public static final Tag<Item> WOODEN_DOORS = create("wooden_doors"); + public static final Tag<Item> WOODEN_STAIRS = create("wooden_stairs"); + public static final Tag<Item> WOODEN_SLABS = create("wooden_slabs"); + public static final Tag<Item> WOODEN_FENCES = create("wooden_fences"); + public static final Tag<Item> FENCE_GATES = create("fence_gates"); + public static final Tag<Item> WOODEN_PRESSURE_PLATES = create("wooden_pressure_plates"); + public static final Tag<Item> WOODEN_TRAPDOORS = create("wooden_trapdoors"); + public static final Tag<Item> DOORS = create("doors"); + public static final Tag<Item> SAPLINGS = create("saplings"); + public static final Tag<Item> LOGS_THAT_BURN = create("logs_that_burn"); + public static final Tag<Item> LOGS = create("logs"); + public static final Tag<Item> DARK_OAK_LOGS = create("dark_oak_logs"); + public static final Tag<Item> OAK_LOGS = create("oak_logs"); + public static final Tag<Item> BIRCH_LOGS = create("birch_logs"); + public static final Tag<Item> ACACIA_LOGS = create("acacia_logs"); + public static final Tag<Item> CHERRY_LOGS = create("cherry_logs"); + public static final Tag<Item> JUNGLE_LOGS = create("jungle_logs"); + public static final Tag<Item> SPRUCE_LOGS = create("spruce_logs"); + public static final Tag<Item> MANGROVE_LOGS = create("mangrove_logs"); + public static final Tag<Item> CRIMSON_STEMS = create("crimson_stems"); + public static final Tag<Item> WARPED_STEMS = create("warped_stems"); + public static final Tag<Item> BAMBOO_BLOCKS = create("bamboo_blocks"); + public static final Tag<Item> WART_BLOCKS = create("wart_blocks"); + public static final Tag<Item> BANNERS = create("banners"); + public static final Tag<Item> SAND = create("sand"); + public static final Tag<Item> SMELTS_TO_GLASS = create("smelts_to_glass"); + public static final Tag<Item> STAIRS = create("stairs"); + public static final Tag<Item> SLABS = create("slabs"); + public static final Tag<Item> WALLS = create("walls"); + public static final Tag<Item> ANVIL = create("anvil"); + public static final Tag<Item> RAILS = create("rails"); + public static final Tag<Item> LEAVES = create("leaves"); + public static final Tag<Item> TRAPDOORS = create("trapdoors"); + public static final Tag<Item> SMALL_FLOWERS = create("small_flowers"); + public static final Tag<Item> BEDS = create("beds"); + public static final Tag<Item> FENCES = create("fences"); + public static final Tag<Item> TALL_FLOWERS = create("tall_flowers"); + public static final Tag<Item> FLOWERS = create("flowers"); + public static final Tag<Item> PIGLIN_REPELLENTS = create("piglin_repellents"); + public static final Tag<Item> PIGLIN_LOVED = create("piglin_loved"); + public static final Tag<Item> IGNORED_BY_PIGLIN_BABIES = create("ignored_by_piglin_babies"); + public static final Tag<Item> MEAT = create("meat"); + public static final Tag<Item> SNIFFER_FOOD = create("sniffer_food"); + public static final Tag<Item> PIGLIN_FOOD = create("piglin_food"); + public static final Tag<Item> FOX_FOOD = create("fox_food"); + public static final Tag<Item> COW_FOOD = create("cow_food"); + public static final Tag<Item> GOAT_FOOD = create("goat_food"); + public static final Tag<Item> SHEEP_FOOD = create("sheep_food"); + public static final Tag<Item> WOLF_FOOD = create("wolf_food"); + public static final Tag<Item> CAT_FOOD = create("cat_food"); + public static final Tag<Item> HORSE_FOOD = create("horse_food"); + public static final Tag<Item> HORSE_TEMPT_ITEMS = create("horse_tempt_items"); + public static final Tag<Item> CAMEL_FOOD = create("camel_food"); + public static final Tag<Item> ARMADILLO_FOOD = create("armadillo_food"); + public static final Tag<Item> BEE_FOOD = create("bee_food"); + public static final Tag<Item> CHICKEN_FOOD = create("chicken_food"); + public static final Tag<Item> FROG_FOOD = create("frog_food"); + public static final Tag<Item> HOGLIN_FOOD = create("hoglin_food"); + public static final Tag<Item> LLAMA_FOOD = create("llama_food"); + public static final Tag<Item> LLAMA_TEMPT_ITEMS = create("llama_tempt_items"); + public static final Tag<Item> OCELOT_FOOD = create("ocelot_food"); + public static final Tag<Item> PANDA_FOOD = create("panda_food"); + public static final Tag<Item> PIG_FOOD = create("pig_food"); + public static final Tag<Item> RABBIT_FOOD = create("rabbit_food"); + public static final Tag<Item> STRIDER_FOOD = create("strider_food"); + public static final Tag<Item> STRIDER_TEMPT_ITEMS = create("strider_tempt_items"); + public static final Tag<Item> TURTLE_FOOD = create("turtle_food"); + public static final Tag<Item> PARROT_FOOD = create("parrot_food"); + public static final Tag<Item> PARROT_POISONOUS_FOOD = create("parrot_poisonous_food"); + public static final Tag<Item> AXOLOTL_FOOD = create("axolotl_food"); + public static final Tag<Item> GOLD_ORES = create("gold_ores"); + public static final Tag<Item> IRON_ORES = create("iron_ores"); + public static final Tag<Item> DIAMOND_ORES = create("diamond_ores"); + public static final Tag<Item> REDSTONE_ORES = create("redstone_ores"); + public static final Tag<Item> LAPIS_ORES = create("lapis_ores"); + public static final Tag<Item> COAL_ORES = create("coal_ores"); + public static final Tag<Item> EMERALD_ORES = create("emerald_ores"); + public static final Tag<Item> COPPER_ORES = create("copper_ores"); + public static final Tag<Item> NON_FLAMMABLE_WOOD = create("non_flammable_wood"); + public static final Tag<Item> SOUL_FIRE_BASE_BLOCKS = create("soul_fire_base_blocks"); + public static final Tag<Item> CANDLES = create("candles"); + public static final Tag<Item> DIRT = create("dirt"); + public static final Tag<Item> TERRACOTTA = create("terracotta"); + public static final Tag<Item> COMPLETES_FIND_TREE_TUTORIAL = create("completes_find_tree_tutorial"); + public static final Tag<Item> BOATS = create("boats"); + public static final Tag<Item> CHEST_BOATS = create("chest_boats"); + public static final Tag<Item> FISHES = create("fishes"); + public static final Tag<Item> SIGNS = create("signs"); + public static final Tag<Item> CREEPER_DROP_MUSIC_DISCS = create("creeper_drop_music_discs"); + public static final Tag<Item> COALS = create("coals"); + public static final Tag<Item> ARROWS = create("arrows"); + public static final Tag<Item> LECTERN_BOOKS = create("lectern_books"); + public static final Tag<Item> BOOKSHELF_BOOKS = create("bookshelf_books"); + public static final Tag<Item> BEACON_PAYMENT_ITEMS = create("beacon_payment_items"); + public static final Tag<Item> STONE_TOOL_MATERIALS = create("stone_tool_materials"); + public static final Tag<Item> STONE_CRAFTING_MATERIALS = create("stone_crafting_materials"); + public static final Tag<Item> FREEZE_IMMUNE_WEARABLES = create("freeze_immune_wearables"); + public static final Tag<Item> DAMPENS_VIBRATIONS = create("dampens_vibrations"); + public static final Tag<Item> CLUSTER_MAX_HARVESTABLES = create("cluster_max_harvestables"); + public static final Tag<Item> COMPASSES = create("compasses"); + public static final Tag<Item> HANGING_SIGNS = create("hanging_signs"); + public static final Tag<Item> CREEPER_IGNITERS = create("creeper_igniters"); + public static final Tag<Item> NOTEBLOCK_TOP_INSTRUMENTS = create("noteblock_top_instruments"); + public static final Tag<Item> FOOT_ARMOR = create("foot_armor"); + public static final Tag<Item> LEG_ARMOR = create("leg_armor"); + public static final Tag<Item> CHEST_ARMOR = create("chest_armor"); + public static final Tag<Item> HEAD_ARMOR = create("head_armor"); + public static final Tag<Item> SKULLS = create("skulls"); + public static final Tag<Item> TRIMMABLE_ARMOR = create("trimmable_armor"); + public static final Tag<Item> TRIM_MATERIALS = create("trim_materials"); + public static final Tag<Item> TRIM_TEMPLATES = create("trim_templates"); + public static final Tag<Item> DECORATED_POT_SHERDS = create("decorated_pot_sherds"); + public static final Tag<Item> DECORATED_POT_INGREDIENTS = create("decorated_pot_ingredients"); + public static final Tag<Item> SWORDS = create("swords"); + public static final Tag<Item> AXES = create("axes"); + public static final Tag<Item> HOES = create("hoes"); + public static final Tag<Item> PICKAXES = create("pickaxes"); + public static final Tag<Item> SHOVELS = create("shovels"); + public static final Tag<Item> BREAKS_DECORATED_POTS = create("breaks_decorated_pots"); + public static final Tag<Item> VILLAGER_PLANTABLE_SEEDS = create("villager_plantable_seeds"); + public static final Tag<Item> DYEABLE = create("dyeable"); + public static final Tag<Item> ENCHANTABLE_FOOT_ARMOR = create("enchantable/foot_armor"); + public static final Tag<Item> ENCHANTABLE_LEG_ARMOR = create("enchantable/leg_armor"); + public static final Tag<Item> ENCHANTABLE_CHEST_ARMOR = create("enchantable/chest_armor"); + public static final Tag<Item> ENCHANTABLE_HEAD_ARMOR = create("enchantable/head_armor"); + public static final Tag<Item> ENCHANTABLE_ARMOR = create("enchantable/armor"); + public static final Tag<Item> ENCHANTABLE_SWORD = create("enchantable/sword"); + public static final Tag<Item> ENCHANTABLE_FIRE_ASPECT = create("enchantable/fire_aspect"); + public static final Tag<Item> ENCHANTABLE_SHARP_WEAPON = create("enchantable/sharp_weapon"); + public static final Tag<Item> ENCHANTABLE_WEAPON = create("enchantable/weapon"); + public static final Tag<Item> ENCHANTABLE_MINING = create("enchantable/mining"); + public static final Tag<Item> ENCHANTABLE_MINING_LOOT = create("enchantable/mining_loot"); + public static final Tag<Item> ENCHANTABLE_FISHING = create("enchantable/fishing"); + public static final Tag<Item> ENCHANTABLE_TRIDENT = create("enchantable/trident"); + public static final Tag<Item> ENCHANTABLE_DURABILITY = create("enchantable/durability"); + public static final Tag<Item> ENCHANTABLE_BOW = create("enchantable/bow"); + public static final Tag<Item> ENCHANTABLE_EQUIPPABLE = create("enchantable/equippable"); + public static final Tag<Item> ENCHANTABLE_CROSSBOW = create("enchantable/crossbow"); + public static final Tag<Item> ENCHANTABLE_VANISHING = create("enchantable/vanishing"); + public static final Tag<Item> ENCHANTABLE_MACE = create("enchantable/mace"); - public static final ItemTag WOOL = new ItemTag("wool"); - public static final ItemTag PLANKS = new ItemTag("planks"); - public static final ItemTag STONE_BRICKS = new ItemTag("stone_bricks"); - public static final ItemTag WOODEN_BUTTONS = new ItemTag("wooden_buttons"); - public static final ItemTag STONE_BUTTONS = new ItemTag("stone_buttons"); - public static final ItemTag BUTTONS = new ItemTag("buttons"); - public static final ItemTag WOOL_CARPETS = new ItemTag("wool_carpets"); - public static final ItemTag WOODEN_DOORS = new ItemTag("wooden_doors"); - public static final ItemTag WOODEN_STAIRS = new ItemTag("wooden_stairs"); - public static final ItemTag WOODEN_SLABS = new ItemTag("wooden_slabs"); - public static final ItemTag WOODEN_FENCES = new ItemTag("wooden_fences"); - public static final ItemTag FENCE_GATES = new ItemTag("fence_gates"); - public static final ItemTag WOODEN_PRESSURE_PLATES = new ItemTag("wooden_pressure_plates"); - public static final ItemTag WOODEN_TRAPDOORS = new ItemTag("wooden_trapdoors"); - public static final ItemTag DOORS = new ItemTag("doors"); - public static final ItemTag SAPLINGS = new ItemTag("saplings"); - public static final ItemTag LOGS_THAT_BURN = new ItemTag("logs_that_burn"); - public static final ItemTag LOGS = new ItemTag("logs"); - public static final ItemTag DARK_OAK_LOGS = new ItemTag("dark_oak_logs"); - public static final ItemTag OAK_LOGS = new ItemTag("oak_logs"); - public static final ItemTag BIRCH_LOGS = new ItemTag("birch_logs"); - public static final ItemTag ACACIA_LOGS = new ItemTag("acacia_logs"); - public static final ItemTag CHERRY_LOGS = new ItemTag("cherry_logs"); - public static final ItemTag JUNGLE_LOGS = new ItemTag("jungle_logs"); - public static final ItemTag SPRUCE_LOGS = new ItemTag("spruce_logs"); - public static final ItemTag MANGROVE_LOGS = new ItemTag("mangrove_logs"); - public static final ItemTag CRIMSON_STEMS = new ItemTag("crimson_stems"); - public static final ItemTag WARPED_STEMS = new ItemTag("warped_stems"); - public static final ItemTag BAMBOO_BLOCKS = new ItemTag("bamboo_blocks"); - public static final ItemTag WART_BLOCKS = new ItemTag("wart_blocks"); - public static final ItemTag BANNERS = new ItemTag("banners"); - public static final ItemTag SAND = new ItemTag("sand"); - public static final ItemTag SMELTS_TO_GLASS = new ItemTag("smelts_to_glass"); - public static final ItemTag STAIRS = new ItemTag("stairs"); - public static final ItemTag SLABS = new ItemTag("slabs"); - public static final ItemTag WALLS = new ItemTag("walls"); - public static final ItemTag ANVIL = new ItemTag("anvil"); - public static final ItemTag RAILS = new ItemTag("rails"); - public static final ItemTag LEAVES = new ItemTag("leaves"); - public static final ItemTag TRAPDOORS = new ItemTag("trapdoors"); - public static final ItemTag SMALL_FLOWERS = new ItemTag("small_flowers"); - public static final ItemTag BEDS = new ItemTag("beds"); - public static final ItemTag FENCES = new ItemTag("fences"); - public static final ItemTag TALL_FLOWERS = new ItemTag("tall_flowers"); - public static final ItemTag FLOWERS = new ItemTag("flowers"); - public static final ItemTag PIGLIN_REPELLENTS = new ItemTag("piglin_repellents"); - public static final ItemTag PIGLIN_LOVED = new ItemTag("piglin_loved"); - public static final ItemTag IGNORED_BY_PIGLIN_BABIES = new ItemTag("ignored_by_piglin_babies"); - public static final ItemTag MEAT = new ItemTag("meat"); - public static final ItemTag SNIFFER_FOOD = new ItemTag("sniffer_food"); - public static final ItemTag PIGLIN_FOOD = new ItemTag("piglin_food"); - public static final ItemTag FOX_FOOD = new ItemTag("fox_food"); - public static final ItemTag COW_FOOD = new ItemTag("cow_food"); - public static final ItemTag GOAT_FOOD = new ItemTag("goat_food"); - public static final ItemTag SHEEP_FOOD = new ItemTag("sheep_food"); - public static final ItemTag WOLF_FOOD = new ItemTag("wolf_food"); - public static final ItemTag CAT_FOOD = new ItemTag("cat_food"); - public static final ItemTag HORSE_FOOD = new ItemTag("horse_food"); - public static final ItemTag HORSE_TEMPT_ITEMS = new ItemTag("horse_tempt_items"); - public static final ItemTag CAMEL_FOOD = new ItemTag("camel_food"); - public static final ItemTag ARMADILLO_FOOD = new ItemTag("armadillo_food"); - public static final ItemTag BEE_FOOD = new ItemTag("bee_food"); - public static final ItemTag CHICKEN_FOOD = new ItemTag("chicken_food"); - public static final ItemTag FROG_FOOD = new ItemTag("frog_food"); - public static final ItemTag HOGLIN_FOOD = new ItemTag("hoglin_food"); - public static final ItemTag LLAMA_FOOD = new ItemTag("llama_food"); - public static final ItemTag LLAMA_TEMPT_ITEMS = new ItemTag("llama_tempt_items"); - public static final ItemTag OCELOT_FOOD = new ItemTag("ocelot_food"); - public static final ItemTag PANDA_FOOD = new ItemTag("panda_food"); - public static final ItemTag PIG_FOOD = new ItemTag("pig_food"); - public static final ItemTag RABBIT_FOOD = new ItemTag("rabbit_food"); - public static final ItemTag STRIDER_FOOD = new ItemTag("strider_food"); - public static final ItemTag STRIDER_TEMPT_ITEMS = new ItemTag("strider_tempt_items"); - public static final ItemTag TURTLE_FOOD = new ItemTag("turtle_food"); - public static final ItemTag PARROT_FOOD = new ItemTag("parrot_food"); - public static final ItemTag PARROT_POISONOUS_FOOD = new ItemTag("parrot_poisonous_food"); - public static final ItemTag AXOLOTL_FOOD = new ItemTag("axolotl_food"); - public static final ItemTag GOLD_ORES = new ItemTag("gold_ores"); - public static final ItemTag IRON_ORES = new ItemTag("iron_ores"); - public static final ItemTag DIAMOND_ORES = new ItemTag("diamond_ores"); - public static final ItemTag REDSTONE_ORES = new ItemTag("redstone_ores"); - public static final ItemTag LAPIS_ORES = new ItemTag("lapis_ores"); - public static final ItemTag COAL_ORES = new ItemTag("coal_ores"); - public static final ItemTag EMERALD_ORES = new ItemTag("emerald_ores"); - public static final ItemTag COPPER_ORES = new ItemTag("copper_ores"); - public static final ItemTag NON_FLAMMABLE_WOOD = new ItemTag("non_flammable_wood"); - public static final ItemTag SOUL_FIRE_BASE_BLOCKS = new ItemTag("soul_fire_base_blocks"); - public static final ItemTag CANDLES = new ItemTag("candles"); - public static final ItemTag DIRT = new ItemTag("dirt"); - public static final ItemTag TERRACOTTA = new ItemTag("terracotta"); - public static final ItemTag COMPLETES_FIND_TREE_TUTORIAL = new ItemTag("completes_find_tree_tutorial"); - public static final ItemTag BOATS = new ItemTag("boats"); - public static final ItemTag CHEST_BOATS = new ItemTag("chest_boats"); - public static final ItemTag FISHES = new ItemTag("fishes"); - public static final ItemTag SIGNS = new ItemTag("signs"); - public static final ItemTag CREEPER_DROP_MUSIC_DISCS = new ItemTag("creeper_drop_music_discs"); - public static final ItemTag COALS = new ItemTag("coals"); - public static final ItemTag ARROWS = new ItemTag("arrows"); - public static final ItemTag LECTERN_BOOKS = new ItemTag("lectern_books"); - public static final ItemTag BOOKSHELF_BOOKS = new ItemTag("bookshelf_books"); - public static final ItemTag BEACON_PAYMENT_ITEMS = new ItemTag("beacon_payment_items"); - public static final ItemTag STONE_TOOL_MATERIALS = new ItemTag("stone_tool_materials"); - public static final ItemTag STONE_CRAFTING_MATERIALS = new ItemTag("stone_crafting_materials"); - public static final ItemTag FREEZE_IMMUNE_WEARABLES = new ItemTag("freeze_immune_wearables"); - public static final ItemTag DAMPENS_VIBRATIONS = new ItemTag("dampens_vibrations"); - public static final ItemTag CLUSTER_MAX_HARVESTABLES = new ItemTag("cluster_max_harvestables"); - public static final ItemTag COMPASSES = new ItemTag("compasses"); - public static final ItemTag HANGING_SIGNS = new ItemTag("hanging_signs"); - public static final ItemTag CREEPER_IGNITERS = new ItemTag("creeper_igniters"); - public static final ItemTag NOTEBLOCK_TOP_INSTRUMENTS = new ItemTag("noteblock_top_instruments"); - public static final ItemTag FOOT_ARMOR = new ItemTag("foot_armor"); - public static final ItemTag LEG_ARMOR = new ItemTag("leg_armor"); - public static final ItemTag CHEST_ARMOR = new ItemTag("chest_armor"); - public static final ItemTag HEAD_ARMOR = new ItemTag("head_armor"); - public static final ItemTag SKULLS = new ItemTag("skulls"); - public static final ItemTag TRIMMABLE_ARMOR = new ItemTag("trimmable_armor"); - public static final ItemTag TRIM_MATERIALS = new ItemTag("trim_materials"); - public static final ItemTag TRIM_TEMPLATES = new ItemTag("trim_templates"); - public static final ItemTag DECORATED_POT_SHERDS = new ItemTag("decorated_pot_sherds"); - public static final ItemTag DECORATED_POT_INGREDIENTS = new ItemTag("decorated_pot_ingredients"); - public static final ItemTag SWORDS = new ItemTag("swords"); - public static final ItemTag AXES = new ItemTag("axes"); - public static final ItemTag HOES = new ItemTag("hoes"); - public static final ItemTag PICKAXES = new ItemTag("pickaxes"); - public static final ItemTag SHOVELS = new ItemTag("shovels"); - public static final ItemTag BREAKS_DECORATED_POTS = new ItemTag("breaks_decorated_pots"); - public static final ItemTag VILLAGER_PLANTABLE_SEEDS = new ItemTag("villager_plantable_seeds"); - public static final ItemTag DYEABLE = new ItemTag("dyeable"); - public static final ItemTag ENCHANTABLE_FOOT_ARMOR = new ItemTag("enchantable/foot_armor"); - public static final ItemTag ENCHANTABLE_LEG_ARMOR = new ItemTag("enchantable/leg_armor"); - public static final ItemTag ENCHANTABLE_CHEST_ARMOR = new ItemTag("enchantable/chest_armor"); - public static final ItemTag ENCHANTABLE_HEAD_ARMOR = new ItemTag("enchantable/head_armor"); - public static final ItemTag ENCHANTABLE_ARMOR = new ItemTag("enchantable/armor"); - public static final ItemTag ENCHANTABLE_SWORD = new ItemTag("enchantable/sword"); - public static final ItemTag ENCHANTABLE_FIRE_ASPECT = new ItemTag("enchantable/fire_aspect"); - public static final ItemTag ENCHANTABLE_SHARP_WEAPON = new ItemTag("enchantable/sharp_weapon"); - public static final ItemTag ENCHANTABLE_WEAPON = new ItemTag("enchantable/weapon"); - public static final ItemTag ENCHANTABLE_MINING = new ItemTag("enchantable/mining"); - public static final ItemTag ENCHANTABLE_MINING_LOOT = new ItemTag("enchantable/mining_loot"); - public static final ItemTag ENCHANTABLE_FISHING = new ItemTag("enchantable/fishing"); - public static final ItemTag ENCHANTABLE_TRIDENT = new ItemTag("enchantable/trident"); - public static final ItemTag ENCHANTABLE_DURABILITY = new ItemTag("enchantable/durability"); - public static final ItemTag ENCHANTABLE_BOW = new ItemTag("enchantable/bow"); - public static final ItemTag ENCHANTABLE_EQUIPPABLE = new ItemTag("enchantable/equippable"); - public static final ItemTag ENCHANTABLE_CROSSBOW = new ItemTag("enchantable/crossbow"); - public static final ItemTag ENCHANTABLE_VANISHING = new ItemTag("enchantable/vanishing"); - public static final ItemTag ENCHANTABLE_MACE = new ItemTag("enchantable/mace"); + private ItemTag() {} - private final int id; - - private ItemTag(String identifier) { - this.id = ALL_ITEM_TAGS.size(); - register(identifier, this); - } - - @Override - public int ordinal() { - return id; - } - - private static void register(String name, ItemTag tag) { - ALL_ITEM_TAGS.put(MinecraftKey.key(name), tag); + private static Tag<Item> create(String name) { + return new Tag<>(JavaRegistries.ITEM, MinecraftKey.key(name)); } } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/tags/Tag.java b/core/src/main/java/org/geysermc/geyser/session/cache/tags/Tag.java new file mode 100644 index 000000000..276e30b9f --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/session/cache/tags/Tag.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 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.session.cache.tags; + +import net.kyori.adventure.key.Key; +import org.geysermc.geyser.session.cache.registry.JavaRegistryKey; + +/** + * A tag in any of the registries that tags are loaded for by Geyser. + */ +public record Tag<T>(JavaRegistryKey<T> registry, Key tag) { +} From e00ef21af454722ddf0e13aecf4dfd37ccdb50e9 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Tue, 22 Oct 2024 23:22:47 -0400 Subject: [PATCH 012/165] Work on recipes --- .../geyser/inventory/recipe/GeyserRecipe.java | 2 +- .../inventory/recipe/GeyserShapedRecipe.java | 7 +- .../recipe/GeyserShapelessRecipe.java | 9 +- .../geysermc/geyser/registry/Registries.java | 21 +- .../registry/loader/RecipeRegistryLoader.java | 76 +++-- .../geyser/session/GeyserSession.java | 7 +- .../java/JavaRecipeBookAddTranslator.java | 273 +++++++++++++++--- .../java/JavaRecipeBookRemoveTranslator.java | 65 +++++ .../JavaContainerSetSlotTranslator.java | 3 + 9 files changed, 365 insertions(+), 98 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookRemoveTranslator.java diff --git a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java index 8b7fa9522..3037b725e 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java @@ -29,7 +29,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; /** - * A more compact version of {@link org.geysermc.mcprotocollib.protocol.data.game.recipe.Recipe}. + * A more compact version of {link org.geysermc.mcprotocollib.protocol.data.game.recipe.Recipe}. */ public interface GeyserRecipe { /** 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 ac9fa3ab4..413041ba7 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,13 +28,12 @@ package org.geysermc.geyser.inventory.recipe; import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; import org.geysermc.mcprotocollib.protocol.data.game.recipe.Ingredient; -import org.geysermc.mcprotocollib.protocol.data.game.recipe.data.ShapedRecipeData; 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()); - } +// public GeyserShapedRecipe(ShapedRecipeData data) { +// this(data.getWidth(), data.getHeight(), data.getIngredients(), data.getResult()); +// } @Override public boolean isShaped() { 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 388831d4c..6b9e36956 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 @@ -25,16 +25,15 @@ package org.geysermc.geyser.inventory.recipe; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; import org.geysermc.mcprotocollib.protocol.data.game.recipe.Ingredient; -import org.geysermc.mcprotocollib.protocol.data.game.recipe.data.ShapelessRecipeData; -import org.checkerframework.checker.nullness.qual.Nullable; public record GeyserShapelessRecipe(Ingredient[] ingredients, @Nullable ItemStack result) implements GeyserRecipe { - public GeyserShapelessRecipe(ShapelessRecipeData data) { - this(data.getIngredients(), data.getResult()); - } +// public GeyserShapelessRecipe(ShapelessRecipeData data) { +// this(data.getIngredients(), data.getResult()); +// } @Override public boolean isShaped() { diff --git a/core/src/main/java/org/geysermc/geyser/registry/Registries.java b/core/src/main/java/org/geysermc/geyser/registry/Registries.java index 30d3c0763..3f9ad6815 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/Registries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/Registries.java @@ -37,10 +37,17 @@ import org.geysermc.geyser.api.pack.ResourcePack; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.inventory.recipe.GeyserRecipe; import org.geysermc.geyser.item.type.Item; -import org.geysermc.geyser.registry.loader.*; +import org.geysermc.geyser.registry.loader.BiomeIdentifierRegistryLoader; +import org.geysermc.geyser.registry.loader.BlockEntityRegistryLoader; +import org.geysermc.geyser.registry.loader.ParticleTypesRegistryLoader; +import org.geysermc.geyser.registry.loader.PotionMixRegistryLoader; +import org.geysermc.geyser.registry.loader.ProviderRegistryLoader; +import org.geysermc.geyser.registry.loader.RegistryLoaders; +import org.geysermc.geyser.registry.loader.SoundEventsRegistryLoader; +import org.geysermc.geyser.registry.loader.SoundRegistryLoader; +import org.geysermc.geyser.registry.loader.SoundTranslatorRegistryLoader; import org.geysermc.geyser.registry.populator.ItemRegistryPopulator; import org.geysermc.geyser.registry.populator.PacketRegistryPopulator; -import org.geysermc.geyser.registry.loader.RecipeRegistryLoader; import org.geysermc.geyser.registry.provider.ProviderSupplier; import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.registry.type.ParticleMapping; @@ -54,9 +61,13 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.type.EntityType; import org.geysermc.mcprotocollib.protocol.data.game.level.block.BlockEntityType; import org.geysermc.mcprotocollib.protocol.data.game.level.event.LevelEvent; import org.geysermc.mcprotocollib.protocol.data.game.level.particle.ParticleType; -import org.geysermc.mcprotocollib.protocol.data.game.recipe.RecipeType; -import java.util.*; +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.HashSet; +import java.util.IdentityHashMap; +import java.util.Map; +import java.util.Set; /** * Holds all the common registries in Geyser. @@ -140,7 +151,7 @@ public final class Registries { /** * A versioned registry holding all the recipes, with the net ID being the key, and {@link GeyserRecipe} as the value. */ - public static final SimpleMappedRegistry<RecipeType, List<GeyserRecipe>> RECIPES = SimpleMappedRegistry.create("mappings/recipes.nbt", RecipeRegistryLoader::new); + //public static final SimpleMappedRegistry<RecipeType, List<GeyserRecipe>> RECIPES = SimpleMappedRegistry.create("mappings/recipes.nbt", RecipeRegistryLoader::new); /** * A mapped registry holding {@link ResourcePack}'s with the pack uuid as keys. diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/RecipeRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/RecipeRegistryLoader.java index 1af6a8661..f061ed070 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/RecipeRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/RecipeRegistryLoader.java @@ -27,29 +27,19 @@ package org.geysermc.geyser.registry.loader; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; -import it.unimi.dsi.fastutil.Pair; -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import org.cloudburstmc.nbt.NBTInputStream; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtType; -import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.inventory.recipe.GeyserRecipe; import org.geysermc.geyser.inventory.recipe.GeyserShapedRecipe; import org.geysermc.geyser.inventory.recipe.GeyserShapelessRecipe; -import org.geysermc.geyser.text.GeyserLocale; -import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodec; import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodecHelper; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.recipe.Ingredient; -import org.geysermc.mcprotocollib.protocol.data.game.recipe.RecipeType; -import java.io.DataInputStream; -import java.io.InputStream; import java.util.ArrayList; import java.util.Base64; -import java.util.Collections; import java.util.List; import java.util.Map; @@ -57,41 +47,41 @@ import java.util.Map; * Populates the recipe registry with some recipes that Java does not send, to ensure they show up as intended * in the recipe book. */ -public final class RecipeRegistryLoader implements RegistryLoader<String, Map<RecipeType, List<GeyserRecipe>>> { +public abstract class RecipeRegistryLoader implements RegistryLoader<String, Map<Object, List<GeyserRecipe>>> { - @Override - public Map<RecipeType, List<GeyserRecipe>> load(String input) { - if (true) { - return Collections.emptyMap(); - } - Map<RecipeType, List<GeyserRecipe>> deserializedRecipes = new Object2ObjectOpenHashMap<>(); +// @Override +// public Map<RecipeType, List<GeyserRecipe>> load(String input) { +// if (true) { +// return Collections.emptyMap(); +// } +// Map<RecipeType, List<GeyserRecipe>> deserializedRecipes = new Object2ObjectOpenHashMap<>(); +// +// List<NbtMap> recipes; +// try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResourceOrThrow("mappings/recipes.nbt")) { +// try (NBTInputStream nbtStream = new NBTInputStream(new DataInputStream(stream))) { +// recipes = ((NbtMap) nbtStream.readTag()).getList("recipes", NbtType.COMPOUND); +// } +// } catch (Exception e) { +// throw new AssertionError(GeyserLocale.getLocaleStringLog("geyser.toolbox.fail.runtime_java"), e); +// } +// +// MinecraftCodecHelper helper = MinecraftCodec.CODEC.getHelperFactory().get(); +// for (NbtMap recipeCollection : recipes) { +// var pair = getRecipes(recipeCollection, helper); +// deserializedRecipes.put(pair.key(), pair.value()); +// } +// return deserializedRecipes; +// } - List<NbtMap> recipes; - try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResourceOrThrow("mappings/recipes.nbt")) { - try (NBTInputStream nbtStream = new NBTInputStream(new DataInputStream(stream))) { - recipes = ((NbtMap) nbtStream.readTag()).getList("recipes", NbtType.COMPOUND); - } - } catch (Exception e) { - throw new AssertionError(GeyserLocale.getLocaleStringLog("geyser.toolbox.fail.runtime_java"), e); - } - - MinecraftCodecHelper helper = MinecraftCodec.CODEC.getHelperFactory().get(); - for (NbtMap recipeCollection : recipes) { - var pair = getRecipes(recipeCollection, helper); - deserializedRecipes.put(pair.key(), pair.value()); - } - return deserializedRecipes; - } - - private static Pair<RecipeType, List<GeyserRecipe>> getRecipes(NbtMap recipes, MinecraftCodecHelper helper) { - List<NbtMap> typedRecipes = recipes.getList("recipes", NbtType.COMPOUND); - RecipeType recipeType = RecipeType.from(recipes.getInt("recipe_type", -1)); - if (recipeType == RecipeType.CRAFTING_SPECIAL_TIPPEDARROW) { - return Pair.of(recipeType, getShapedRecipes(typedRecipes, helper)); - } else { - return Pair.of(recipeType, getShapelessRecipes(typedRecipes, helper)); - } - } +// private static Pair<RecipeType, List<GeyserRecipe>> getRecipes(NbtMap recipes, MinecraftCodecHelper helper) { +// List<NbtMap> typedRecipes = recipes.getList("recipes", NbtType.COMPOUND); +// RecipeType recipeType = RecipeType.from(recipes.getInt("recipe_type", -1)); +// if (recipeType == RecipeType.CRAFTING_SPECIAL_TIPPEDARROW) { +// return Pair.of(recipeType, getShapedRecipes(typedRecipes, helper)); +// } else { +// return Pair.of(recipeType, getShapelessRecipes(typedRecipes, helper)); +// } +// } private static List<GeyserRecipe> getShapelessRecipes(List<NbtMap> recipes, MinecraftCodecHelper helper) { List<GeyserRecipe> deserializedRecipes = new ObjectArrayList<>(recipes.size()); 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 fb64cfc41..211486963 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -441,10 +441,9 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { 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. + * Stores all Java recipes by ID, and matches them to all possible Bedrock recipe identifiers. */ - private final Map<String, List<String>> javaToBedrockRecipeIds; + private final Int2ObjectMap<List<String>> javaToBedrockRecipeIds; @Setter private Int2ObjectMap<GeyserRecipe> craftingRecipes; @@ -694,7 +693,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { this.playerInventory = new PlayerInventory(); this.openInventory = null; this.craftingRecipes = new Int2ObjectOpenHashMap<>(); - this.javaToBedrockRecipeIds = new Object2ObjectOpenHashMap<>(); + this.javaToBedrockRecipeIds = new Int2ObjectOpenHashMap<>(); this.lastRecipeNetId = new AtomicInteger(1); this.spawned = false; diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java index 74fb11814..49c62989c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java @@ -25,57 +25,258 @@ package org.geysermc.geyser.translator.protocol.java; +import it.unimi.dsi.fastutil.Pair; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import net.kyori.adventure.key.Key; +import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; +import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.RecipeUnlockingRequirement; +import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapedRecipeData; +import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.DefaultDescriptor; +import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.ItemDescriptorWithCount; +import org.cloudburstmc.protocol.bedrock.packet.CraftingDataPacket; import org.cloudburstmc.protocol.bedrock.packet.UnlockedRecipesPacket; +import org.geysermc.geyser.item.Items; +import org.geysermc.geyser.item.type.BedrockRequiresTagItem; +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.session.cache.registry.JavaRegistries; +import org.geysermc.geyser.session.cache.tags.Tag; +import org.geysermc.geyser.translator.item.ItemTranslator; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; +import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.RecipeDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.RecipeDisplayEntry; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.ShapedCraftingRecipeDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.ShapelessCraftingRecipeDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.CompositeSlotDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.EmptySlotDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.ItemSlotDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.ItemStackSlotDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.TagSlotDisplay; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundRecipeBookAddPacket; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.UUID; + @Translator(packet = ClientboundRecipeBookAddPacket.class) public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRecipeBookAddPacket> { @Override public void translate(GeyserSession session, ClientboundRecipeBookAddPacket packet) { + System.out.println(packet); + int netId = session.getLastRecipeNetId().get(); + Int2ObjectMap<List<String>> javaToBedrockRecipeIds = session.getJavaToBedrockRecipeIds(); + CraftingDataPacket craftingDataPacket = new CraftingDataPacket(); + // Check if we should set cleanRecipes here or not. + + UnlockedRecipesPacket recipesPacket = new UnlockedRecipesPacket(); recipesPacket.setAction(packet.isReplace() ? UnlockedRecipesPacket.ActionType.INITIALLY_UNLOCKED : UnlockedRecipesPacket.ActionType.NEWLY_UNLOCKED); -// List<String> recipes = getBedrockRecipes(session, packet.getEntries()); -// if (recipes.isEmpty() && !packet.isReplace()) { -// // Sending an empty list here packet will crash the client as of 1.20.60 -// return; -// } -// 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(recipes); -// } -// case REMOVE -> { -// List<String> recipes = getBedrockRecipes(session, packet.getRecipes()); -// if (recipes.isEmpty()) { -// // Sending an empty list here will crash the client as of 1.20.60 -// return; -// } -// recipesPacket.setAction(UnlockedRecipesPacket.ActionType.REMOVE_UNLOCKED); -// recipesPacket.getUnlockedRecipes().addAll(recipes); -// } -// } -// session.sendUpstreamPacket(recipesPacket); + + for (ClientboundRecipeBookAddPacket.Entry entry : packet.getEntries()) { + RecipeDisplayEntry contents = entry.contents(); + RecipeDisplay display = contents.display(); + + switch (display.getType()) { + case CRAFTING_SHAPED -> { + ShapedCraftingRecipeDisplay shapedRecipe = (ShapedCraftingRecipeDisplay) display; + Pair<Item, ItemData> pair = translateToOutput(session, shapedRecipe.result()); + if (pair == null || !pair.right().isValid()) { + // Likely modded item Bedrock will complain about + continue; + } + + ItemData output = pair.right(); + if (!(pair.left() instanceof BedrockRequiresTagItem)) { + // Strip NBT - tools won't appear in the recipe book otherwise + output = output.toBuilder().tag(null).build(); + } + + boolean empty = true; + boolean complexInputs = false; + List<ItemDescriptorWithCount[]> inputs = new ArrayList<>(shapedRecipe.ingredients().size()); + for (SlotDisplay input : shapedRecipe.ingredients()) { + ItemDescriptorWithCount[] translated = translateToInput(session, input); + if (translated == null) { + continue; + } + inputs.add(translated); + if (translated.length != 1 || translated[0] != ItemDescriptorWithCount.EMPTY) { + empty = false; + } + complexInputs |= translated.length > 1; + } + if (empty) { + // Crashes Bedrock 1.19.70 otherwise + // Fixes https://github.com/GeyserMC/Geyser/issues/3549 + continue; + } + + if (complexInputs) { + + } else { + String recipeId = Integer.toString(contents.id()); + craftingDataPacket.getCraftingData().add(ShapedRecipeData.shaped(recipeId, + shapedRecipe.width(), shapedRecipe.height(), inputs.stream().map(descriptors -> descriptors[0]).toList(), + Collections.singletonList(output), UUID.randomUUID(), "crafting_table", 0, netId++, false, RecipeUnlockingRequirement.INVALID)); + recipesPacket.getUnlockedRecipes().add(recipeId); + javaToBedrockRecipeIds.put(contents.id(), Collections.singletonList(recipeId)); + } + } + case CRAFTING_SHAPELESS -> { + ShapelessCraftingRecipeDisplay shapelessRecipe = (ShapelessCraftingRecipeDisplay) display; + Pair<Item, ItemData> pair = translateToOutput(session, shapelessRecipe.result()); + if (pair == null || !pair.right().isValid()) { + // Likely modded item Bedrock will complain about + continue; + } + + ItemData output = pair.right(); + if (!(pair.left() instanceof BedrockRequiresTagItem)) { + // Strip NBT - tools won't appear in the recipe book otherwise + output = output.toBuilder().tag(null).build(); + } + } + } + } + + System.out.println(craftingDataPacket); + session.sendUpstreamPacket(craftingDataPacket); + session.sendUpstreamPacket(recipesPacket); + session.getLastRecipeNetId().set(netId); + + // Multi-version can mean different Bedrock item IDs + TAG_TO_ITEM_DESCRIPTOR_CACHE.remove(); } -// private List<String> getBedrockRecipes(GeyserSession session, List<ClientboundRecipeBookAddPacket.Entry> entry) { -// List<String> recipes = new ArrayList<>(); -// for (String javaIdentifier : javaRecipeIdentifiers) { -// List<String> 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); -// } + private static final ThreadLocal<Map<int[], ItemDescriptorWithCount[]>> TAG_TO_ITEM_DESCRIPTOR_CACHE = ThreadLocal.withInitial(Object2ObjectOpenHashMap::new); + + private ItemDescriptorWithCount[] translateToInput(GeyserSession session, SlotDisplay slotDisplay) { + if (slotDisplay instanceof EmptySlotDisplay) { + return new ItemDescriptorWithCount[] {ItemDescriptorWithCount.EMPTY}; + } + if (slotDisplay instanceof CompositeSlotDisplay composite) { + if (composite.contents().size() == 1) { + return translateToInput(session, composite.contents().get(0)); + } + return composite.contents().stream() + .map(subDisplay -> translateToInput(session, subDisplay)) + .filter(Objects::nonNull) + .flatMap(Arrays::stream) + .toArray(ItemDescriptorWithCount[]::new); + } + if (slotDisplay instanceof ItemSlotDisplay itemSlot) { + return new ItemDescriptorWithCount[] {fromItem(session, itemSlot.item())}; + } + if (slotDisplay instanceof ItemStackSlotDisplay itemStackSlot) { + ItemData item = ItemTranslator.translateToBedrock(session, itemStackSlot.itemStack()); + return new ItemDescriptorWithCount[] {ItemDescriptorWithCount.fromItem(item)}; + } + if (slotDisplay instanceof TagSlotDisplay tagSlot) { + Key tag = tagSlot.tag(); + int[] items = session.getTagCache().getRaw(new Tag<>(JavaRegistries.ITEM, tag)); // I don't like this... + if (items == null || items.length == 0) { + return new ItemDescriptorWithCount[] {ItemDescriptorWithCount.EMPTY}; + } else if (items.length == 1) { + return new ItemDescriptorWithCount[] {fromItem(session, items[0])}; + } else { + // Cache is implemented as, presumably, an item tag will be used multiple times in succession + // (E.G. a chest with planks tags) + return TAG_TO_ITEM_DESCRIPTOR_CACHE.get().computeIfAbsent(items, key -> { +// String molang = "q.is_item_name_any('', " +// + Arrays.stream(items).mapToObj(item -> { +// ItemMapping mapping = session.getItemMappings().getMapping(item); +// return "'" + mapping.getBedrockIdentifier() + "'"; +// }).collect(Collectors.joining(", ")) +// + ")"; +// String molang = Arrays.stream(items).mapToObj(item -> { +// ItemMapping mapping = session.getItemMappings().getMapping(item); +// return "q.identifier == '" + mapping.getBedrockIdentifier() + "'"; +// }).collect(Collectors.joining(" || ")); +// if ("minecraft:planks".equals(tag.toString())) { +// String molang = "q.any_tag('minecraft:planks')"; +// return new ItemDescriptorWithCount[] {new ItemDescriptorWithCount(new MolangDescriptor(molang, 10), 1)}; +// } + return null; +// Set<ItemDescriptorWithCount> itemDescriptors = new HashSet<>(); +// for (int item : key) { +// itemDescriptors.add(fromItem(session, item)); +// } +// return itemDescriptors.toArray(ItemDescriptorWithCount[]::new); + }); + } + } + session.getGeyser().getLogger().warning("Unimplemented slot display type for input: " + slotDisplay); + return null; + } + + private Pair<Item, ItemData> translateToOutput(GeyserSession session, SlotDisplay slotDisplay) { + if (slotDisplay instanceof EmptySlotDisplay) { + return null; + } + if (slotDisplay instanceof ItemSlotDisplay itemSlot) { + int item = itemSlot.item(); + return Pair.of(Registries.JAVA_ITEMS.get(item), ItemTranslator.translateToBedrock(session, new ItemStack(item))); + } + if (slotDisplay instanceof ItemStackSlotDisplay itemStackSlot) { + ItemStack stack = itemStackSlot.itemStack(); + return Pair.of(Registries.JAVA_ITEMS.get(stack.getId()), ItemTranslator.translateToBedrock(session, stack)); + } + session.getGeyser().getLogger().warning("Unimplemented slot display type for output: " + slotDisplay); + return null; + } + + private ItemDescriptorWithCount fromItem(GeyserSession session, int item) { + if (item == Items.AIR_ID) { + return ItemDescriptorWithCount.EMPTY; + } + ItemMapping mapping = session.getItemMappings().getMapping(item); + return new ItemDescriptorWithCount(new DefaultDescriptor(mapping.getBedrockDefinition(), mapping.getBedrockData()), 1); // Need to check count + } + +// private static ItemDescriptorWithCount[][] combinations(ItemDescriptorWithCount[] itemDescriptors) { +// int totalCombinations = 1; +// for (Set<ItemDescriptorWithCount> optionSet : squashedOptions.keySet()) { +// totalCombinations *= optionSet.size(); +// } +// if (totalCombinations > 500) { +// ItemDescriptorWithCount[] translatedItems = new ItemDescriptorWithCount[ingredients.length]; +// for (int i = 0; i < ingredients.length; i++) { +// if (ingredients[i].getOptions().length > 0) { +// translatedItems[i] = ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, ingredients[i].getOptions()[0])); +// } else { +// translatedItems[i] = ItemDescriptorWithCount.EMPTY; +// } +// } +// return new ItemDescriptorWithCount[][]{translatedItems}; +// } +// List<Set<ItemDescriptorWithCount>> sortedSets = new ArrayList<>(squashedOptions.keySet()); +// sortedSets.sort(Comparator.comparing(Set::size, Comparator.reverseOrder())); +// ItemDescriptorWithCount[][] combinations = new ItemDescriptorWithCount[totalCombinations][ingredients.length]; +// int x = 1; +// for (Set<ItemDescriptorWithCount> set : sortedSets) { +// IntSet slotSet = squashedOptions.get(set); +// int i = 0; +// for (ItemDescriptorWithCount item : set) { +// for (int j = 0; j < totalCombinations / set.size(); j++) { +// final int comboIndex = (i * x) + (j % x) + ((j / x) * set.size() * x); +// for (IntIterator it = slotSet.iterator(); it.hasNext(); ) { +// combinations[comboIndex][it.nextInt()] = item; +// } +// } +// i++; +// } +// x *= set.size(); // } -// return recipes; // } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookRemoveTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookRemoveTranslator.java new file mode 100644 index 000000000..27faecef7 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookRemoveTranslator.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 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.translator.protocol.java; + +import org.cloudburstmc.protocol.bedrock.packet.UnlockedRecipesPacket; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.protocol.PacketTranslator; +import org.geysermc.geyser.translator.protocol.Translator; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundRecipeBookRemovePacket; + +import java.util.ArrayList; +import java.util.List; + +@Translator(packet = ClientboundRecipeBookRemovePacket.class) +public class JavaRecipeBookRemoveTranslator extends PacketTranslator<ClientboundRecipeBookRemovePacket> { + + @Override + public void translate(GeyserSession session, ClientboundRecipeBookRemovePacket packet) { + List<String> recipes = getBedrockRecipes(session, packet.getRecipes()); + if (recipes.isEmpty()) { + // Sending an empty list here will crash the client as of 1.20.60 + return; + } + UnlockedRecipesPacket recipesPacket = new UnlockedRecipesPacket(); + recipesPacket.setAction(UnlockedRecipesPacket.ActionType.REMOVE_UNLOCKED); + recipesPacket.getUnlockedRecipes().addAll(recipes); + session.sendUpstreamPacket(recipesPacket); + } + + private List<String> getBedrockRecipes(GeyserSession session, int[] javaRecipeIds) { + List<String> recipes = new ArrayList<>(); + for (int javaIdentifier : javaRecipeIds) { + List<String> 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/inventory/JavaContainerSetSlotTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java index f5dab4cd0..2ea116de5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java @@ -109,6 +109,9 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound * Checks for a changed output slot in the crafting grid, and ensures Bedrock sees the recipe. */ private static void updateCraftingGrid(GeyserSession session, int slot, ItemStack item, Inventory inventory, InventoryTranslator translator) { + if (true) { + return; + } // Check if it's the crafting grid result slot. if (slot != 0) { return; From 52ce17dee6f1dd894ca0037dc292b2b06a3ddcd0 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Wed, 23 Oct 2024 20:40:46 -0400 Subject: [PATCH 013/165] Re-implement stonecutter recipes --- .../geyser/session/GeyserSession.java | 2 +- .../java/JavaUpdateRecipesTranslator.java | 87 ++++++++++++++++++- 2 files changed, 87 insertions(+), 2 deletions(-) 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 211486963..df5c3d7a8 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -451,7 +451,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { /** * Saves a list of all stonecutter recipes, for use in a stonecutter inventory. - * The key is the Java ID of the item; the values are all the possible outputs' Java IDs sorted by their string identifier + * The key is the Bedrock recipe net ID; the values are their respective output and button ID. */ @Setter private Int2ObjectMap<GeyserStonecutterData> stonecutterRecipes; 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 e6e875791..729ff965b 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 @@ -25,15 +25,35 @@ package org.geysermc.geyser.translator.protocol.java; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import net.kyori.adventure.key.Key; +import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; +import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.RecipeUnlockingRequirement; import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.MultiRecipeData; import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.RecipeData; +import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapelessRecipeData; +import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.DefaultDescriptor; +import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.ItemDescriptorWithCount; +import org.cloudburstmc.protocol.bedrock.packet.CraftingDataPacket; +import org.geysermc.geyser.inventory.recipe.GeyserStonecutterData; +import org.geysermc.geyser.item.Items; +import org.geysermc.geyser.registry.Registries; +import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.item.ItemTranslator; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.util.MinecraftKey; +import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.ItemStackSlotDisplay; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundUpdateRecipesPacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundUpdateRecipesPacket.SelectableRecipe; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.UUID; @@ -84,7 +104,72 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator<ClientboundUpd @Override public void translate(GeyserSession session, ClientboundUpdateRecipesPacket packet) { - // :( + int netId = session.getLastRecipeNetId().get(); + CraftingDataPacket craftingDataPacket = new CraftingDataPacket(); + System.out.println(packet); + Int2ObjectMap<List<SelectableRecipe>> unsortedStonecutterData = new Int2ObjectOpenHashMap<>(); + + List<SelectableRecipe> stonecutterRecipes = packet.getStonecutterRecipes(); + for (SelectableRecipe recipe : stonecutterRecipes) { + // Hardcoding the heck out of this until we see different examples of how this works. + HolderSet ingredient = recipe.input().getValues(); + if (ingredient.getHolders() == null || ingredient.getHolders().length != 1) { + session.getGeyser().getLogger().debug("Ignoring stonecutter recipe for weird input: " + recipe); + continue; + } + if (!(recipe.recipe() instanceof ItemStackSlotDisplay)) { + session.getGeyser().getLogger().debug("Ignoring stonecutter recipe for weird output: " + recipe); + continue; + } + unsortedStonecutterData.computeIfAbsent(ingredient.getHolders()[0], $ -> new ArrayList<>()).add(recipe); + } + + Int2ObjectMap<GeyserStonecutterData> stonecutterRecipeMap = new Int2ObjectOpenHashMap<>(); + for (Int2ObjectMap.Entry<List<SelectableRecipe>> data : unsortedStonecutterData.int2ObjectEntrySet()) { + // Sort the list by each output item's Java identifier - this is how it's sorted on Java, and therefore + // We can get the correct order for button pressing + data.getValue().sort(Comparator.comparing((stoneCuttingRecipeData -> + Registries.JAVA_ITEMS.get().get(((ItemStackSlotDisplay) stoneCuttingRecipeData.recipe()).itemStack().getId()) + // See RecipeManager#getRecipesFor as of 1.21 + .translationKey()))); + + // Now that it's sorted, let's translate these recipes + int buttonId = 0; + for (SelectableRecipe recipe : data.getValue()) { + // As of 1.16.4, all stonecutter recipes have one ingredient option + HolderSet ingredient = recipe.input().getValues(); + int javaInput = ingredient.getHolders()[0]; + ItemMapping mapping = session.getItemMappings().getMapping(javaInput); + if (mapping.getJavaItem() == Items.AIR) { + // Modded ? + continue; + } + ItemDescriptorWithCount descriptor = new ItemDescriptorWithCount(new DefaultDescriptor(mapping.getBedrockDefinition(), mapping.getBedrockData()), 1); + ItemStack javaOutput = ((ItemStackSlotDisplay) recipe.recipe()).itemStack(); + ItemData output = ItemTranslator.translateToBedrock(session, javaOutput); + if (!output.isValid()) { + // Probably modded items + continue; + } + int recipeNetId = netId++; + UUID uuid = UUID.randomUUID(); + // We need to register stonecutting recipes, so they show up on Bedrock + // (Implementation note: recipe ID creates the order which stonecutting recipes are shown in stonecutter + craftingDataPacket.getCraftingData().add(ShapelessRecipeData.shapeless("stonecutter_" + javaInput + "_" + buttonId, + Collections.singletonList(descriptor), Collections.singletonList(output), uuid, "stonecutter", 0, recipeNetId, RecipeUnlockingRequirement.INVALID)); + session.getGeyser().getLogger().info(mapping.getJavaItem().javaIdentifier() + " " + buttonId + " " + recipeNetId); + + // Save the recipe list for reference when crafting + // Add the net ID as the key and the button required + output for the value + stonecutterRecipeMap.put(recipeNetId, new GeyserStonecutterData(buttonId++, javaOutput)); + + // Currently, stone cutter recipes are not locked/unlocked on Bedrock; so no need to cache their identifiers. + } + } + + session.sendUpstreamPacket(craftingDataPacket); + session.setStonecutterRecipes(stonecutterRecipeMap); + session.getLastRecipeNetId().set(netId); } // boolean sendTrimRecipes = false; // Map<String, List<String>> recipeIDs = session.getJavaToBedrockRecipeIds(); From 29fe033257d78e92cf7f3c957b809599d3f83b06 Mon Sep 17 00:00:00 2001 From: chris <github@onechris.mozmail.com> Date: Fri, 25 Oct 2024 00:55:19 +0800 Subject: [PATCH 014/165] Don't attempt to clear registry that hasn't been loaded yet (#5101) --- core/src/main/java/org/geysermc/geyser/GeyserImpl.java | 4 +++- .../org/geysermc/geyser/registry/DeferredRegistry.java | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java index 9df1d2189..4672aef5b 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java @@ -723,7 +723,9 @@ public class GeyserImpl implements GeyserApi, EventRegistrar { runIfNonNull(newsHandler, NewsHandler::shutdown); runIfNonNull(erosionUnixListener, UnixSocketClientListener::close); - Registries.RESOURCE_PACKS.get().clear(); + if (Registries.RESOURCE_PACKS.loaded()) { + Registries.RESOURCE_PACKS.get().clear(); + } this.setEnabled(false); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/DeferredRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/DeferredRegistry.java index 6a2f2ae37..ce77261ae 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/DeferredRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/DeferredRegistry.java @@ -112,6 +112,13 @@ public final class DeferredRegistry<M> implements IRegistry<M> { this.loaded = true; } + /** + * Whether this registry was loaded. + */ + public boolean loaded() { + return this.loaded; + } + /** * Creates a new deferred registry. * From e17ad64d8ca4e5e9b4eff351baee0ebcd0388043 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Thu, 24 Oct 2024 13:47:03 -0400 Subject: [PATCH 015/165] Migrate to SERVER-AUTHORITATIVE MOVEMENT dun dun dunnnn --- .../level/physics/CollisionManager.java | 14 +- .../geyser/level/physics/CollisionResult.java | 3 +- .../geyser/network/CodecProcessor.java | 3 +- .../geyser/network/UpstreamPacketHandler.java | 2 +- .../geyser/session/GeyserSession.java | 24 +- .../geyser/session/cache/InputCache.java | 80 +++++++ ...BedrockInventoryTransactionTranslator.java | 73 ++----- ...anslator.java => BedrockBlockActions.java} | 181 ++-------------- .../player/BedrockMovePlayerTranslator.java | 51 +++-- .../player/BedrockPlayerActionTranslator.java | 108 +++++++++ .../BedrockPlayerAuthInputTranslator.java | 205 ++++++++++++++++++ .../java/JavaRecipeBookAddTranslator.java | 150 +++++++------ .../java/JavaUpdateRecipesTranslator.java | 3 +- 13 files changed, 557 insertions(+), 340 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/session/cache/InputCache.java rename core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/{BedrockActionTranslator.java => BedrockBlockActions.java} (58%) create mode 100644 core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerActionTranslator.java create mode 100644 core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java 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 a0fb312b4..5c87993df 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 @@ -27,6 +27,7 @@ package org.geysermc.geyser.level.physics; import lombok.Getter; import lombok.Setter; +import net.kyori.adventure.util.TriState; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.GenericMath; import org.cloudburstmc.math.vector.Vector3d; @@ -153,11 +154,10 @@ public class CollisionManager { * the two versions. Will also send corrected movement packets back to Bedrock if they collide with pistons. * * @param bedrockPosition the current Bedrock position of the client - * @param onGround whether the Bedrock player is on the ground * @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 @Nullable Vector3d adjustBedrockPosition(Vector3f bedrockPosition, boolean onGround, boolean teleported) { + public @Nullable CollisionResult adjustBedrockPosition(Vector3f bedrockPosition, 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()) { @@ -176,7 +176,7 @@ public class CollisionManager { playerBoundingBox.setMiddleY(position.getY() + playerBoundingBox.getSizeY() / 2); playerBoundingBox.setMiddleZ(position.getZ()); - return playerBoundingBox.getBottomCenter(); + return new CollisionResult(playerBoundingBox.getBottomCenter(), TriState.NOT_SET); } Vector3d startingPos = playerBoundingBox.getBottomCenter(); @@ -198,9 +198,9 @@ public class CollisionManager { position = playerBoundingBox.getBottomCenter(); - boolean newOnGround = adjustedMovement.getY() != movement.getY() && movement.getY() < 0 || onGround; + boolean newOnGround = adjustedMovement.getY() != movement.getY() && movement.getY() < 0; // Send corrected position to Bedrock if they differ by too much to prevent de-syncs - if (onGround != newOnGround || movement.distanceSquared(adjustedMovement) > INCORRECT_MOVEMENT_THRESHOLD) { + if (/*onGround != newOnGround || */movement.distanceSquared(adjustedMovement) > INCORRECT_MOVEMENT_THRESHOLD) { PlayerEntity playerEntity = session.getPlayerEntity(); // Client will dismount if on a vehicle if (playerEntity.getVehicle() == null && pistonCache.getPlayerMotion().equals(Vector3f.ZERO) && !pistonCache.isPlayerSlimeCollision()) { @@ -208,12 +208,12 @@ public class CollisionManager { } } - if (!onGround) { + if (!newOnGround) { // Trim the position to prevent rounding errors that make Java think we are clipping into a block position = Vector3d.from(position.getX(), Double.parseDouble(DECIMAL_FORMAT.format(position.getY())), position.getZ()); } - return position; + return new CollisionResult(position, TriState.byBoolean(newOnGround)); } // TODO: This makes the player look upwards for some reason, rotation values must be wrong diff --git a/core/src/main/java/org/geysermc/geyser/level/physics/CollisionResult.java b/core/src/main/java/org/geysermc/geyser/level/physics/CollisionResult.java index 8ba5f895b..3c8271cd9 100644 --- a/core/src/main/java/org/geysermc/geyser/level/physics/CollisionResult.java +++ b/core/src/main/java/org/geysermc/geyser/level/physics/CollisionResult.java @@ -25,10 +25,11 @@ package org.geysermc.geyser.level.physics; +import net.kyori.adventure.util.TriState; import org.cloudburstmc.math.vector.Vector3d; /** * Holds the result of a collision check. */ -public record CollisionResult(Vector3d correctedMovement, boolean horizontalCollision) { +public record CollisionResult(Vector3d correctedMovement, TriState onGround) { } diff --git a/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java b/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java index cdbeef143..d5a4dd246 100644 --- a/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java +++ b/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java @@ -71,7 +71,6 @@ import org.cloudburstmc.protocol.bedrock.packet.MultiplayerSettingsPacket; import org.cloudburstmc.protocol.bedrock.packet.NpcRequestPacket; import org.cloudburstmc.protocol.bedrock.packet.PhotoInfoRequestPacket; import org.cloudburstmc.protocol.bedrock.packet.PhotoTransferPacket; -import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket; import org.cloudburstmc.protocol.bedrock.packet.PlayerHotbarPacket; import org.cloudburstmc.protocol.bedrock.packet.PlayerSkinPacket; import org.cloudburstmc.protocol.bedrock.packet.PurchaseReceiptPacket; @@ -318,7 +317,7 @@ class CodecProcessor { .updateSerializer(ClientCheatAbilityPacket.class, ILLEGAL_SERIALIZER) .updateSerializer(CraftingEventPacket.class, ILLEGAL_SERIALIZER) // Illegal unusued serverbound packets that relate to unused features - .updateSerializer(PlayerAuthInputPacket.class, ILLEGAL_SERIALIZER) + //.updateSerializer(PlayerAuthInputPacket.class, ILLEGAL_SERIALIZER) TODO keeping until we determine which packets should replace .updateSerializer(ClientCacheBlobStatusPacket.class, ILLEGAL_SERIALIZER) .updateSerializer(SubClientLoginPacket.class, ILLEGAL_SERIALIZER) .updateSerializer(SubChunkRequestPacket.class, ILLEGAL_SERIALIZER) 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 48f1dee5f..19e56c8a8 100644 --- a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java @@ -290,7 +290,7 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { } @Override - public PacketSignal handle(MovePlayerPacket packet) { + public PacketSignal handle(MovePlayerPacket packet) { // TODO if (session.isLoggingIn()) { SetTitlePacket titlePacket = new SetTitlePacket(); titlePacket.setType(SetTitlePacket.Type.ACTIONBAR); 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 df5c3d7a8..9b9e86bb2 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -161,6 +161,7 @@ import org.geysermc.geyser.session.cache.ChunkCache; import org.geysermc.geyser.session.cache.EntityCache; import org.geysermc.geyser.session.cache.EntityEffectCache; import org.geysermc.geyser.session.cache.FormCache; +import org.geysermc.geyser.session.cache.InputCache; import org.geysermc.geyser.session.cache.LodestoneCache; import org.geysermc.geyser.session.cache.PistonCache; import org.geysermc.geyser.session.cache.PreferencesCache; @@ -210,7 +211,6 @@ import org.geysermc.mcprotocollib.protocol.packet.common.serverbound.Serverbound import org.geysermc.mcprotocollib.protocol.packet.handshake.serverbound.ClientIntentionPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundChatCommandSignedPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundChatPacket; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerPosPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundPlayerAbilitiesPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundPlayerActionPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundUseItemPacket; @@ -276,6 +276,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { private final EntityCache entityCache; private final EntityEffectCache effectCache; private final FormCache formCache; + private final InputCache inputCache; private final LodestoneCache lodestoneCache; private final PistonCache pistonCache; private final PreferencesCache preferencesCache; @@ -523,12 +524,6 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { @Setter private boolean placedBucket; - /** - * Used to send a movement packet every three seconds if the player hasn't moved. Prevents timeouts when AFK in certain instances. - */ - @Setter - private long lastMovementTimestamp = System.currentTimeMillis(); - /** * Used to send a ServerboundMoveVehiclePacket for every PlayerInputPacket after idling on a boat/horse for more than 100ms */ @@ -672,6 +667,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { this.entityCache = new EntityCache(this); this.effectCache = new EntityEffectCache(); this.formCache = new FormCache(this); + this.inputCache = new InputCache(this); this.lodestoneCache = new LodestoneCache(); this.pistonCache = new PistonCache(this); this.preferencesCache = new PreferencesCache(this); @@ -1266,18 +1262,6 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { protected void tick() { try { pistonCache.tick(); - // Check to see if the player's position needs updating - a position update should be sent once every 3 seconds - if (spawned && (System.currentTimeMillis() - lastMovementTimestamp) > 3000) { - // Recalculate in case something else changed position - Vector3d position = collisionManager.adjustBedrockPosition(playerEntity.getPosition(), playerEntity.isOnGround(), false); - // A null return value cancels the packet - if (position != null) { - ServerboundMovePlayerPosPacket packet = new ServerboundMovePlayerPosPacket(playerEntity.isOnGround(), false, //FIXME - position.getX(), position.getY(), position.getZ()); - sendDownstreamGamePacket(packet); - } - lastMovementTimestamp = System.currentTimeMillis(); - } if (worldBorder.isResizing()) { worldBorder.resize(); @@ -1668,7 +1652,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { startGamePacket.setChatRestrictionLevel(ChatRestrictionLevel.NONE); - startGamePacket.setAuthoritativeMovementMode(AuthoritativeMovementMode.CLIENT); + startGamePacket.setAuthoritativeMovementMode(AuthoritativeMovementMode.SERVER); startGamePacket.setRewindHistorySize(0); startGamePacket.setServerAuthoritativeBlockBreaking(false); diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/InputCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/InputCache.java new file mode 100644 index 000000000..b59df0c16 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/session/cache/InputCache.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 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.session.cache; + +import org.cloudburstmc.protocol.bedrock.data.PlayerAuthInputData; +import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.level.ServerboundPlayerInputPacket; + +import java.util.Set; + +public final class InputCache { + private final GeyserSession session; + private ServerboundPlayerInputPacket inputPacket = new ServerboundPlayerInputPacket(false, false, false, false, false, false, false); + private boolean lastHorizontalCollision; + private int ticksSinceLastMovePacket; + + public InputCache(GeyserSession session) { + this.session = session; + } + + public void processInputs(PlayerAuthInputPacket packet) { + // Input is sent to the server before packet positions, as of 1.21.2 + Set<PlayerAuthInputData> bedrockInput = packet.getInputData(); + var oldInputPacket = this.inputPacket; + // TODO when is UP_LEFT, etc. used? + this.inputPacket = this.inputPacket + .withForward(bedrockInput.contains(PlayerAuthInputData.UP)) + .withBackward(bedrockInput.contains(PlayerAuthInputData.DOWN)) + .withLeft(bedrockInput.contains(PlayerAuthInputData.LEFT)) + .withRight(bedrockInput.contains(PlayerAuthInputData.RIGHT)) + .withJump(bedrockInput.contains(PlayerAuthInputData.JUMPING)) // Looks like this only triggers when the JUMP key input is being pressed. There's also JUMP_DOWN? + .withShift(bedrockInput.contains(PlayerAuthInputData.SNEAKING)) + .withSprint(bedrockInput.contains(PlayerAuthInputData.SPRINTING)); // SPRINTING will trigger even if the player isn't moving + + if (oldInputPacket != this.inputPacket) { // Simple equality check is fine since we're checking for an instance change. + session.sendDownstreamGamePacket(this.inputPacket); + } + } + + public void markPositionPacketSent() { + this.ticksSinceLastMovePacket = 0; + } + + public boolean shouldSendPositionReminder() { + // NOTE: if we implement spectating entities, DO NOT TICK THIS LOGIC THEN. + return ++this.ticksSinceLastMovePacket >= 20; + } + + public boolean lastHorizontalCollision() { + return lastHorizontalCollision; + } + + public void setLastHorizontalCollision(boolean lastHorizontalCollision) { + this.lastHorizontalCollision = lastHorizontalCollision; + } +} 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 7ed4ac72c..421e082b1 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 @@ -30,7 +30,6 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMaps; import org.cloudburstmc.math.vector.Vector3d; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.math.vector.Vector3i; -import org.cloudburstmc.protocol.bedrock.data.LevelEvent; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; @@ -42,7 +41,6 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.transaction.InventoryTra import org.cloudburstmc.protocol.bedrock.data.inventory.transaction.LegacySetItemSlotData; import org.cloudburstmc.protocol.bedrock.packet.ContainerOpenPacket; import org.cloudburstmc.protocol.bedrock.packet.InventoryTransactionPacket; -import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket; import org.cloudburstmc.protocol.bedrock.packet.LevelSoundEventPacket; import org.cloudburstmc.protocol.bedrock.packet.UpdateBlockPacket; import org.geysermc.geyser.entity.EntityDefinitions; @@ -187,7 +185,7 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve default -> false; }; if (isGodBridging) { - restoreCorrectBlock(session, blockPos, packet); + restoreCorrectBlock(session, blockPos); return; } } @@ -207,7 +205,7 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve int belowBlock = session.getGeyser().getWorldManager().getBlockAt(session, belowBlockPos); BlockDefinition extendedCollisionDefinition = session.getBlockMappings().getExtendedCollisionBoxes().get(belowBlock); if (extendedCollisionDefinition != null && (System.currentTimeMillis() - session.getLastInteractionTime()) < 200) { - restoreCorrectBlock(session, blockPos, packet); + restoreCorrectBlock(session, blockPos); return; } } @@ -227,7 +225,7 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve } if (isIncorrectHeldItem(session, packet)) { - restoreCorrectBlock(session, blockPos, packet); + restoreCorrectBlock(session, blockPos); return; } @@ -247,7 +245,7 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve */ // Blocks cannot be placed or destroyed outside of the world border if (!session.getWorldBorder().isInsideBorderBoundaries()) { - restoreCorrectBlock(session, blockPos, packet); + restoreCorrectBlock(session, blockPos); return; } @@ -256,7 +254,7 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve playerPosition = playerPosition.down(EntityDefinitions.PLAYER.offset() - session.getEyeHeight()); if (!canInteractWithBlock(session, playerPosition, packetBlockPosition)) { - restoreCorrectBlock(session, blockPos, packet); + restoreCorrectBlock(session, blockPos); return; } @@ -270,7 +268,7 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve double clickDistanceY = clickPositionFullY - blockCenter.getY(); double clickDistanceZ = clickPositionFullZ - blockCenter.getZ(); if (!(Math.abs(clickDistanceX) < 1.0000001D && Math.abs(clickDistanceY) < 1.0000001D && Math.abs(clickDistanceZ) < 1.0000001D)) { - restoreCorrectBlock(session, blockPos, packet); + restoreCorrectBlock(session, blockPos); return; } @@ -424,53 +422,6 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve } } } - case 2 -> { - int blockState = session.getGameMode() == GameMode.CREATIVE ? - session.getGeyser().getWorldManager().getBlockAt(session, packet.getBlockPosition()) : session.getBreakingBlock(); - - session.setLastBlockPlaced(null); - session.setLastBlockPlacePosition(null); - - // Same deal with vanilla block placing as above. - if (!session.getWorldBorder().isInsideBorderBoundaries()) { - restoreCorrectBlock(session, packet.getBlockPosition(), packet); - return; - } - - Vector3f playerPosition = session.getPlayerEntity().getPosition(); - playerPosition = playerPosition.down(EntityDefinitions.PLAYER.offset() - session.getEyeHeight()); - - if (!canInteractWithBlock(session, playerPosition, packet.getBlockPosition())) { - restoreCorrectBlock(session, packet.getBlockPosition(), packet); - return; - } - - int sequence = session.getWorldCache().nextPredictionSequence(); - session.getWorldCache().markPositionInSequence(packet.getBlockPosition()); - // -1 means we don't know what block they're breaking - if (blockState == -1) { - blockState = Block.JAVA_AIR_ID; - } - - LevelEventPacket blockBreakPacket = new LevelEventPacket(); - blockBreakPacket.setType(LevelEvent.PARTICLE_DESTROY_BLOCK); - blockBreakPacket.setPosition(packet.getBlockPosition().toFloat()); - blockBreakPacket.setData(session.getBlockMappings().getBedrockBlockId(blockState)); - session.sendUpstreamPacket(blockBreakPacket); - session.setBreakingBlock(-1); - - Entity itemFrameEntity = ItemFrameEntity.getItemFrameEntity(session, packet.getBlockPosition()); - if (itemFrameEntity != null) { - ServerboundInteractPacket attackPacket = new ServerboundInteractPacket(itemFrameEntity.getEntityId(), - InteractAction.ATTACK, session.isSneaking()); - session.sendDownstreamGamePacket(attackPacket); - break; - } - - PlayerAction action = session.getGameMode() == GameMode.CREATIVE ? PlayerAction.START_DIGGING : PlayerAction.FINISH_DIGGING; - ServerboundPlayerActionPacket breakPacket = new ServerboundPlayerActionPacket(action, packet.getBlockPosition(), Direction.VALUES[packet.getBlockFace()], sequence); - session.sendDownstreamGamePacket(breakPacket); - } } break; case ITEM_RELEASE: @@ -550,7 +501,7 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve } } - private boolean canInteractWithBlock(GeyserSession session, Vector3f playerPosition, Vector3i packetBlockPosition) { + public static boolean canInteractWithBlock(GeyserSession session, Vector3f playerPosition, Vector3i packetBlockPosition) { // ViaVersion sends this 1.20.5+ attribute also, so older servers will have correct range checks. double blockInteractionRange = session.getPlayerEntity().getBlockInteractionRange(); @@ -578,7 +529,7 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve * @param session the session of the Bedrock client * @param blockPos the block position to restore */ - private void restoreCorrectBlock(GeyserSession session, Vector3i blockPos, InventoryTransactionPacket packet) { + public static void restoreCorrectBlock(GeyserSession session, Vector3i blockPos) { BlockState javaBlockState = session.getGeyser().getWorldManager().blockAt(session, blockPos); BlockDefinition bedrockBlock = session.getBlockMappings().getBedrockBlock(javaBlockState); @@ -605,7 +556,7 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve session.sendUpstreamPacket(updateWaterPacket); // Reset the item in hand to prevent "missing" blocks - InventoryTranslator.PLAYER_INVENTORY_TRANSLATOR.updateSlot(session, session.getPlayerInventory(), session.getPlayerInventory().getOffsetForHotbar(packet.getHotbarSlot())); + InventoryTranslator.PLAYER_INVENTORY_TRANSLATOR.updateSlot(session, session.getPlayerInventory(), session.getPlayerInventory().getHeldItemSlot()); // TODO test } private boolean isIncorrectHeldItem(GeyserSession session, InventoryTransactionPacket packet) { @@ -699,9 +650,11 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve float pitch = (float) -Math.toDegrees(Math.atan2(yDiff, xzHypot)); SessionPlayerEntity entity = session.getPlayerEntity(); - ServerboundMovePlayerPosRotPacket returnPacket = new ServerboundMovePlayerPosRotPacket(entity.isOnGround(), false, playerPosition.getX(), playerPosition.getY(), playerPosition.getZ(), entity.getYaw(), entity.getPitch()); + ServerboundMovePlayerPosRotPacket returnPacket = new ServerboundMovePlayerPosRotPacket(entity.isOnGround(), session.getInputCache().lastHorizontalCollision(), + playerPosition.getX(), playerPosition.getY(), playerPosition.getZ(), entity.getYaw(), entity.getPitch()); // This matches Java edition behavior - ServerboundMovePlayerPosRotPacket movementPacket = new ServerboundMovePlayerPosRotPacket(entity.isOnGround(), false, playerPosition.getX(), playerPosition.getY(), playerPosition.getZ(), yaw, pitch); + ServerboundMovePlayerPosRotPacket movementPacket = new ServerboundMovePlayerPosRotPacket(entity.isOnGround(), session.getInputCache().lastHorizontalCollision(), + playerPosition.getX(), playerPosition.getY(), playerPosition.getZ(), yaw, pitch); session.sendDownstreamGamePacket(movementPacket); if (session.getLookBackScheduledFuture() != null) { 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/BedrockBlockActions.java similarity index 58% rename from core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockActionTranslator.java rename to core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockBlockActions.java index 669481747..0d4da1cb1 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/BedrockBlockActions.java @@ -29,14 +29,11 @@ import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.protocol.bedrock.data.LevelEvent; import org.cloudburstmc.protocol.bedrock.data.PlayerActionType; +import org.cloudburstmc.protocol.bedrock.data.PlayerBlockActionData; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; -import org.cloudburstmc.protocol.bedrock.data.entity.EntityEventType; -import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.cloudburstmc.protocol.bedrock.packet.AnimatePacket; -import org.cloudburstmc.protocol.bedrock.packet.EntityEventPacket; import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket; import org.cloudburstmc.protocol.bedrock.packet.PlayStatusPacket; -import org.cloudburstmc.protocol.bedrock.packet.PlayerActionPacket; import org.cloudburstmc.protocol.bedrock.packet.UpdateAttributesPacket; import org.geysermc.geyser.api.block.custom.CustomBlockState; import org.geysermc.geyser.entity.type.Entity; @@ -44,7 +41,6 @@ import org.geysermc.geyser.entity.type.ItemFrameEntity; import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.level.block.Blocks; -import org.geysermc.geyser.level.block.property.Properties; import org.geysermc.geyser.level.block.type.Block; import org.geysermc.geyser.level.block.type.BlockState; import org.geysermc.geyser.registry.BlockRegistries; @@ -52,8 +48,6 @@ import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.SkullCache; import org.geysermc.geyser.translator.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; import org.geysermc.mcprotocollib.protocol.data.game.entity.object.Direction; @@ -61,107 +55,36 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.InteractAction; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.PlayerAction; -import org.geysermc.mcprotocollib.protocol.data.game.entity.player.PlayerState; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundInteractPacket; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundPlayerAbilitiesPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundPlayerActionPacket; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundPlayerCommandPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundSwingPacket; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundUseItemOnPacket; -@Translator(packet = PlayerActionPacket.class) -public class BedrockActionTranslator extends PacketTranslator<PlayerActionPacket> { +import java.util.List; - @Override - public void translate(GeyserSession session, PlayerActionPacket packet) { +final class BedrockBlockActions { + + static void translate(GeyserSession session, List<PlayerBlockActionData> playerActions) { SessionPlayerEntity entity = session.getPlayerEntity(); // Send book update before any player action - if (packet.getAction() != PlayerActionType.RESPAWN) { - session.getBookEditCache().checkForSend(); + session.getBookEditCache().checkForSend(); + + for (PlayerBlockActionData blockActionData : playerActions) { + handle(session, entity, blockActionData); } + } - Vector3i vector = packet.getBlockPosition(); + private static void handle(GeyserSession session, SessionPlayerEntity entity, PlayerBlockActionData blockActionData) { + PlayerActionType action = blockActionData.getAction(); + Vector3i vector = blockActionData.getBlockPosition(); + int blockFace = blockActionData.getFace(); - switch (packet.getAction()) { - case RESPAWN -> { - // Respawn process is finished and the server and client are both OK with respawning. - EntityEventPacket eventPacket = new EntityEventPacket(); - eventPacket.setRuntimeEntityId(entity.getGeyserId()); - eventPacket.setType(EntityEventType.RESPAWN); - eventPacket.setData(0); - session.sendUpstreamPacket(eventPacket); - // Resend attributes or else in rare cases the user can think they're not dead when they are, upon joining the server - UpdateAttributesPacket attributesPacket = new UpdateAttributesPacket(); - attributesPacket.setRuntimeEntityId(entity.getGeyserId()); - attributesPacket.getAttributes().addAll(entity.getAttributes().values()); - session.sendUpstreamPacket(attributesPacket); - - // Bounding box must be sent after a player dies and respawns since 1.19.40 - entity.updateBoundingBox(); - - // Needed here since 1.19.81 for dimension switching - session.getEntityCache().updateBossBars(); - } - case START_SWIMMING -> { - if (!entity.getFlag(EntityFlag.SWIMMING)) { - ServerboundPlayerCommandPacket startSwimPacket = new ServerboundPlayerCommandPacket(entity.getEntityId(), PlayerState.START_SPRINTING); - session.sendDownstreamGamePacket(startSwimPacket); - - session.setSwimming(true); - } - } - case STOP_SWIMMING -> { - // Prevent packet spam when Bedrock players are crawling near the edge of a block - if (!session.getCollisionManager().mustPlayerCrawlHere()) { - ServerboundPlayerCommandPacket stopSwimPacket = new ServerboundPlayerCommandPacket(entity.getEntityId(), PlayerState.STOP_SPRINTING); - session.sendDownstreamGamePacket(stopSwimPacket); - - session.setSwimming(false); - } - } - case START_GLIDE -> { - // Otherwise gliding will not work in creative - ServerboundPlayerAbilitiesPacket playerAbilitiesPacket = new ServerboundPlayerAbilitiesPacket(false); - session.sendDownstreamGamePacket(playerAbilitiesPacket); - sendPlayerGlideToggle(session, entity); - } - case STOP_GLIDE -> sendPlayerGlideToggle(session, entity); - case START_SNEAK -> { - ServerboundPlayerCommandPacket startSneakPacket = new ServerboundPlayerCommandPacket(entity.getEntityId(), PlayerState.START_SNEAKING); - session.sendDownstreamGamePacket(startSneakPacket); - - session.startSneaking(); - } - case STOP_SNEAK -> { - ServerboundPlayerCommandPacket stopSneakPacket = new ServerboundPlayerCommandPacket(entity.getEntityId(), PlayerState.STOP_SNEAKING); - session.sendDownstreamGamePacket(stopSneakPacket); - - session.stopSneaking(); - } - case START_SPRINT -> { - if (!entity.getFlag(EntityFlag.SWIMMING)) { - ServerboundPlayerCommandPacket startSprintPacket = new ServerboundPlayerCommandPacket(entity.getEntityId(), PlayerState.START_SPRINTING); - session.sendDownstreamGamePacket(startSprintPacket); - session.setSprinting(true); - } - } - case STOP_SPRINT -> { - if (!entity.getFlag(EntityFlag.SWIMMING)) { - ServerboundPlayerCommandPacket stopSprintPacket = new ServerboundPlayerCommandPacket(entity.getEntityId(), PlayerState.STOP_SPRINTING); - session.sendDownstreamGamePacket(stopSprintPacket); - } - session.setSprinting(false); - } + switch (action) { case DROP_ITEM -> { ServerboundPlayerActionPacket dropItemPacket = new ServerboundPlayerActionPacket(PlayerAction.DROP_ITEM, - vector, Direction.VALUES[packet.getFace()], 0); + vector, Direction.VALUES[blockFace], 0); session.sendDownstreamGamePacket(dropItemPacket); } - case STOP_SLEEP -> { - ServerboundPlayerCommandPacket stopSleepingPacket = new ServerboundPlayerCommandPacket(entity.getEntityId(), PlayerState.LEAVE_BED); - session.sendDownstreamGamePacket(stopSleepingPacket); - } case START_BREAK -> { // Ignore START_BREAK when the player is CREATIVE to avoid Spigot receiving 2 packets it interpets as block breaking. https://github.com/GeyserMC/Geyser/issues/4021 if (session.getGameMode() == GameMode.CREATIVE) { @@ -191,9 +114,9 @@ public class BedrockActionTranslator extends PacketTranslator<PlayerActionPacket session.sendUpstreamPacket(startBreak); // Account for fire - the client likes to hit the block behind. - Vector3i fireBlockPos = BlockUtils.getBlockPosition(vector, packet.getFace()); + Vector3i fireBlockPos = BlockUtils.getBlockPosition(vector, blockFace); Block block = session.getGeyser().getWorldManager().blockAt(session, fireBlockPos).block(); - Direction direction = Direction.VALUES[packet.getFace()]; + Direction direction = Direction.VALUES[blockFace]; if (block == Blocks.FIRE || block == Blocks.SOUL_FIRE) { ServerboundPlayerActionPacket startBreakingPacket = new ServerboundPlayerActionPacket(PlayerAction.START_DIGGING, fireBlockPos, direction, session.getWorldCache().nextPredictionSequence()); @@ -218,7 +141,7 @@ public class BedrockActionTranslator extends PacketTranslator<PlayerActionPacket Vector3f vectorFloat = vector.toFloat(); BlockState breakingBlockState = BlockState.of(breakingBlock); - Direction direction = Direction.VALUES[packet.getFace()]; + Direction direction = Direction.VALUES[blockFace]; spawnBlockBreakParticles(session, direction, vector, breakingBlockState); double breakTime = BlockUtils.getSessionBreakTime(session, breakingBlockState.block()) * 20; @@ -304,69 +227,10 @@ public class BedrockActionTranslator extends PacketTranslator<PlayerActionPacket session.sendUpstreamPacket(animatePacket); } } - case START_FLYING -> { // Since 1.20.30 - if (session.isCanFly()) { - if (session.getGameMode() == GameMode.SPECTATOR) { - // should already be flying - session.sendAdventureSettings(); - break; - } - - if (session.getPlayerEntity().getFlag(EntityFlag.SWIMMING) && session.getCollisionManager().isPlayerInWater()) { - // As of 1.18.1, Java Edition cannot fly while in water, but it can fly while crawling - // If this isn't present, swimming on a 1.13.2 server and then attempting to fly will put you into a flying/swimming state that is invalid on JE - session.sendAdventureSettings(); - break; - } - - session.setFlying(true); - session.sendDownstreamGamePacket(new ServerboundPlayerAbilitiesPacket(true)); - } else { - // update whether we can fly - session.sendAdventureSettings(); - // stop flying - PlayerActionPacket stopFlyingPacket = new PlayerActionPacket(); - stopFlyingPacket.setRuntimeEntityId(session.getPlayerEntity().getGeyserId()); - stopFlyingPacket.setAction(PlayerActionType.STOP_FLYING); - stopFlyingPacket.setBlockPosition(Vector3i.ZERO); - stopFlyingPacket.setResultPosition(Vector3i.ZERO); - stopFlyingPacket.setFace(0); - session.sendUpstreamPacket(stopFlyingPacket); - } - } - case STOP_FLYING -> { - session.setFlying(false); - session.sendDownstreamGamePacket(new ServerboundPlayerAbilitiesPacket(false)); - } - case DIMENSION_CHANGE_REQUEST_OR_CREATIVE_DESTROY_BLOCK -> { // Used by client to get book from lecterns and items from item frame in creative mode since 1.20.70 - BlockState state = session.getGeyser().getWorldManager().blockAt(session, vector); - - if (state.getValue(Properties.HAS_BOOK, false)) { - session.setDroppingLecternBook(true); - - ServerboundUseItemOnPacket blockPacket = new ServerboundUseItemOnPacket( - vector, - Direction.DOWN, - Hand.MAIN_HAND, - 0, 0, 0, - false, - false, - session.getWorldCache().nextPredictionSequence()); - session.sendDownstreamGamePacket(blockPacket); - break; - } - - Entity itemFrame = ItemFrameEntity.getItemFrameEntity(session, packet.getBlockPosition()); - if (itemFrame != null) { - ServerboundInteractPacket interactPacket = new ServerboundInteractPacket(itemFrame.getEntityId(), - InteractAction.ATTACK, Hand.MAIN_HAND, session.isSneaking()); - session.sendDownstreamGamePacket(interactPacket); - } - } } } - private void spawnBlockBreakParticles(GeyserSession session, Direction direction, Vector3i position, BlockState blockState) { + private static void spawnBlockBreakParticles(GeyserSession session, Direction direction, Vector3i position, BlockState blockState) { LevelEventPacket levelEventPacket = new LevelEventPacket(); switch (direction) { case UP -> levelEventPacket.setType(LevelEvent.PARTICLE_BREAK_BLOCK_UP); @@ -380,9 +244,4 @@ public class BedrockActionTranslator extends PacketTranslator<PlayerActionPacket levelEventPacket.setData(session.getBlockMappings().getBedrockBlock(blockState).getRuntimeId()); session.sendUpstreamPacket(levelEventPacket); } - - private void sendPlayerGlideToggle(GeyserSession session, Entity entity) { - ServerboundPlayerCommandPacket glidePacket = new ServerboundPlayerCommandPacket(entity.getEntityId(), PlayerState.START_ELYTRA_FLYING); - session.sendDownstreamGamePacket(glidePacket); - } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java index c4cb10127..22732ad01 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java @@ -27,34 +27,33 @@ package org.geysermc.geyser.translator.protocol.bedrock.entity.player; import org.cloudburstmc.math.vector.Vector3d; import org.cloudburstmc.math.vector.Vector3f; -import org.cloudburstmc.protocol.bedrock.packet.MovePlayerPacket; +import org.cloudburstmc.protocol.bedrock.data.PlayerAuthInputData; +import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; import org.geysermc.geyser.entity.vehicle.ClientVehicle; +import org.geysermc.geyser.level.physics.CollisionResult; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.ChatColor; -import org.geysermc.geyser.translator.protocol.PacketTranslator; -import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.mcprotocollib.network.packet.Packet; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerPosPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerPosRotPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerRotPacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerStatusOnlyPacket; -@Translator(packet = MovePlayerPacket.class) -public class BedrockMovePlayerTranslator extends PacketTranslator<MovePlayerPacket> { - @Override - public void translate(GeyserSession session, MovePlayerPacket packet) { +public final class BedrockMovePlayerTranslator { + + static void translate(GeyserSession session, PlayerAuthInputPacket packet) { SessionPlayerEntity entity = session.getPlayerEntity(); if (!session.isSpawned()) return; - session.setLastMovementTimestamp(System.currentTimeMillis()); - // Send book update before the player moves session.getBookEditCache().checkForSend(); + boolean actualPositionChanged = !entity.getPosition().equals(packet.getPosition()); // Ignore movement packets until Bedrock's position matches the teleported position - if (session.getUnconfirmedTeleport() != null) { + if (session.getUnconfirmedTeleport() != null && actualPositionChanged) { session.confirmTeleport(packet.getPosition().toDouble().sub(0, EntityDefinitions.PLAYER.offset(), 0)); return; } @@ -70,7 +69,8 @@ public class BedrockMovePlayerTranslator extends PacketTranslator<MovePlayerPack float pitch = packet.getRotation().getX(); float headYaw = packet.getRotation().getY(); - boolean positionChanged = !entity.getPosition().equals(packet.getPosition()); + // shouldSendPositionReminder also increments a tick counter, so make sure it's always called. + boolean positionChanged = session.getInputCache().shouldSendPositionReminder() || actualPositionChanged; boolean rotationChanged = entity.getYaw() != yaw || entity.getPitch() != pitch || entity.getHeadYaw() != headYaw; if (session.getLookBackScheduledFuture() != null) { @@ -80,19 +80,22 @@ public class BedrockMovePlayerTranslator extends PacketTranslator<MovePlayerPack session.setLookBackScheduledFuture(null); } + // This takes into account no movement sent from the client, but the player is trying to move anyway. + // (Press into a wall in a corner - you're trying to move but nothing actually happens) + boolean horizontalCollision = packet.getInputData().contains(PlayerAuthInputData.HORIZONTAL_COLLISION); + // If only the pitch and yaw changed // This isn't needed, but it makes the packets closer to vanilla // It also means you can't "lag back" while only looking, in theory if (!positionChanged && rotationChanged) { - ServerboundMovePlayerRotPacket playerRotationPacket = new ServerboundMovePlayerRotPacket(packet.isOnGround(), false, yaw, pitch); + ServerboundMovePlayerRotPacket playerRotationPacket = new ServerboundMovePlayerRotPacket(entity.isOnGround(), horizontalCollision, yaw, pitch); entity.setYaw(yaw); entity.setPitch(pitch); entity.setHeadYaw(headYaw); - entity.setOnGround(packet.isOnGround()); session.sendDownstreamGamePacket(playerRotationPacket); - } else { + } else if (positionChanged) { // World border collision will be handled by client vehicle if (!(entity.getVehicle() instanceof ClientVehicle clientVehicle && clientVehicle.isClientControlled()) && session.getWorldBorder().isPassingIntoBorderBoundaries(packet.getPosition(), true)) { @@ -100,9 +103,10 @@ public class BedrockMovePlayerTranslator extends PacketTranslator<MovePlayerPack } if (isValidMove(session, entity.getPosition(), packet.getPosition())) { - Vector3d position = session.getCollisionManager().adjustBedrockPosition(packet.getPosition(), packet.isOnGround(), packet.getMode() == MovePlayerPacket.Mode.TELEPORT); - if (position != null) { // A null return value cancels the packet - boolean onGround = packet.isOnGround(); + CollisionResult result = session.getCollisionManager().adjustBedrockPosition(packet.getPosition(), packet.getInputData().contains(PlayerAuthInputData.HANDLE_TELEPORT)); + if (result != null) { // A null return value cancels the packet + Vector3d position = result.correctedMovement(); + boolean onGround = result.onGround().toBooleanOrElse(entity.isOnGround()); boolean isBelowVoid = entity.isVoidPositionDesynched(); boolean teleportThroughVoidFloor, mustResyncPosition; @@ -138,7 +142,7 @@ public class BedrockMovePlayerTranslator extends PacketTranslator<MovePlayerPack // Send rotation updates as well movePacket = new ServerboundMovePlayerPosRotPacket( onGround, - false, + horizontalCollision, position.getX(), yPosition, position.getZ(), yaw, pitch ); @@ -147,7 +151,7 @@ public class BedrockMovePlayerTranslator extends PacketTranslator<MovePlayerPack entity.setHeadYaw(headYaw); } else { // Rotation did not change; don't send an update with rotation - movePacket = new ServerboundMovePlayerPosPacket(onGround, false, position.getX(), yPosition, position.getZ()); + movePacket = new ServerboundMovePlayerPosPacket(onGround, horizontalCollision, position.getX(), yPosition, position.getZ()); } entity.setPositionManual(packet.getPosition()); @@ -162,6 +166,7 @@ public class BedrockMovePlayerTranslator extends PacketTranslator<MovePlayerPack entity.teleportVoidFloorFix(true); } + session.getInputCache().markPositionPacketSent(); session.getSkullCache().updateVisibleSkulls(); } } else { @@ -169,8 +174,12 @@ public class BedrockMovePlayerTranslator extends PacketTranslator<MovePlayerPack session.getGeyser().getLogger().debug("Recalculating position..."); session.getCollisionManager().recalculatePosition(); } + } else if (horizontalCollision != session.getInputCache().lastHorizontalCollision()) { + session.sendDownstreamGamePacket(new ServerboundMovePlayerStatusOnlyPacket(entity.isOnGround(), horizontalCollision)); } + session.getInputCache().setLastHorizontalCollision(horizontalCollision); + // Move parrots to match if applicable if (entity.getLeftParrot() != null) { entity.getLeftParrot().moveAbsolute(entity.getPosition(), entity.getYaw(), entity.getPitch(), entity.getHeadYaw(), true, false); @@ -180,11 +189,11 @@ public class BedrockMovePlayerTranslator extends PacketTranslator<MovePlayerPack } } - private boolean isInvalidNumber(float val) { + private static boolean isInvalidNumber(float val) { return Float.isNaN(val) || Float.isInfinite(val); } - private boolean isValidMove(GeyserSession session, Vector3f currentPosition, Vector3f newPosition) { + private static boolean isValidMove(GeyserSession session, Vector3f currentPosition, Vector3f newPosition) { if (isInvalidNumber(newPosition.getX()) || isInvalidNumber(newPosition.getY()) || isInvalidNumber(newPosition.getZ())) { return false; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerActionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerActionTranslator.java new file mode 100644 index 000000000..39f773418 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerActionTranslator.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 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.translator.protocol.bedrock.entity.player; + +import org.cloudburstmc.math.vector.Vector3i; +import org.cloudburstmc.protocol.bedrock.data.entity.EntityEventType; +import org.cloudburstmc.protocol.bedrock.packet.EntityEventPacket; +import org.cloudburstmc.protocol.bedrock.packet.PlayerActionPacket; +import org.cloudburstmc.protocol.bedrock.packet.UpdateAttributesPacket; +import org.geysermc.geyser.entity.type.Entity; +import org.geysermc.geyser.entity.type.ItemFrameEntity; +import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; +import org.geysermc.geyser.level.block.property.Properties; +import org.geysermc.geyser.level.block.type.BlockState; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.protocol.PacketTranslator; +import org.geysermc.geyser.translator.protocol.Translator; +import org.geysermc.mcprotocollib.protocol.data.game.entity.object.Direction; +import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; +import org.geysermc.mcprotocollib.protocol.data.game.entity.player.InteractAction; +import org.geysermc.mcprotocollib.protocol.data.game.entity.player.PlayerState; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundInteractPacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundPlayerCommandPacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundUseItemOnPacket; + +@Translator(packet = PlayerActionPacket.class) +public class BedrockPlayerActionTranslator extends PacketTranslator<PlayerActionPacket> { + + @Override + public void translate(GeyserSession session, PlayerActionPacket packet) { + // This packet was used more before server auth movement was needed, but it's still used for a couple things... + switch (packet.getAction()) { + case RESPAWN -> { + SessionPlayerEntity entity = session.getPlayerEntity(); + // Respawn process is finished and the server and client are both OK with respawning. + EntityEventPacket eventPacket = new EntityEventPacket(); + eventPacket.setRuntimeEntityId(entity.getGeyserId()); + eventPacket.setType(EntityEventType.RESPAWN); + eventPacket.setData(0); + session.sendUpstreamPacket(eventPacket); + // Resend attributes or else in rare cases the user can think they're not dead when they are, upon joining the server + UpdateAttributesPacket attributesPacket = new UpdateAttributesPacket(); + attributesPacket.setRuntimeEntityId(entity.getGeyserId()); + attributesPacket.getAttributes().addAll(entity.getAttributes().values()); + session.sendUpstreamPacket(attributesPacket); + + // Bounding box must be sent after a player dies and respawns since 1.19.40 + entity.updateBoundingBox(); + + // Needed here since 1.19.81 for dimension switching + session.getEntityCache().updateBossBars(); + } + case STOP_SLEEP -> { + ServerboundPlayerCommandPacket stopSleepingPacket = new ServerboundPlayerCommandPacket(session.getPlayerEntity().getEntityId(), PlayerState.LEAVE_BED); + session.sendDownstreamGamePacket(stopSleepingPacket); + } + case DIMENSION_CHANGE_REQUEST_OR_CREATIVE_DESTROY_BLOCK -> { // Used by client to get book from lecterns and items from item frame in creative mode since 1.20.70 + Vector3i vector = packet.getBlockPosition(); + BlockState state = session.getGeyser().getWorldManager().blockAt(session, vector); + + if (state.getValue(Properties.HAS_BOOK, false)) { + session.setDroppingLecternBook(true); + + ServerboundUseItemOnPacket blockPacket = new ServerboundUseItemOnPacket( + vector, + Direction.DOWN, + Hand.MAIN_HAND, + 0, 0, 0, + false, + false, + session.getWorldCache().nextPredictionSequence()); + session.sendDownstreamGamePacket(blockPacket); + break; + } + + Entity itemFrame = ItemFrameEntity.getItemFrameEntity(session, vector); + if (itemFrame != null) { + ServerboundInteractPacket interactPacket = new ServerboundInteractPacket(itemFrame.getEntityId(), + InteractAction.ATTACK, Hand.MAIN_HAND, session.isSneaking()); + session.sendDownstreamGamePacket(interactPacket); + } + } + } + } +} diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java new file mode 100644 index 000000000..5465de51c --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java @@ -0,0 +1,205 @@ +/* + * Copyright (c) 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.translator.protocol.bedrock.entity.player; + +import org.cloudburstmc.math.vector.Vector3f; +import org.cloudburstmc.math.vector.Vector3i; +import org.cloudburstmc.protocol.bedrock.data.LevelEvent; +import org.cloudburstmc.protocol.bedrock.data.PlayerActionType; +import org.cloudburstmc.protocol.bedrock.data.PlayerAuthInputData; +import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; +import org.cloudburstmc.protocol.bedrock.data.inventory.transaction.ItemUseTransaction; +import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket; +import org.cloudburstmc.protocol.bedrock.packet.PlayerActionPacket; +import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket; +import org.geysermc.geyser.entity.EntityDefinitions; +import org.geysermc.geyser.entity.type.Entity; +import org.geysermc.geyser.entity.type.ItemFrameEntity; +import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; +import org.geysermc.geyser.level.block.type.Block; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.protocol.PacketTranslator; +import org.geysermc.geyser.translator.protocol.Translator; +import org.geysermc.geyser.translator.protocol.bedrock.BedrockInventoryTransactionTranslator; +import org.geysermc.mcprotocollib.protocol.data.game.entity.object.Direction; +import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; +import org.geysermc.mcprotocollib.protocol.data.game.entity.player.InteractAction; +import org.geysermc.mcprotocollib.protocol.data.game.entity.player.PlayerAction; +import org.geysermc.mcprotocollib.protocol.data.game.entity.player.PlayerState; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundInteractPacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundPlayerAbilitiesPacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundPlayerActionPacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundPlayerCommandPacket; + +import java.util.Set; + +@Translator(packet = PlayerAuthInputPacket.class) +public class BedrockPlayerAuthInputTranslator extends PacketTranslator<PlayerAuthInputPacket> { + + @Override + public void translate(GeyserSession session, PlayerAuthInputPacket packet) { + SessionPlayerEntity entity = session.getPlayerEntity(); + session.getInputCache().processInputs(packet); + + BedrockMovePlayerTranslator.translate(session, packet); + + Set<PlayerAuthInputData> inputData = packet.getInputData(); + if (!inputData.isEmpty()) { + for (PlayerAuthInputData input : inputData) { + switch (input) { + case PERFORM_ITEM_INTERACTION -> processItemUseTransaction(session, packet.getItemUseTransaction()); + case PERFORM_BLOCK_ACTIONS -> BedrockBlockActions.translate(session, packet.getPlayerActions()); + case START_SNEAKING -> { + ServerboundPlayerCommandPacket startSneakPacket = new ServerboundPlayerCommandPacket(entity.getEntityId(), PlayerState.START_SNEAKING); + session.sendDownstreamGamePacket(startSneakPacket); + + session.startSneaking(); + } + case STOP_SNEAKING -> { + ServerboundPlayerCommandPacket stopSneakPacket = new ServerboundPlayerCommandPacket(entity.getEntityId(), PlayerState.STOP_SNEAKING); + session.sendDownstreamGamePacket(stopSneakPacket); + + session.stopSneaking(); + } + case START_SPRINTING -> { + if (!entity.getFlag(EntityFlag.SWIMMING)) { + ServerboundPlayerCommandPacket startSprintPacket = new ServerboundPlayerCommandPacket(entity.getEntityId(), PlayerState.START_SPRINTING); + session.sendDownstreamGamePacket(startSprintPacket); + session.setSprinting(true); + } + } + case STOP_SPRINTING -> { + if (!entity.getFlag(EntityFlag.SWIMMING)) { + ServerboundPlayerCommandPacket stopSprintPacket = new ServerboundPlayerCommandPacket(entity.getEntityId(), PlayerState.STOP_SPRINTING); + session.sendDownstreamGamePacket(stopSprintPacket); + } + session.setSprinting(false); + } + case START_SWIMMING -> session.setSwimming(true); + case STOP_SWIMMING -> session.setSwimming(false); + case START_FLYING -> { // Since 1.20.30 + if (session.isCanFly()) { + if (session.getGameMode() == GameMode.SPECTATOR) { + // should already be flying + session.sendAdventureSettings(); + break; + } + + if (session.getPlayerEntity().getFlag(EntityFlag.SWIMMING) && session.getCollisionManager().isPlayerInWater()) { + // As of 1.18.1, Java Edition cannot fly while in water, but it can fly while crawling + // If this isn't present, swimming on a 1.13.2 server and then attempting to fly will put you into a flying/swimming state that is invalid on JE + session.sendAdventureSettings(); + break; + } + + session.setFlying(true); + session.sendDownstreamGamePacket(new ServerboundPlayerAbilitiesPacket(true)); + } else { + // update whether we can fly + session.sendAdventureSettings(); + // stop flying + PlayerActionPacket stopFlyingPacket = new PlayerActionPacket(); + stopFlyingPacket.setRuntimeEntityId(session.getPlayerEntity().getGeyserId()); + stopFlyingPacket.setAction(PlayerActionType.STOP_FLYING); + stopFlyingPacket.setBlockPosition(Vector3i.ZERO); + stopFlyingPacket.setResultPosition(Vector3i.ZERO); + stopFlyingPacket.setFace(0); + session.sendUpstreamPacket(stopFlyingPacket); + } + } + case STOP_FLYING -> { + session.setFlying(false); + session.sendDownstreamGamePacket(new ServerboundPlayerAbilitiesPacket(false)); + } + case START_GLIDING -> { + // Otherwise gliding will not work in creative + ServerboundPlayerAbilitiesPacket playerAbilitiesPacket = new ServerboundPlayerAbilitiesPacket(false); + session.sendDownstreamGamePacket(playerAbilitiesPacket); + sendPlayerGlideToggle(session, entity); + } + case STOP_GLIDING -> sendPlayerGlideToggle(session, entity); + } + } + } + } + + private static void sendPlayerGlideToggle(GeyserSession session, Entity entity) { + ServerboundPlayerCommandPacket glidePacket = new ServerboundPlayerCommandPacket(entity.getEntityId(), PlayerState.START_ELYTRA_FLYING); + session.sendDownstreamGamePacket(glidePacket); + } + + private static void processItemUseTransaction(GeyserSession session, ItemUseTransaction transaction) { + if (transaction.getActionType() == 2) { + int blockState = session.getGameMode() == GameMode.CREATIVE ? + session.getGeyser().getWorldManager().getBlockAt(session, transaction.getBlockPosition()) : session.getBreakingBlock(); + + session.setLastBlockPlaced(null); + session.setLastBlockPlacePosition(null); + + // Same deal with vanilla block placing as above. + if (!session.getWorldBorder().isInsideBorderBoundaries()) { + BedrockInventoryTransactionTranslator.restoreCorrectBlock(session, transaction.getBlockPosition()); + return; + } + + Vector3f playerPosition = session.getPlayerEntity().getPosition(); + playerPosition = playerPosition.down(EntityDefinitions.PLAYER.offset() - session.getEyeHeight()); + + if (!BedrockInventoryTransactionTranslator.canInteractWithBlock(session, playerPosition, transaction.getBlockPosition())) { + BedrockInventoryTransactionTranslator.restoreCorrectBlock(session, transaction.getBlockPosition()); + return; + } + + int sequence = session.getWorldCache().nextPredictionSequence(); + session.getWorldCache().markPositionInSequence(transaction.getBlockPosition()); + // -1 means we don't know what block they're breaking + if (blockState == -1) { + blockState = Block.JAVA_AIR_ID; + } + + LevelEventPacket blockBreakPacket = new LevelEventPacket(); + blockBreakPacket.setType(LevelEvent.PARTICLE_DESTROY_BLOCK); + blockBreakPacket.setPosition(transaction.getBlockPosition().toFloat()); + blockBreakPacket.setData(session.getBlockMappings().getBedrockBlockId(blockState)); + session.sendUpstreamPacket(blockBreakPacket); + session.setBreakingBlock(-1); + + Entity itemFrameEntity = ItemFrameEntity.getItemFrameEntity(session, transaction.getBlockPosition()); + if (itemFrameEntity != null) { + ServerboundInteractPacket attackPacket = new ServerboundInteractPacket(itemFrameEntity.getEntityId(), + InteractAction.ATTACK, session.isSneaking()); + session.sendDownstreamGamePacket(attackPacket); + return; + } + + PlayerAction action = session.getGameMode() == GameMode.CREATIVE ? PlayerAction.START_DIGGING : PlayerAction.FINISH_DIGGING; + ServerboundPlayerActionPacket breakPacket = new ServerboundPlayerActionPacket(action, transaction.getBlockPosition(), Direction.VALUES[transaction.getBlockFace()], sequence); + session.sendDownstreamGamePacket(breakPacket); + } else { + session.getGeyser().getLogger().error("Unhandled item use transaction type!"); + } + } +} diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java index 49c62989c..9cb238c71 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.translator.protocol.java; +import com.google.common.collect.Lists; import it.unimi.dsi.fastutil.Pair; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; @@ -32,6 +33,7 @@ import net.kyori.adventure.key.Key; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.RecipeUnlockingRequirement; import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapedRecipeData; +import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.SmithingTransformRecipeData; import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.DefaultDescriptor; import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.ItemDescriptorWithCount; import org.cloudburstmc.protocol.bedrock.packet.CraftingDataPacket; @@ -52,6 +54,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.RecipeDispla import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.RecipeDisplayEntry; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.ShapedCraftingRecipeDisplay; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.ShapelessCraftingRecipeDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.SmithingRecipeDisplay; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.CompositeSlotDisplay; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.EmptySlotDisplay; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.ItemSlotDisplay; @@ -61,11 +64,12 @@ import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.TagSlot import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundRecipeBookAddPacket; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Set; import java.util.UUID; @Translator(packet = ClientboundRecipeBookAddPacket.class) @@ -104,17 +108,17 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec boolean empty = true; boolean complexInputs = false; - List<ItemDescriptorWithCount[]> inputs = new ArrayList<>(shapedRecipe.ingredients().size()); + List<List<ItemDescriptorWithCount>> inputs = new ArrayList<>(shapedRecipe.ingredients().size()); for (SlotDisplay input : shapedRecipe.ingredients()) { - ItemDescriptorWithCount[] translated = translateToInput(session, input); + List<ItemDescriptorWithCount> translated = translateToInput(session, input); if (translated == null) { continue; } inputs.add(translated); - if (translated.length != 1 || translated[0] != ItemDescriptorWithCount.EMPTY) { + if (translated.size() != 1 || translated.get(0) != ItemDescriptorWithCount.EMPTY) { empty = false; } - complexInputs |= translated.length > 1; + complexInputs |= translated.size() > 1; } if (empty) { // Crashes Bedrock 1.19.70 otherwise @@ -123,15 +127,31 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec } if (complexInputs) { - - } else { - String recipeId = Integer.toString(contents.id()); - craftingDataPacket.getCraftingData().add(ShapedRecipeData.shaped(recipeId, - shapedRecipe.width(), shapedRecipe.height(), inputs.stream().map(descriptors -> descriptors[0]).toList(), - Collections.singletonList(output), UUID.randomUUID(), "crafting_table", 0, netId++, false, RecipeUnlockingRequirement.INVALID)); - recipesPacket.getUnlockedRecipes().add(recipeId); - javaToBedrockRecipeIds.put(contents.id(), Collections.singletonList(recipeId)); + System.out.println(inputs); + if (true) continue; + List<List<ItemDescriptorWithCount>> processedInputs = Lists.cartesianProduct(inputs); + System.out.println(processedInputs.size()); + if (processedInputs.size() <= 500) { // Do not let us process giant lists. + List<String> bedrockRecipeIds = new ArrayList<>(); + for (int i = 0; i < processedInputs.size(); i++) { + List<ItemDescriptorWithCount> possibleInput = processedInputs.get(i); + String recipeId = contents.id() + "_" + i; + craftingDataPacket.getCraftingData().add(ShapedRecipeData.shaped(recipeId, + shapedRecipe.width(), shapedRecipe.height(), possibleInput, + Collections.singletonList(output), UUID.randomUUID(), "crafting_table", 0, netId++, false, RecipeUnlockingRequirement.INVALID)); + recipesPacket.getUnlockedRecipes().add(recipeId); + bedrockRecipeIds.add(recipeId); + } + javaToBedrockRecipeIds.put(contents.id(), bedrockRecipeIds); + continue; + } } + String recipeId = Integer.toString(contents.id()); + craftingDataPacket.getCraftingData().add(ShapedRecipeData.shaped(recipeId, + shapedRecipe.width(), shapedRecipe.height(), inputs.stream().map(descriptors -> descriptors.get(0)).toList(), + Collections.singletonList(output), UUID.randomUUID(), "crafting_table", 0, netId++, false, RecipeUnlockingRequirement.INVALID)); + recipesPacket.getUnlockedRecipes().add(recipeId); + javaToBedrockRecipeIds.put(contents.id(), Collections.singletonList(recipeId)); } case CRAFTING_SHAPELESS -> { ShapelessCraftingRecipeDisplay shapelessRecipe = (ShapelessCraftingRecipeDisplay) display; @@ -147,6 +167,42 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec output = output.toBuilder().tag(null).build(); } } + case SMITHING -> { + if (true) { + System.out.println(display); + continue; + } + SmithingRecipeDisplay smithingRecipe = (SmithingRecipeDisplay) display; + Pair<Item, ItemData> output = translateToOutput(session, smithingRecipe.result()); + if (output == null) { + continue; + } + + List<ItemDescriptorWithCount> bases = translateToInput(session, smithingRecipe.base()); + List<ItemDescriptorWithCount> templates = translateToInput(session, smithingRecipe.template()); + List<ItemDescriptorWithCount> additions = translateToInput(session, smithingRecipe.addition()); + + if (bases == null || templates == null || additions == null) { + continue; + } + + int i = 0; + List<String> bedrockRecipeIds = new ArrayList<>(); + for (ItemDescriptorWithCount template : templates) { + for (ItemDescriptorWithCount base : bases) { + for (ItemDescriptorWithCount addition : additions) { + String id = contents.id() + "_" + i++; + // Note: vanilla inputs use aux value of Short.MAX_VALUE + craftingDataPacket.getCraftingData().add(SmithingTransformRecipeData.of(id, + template, base, addition, output.right(), "smithing_table", netId++)); + + recipesPacket.getUnlockedRecipes().add(id); + bedrockRecipeIds.add(id); + } + } + } + javaToBedrockRecipeIds.put(contents.id(), bedrockRecipeIds); + } } } @@ -159,11 +215,11 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec TAG_TO_ITEM_DESCRIPTOR_CACHE.remove(); } - private static final ThreadLocal<Map<int[], ItemDescriptorWithCount[]>> TAG_TO_ITEM_DESCRIPTOR_CACHE = ThreadLocal.withInitial(Object2ObjectOpenHashMap::new); + private static final ThreadLocal<Map<int[], List<ItemDescriptorWithCount>>> TAG_TO_ITEM_DESCRIPTOR_CACHE = ThreadLocal.withInitial(Object2ObjectOpenHashMap::new); - private ItemDescriptorWithCount[] translateToInput(GeyserSession session, SlotDisplay slotDisplay) { + private List<ItemDescriptorWithCount> translateToInput(GeyserSession session, SlotDisplay slotDisplay) { if (slotDisplay instanceof EmptySlotDisplay) { - return new ItemDescriptorWithCount[] {ItemDescriptorWithCount.EMPTY}; + return Collections.singletonList(ItemDescriptorWithCount.EMPTY); } if (slotDisplay instanceof CompositeSlotDisplay composite) { if (composite.contents().size() == 1) { @@ -172,23 +228,23 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec return composite.contents().stream() .map(subDisplay -> translateToInput(session, subDisplay)) .filter(Objects::nonNull) - .flatMap(Arrays::stream) - .toArray(ItemDescriptorWithCount[]::new); + .flatMap(List::stream) + .toList(); } if (slotDisplay instanceof ItemSlotDisplay itemSlot) { - return new ItemDescriptorWithCount[] {fromItem(session, itemSlot.item())}; + return Collections.singletonList(fromItem(session, itemSlot.item())); } if (slotDisplay instanceof ItemStackSlotDisplay itemStackSlot) { ItemData item = ItemTranslator.translateToBedrock(session, itemStackSlot.itemStack()); - return new ItemDescriptorWithCount[] {ItemDescriptorWithCount.fromItem(item)}; + return Collections.singletonList(ItemDescriptorWithCount.fromItem(item)); } if (slotDisplay instanceof TagSlotDisplay tagSlot) { Key tag = tagSlot.tag(); int[] items = session.getTagCache().getRaw(new Tag<>(JavaRegistries.ITEM, tag)); // I don't like this... if (items == null || items.length == 0) { - return new ItemDescriptorWithCount[] {ItemDescriptorWithCount.EMPTY}; + return Collections.singletonList(ItemDescriptorWithCount.EMPTY); } else if (items.length == 1) { - return new ItemDescriptorWithCount[] {fromItem(session, items[0])}; + return Collections.singletonList(fromItem(session, items[0])); } else { // Cache is implemented as, presumably, an item tag will be used multiple times in succession // (E.G. a chest with planks tags) @@ -205,14 +261,14 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec // }).collect(Collectors.joining(" || ")); // if ("minecraft:planks".equals(tag.toString())) { // String molang = "q.any_tag('minecraft:planks')"; -// return new ItemDescriptorWithCount[] {new ItemDescriptorWithCount(new MolangDescriptor(molang, 10), 1)}; +// return Collections.singletonList(new ItemDescriptorWithCount(new MolangDescriptor(molang, 10), 1)); // } - return null; -// Set<ItemDescriptorWithCount> itemDescriptors = new HashSet<>(); -// for (int item : key) { -// itemDescriptors.add(fromItem(session, item)); -// } -// return itemDescriptors.toArray(ItemDescriptorWithCount[]::new); + + Set<ItemDescriptorWithCount> itemDescriptors = new HashSet<>(); + for (int item : key) { + itemDescriptors.add(fromItem(session, item)); + } + return new ArrayList<>(itemDescriptors); // This, or a list from the start with contains -> add? }); } } @@ -243,40 +299,4 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec ItemMapping mapping = session.getItemMappings().getMapping(item); return new ItemDescriptorWithCount(new DefaultDescriptor(mapping.getBedrockDefinition(), mapping.getBedrockData()), 1); // Need to check count } - -// private static ItemDescriptorWithCount[][] combinations(ItemDescriptorWithCount[] itemDescriptors) { -// int totalCombinations = 1; -// for (Set<ItemDescriptorWithCount> optionSet : squashedOptions.keySet()) { -// totalCombinations *= optionSet.size(); -// } -// if (totalCombinations > 500) { -// ItemDescriptorWithCount[] translatedItems = new ItemDescriptorWithCount[ingredients.length]; -// for (int i = 0; i < ingredients.length; i++) { -// if (ingredients[i].getOptions().length > 0) { -// translatedItems[i] = ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, ingredients[i].getOptions()[0])); -// } else { -// translatedItems[i] = ItemDescriptorWithCount.EMPTY; -// } -// } -// return new ItemDescriptorWithCount[][]{translatedItems}; -// } -// List<Set<ItemDescriptorWithCount>> sortedSets = new ArrayList<>(squashedOptions.keySet()); -// sortedSets.sort(Comparator.comparing(Set::size, Comparator.reverseOrder())); -// ItemDescriptorWithCount[][] combinations = new ItemDescriptorWithCount[totalCombinations][ingredients.length]; -// int x = 1; -// for (Set<ItemDescriptorWithCount> set : sortedSets) { -// IntSet slotSet = squashedOptions.get(set); -// int i = 0; -// for (ItemDescriptorWithCount item : set) { -// for (int j = 0; j < totalCombinations / set.size(); j++) { -// final int comboIndex = (i * x) + (j % x) + ((j / x) * set.size() * x); -// for (IntIterator it = slotSet.iterator(); it.hasNext(); ) { -// combinations[comboIndex][it.nextInt()] = item; -// } -// } -// i++; -// } -// x *= set.size(); -// } -// } } 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 729ff965b..de62fb922 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 @@ -154,10 +154,9 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator<ClientboundUpd int recipeNetId = netId++; UUID uuid = UUID.randomUUID(); // We need to register stonecutting recipes, so they show up on Bedrock - // (Implementation note: recipe ID creates the order which stonecutting recipes are shown in stonecutter + // (Implementation note: recipe ID creates the order which stonecutting recipes are shown in stonecutter) craftingDataPacket.getCraftingData().add(ShapelessRecipeData.shapeless("stonecutter_" + javaInput + "_" + buttonId, Collections.singletonList(descriptor), Collections.singletonList(output), uuid, "stonecutter", 0, recipeNetId, RecipeUnlockingRequirement.INVALID)); - session.getGeyser().getLogger().info(mapping.getJavaItem().javaIdentifier() + " " + buttonId + " " + recipeNetId); // Save the recipe list for reference when crafting // Add the net ID as the key and the button required + output for the value From 1a04aa6ea6c44071a84f3e8022d7f35e9f91fb5a Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Fri, 25 Oct 2024 02:15:51 +0800 Subject: [PATCH 016/165] Initial 1.21.3 changes for mod platforms --- .../platform/fabric/GeyserFabricBootstrap.java | 4 ++-- .../mod/fabric/src/main/resources/fabric.mod.json | 4 ++-- .../platform/neoforge/GeyserNeoForgeBootstrap.java | 8 +++++--- .../platform/mod/GeyserModCompressionDisabler.java | 4 ++-- .../platform/mod/GeyserModUpdateListener.java | 4 ++-- .../platform/mod/world/GeyserModWorldManager.java | 4 ++-- ...geyser.modrinth-uploading-conventions.gradle.kts | 2 +- core/build.gradle.kts | 4 ++++ core/src/main/resources/mappings | 2 +- gradle.properties | 5 ++++- gradle/libs.versions.toml | 13 +++++++------ 11 files changed, 32 insertions(+), 22 deletions(-) diff --git a/bootstrap/mod/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricBootstrap.java b/bootstrap/mod/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricBootstrap.java index 149246d59..96a60322b 100644 --- a/bootstrap/mod/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricBootstrap.java +++ b/bootstrap/mod/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricBootstrap.java @@ -32,7 +32,7 @@ import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.commands.CommandSourceStack; -import net.minecraft.world.entity.player.Player; +import net.minecraft.server.level.ServerPlayer; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.command.CommandRegistry; import org.geysermc.geyser.command.CommandSourceConverter; @@ -80,7 +80,7 @@ public class GeyserFabricBootstrap extends GeyserModBootstrap implements ModInit var sourceConverter = CommandSourceConverter.layered( CommandSourceStack.class, id -> getServer().getPlayerList().getPlayer(id), - Player::createCommandSourceStack, + ServerPlayer::createCommandSourceStack, () -> getServer().createCommandSourceStack(), // NPE if method reference is used, since server is not available yet ModCommandSource::new ); diff --git a/bootstrap/mod/fabric/src/main/resources/fabric.mod.json b/bootstrap/mod/fabric/src/main/resources/fabric.mod.json index 262f9833a..a801eb207 100644 --- a/bootstrap/mod/fabric/src/main/resources/fabric.mod.json +++ b/bootstrap/mod/fabric/src/main/resources/fabric.mod.json @@ -23,8 +23,8 @@ "geyser.mixins.json" ], "depends": { - "fabricloader": ">=0.15.11", + "fabricloader": ">=0.16.7", "fabric": "*", - "minecraft": ">=1.21" + "minecraft": ">=1.21.2" } } diff --git a/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/GeyserNeoForgeBootstrap.java b/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/GeyserNeoForgeBootstrap.java index ad56eda39..aa731befc 100644 --- a/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/GeyserNeoForgeBootstrap.java +++ b/bootstrap/mod/neoforge/src/main/java/org/geysermc/geyser/platform/neoforge/GeyserNeoForgeBootstrap.java @@ -26,7 +26,7 @@ package org.geysermc.geyser.platform.neoforge; import net.minecraft.commands.CommandSourceStack; -import net.minecraft.world.entity.player.Player; +import net.minecraft.server.level.ServerPlayer; import net.neoforged.bus.api.EventPriority; import net.neoforged.fml.ModContainer; import net.neoforged.fml.common.Mod; @@ -72,7 +72,7 @@ public class GeyserNeoForgeBootstrap extends GeyserModBootstrap { var sourceConverter = CommandSourceConverter.layered( CommandSourceStack.class, id -> getServer().getPlayerList().getPlayer(id), - Player::createCommandSourceStack, + ServerPlayer::createCommandSourceStack, () -> getServer().createCommandSourceStack(), ModCommandSource::new ); @@ -104,7 +104,9 @@ public class GeyserNeoForgeBootstrap extends GeyserModBootstrap { } private void onPlayerJoin(PlayerEvent.PlayerLoggedInEvent event) { - GeyserModUpdateListener.onPlayReady(event.getEntity()); + if (event.getEntity() instanceof ServerPlayer player) { + GeyserModUpdateListener.onPlayReady(player); + } } @Override diff --git a/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/GeyserModCompressionDisabler.java b/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/GeyserModCompressionDisabler.java index 631a21510..89ca53544 100644 --- a/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/GeyserModCompressionDisabler.java +++ b/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/GeyserModCompressionDisabler.java @@ -28,8 +28,8 @@ package org.geysermc.geyser.platform.mod; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelPromise; -import net.minecraft.network.protocol.login.ClientboundGameProfilePacket; import net.minecraft.network.protocol.login.ClientboundLoginCompressionPacket; +import net.minecraft.network.protocol.login.ClientboundLoginFinishedPacket; /** * Disables the compression packet (and the compression handlers from being added to the pipeline) for Geyser clients @@ -45,7 +45,7 @@ public class GeyserModCompressionDisabler extends ChannelOutboundHandlerAdapter Class<?> msgClass = msg.getClass(); // Don't let any compression packet get through if (!ClientboundLoginCompressionPacket.class.isAssignableFrom(msgClass)) { - if (ClientboundGameProfilePacket.class.isAssignableFrom(msgClass)) { + if (ClientboundLoginFinishedPacket.class.isAssignableFrom(msgClass)) { // We're past the point that a compression packet can be sent, so we can safely yeet ourselves away ctx.channel().pipeline().remove(this); diff --git a/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/GeyserModUpdateListener.java b/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/GeyserModUpdateListener.java index 6a724155f..ec34766dc 100644 --- a/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/GeyserModUpdateListener.java +++ b/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/GeyserModUpdateListener.java @@ -25,13 +25,13 @@ package org.geysermc.geyser.platform.mod; -import net.minecraft.world.entity.player.Player; +import net.minecraft.server.level.ServerPlayer; import org.geysermc.geyser.Permissions; import org.geysermc.geyser.platform.mod.command.ModCommandSource; import org.geysermc.geyser.util.VersionCheckUtils; public final class GeyserModUpdateListener { - public static void onPlayReady(Player player) { + public static void onPlayReady(ServerPlayer player) { // Should be creating this in the supplier, but we need it for the permission check. // Not a big deal currently because ModCommandSource doesn't load locale, so don't need to try to wait for it. ModCommandSource source = new ModCommandSource(player.createCommandSourceStack()); diff --git a/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/world/GeyserModWorldManager.java b/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/world/GeyserModWorldManager.java index 89452eba3..ec41a0d79 100644 --- a/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/world/GeyserModWorldManager.java +++ b/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/world/GeyserModWorldManager.java @@ -84,7 +84,7 @@ public class GeyserModWorldManager extends GeyserWorldManager { } Level level = player.level(); - if (y < level.getMinBuildHeight()) { + if (y < level.getMinY()) { return 0; } @@ -93,7 +93,7 @@ public class GeyserModWorldManager extends GeyserWorldManager { return 0; } - int worldOffset = level.getMinBuildHeight() >> 4; + int worldOffset = level.getMinY() >> 4; int chunkOffset = (y >> 4) - worldOffset; if (chunkOffset < chunk.getSections().length) { LevelChunkSection section = chunk.getSections()[chunkOffset]; diff --git a/build-logic/src/main/kotlin/geyser.modrinth-uploading-conventions.gradle.kts b/build-logic/src/main/kotlin/geyser.modrinth-uploading-conventions.gradle.kts index d2e207fa4..3c0d102f7 100644 --- a/build-logic/src/main/kotlin/geyser.modrinth-uploading-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/geyser.modrinth-uploading-conventions.gradle.kts @@ -12,7 +12,7 @@ modrinth { versionNumber.set(projectVersion(project)) versionType.set("beta") changelog.set(System.getenv("CHANGELOG") ?: "") - gameVersions.addAll("1.21", libs.minecraft.get().version as String) + gameVersions.addAll("1.21.2", libs.minecraft.get().version as String) failSilently.set(true) syncBodyFrom.set(rootProject.file("README.md").readText()) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index b0ea5fdf6..ff1de4dc0 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -6,6 +6,10 @@ plugins { id("io.freefair.lombok") } +tasks.test { + enabled = false +} + dependencies { constraints { implementation(libs.raknet) // Ensure protocol does not override the RakNet version diff --git a/core/src/main/resources/mappings b/core/src/main/resources/mappings index 93f207e7e..4594e8f88 160000 --- a/core/src/main/resources/mappings +++ b/core/src/main/resources/mappings @@ -1 +1 @@ -Subproject commit 93f207e7e9d73f58a7c8902f7deda9dcb0524c8e +Subproject commit 4594e8f88738d2e623d0854a8831b9033e60154a diff --git a/gradle.properties b/gradle.properties index 1ee0e12cc..09943725b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,10 @@ org.gradle.parallel=true org.gradle.caching=true org.gradle.vfs.watch=false +# TODO remove once architectury loom updates to 1.8 +loom.ignoreDependencyLoomVersionValidation=true + group=org.geysermc id=geyser -version=2.4.3-SNAPSHOT +version=2.5.0-SNAPSHOT description=Allows for players from Minecraft: Bedrock Edition to join Minecraft: Java Edition servers. diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e5582e5c1..a88862965 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -33,12 +33,12 @@ commodore = "2.2" bungeecord = "a7c6ede" velocity = "3.3.0-SNAPSHOT" viaproxy = "3.3.2-SNAPSHOT" -fabric-loader = "0.15.11" -fabric-api = "0.100.1+1.21" -neoforge-minecraft = "21.1.1" +fabric-loader = "0.16.7" +fabric-api = "0.106.1+1.21.3" +neoforge-minecraft = "21.3.0-beta" mixin = "0.8.5" mixinextras = "0.3.5" -minecraft = "1.21.1" +minecraft = "1.21.3" mockito = "5.+" # plugin versions @@ -105,7 +105,7 @@ mixinextras = { module = "io.github.llamalad7:mixinextras-common", version.ref = minecraft = { group = "com.mojang", name = "minecraft", version.ref = "minecraft" } -# Check these on https://modmuss50.me/fabric.html +# Check these on https://fabricmc.net/develop/ fabric-loader = { group = "net.fabricmc", name = "fabric-loader", version.ref = "fabric-loader" } fabric-api = { group = "net.fabricmc.fabric-api", name = "fabric-api", version.ref = "fabric-api" } @@ -120,7 +120,8 @@ 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" } minecraftauth = { group = "net.raphimc", name = "MinecraftAuth", version.ref = "minecraftauth" } -mcprotocollib = { group = "org.geysermc.mcprotocollib", name = "protocol", version.ref = "mcprotocollib" } +#mcprotocollib = { group = "org.geysermc.mcprotocollib", name = "protocol", version.ref = "mcprotocollib" } +mcprotocollib = { group = "com.github.geysermc", name = "mcprotocollib", version = "feature~1.21.2-SNAPSHOT"} 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 787dc244c86531bc8ad19f6b888129be143500e0 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Thu, 24 Oct 2024 19:27:12 -0400 Subject: [PATCH 017/165] onGround works --- .../level/physics/CollisionManager.java | 78 +++++++++---------- .../player/BedrockMovePlayerTranslator.java | 17 ++-- .../org/geysermc/geyser/util/BlockUtils.java | 4 - 3 files changed, 46 insertions(+), 53 deletions(-) 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 5c87993df..c5f986499 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 @@ -198,22 +198,22 @@ public class CollisionManager { position = playerBoundingBox.getBottomCenter(); - boolean newOnGround = adjustedMovement.getY() != movement.getY() && movement.getY() < 0; + boolean onGround = (adjustedMovement.getY() != movement.getY() && movement.getY() < 0) || isOnGround(); // Send corrected position to Bedrock if they differ by too much to prevent de-syncs - if (/*onGround != newOnGround || */movement.distanceSquared(adjustedMovement) > INCORRECT_MOVEMENT_THRESHOLD) { + if (movement.distanceSquared(adjustedMovement) > INCORRECT_MOVEMENT_THRESHOLD) { PlayerEntity playerEntity = session.getPlayerEntity(); // Client will dismount if on a vehicle if (playerEntity.getVehicle() == null && pistonCache.getPlayerMotion().equals(Vector3f.ZERO) && !pistonCache.isPlayerSlimeCollision()) { - playerEntity.moveAbsolute(position.toFloat(), playerEntity.getYaw(), playerEntity.getPitch(), playerEntity.getHeadYaw(), newOnGround, true); + playerEntity.moveAbsolute(position.toFloat(), playerEntity.getYaw(), playerEntity.getPitch(), playerEntity.getHeadYaw(), onGround, true); } } - if (!newOnGround) { + if (!onGround) { // Trim the position to prevent rounding errors that make Java think we are clipping into a block position = Vector3d.from(position.getX(), Double.parseDouble(DECIMAL_FORMAT.format(position.getY())), position.getZ()); } - return new CollisionResult(position, TriState.byBoolean(newOnGround)); + return new CollisionResult(position, TriState.byBoolean(onGround)); } // TODO: This makes the player look upwards for some reason, rotation values must be wrong @@ -415,44 +415,38 @@ public class CollisionManager { return BlockUtils.getCollision(blockId); } - /** - * @return true if the block located at the player's floor position plus 1 would intersect with the player, - * were they not sneaking - */ - public boolean mustPlayerSneakHere() { - return checkPose(EntityDefinitions.PLAYER.height()); - } - - /** - * @return true if the block located at the player's floor position plus 1 would intersect with the player, - * were they not crawling - */ - public boolean mustPlayerCrawlHere() { - return checkPose(PlayerEntity.SNEAKING_POSE_HEIGHT); - } - - /** - * @param height check and see if this height is invalid in the current player position - */ - private boolean checkPose(float height) { - Vector3i position = session.getPlayerEntity().getPosition().toInt(); - BlockCollision collision = BlockUtils.getCollisionAt(session, position); - if (collision != null) { - // Determine, if the player's bounding box *were* at full height, if it would intersect with the block - // at the current location. - double originalY = playerBoundingBox.getMiddleY(); - double originalHeight = playerBoundingBox.getSizeY(); - double standingY = originalY - (originalHeight / 2.0) + (height / 2.0); - - playerBoundingBox.setSizeY(EntityDefinitions.PLAYER.height()); - playerBoundingBox.setMiddleY(standingY); - boolean result = collision.checkIntersection(position, playerBoundingBox); - result |= session.getPistonCache().checkCollision(position, playerBoundingBox); - playerBoundingBox.setSizeY(originalHeight); - playerBoundingBox.setMiddleY(originalY); - return result; + private boolean isOnGround() { + // Someone smarter than me at collisions plz check this. + Vector3d bottomCenter = playerBoundingBox.getBottomCenter(); + Vector3i groundPos = Vector3i.from(bottomCenter.getX(), bottomCenter.getY() - 1, bottomCenter.getZ()); + BlockCollision collision = BlockUtils.getCollisionAt(session, groundPos); + if (collision == null) { + return false; // Probably air. } - return false; + + // Hack to not check below the player + playerBoundingBox.setSizeY(playerBoundingBox.getSizeY() - 0.001); + playerBoundingBox.setMiddleY(playerBoundingBox.getMiddleY() + 0.002); + + boolean intersected = collision.checkIntersection(groundPos.getX(), groundPos.getY(), groundPos.getZ(), playerBoundingBox); + + playerBoundingBox.setSizeY(playerBoundingBox.getSizeY() + 0.001); + playerBoundingBox.setMiddleY(playerBoundingBox.getMiddleY() - 0.002); + + boolean result; + if (intersected) { + result = true; + } else { + // Hack to check slightly below the player + playerBoundingBox.setSizeY(playerBoundingBox.getSizeY() + 0.001); + playerBoundingBox.setMiddleY(playerBoundingBox.getMiddleY() - 0.002); + + result = collision.checkIntersection(groundPos.getX(), groundPos.getY(), groundPos.getZ(), playerBoundingBox); + + playerBoundingBox.setSizeY(playerBoundingBox.getSizeY() - 0.001); + playerBoundingBox.setMiddleY(playerBoundingBox.getMiddleY() + 0.002); + } + return result; } /** diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java index 22732ad01..a22c44089 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java @@ -48,14 +48,17 @@ public final class BedrockMovePlayerTranslator { SessionPlayerEntity entity = session.getPlayerEntity(); if (!session.isSpawned()) return; - // Send book update before the player moves - session.getBookEditCache().checkForSend(); - boolean actualPositionChanged = !entity.getPosition().equals(packet.getPosition()); - // Ignore movement packets until Bedrock's position matches the teleported position - if (session.getUnconfirmedTeleport() != null && actualPositionChanged) { - session.confirmTeleport(packet.getPosition().toDouble().sub(0, EntityDefinitions.PLAYER.offset(), 0)); - return; + + if (actualPositionChanged) { + // Send book update before the player moves + session.getBookEditCache().checkForSend(); + + // Ignore movement packets until Bedrock's position matches the teleported position + if (session.getUnconfirmedTeleport() != null) { + session.confirmTeleport(packet.getPosition().toDouble().sub(0, EntityDefinitions.PLAYER.offset(), 0)); + return; + } } if (entity.getBedPosition() != null) { 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 e73fe1a34..6367b2d14 100644 --- a/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java @@ -223,10 +223,6 @@ public final class BlockUtils { return getCollision(session.getGeyser().getWorldManager().getBlockAt(session, blockPos)); } - public static BlockCollision getCollisionAt(GeyserSession session, int x, int y, int z) { - return getCollision(session.getGeyser().getWorldManager().getBlockAt(session, x, y, z)); - } - private BlockUtils() { } } From 67dbd869e4774ce89edbd9166883373268e4578d Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Thu, 24 Oct 2024 19:39:45 -0400 Subject: [PATCH 018/165] Update README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 418bfcdeb..9e53b1d85 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,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! ## Supported Versions -Geyser is currently supporting Minecraft Bedrock 1.20.80 - 1.21.40 and Minecraft Java 1.21/1.21.1. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). +Geyser is currently supporting Minecraft Bedrock 1.20.80 - 1.21.40 and Minecraft Java 1.21.2/1.21.3. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). ## Setting Up Take a look [here](https://geysermc.org/wiki/geyser/setup/) for how to set up Geyser. From 6331cb6d586d1a19bf9d0daabb535d82c9a58e29 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Thu, 24 Oct 2024 19:52:18 -0400 Subject: [PATCH 019/165] Fix pulling skulls/heads from creative inventory --- .../populator/ItemRegistryPopulator.java | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) 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 12b5ebb0e..0b61c7999 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 @@ -33,7 +33,13 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntSet; -import it.unimi.dsi.fastutil.objects.*; +import it.unimi.dsi.fastutil.objects.Object2IntMap; +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; @@ -66,10 +72,22 @@ import org.geysermc.geyser.item.type.BlockItem; import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.Registries; -import org.geysermc.geyser.registry.type.*; +import org.geysermc.geyser.registry.type.BlockMappings; +import org.geysermc.geyser.registry.type.GeyserBedrockBlock; +import org.geysermc.geyser.registry.type.GeyserMappingItem; +import org.geysermc.geyser.registry.type.ItemMapping; +import org.geysermc.geyser.registry.type.ItemMappings; +import org.geysermc.geyser.registry.type.NonVanillaItemRegistration; +import org.geysermc.geyser.registry.type.PaletteItem; import java.io.InputStream; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; /** @@ -96,7 +114,13 @@ public class ItemRegistryPopulator { paletteVersions.add(new PaletteVersion("1_21_0", Bedrock_v685.CODEC.getProtocolVersion(), Collections.emptyMap(), Conversion712_685::remapItem)); paletteVersions.add(new PaletteVersion("1_21_20", Bedrock_v712.CODEC.getProtocolVersion(), Collections.emptyMap(), Conversion729_712::remapItem)); paletteVersions.add(new PaletteVersion("1_21_30", Bedrock_v729.CODEC.getProtocolVersion())); - paletteVersions.add(new PaletteVersion("1_21_40", Bedrock_v748.CODEC.getProtocolVersion())); + paletteVersions.add(new PaletteVersion("1_21_40", Bedrock_v748.CODEC.getProtocolVersion(), Collections.emptyMap(), (item, mapping) -> { + String identifier = item.javaIdentifier(); + if (identifier.endsWith("_head") || identifier.endsWith("_skull")) { + return mapping.withBedrockIdentifier(item.javaIdentifier()); + } + return mapping; + })); GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); From 2025a2dc3ac9c13853642cb12f078588ede1845e Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Fri, 25 Oct 2024 14:41:35 -0400 Subject: [PATCH 020/165] Fix teleport packets; implement new inventory packets --- .../geysermc/geyser/entity/type/Entity.java | 14 +++-- .../geyser/inventory/GeyserItemStack.java | 3 + .../entity/player/BedrockBlockActions.java | 1 - .../JavaEntityPositionSyncTranslator.java | 2 +- .../player/JavaPlayerPositionTranslator.java | 12 ++-- .../JavaContainerSetSlotTranslator.java | 11 +--- .../JavaSetCursorItemTranslator.java | 44 +++++++++++++ .../JavaSetPlayerInventoryTranslator.java | 61 +++++++++++++++++++ .../geysermc/geyser/util/InventoryUtils.java | 56 +++++++++-------- 9 files changed, 158 insertions(+), 46 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaSetCursorItemTranslator.java create mode 100644 core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaSetPlayerInventoryTranslator.java 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 a016916f0..7f1eca8d6 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 @@ -25,12 +25,6 @@ package org.geysermc.geyser.entity.type; -import java.util.Collections; -import java.util.EnumSet; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.UUID; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; @@ -67,6 +61,13 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEnt import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; import org.geysermc.mcprotocollib.protocol.data.game.entity.type.EntityType; +import java.util.Collections; +import java.util.EnumSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; + @Getter @Setter public class Entity implements GeyserEntity { @@ -89,6 +90,7 @@ public class Entity implements GeyserEntity { /** * x = Yaw, y = Pitch, z = HeadYaw + * Java: Y = Yaw, X = Pitch */ protected float yaw; protected float pitch; 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 744ad70b6..b843b3d4d 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java @@ -164,6 +164,9 @@ public class GeyserItemStack { } public Item asItem() { + if (isEmpty()) { + return Items.AIR; + } if (item == null) { return (item = Registries.JAVA_ITEMS.get().get(javaId)); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockBlockActions.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockBlockActions.java index 0d4da1cb1..8a56915fb 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockBlockActions.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockBlockActions.java @@ -209,7 +209,6 @@ final class BedrockBlockActions { attributesPacket.getAttributes().addAll(entity.getAttributes().values()); session.sendUpstreamPacket(attributesPacket); } - case JUMP -> entity.setOnGround(false); // Increase block break time while jumping case MISSED_SWING -> { // Java edition sends a cooldown when hitting air. // Normally handled by BedrockLevelSoundEventTranslator, but there is no sound on Java for this. diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityPositionSyncTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityPositionSyncTranslator.java index ecc153ce0..fd7fa09ca 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityPositionSyncTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityPositionSyncTranslator.java @@ -47,6 +47,6 @@ public class JavaEntityPositionSyncTranslator extends PacketTranslator<Clientbou clientVehicle.getVehicleComponent().moveAbsolute(pos.getX(), pos.getY(), pos.getZ()); } - entity.teleport(pos.toFloat(), packet.getXRot(), packet.getYRot(), packet.isOnGround()); + entity.teleport(pos.toFloat(), packet.getYRot(), packet.getXRot(), packet.isOnGround()); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java index e73e25a93..ca1b95997 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java @@ -57,9 +57,9 @@ public class JavaPlayerPositionTranslator extends PacketTranslator<ClientboundPl // TODO this behavior seems outdated (1.21.2). // The server sends an absolute teleport everytime the player is respawned entity.setPosition(pos.toFloat()); - entity.setYaw(packet.getXRot()); - entity.setPitch(packet.getYRot()); - entity.setHeadYaw(packet.getXRot()); + entity.setYaw(packet.getYRot()); + entity.setPitch(packet.getXRot()); + entity.setHeadYaw(packet.getYRot()); RespawnPacket respawnPacket = new RespawnPacket(); respawnPacket.setRuntimeEntityId(0); // Bedrock server behavior @@ -78,7 +78,7 @@ public class JavaPlayerPositionTranslator extends PacketTranslator<ClientboundPl session.sendUpstreamPacket(movePlayerPacket); session.setSpawned(true); // Make sure the player moves away from (0, 32767, 0) before accepting movement packets - session.setUnconfirmedTeleport(new TeleportCache(packet.getPosition().getX(), packet.getPosition().getY(), packet.getPosition().getZ(), packet.getYRot(), packet.getXRot(), packet.getId())); // TODO + session.setUnconfirmedTeleport(new TeleportCache(packet.getPosition().getX(), packet.getPosition().getY(), packet.getPosition().getZ(), packet.getXRot(), packet.getYRot(), packet.getId())); // TODO acceptTeleport(session, packet.getPosition().getX(), packet.getPosition().getY(), packet.getPosition().getZ(), packet.getYRot(), packet.getXRot(), packet.getId()); @@ -107,8 +107,8 @@ public class JavaPlayerPositionTranslator extends PacketTranslator<ClientboundPl double newZ = pos.getZ() + (packet.getRelatives().contains(PositionElement.Z) ? entity.getPosition().getZ() : 0); - float newPitch = packet.getYRot() + (packet.getRelatives().contains(PositionElement.Y_ROT) ? entity.getPitch() : 0); - float newYaw = packet.getXRot() + (packet.getRelatives().contains(PositionElement.X_ROT) ? entity.getYaw() : 0); + float newPitch = packet.getXRot() + (packet.getRelatives().contains(PositionElement.X_ROT) ? entity.getPitch() : 0); + float newYaw = packet.getYRot() + (packet.getRelatives().contains(PositionElement.Y_ROT) ? entity.getYaw() : 0); int id = packet.getId(); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java index 2ea116de5..743c07a31 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java @@ -58,14 +58,8 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound @Override public void translate(GeyserSession session, ClientboundContainerSetSlotPacket packet) { - if (packet.getContainerId() == 255) { //cursor //TODO new packet - GeyserItemStack newItem = GeyserItemStack.from(packet.getItem()); - session.getPlayerInventory().setCursor(newItem, session); - InventoryUtils.updateCursor(session); - return; - } - //TODO: support window id -2, should update player inventory + //TODO: ^ I think this is outdated. Inventory inventory = InventoryUtils.getInventory(session, packet.getContainerId()); if (inventory == null) { return; @@ -89,8 +83,9 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound updateCraftingGrid(session, slot, packet.getItem(), inventory, translator); GeyserItemStack newItem = GeyserItemStack.from(packet.getItem()); - if (packet.getContainerId() == 0 && !(translator instanceof PlayerInventoryTranslator)) { //TODO new packet + if (packet.getContainerId() == 0 && !(translator instanceof PlayerInventoryTranslator)) { // In rare cases, the window ID can still be 0 but Java treats it as valid + // This behavior still exists as of Java Edition 1.21.2, despite the new packet session.getPlayerInventory().setItem(slot, newItem, session); InventoryTranslator.PLAYER_INVENTORY_TRANSLATOR.updateSlot(session, session.getPlayerInventory(), slot); } else { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaSetCursorItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaSetCursorItemTranslator.java new file mode 100644 index 000000000..df11bf1af --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaSetCursorItemTranslator.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 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.translator.protocol.java.inventory; + +import org.geysermc.geyser.inventory.GeyserItemStack; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.protocol.PacketTranslator; +import org.geysermc.geyser.translator.protocol.Translator; +import org.geysermc.geyser.util.InventoryUtils; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.inventory.ClientboundSetCursorItemPacket; + +@Translator(packet = ClientboundSetCursorItemPacket.class) +public class JavaSetCursorItemTranslator extends PacketTranslator<ClientboundSetCursorItemPacket> { + + @Override + public void translate(GeyserSession session, ClientboundSetCursorItemPacket packet) { + GeyserItemStack newItem = GeyserItemStack.from(packet.getContents()); + session.getPlayerInventory().setCursor(newItem, session); + InventoryUtils.updateCursor(session); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaSetPlayerInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaSetPlayerInventoryTranslator.java new file mode 100644 index 000000000..58b30bfc8 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaSetPlayerInventoryTranslator.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 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.translator.protocol.java.inventory; + +import org.geysermc.geyser.GeyserLogger; +import org.geysermc.geyser.inventory.GeyserItemStack; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.inventory.InventoryTranslator; +import org.geysermc.geyser.translator.protocol.PacketTranslator; +import org.geysermc.geyser.translator.protocol.Translator; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.inventory.ClientboundSetPlayerInventoryPacket; + +@Translator(packet = ClientboundSetPlayerInventoryPacket.class) +public class JavaSetPlayerInventoryTranslator extends PacketTranslator<ClientboundSetPlayerInventoryPacket> { + + @Override + public void translate(GeyserSession session, ClientboundSetPlayerInventoryPacket packet) { + int slot = packet.getSlot(); + if (slot >= 0 && slot <= 8) { + // As of 1.21.3 - can be replicated in vanilla server survival by picking an item in-world in your inventory not in your hotbar. + slot = session.getPlayerInventory().getOffsetForHotbar(slot); + } + + if (slot >= session.getPlayerInventory().getSize()) { + GeyserLogger logger = session.getGeyser().getLogger(); + logger.warning("ClientboundSetPlayerInventoryPacket sent to " + session.bedrockUsername() + + " that exceeds inventory size!"); + if (logger.isDebug()) { + logger.debug(packet.toString()); + logger.debug(session.getPlayerInventory().toString()); + } + return; + } + + session.getPlayerInventory().setItem(slot, GeyserItemStack.from(packet.getContents()), session); + InventoryTranslator.PLAYER_INVENTORY_TRANSLATOR.updateSlot(session, session.getPlayerInventory(), slot); + } +} 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 947f7ed9a..3b99d5e47 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java @@ -49,7 +49,6 @@ import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.type.Item; 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; @@ -305,14 +304,7 @@ public class InventoryUtils { // If we still have not found the item, and we're in creative, ask for the item from the server. if (session.getGameMode() == GameMode.CREATIVE) { - int slot = findEmptyHotbarSlot(inventory); - - ServerboundSetCreativeModeSlotPacket actionPacket = new ServerboundSetCreativeModeSlotPacket((short) slot, - itemStack); - if ((slot - 36) != inventory.getHeldItemSlot()) { - setHotbarItem(session, slot); - } - session.sendDownstreamGamePacket(actionPacket); + setPickedItem(session, inventory, GeyserItemStack.from(itemStack)); } } @@ -372,24 +364,15 @@ public class InventoryUtils { return; } - // If we still have not found the item, and we're in creative, ask for the item from the server. + // If we still have not found the item, and we're in creative, set the item ourselves. if (session.getGameMode() == GameMode.CREATIVE) { - int slot = findEmptyHotbarSlot(inventory); - - ItemMapping mapping = session.getItemMappings().getMapping(item); - ServerboundSetCreativeModeSlotPacket actionPacket = new ServerboundSetCreativeModeSlotPacket((short)slot, - new ItemStack(mapping.getJavaItem().javaId())); - if ((slot - 36) != inventory.getHeldItemSlot()) { - setHotbarItem(session, slot); - } - session.sendDownstreamGamePacket(actionPacket); + GeyserItemStack itemStack = item.newItemStack(1, null); + setPickedItem(session, inventory, itemStack); } } - /** - * @return the first empty slot found in this inventory, or else the player's currently held slot. - */ - private static int findEmptyHotbarSlot(PlayerInventory inventory) { + private static void setPickedItem(GeyserSession session, PlayerInventory inventory, GeyserItemStack itemStack) { + // Try to find an empty hotbar slot. int slot = inventory.getHeldItemSlot() + 36; if (!inventory.getItemInHand().isEmpty()) { // Otherwise we should just use the current slot for (int i = 36; i < 45; i++) { @@ -399,7 +382,32 @@ public class InventoryUtils { } } } - return slot; + GeyserItemStack existingItem = inventory.getItem(slot); + if (!existingItem.isEmpty()) { + // Try to move the item to another slot. + for (int i = 9; i < 36; i++) { + if (inventory.getItem(i).isEmpty()) { + inventory.setItem(i, existingItem, session); + InventoryTranslator.PLAYER_INVENTORY_TRANSLATOR.updateSlot(session, inventory, i); + + ServerboundSetCreativeModeSlotPacket actionPacket = new ServerboundSetCreativeModeSlotPacket((short) i, + existingItem.getItemStack()); + session.sendDownstreamGamePacket(actionPacket); + break; + } + } + } + + // As of 1.21.3 - the client does this on its own end and the server doesn't send a slot response back. + inventory.setItem(slot, itemStack, session); + InventoryTranslator.PLAYER_INVENTORY_TRANSLATOR.updateSlot(session, inventory, slot); + + ServerboundSetCreativeModeSlotPacket actionPacket = new ServerboundSetCreativeModeSlotPacket((short) slot, + itemStack.getItemStack()); + if ((slot - 36) != inventory.getHeldItemSlot()) { + setHotbarItem(session, slot); + } + session.sendDownstreamGamePacket(actionPacket); } /** From 774d3670c5a193f1807b4e5a376703baccfd55e4 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Sat, 26 Oct 2024 01:27:55 -0400 Subject: [PATCH 021/165] Horses are still weird, but boats are mostly working --- .../geysermc/geyser/entity/type/Entity.java | 5 - .../entity/vehicle/VehicleComponent.java | 1 - .../geyser/session/GeyserSession.java | 6 - .../geyser/session/cache/InputCache.java | 10 ++ .../geyser/session/cache/TeleportCache.java | 2 +- .../BedrockMoveEntityAbsoluteTranslator.java | 8 +- .../bedrock/BedrockPlayerInputTranslator.java | 41 ------- .../player/BedrockMovePlayerTranslator.java | 27 ++--- .../BedrockPlayerAuthInputTranslator.java | 103 +++++++++++++++++- .../org/geysermc/geyser/util/MathUtils.java | 11 ++ 10 files changed, 138 insertions(+), 76 deletions(-) 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 7f1eca8d6..0d3214709 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 @@ -701,9 +701,4 @@ public class Entity implements GeyserEntity { packet.setData(data); session.sendUpstreamPacket(packet); } - - @SuppressWarnings("unchecked") - public <I extends Entity> @Nullable I as(Class<I> entityClass) { - return entityClass.isInstance(this) ? (I) this : null; - } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/vehicle/VehicleComponent.java b/core/src/main/java/org/geysermc/geyser/entity/vehicle/VehicleComponent.java index 4f4a46dc9..91f54162b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/vehicle/VehicleComponent.java +++ b/core/src/main/java/org/geysermc/geyser/entity/vehicle/VehicleComponent.java @@ -758,7 +758,6 @@ public class VehicleComponent<T extends LivingEntity & ClientVehicle> { ServerboundMoveVehiclePacket moveVehiclePacket = new ServerboundMoveVehiclePacket(javaPos.getX(), javaPos.getY(), javaPos.getZ(), rotation.getX(), rotation.getY()); vehicle.getSession().sendDownstreamPacket(moveVehiclePacket); - vehicle.getSession().setLastVehicleMoveTimestamp(System.currentTimeMillis()); } protected double getGravity() { 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 9b9e86bb2..dd8fdd59b 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -524,12 +524,6 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { @Setter private boolean placedBucket; - /** - * Used to send a ServerboundMoveVehiclePacket for every PlayerInputPacket after idling on a boat/horse for more than 100ms - */ - @Setter - private long lastVehicleMoveTimestamp = System.currentTimeMillis(); - /** * Counts how many ticks have occurred since an arm animation started. * -1 means there is no active arm swing; -2 means an arm swing will start in a tick. diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/InputCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/InputCache.java index b59df0c16..c666ded64 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/InputCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/InputCache.java @@ -25,6 +25,8 @@ package org.geysermc.geyser.session.cache; +import lombok.Getter; +import lombok.Setter; import org.cloudburstmc.protocol.bedrock.data.PlayerAuthInputData; import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket; import org.geysermc.geyser.session.GeyserSession; @@ -37,6 +39,10 @@ public final class InputCache { private ServerboundPlayerInputPacket inputPacket = new ServerboundPlayerInputPacket(false, false, false, false, false, false, false); private boolean lastHorizontalCollision; private int ticksSinceLastMovePacket; + @Getter @Setter + private int jumpingTicks; + @Getter @Setter + private float jumpScale; public InputCache(GeyserSession session) { this.session = session; @@ -61,6 +67,10 @@ public final class InputCache { } } + public boolean wasJumping() { + return this.inputPacket.isJump(); + } + public void markPositionPacketSent() { this.ticksSinceLastMovePacket = 0; } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/TeleportCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/TeleportCache.java index 80139a988..7a7a5f1e2 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/TeleportCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/TeleportCache.java @@ -48,7 +48,7 @@ public class TeleportCache { /** * How many move packets the teleport can be unconfirmed for before it gets resent to the client */ - private static final int RESEND_THRESHOLD = 5; + private static final int RESEND_THRESHOLD = 20; // Make it one full second with auth input private final double x, y, z; private final float pitch, yaw; diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMoveEntityAbsoluteTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMoveEntityAbsoluteTranslator.java index f2d69d51c..81b06c87d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMoveEntityAbsoluteTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMoveEntityAbsoluteTranslator.java @@ -42,17 +42,15 @@ public class BedrockMoveEntityAbsoluteTranslator extends PacketTranslator<MoveEn @Override public void translate(GeyserSession session, MoveEntityAbsolutePacket packet) { - session.setLastVehicleMoveTimestamp(System.currentTimeMillis()); - Entity ridingEntity = session.getPlayerEntity().getVehicle(); if (ridingEntity != null && session.getWorldBorder().isPassingIntoBorderBoundaries(packet.getPosition(), false)) { Vector3f position = Vector3f.from(ridingEntity.getPosition().getX(), packet.getPosition().getY(), ridingEntity.getPosition().getZ()); if (ridingEntity instanceof BoatEntity) { // Undo the changes usually applied to the boat - ridingEntity.as(BoatEntity.class) - .moveAbsoluteWithoutAdjustments(position, ridingEntity.getYaw(), - ridingEntity.isOnGround(), true); +// ridingEntity.as(BoatEntity.class) +// .moveAbsoluteWithoutAdjustments(position, ridingEntity.getYaw(), +// ridingEntity.isOnGround(), true); } else { // This doesn't work if teleported is false ridingEntity.moveAbsolute(position, diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPlayerInputTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPlayerInputTranslator.java index 81f65e1bd..46d6b9203 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPlayerInputTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPlayerInputTranslator.java @@ -44,47 +44,6 @@ public class BedrockPlayerInputTranslator extends PacketTranslator<PlayerInputPa @Override public void translate(GeyserSession session, PlayerInputPacket packet) { -// ServerboundPlayerInputPacket playerInputPacket = new ServerboundPlayerInputPacket( -// packet.getInputMotion().getX(), packet.getInputMotion().getY(), packet.isJumping(), packet.isSneaking() -// ); -// -// session.sendDownstreamGamePacket(playerInputPacket); - session.getPlayerEntity().setVehicleInput(packet.getInputMotion()); - - // Bedrock only sends movement vehicle packets while moving - // This allows horses to take damage while standing on magma - Entity vehicle = session.getPlayerEntity().getVehicle(); - boolean sendMovement = false; - if (vehicle instanceof AbstractHorseEntity && !(vehicle instanceof LlamaEntity)) { - sendMovement = vehicle.isOnGround(); - } else if (vehicle instanceof BoatEntity) { - if (vehicle.getPassengers().size() == 1) { - // The player is the only rider - sendMovement = true; - } else { - // Check if the player is the front rider - if (session.getPlayerEntity().isRidingInFront()) { - sendMovement = true; - } - } - } - if (sendMovement) { - long timeSinceVehicleMove = System.currentTimeMillis() - session.getLastVehicleMoveTimestamp(); - if (timeSinceVehicleMove >= 100) { - Vector3f vehiclePosition = vehicle.getPosition(); - - if (vehicle instanceof BoatEntity && !vehicle.isOnGround()) { - // Remove some Y position to prevents boats flying up - vehiclePosition = vehiclePosition.down(vehicle.getDefinition().offset()); - } - - ServerboundMoveVehiclePacket moveVehiclePacket = new ServerboundMoveVehiclePacket( - vehiclePosition.getX(), vehiclePosition.getY(), vehiclePosition.getZ(), - vehicle.getYaw() - 90, vehicle.getPitch() - ); - session.sendDownstreamGamePacket(moveVehiclePacket); - } - } } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java index a22c44089..1940258e4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java @@ -31,7 +31,6 @@ import org.cloudburstmc.protocol.bedrock.data.PlayerAuthInputData; import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; -import org.geysermc.geyser.entity.vehicle.ClientVehicle; import org.geysermc.geyser.level.physics.CollisionResult; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.ChatColor; @@ -48,17 +47,17 @@ public final class BedrockMovePlayerTranslator { SessionPlayerEntity entity = session.getPlayerEntity(); if (!session.isSpawned()) return; + // Ignore movement packets until Bedrock's position matches the teleported position + if (session.getUnconfirmedTeleport() != null) { + session.confirmTeleport(packet.getPosition().toDouble().sub(0, EntityDefinitions.PLAYER.offset(), 0)); + return; + } + boolean actualPositionChanged = !entity.getPosition().equals(packet.getPosition()); if (actualPositionChanged) { // Send book update before the player moves session.getBookEditCache().checkForSend(); - - // Ignore movement packets until Bedrock's position matches the teleported position - if (session.getUnconfirmedTeleport() != null) { - session.confirmTeleport(packet.getPosition().toDouble().sub(0, EntityDefinitions.PLAYER.offset(), 0)); - return; - } } if (entity.getBedPosition() != null) { @@ -72,9 +71,11 @@ public final class BedrockMovePlayerTranslator { float pitch = packet.getRotation().getX(); float headYaw = packet.getRotation().getY(); - // shouldSendPositionReminder also increments a tick counter, so make sure it's always called. - boolean positionChanged = session.getInputCache().shouldSendPositionReminder() || actualPositionChanged; - boolean rotationChanged = entity.getYaw() != yaw || entity.getPitch() != pitch || entity.getHeadYaw() != headYaw; + boolean hasVehicle = entity.getVehicle() != null; + + // shouldSendPositionReminder also increments a tick counter, so make sure it's always called unless the player is on a vehicle. + boolean positionChanged = !hasVehicle && session.getInputCache().shouldSendPositionReminder() || actualPositionChanged; + boolean rotationChanged = hasVehicle || (entity.getYaw() != yaw || entity.getPitch() != pitch || entity.getHeadYaw() != headYaw); if (session.getLookBackScheduledFuture() != null) { // Resend the rotation if it was changed by Geyser @@ -99,12 +100,6 @@ public final class BedrockMovePlayerTranslator { session.sendDownstreamGamePacket(playerRotationPacket); } else if (positionChanged) { - // World border collision will be handled by client vehicle - if (!(entity.getVehicle() instanceof ClientVehicle clientVehicle && clientVehicle.isClientControlled()) - && session.getWorldBorder().isPassingIntoBorderBoundaries(packet.getPosition(), true)) { - return; - } - if (isValidMove(session, entity.getPosition(), packet.getPosition())) { CollisionResult result = session.getCollisionManager().adjustBedrockPosition(packet.getPosition(), packet.getInputData().contains(PlayerAuthInputData.HANDLE_TELEPORT)); if (result != null) { // A null return value cancels the packet diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java index 5465de51c..0889579c2 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.translator.protocol.bedrock.entity.player; +import org.cloudburstmc.math.vector.Vector2f; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.protocol.bedrock.data.LevelEvent; @@ -36,19 +37,25 @@ import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket; import org.cloudburstmc.protocol.bedrock.packet.PlayerActionPacket; import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket; import org.geysermc.geyser.entity.EntityDefinitions; +import org.geysermc.geyser.entity.type.BoatEntity; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.ItemFrameEntity; +import org.geysermc.geyser.entity.type.living.animal.horse.AbstractHorseEntity; +import org.geysermc.geyser.entity.type.living.animal.horse.LlamaEntity; import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; +import org.geysermc.geyser.entity.vehicle.ClientVehicle; import org.geysermc.geyser.level.block.type.Block; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.translator.protocol.bedrock.BedrockInventoryTransactionTranslator; +import org.geysermc.geyser.util.MathUtils; import org.geysermc.mcprotocollib.protocol.data.game.entity.object.Direction; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.InteractAction; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.PlayerAction; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.PlayerState; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.level.ServerboundMoveVehiclePacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundInteractPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundPlayerAbilitiesPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundPlayerActionPacket; @@ -57,13 +64,17 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.Serv import java.util.Set; @Translator(packet = PlayerAuthInputPacket.class) -public class BedrockPlayerAuthInputTranslator extends PacketTranslator<PlayerAuthInputPacket> { +public final class BedrockPlayerAuthInputTranslator extends PacketTranslator<PlayerAuthInputPacket> { @Override public void translate(GeyserSession session, PlayerAuthInputPacket packet) { SessionPlayerEntity entity = session.getPlayerEntity(); + + boolean wasJumping = session.getInputCache().wasJumping(); session.getInputCache().processInputs(packet); + processVehicleInput(session, packet, wasJumping); + BedrockMovePlayerTranslator.translate(session, packet); Set<PlayerAuthInputData> inputData = packet.getInputData(); @@ -202,4 +213,94 @@ public class BedrockPlayerAuthInputTranslator extends PacketTranslator<PlayerAut session.getGeyser().getLogger().error("Unhandled item use transaction type!"); } } + + private static void processVehicleInput(GeyserSession session, PlayerAuthInputPacket packet, boolean wasJumping) { + Entity vehicle = session.getPlayerEntity().getVehicle(); + if (vehicle == null) { + return; + } + if (vehicle instanceof ClientVehicle) { + session.getPlayerEntity().setVehicleInput(packet.getAnalogMoveVector()); + } + + boolean sendMovement = false; + if (vehicle instanceof AbstractHorseEntity && !(vehicle instanceof LlamaEntity)) { + sendMovement = vehicle.isOnGround(); + } else if (vehicle instanceof BoatEntity) { + if (vehicle.getPassengers().size() == 1) { + // The player is the only rider + sendMovement = true; + } else { + // Check if the player is the front rider + if (session.getPlayerEntity().isRidingInFront()) { + sendMovement = true; + } + } + } + + if (vehicle instanceof AbstractHorseEntity) { + // Behavior verified as of Java Edition 1.21.3 + int currentJumpingTicks = session.getInputCache().getJumpingTicks(); + if (currentJumpingTicks < 0) { + session.getInputCache().setJumpingTicks(++currentJumpingTicks); + if (currentJumpingTicks == 0) { + session.getPlayerEntity().setVehicleJumpStrength(0); + } + } + + boolean holdingJump = packet.getInputData().contains(PlayerAuthInputData.JUMPING); + if (wasJumping && !holdingJump) { + // Jump released + // Yes, I'm fairly certain that entity ID is correct. + session.sendDownstreamGamePacket(new ServerboundPlayerCommandPacket(session.getPlayerEntity().getEntityId(), + PlayerState.START_HORSE_JUMP, MathUtils.floor(session.getInputCache().getJumpScale() * 100f))); + session.getInputCache().setJumpingTicks(-10); + } else if (!wasJumping && holdingJump) { + session.getInputCache().setJumpingTicks(0); + session.getInputCache().setJumpScale(0); + } else if (holdingJump) { + session.getInputCache().setJumpingTicks(++currentJumpingTicks); + if (currentJumpingTicks < 10) { + session.getInputCache().setJumpScale(session.getInputCache().getJumpScale() * 0.1F); + } else { + session.getInputCache().setJumpScale(0.8f + 2.0f / (currentJumpingTicks - 9) * 0.1f); + } + } + } else { + session.getInputCache().setJumpScale(0); + } + + if (sendMovement) { + Vector3f vehiclePosition = packet.getPosition(); + Vector2f vehicleRotation = packet.getVehicleRotation(); + if (vehicleRotation == null) { + return; // If the client just got in or out of a vehicle for example. + } + + if (session.getWorldBorder().isPassingIntoBorderBoundaries(vehiclePosition, false)) { + Vector3f position = vehicle.getPosition(); + if (vehicle instanceof BoatEntity boat) { + // Undo the changes usually applied to the boat + boat.moveAbsoluteWithoutAdjustments(position, vehicle.getYaw(), vehicle.isOnGround(), true); + } else { + // This doesn't work if teleported is false + vehicle.moveAbsolute(position, + vehicle.getYaw(), vehicle.getPitch(), vehicle.getHeadYaw(), + vehicle.isOnGround(), true); + } + return; + } + + if (vehicle instanceof BoatEntity && !vehicle.isOnGround()) { + // Remove some Y position to prevents boats flying up + vehiclePosition = vehiclePosition.down(vehicle.getDefinition().offset()); + } + + ServerboundMoveVehiclePacket moveVehiclePacket = new ServerboundMoveVehiclePacket( + vehiclePosition.getX(), vehiclePosition.getY(), vehiclePosition.getZ(), + vehicleRotation.getY() - 90, vehiclePosition.getX() // TODO I wonder if this is related to the horse spinning bugs... + ); + session.sendDownstreamGamePacket(moveVehiclePacket); + } + } } diff --git a/core/src/main/java/org/geysermc/geyser/util/MathUtils.java b/core/src/main/java/org/geysermc/geyser/util/MathUtils.java index 08bed56f4..6d3b63c8f 100644 --- a/core/src/main/java/org/geysermc/geyser/util/MathUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/MathUtils.java @@ -105,6 +105,17 @@ public class MathUtils { return floatNumber > truncated ? truncated + 1 : truncated; } + /** + * Round the given float to the previous whole number + * + * @param floatNumber Float to round + * @return Rounded number + */ + public static int floor(float floatNumber) { + int truncated = (int) floatNumber; + return floatNumber < truncated ? truncated - 1 : truncated; + } + /** * If number is greater than the max, set it to max, and if number is lower than low, set it to low. * From 9d2d12b87bb84528968f01546388b7f56113e803 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Sat, 26 Oct 2024 01:41:23 -0400 Subject: [PATCH 022/165] Re-implement steering indicators --- .../geyser/entity/type/BoatEntity.java | 7 + .../bedrock/BedrockAnimateTranslator.java | 70 ++++---- .../BedrockPlayerAuthInputTranslator.java | 149 +++++++++--------- 3 files changed, 111 insertions(+), 115 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java index 9312d83f5..86accea17 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java @@ -39,6 +39,7 @@ import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.level.ServerboundPaddleBoatPacket; import java.util.UUID; @@ -182,6 +183,12 @@ public class BoatEntity extends Entity implements Leashable, Tickable { @Override public void tick() { // Java sends simply "true" and "false" (is_paddling_left), Bedrock keeps sending packets as you're rowing + if (session.getPlayerEntity().getVehicle() == this) { + // For packet timing accuracy, we'll send the packets here, as that's what Java Edition 1.21.3 does. + ServerboundPaddleBoatPacket steerPacket = new ServerboundPaddleBoatPacket(session.isSteeringLeft(), session.isSteeringRight()); + session.sendDownstreamGamePacket(steerPacket); + return; + } doTick = !doTick; // Run every 100 ms if (!doTick || passengers.isEmpty()) { return; diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockAnimateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockAnimateTranslator.java index 79e013246..487c3ef75 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockAnimateTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockAnimateTranslator.java @@ -25,13 +25,12 @@ package org.geysermc.geyser.translator.protocol.bedrock; -import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.level.ServerboundPaddleBoatPacket; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundSwingPacket; import org.cloudburstmc.protocol.bedrock.packet.AnimatePacket; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; +import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundSwingPacket; import java.util.concurrent.TimeUnit; @@ -45,45 +44,32 @@ public class BedrockAnimateTranslator extends PacketTranslator<AnimatePacket> { return; } - switch (packet.getAction()) { - case SWING_ARM -> { - session.armSwingPending(); - // Delay so entity damage can be processed first - session.scheduleInEventLoop(() -> { - if (session.getArmAnimationTicks() != 0) { - // So, generally, a Java player can only do one *thing* at a time. - // If a player right-clicks, for example, then there's probably only one action associated with - // that right-click that will send a swing. - // The only exception I can think of to this, *maybe*, is a player dropping items - // Bedrock is a little funkier than this - it can send several arm animation packets in the - // same tick, notably with high levels of haste applied. - // Packet limiters do not like this and can crash the player. - // If arm animation ticks is 0, then we just sent an arm swing packet this tick. - // See https://github.com/GeyserMC/Geyser/issues/2875 - // This behavior was last touched on with ViaVersion 4.5.1 (with its packet limiter), Java 1.16.5, - // and Bedrock 1.19.51. - // Note for the future: we should probably largely ignore this packet and instead replicate - // all actions on our end, and send swings where needed. - session.sendDownstreamGamePacket(new ServerboundSwingPacket(Hand.MAIN_HAND)); - session.activateArmAnimationTicking(); - } - }, - 25, - TimeUnit.MILLISECONDS - ); - } - // These two might need to be flipped, but my recommendation is getting moving working first - case ROW_LEFT -> { - // Packet value is a float of how long one has been rowing, so we convert that into a boolean - session.setSteeringLeft(packet.getRowingTime() > 0.0); - ServerboundPaddleBoatPacket steerLeftPacket = new ServerboundPaddleBoatPacket(session.isSteeringLeft(), session.isSteeringRight()); - session.sendDownstreamGamePacket(steerLeftPacket); - } - case ROW_RIGHT -> { - session.setSteeringRight(packet.getRowingTime() > 0.0); - ServerboundPaddleBoatPacket steerRightPacket = new ServerboundPaddleBoatPacket(session.isSteeringLeft(), session.isSteeringRight()); - session.sendDownstreamGamePacket(steerRightPacket); - } + System.out.println("wewewewewewewewewewewe"); + if (packet.getAction() == AnimatePacket.Action.SWING_ARM) { + session.armSwingPending(); + // Delay so entity damage can be processed first + session.scheduleInEventLoop(() -> { + if (session.getArmAnimationTicks() != 0) { + // So, generally, a Java player can only do one *thing* at a time. + // If a player right-clicks, for example, then there's probably only one action associated with + // that right-click that will send a swing. + // The only exception I can think of to this, *maybe*, is a player dropping items + // Bedrock is a little funkier than this - it can send several arm animation packets in the + // same tick, notably with high levels of haste applied. + // Packet limiters do not like this and can crash the player. + // If arm animation ticks is 0, then we just sent an arm swing packet this tick. + // See https://github.com/GeyserMC/Geyser/issues/2875 + // This behavior was last touched on with ViaVersion 4.5.1 (with its packet limiter), Java 1.16.5, + // and Bedrock 1.19.51. + // Note for the future: we should probably largely ignore this packet and instead replicate + // all actions on our end, and send swings where needed. + session.sendDownstreamGamePacket(new ServerboundSwingPacket(Hand.MAIN_HAND)); + session.activateArmAnimationTicking(); + } + }, + 25, + TimeUnit.MILLISECONDS + ); } } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java index 0889579c2..a0c874743 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java @@ -78,83 +78,86 @@ public final class BedrockPlayerAuthInputTranslator extends PacketTranslator<Pla BedrockMovePlayerTranslator.translate(session, packet); Set<PlayerAuthInputData> inputData = packet.getInputData(); - if (!inputData.isEmpty()) { - for (PlayerAuthInputData input : inputData) { - switch (input) { - case PERFORM_ITEM_INTERACTION -> processItemUseTransaction(session, packet.getItemUseTransaction()); - case PERFORM_BLOCK_ACTIONS -> BedrockBlockActions.translate(session, packet.getPlayerActions()); - case START_SNEAKING -> { - ServerboundPlayerCommandPacket startSneakPacket = new ServerboundPlayerCommandPacket(entity.getEntityId(), PlayerState.START_SNEAKING); - session.sendDownstreamGamePacket(startSneakPacket); + for (PlayerAuthInputData input : inputData) { + switch (input) { + case PERFORM_ITEM_INTERACTION -> processItemUseTransaction(session, packet.getItemUseTransaction()); + case PERFORM_BLOCK_ACTIONS -> BedrockBlockActions.translate(session, packet.getPlayerActions()); + case START_SNEAKING -> { + ServerboundPlayerCommandPacket startSneakPacket = new ServerboundPlayerCommandPacket(entity.getEntityId(), PlayerState.START_SNEAKING); + session.sendDownstreamGamePacket(startSneakPacket); - session.startSneaking(); - } - case STOP_SNEAKING -> { - ServerboundPlayerCommandPacket stopSneakPacket = new ServerboundPlayerCommandPacket(entity.getEntityId(), PlayerState.STOP_SNEAKING); - session.sendDownstreamGamePacket(stopSneakPacket); - - session.stopSneaking(); - } - case START_SPRINTING -> { - if (!entity.getFlag(EntityFlag.SWIMMING)) { - ServerboundPlayerCommandPacket startSprintPacket = new ServerboundPlayerCommandPacket(entity.getEntityId(), PlayerState.START_SPRINTING); - session.sendDownstreamGamePacket(startSprintPacket); - session.setSprinting(true); - } - } - case STOP_SPRINTING -> { - if (!entity.getFlag(EntityFlag.SWIMMING)) { - ServerboundPlayerCommandPacket stopSprintPacket = new ServerboundPlayerCommandPacket(entity.getEntityId(), PlayerState.STOP_SPRINTING); - session.sendDownstreamGamePacket(stopSprintPacket); - } - session.setSprinting(false); - } - case START_SWIMMING -> session.setSwimming(true); - case STOP_SWIMMING -> session.setSwimming(false); - case START_FLYING -> { // Since 1.20.30 - if (session.isCanFly()) { - if (session.getGameMode() == GameMode.SPECTATOR) { - // should already be flying - session.sendAdventureSettings(); - break; - } - - if (session.getPlayerEntity().getFlag(EntityFlag.SWIMMING) && session.getCollisionManager().isPlayerInWater()) { - // As of 1.18.1, Java Edition cannot fly while in water, but it can fly while crawling - // If this isn't present, swimming on a 1.13.2 server and then attempting to fly will put you into a flying/swimming state that is invalid on JE - session.sendAdventureSettings(); - break; - } - - session.setFlying(true); - session.sendDownstreamGamePacket(new ServerboundPlayerAbilitiesPacket(true)); - } else { - // update whether we can fly - session.sendAdventureSettings(); - // stop flying - PlayerActionPacket stopFlyingPacket = new PlayerActionPacket(); - stopFlyingPacket.setRuntimeEntityId(session.getPlayerEntity().getGeyserId()); - stopFlyingPacket.setAction(PlayerActionType.STOP_FLYING); - stopFlyingPacket.setBlockPosition(Vector3i.ZERO); - stopFlyingPacket.setResultPosition(Vector3i.ZERO); - stopFlyingPacket.setFace(0); - session.sendUpstreamPacket(stopFlyingPacket); - } - } - case STOP_FLYING -> { - session.setFlying(false); - session.sendDownstreamGamePacket(new ServerboundPlayerAbilitiesPacket(false)); - } - case START_GLIDING -> { - // Otherwise gliding will not work in creative - ServerboundPlayerAbilitiesPacket playerAbilitiesPacket = new ServerboundPlayerAbilitiesPacket(false); - session.sendDownstreamGamePacket(playerAbilitiesPacket); - sendPlayerGlideToggle(session, entity); - } - case STOP_GLIDING -> sendPlayerGlideToggle(session, entity); + session.startSneaking(); } + case STOP_SNEAKING -> { + ServerboundPlayerCommandPacket stopSneakPacket = new ServerboundPlayerCommandPacket(entity.getEntityId(), PlayerState.STOP_SNEAKING); + session.sendDownstreamGamePacket(stopSneakPacket); + + session.stopSneaking(); + } + case START_SPRINTING -> { + if (!entity.getFlag(EntityFlag.SWIMMING)) { + ServerboundPlayerCommandPacket startSprintPacket = new ServerboundPlayerCommandPacket(entity.getEntityId(), PlayerState.START_SPRINTING); + session.sendDownstreamGamePacket(startSprintPacket); + session.setSprinting(true); + } + } + case STOP_SPRINTING -> { + if (!entity.getFlag(EntityFlag.SWIMMING)) { + ServerboundPlayerCommandPacket stopSprintPacket = new ServerboundPlayerCommandPacket(entity.getEntityId(), PlayerState.STOP_SPRINTING); + session.sendDownstreamGamePacket(stopSprintPacket); + } + session.setSprinting(false); + } + case START_SWIMMING -> session.setSwimming(true); + case STOP_SWIMMING -> session.setSwimming(false); + case START_FLYING -> { // Since 1.20.30 + if (session.isCanFly()) { + if (session.getGameMode() == GameMode.SPECTATOR) { + // should already be flying + session.sendAdventureSettings(); + break; + } + + if (session.getPlayerEntity().getFlag(EntityFlag.SWIMMING) && session.getCollisionManager().isPlayerInWater()) { + // As of 1.18.1, Java Edition cannot fly while in water, but it can fly while crawling + // If this isn't present, swimming on a 1.13.2 server and then attempting to fly will put you into a flying/swimming state that is invalid on JE + session.sendAdventureSettings(); + break; + } + + session.setFlying(true); + session.sendDownstreamGamePacket(new ServerboundPlayerAbilitiesPacket(true)); + } else { + // update whether we can fly + session.sendAdventureSettings(); + // stop flying + PlayerActionPacket stopFlyingPacket = new PlayerActionPacket(); + stopFlyingPacket.setRuntimeEntityId(session.getPlayerEntity().getGeyserId()); + stopFlyingPacket.setAction(PlayerActionType.STOP_FLYING); + stopFlyingPacket.setBlockPosition(Vector3i.ZERO); + stopFlyingPacket.setResultPosition(Vector3i.ZERO); + stopFlyingPacket.setFace(0); + session.sendUpstreamPacket(stopFlyingPacket); + } + } + case STOP_FLYING -> { + session.setFlying(false); + session.sendDownstreamGamePacket(new ServerboundPlayerAbilitiesPacket(false)); + } + case START_GLIDING -> { + // Otherwise gliding will not work in creative + ServerboundPlayerAbilitiesPacket playerAbilitiesPacket = new ServerboundPlayerAbilitiesPacket(false); + session.sendDownstreamGamePacket(playerAbilitiesPacket); + sendPlayerGlideToggle(session, entity); + } + case STOP_GLIDING -> sendPlayerGlideToggle(session, entity); } } + boolean up = inputData.contains(PlayerAuthInputData.UP); + // Yes. These are flipped. It's always been an issue with Geyser. That's what it's like working with this codebase. + // Hi random stranger. I am six days into updating for 1.21.3. How's it going? + session.setSteeringLeft(up || inputData.contains(PlayerAuthInputData.PADDLE_RIGHT)); + session.setSteeringRight(up || inputData.contains(PlayerAuthInputData.PADDLE_LEFT)); } private static void sendPlayerGlideToggle(GeyserSession session, Entity entity) { From c9eeed905bb87168308d9d618008b330465b1dbd Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Sat, 26 Oct 2024 13:24:15 -0400 Subject: [PATCH 023/165] Fix horse movement --- .../player/BedrockPlayerAuthInputTranslator.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java index a0c874743..9f9d061e1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java @@ -153,11 +153,13 @@ public final class BedrockPlayerAuthInputTranslator extends PacketTranslator<Pla case STOP_GLIDING -> sendPlayerGlideToggle(session, entity); } } - boolean up = inputData.contains(PlayerAuthInputData.UP); - // Yes. These are flipped. It's always been an issue with Geyser. That's what it's like working with this codebase. - // Hi random stranger. I am six days into updating for 1.21.3. How's it going? - session.setSteeringLeft(up || inputData.contains(PlayerAuthInputData.PADDLE_RIGHT)); - session.setSteeringRight(up || inputData.contains(PlayerAuthInputData.PADDLE_LEFT)); + if (entity.getVehicle() instanceof BoatEntity) { + boolean up = inputData.contains(PlayerAuthInputData.UP); + // Yes. These are flipped. It's always been an issue with Geyser. That's what it's like working with this codebase. + // Hi random stranger. I am six days into updating for 1.21.3. How's it going? + session.setSteeringLeft(up || inputData.contains(PlayerAuthInputData.PADDLE_RIGHT)); + session.setSteeringRight(up || inputData.contains(PlayerAuthInputData.PADDLE_LEFT)); + } } private static void sendPlayerGlideToggle(GeyserSession session, Entity entity) { @@ -228,7 +230,7 @@ public final class BedrockPlayerAuthInputTranslator extends PacketTranslator<Pla boolean sendMovement = false; if (vehicle instanceof AbstractHorseEntity && !(vehicle instanceof LlamaEntity)) { - sendMovement = vehicle.isOnGround(); + sendMovement = true; } else if (vehicle instanceof BoatEntity) { if (vehicle.getPassengers().size() == 1) { // The player is the only rider @@ -299,6 +301,7 @@ public final class BedrockPlayerAuthInputTranslator extends PacketTranslator<Pla vehiclePosition = vehiclePosition.down(vehicle.getDefinition().offset()); } + vehicle.setPosition(vehiclePosition); ServerboundMoveVehiclePacket moveVehiclePacket = new ServerboundMoveVehiclePacket( vehiclePosition.getX(), vehiclePosition.getY(), vehiclePosition.getZ(), vehicleRotation.getY() - 90, vehiclePosition.getX() // TODO I wonder if this is related to the horse spinning bugs... From 198eeac4c26d67ea8e2401a17f7477d54b66420e Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Sat, 26 Oct 2024 23:48:31 -0400 Subject: [PATCH 024/165] Implement shapeless/complex recipes; fix crawling --- .../geysermc/geyser/entity/type/Entity.java | 1 + .../geyser/network/UpstreamPacketHandler.java | 7 + .../geyser/session/GeyserSession.java | 18 ++- .../bedrock/BedrockAnimateTranslator.java | 1 - .../entity/player/BedrockBlockActions.java | 40 +---- .../player/BedrockPlayerActionTranslator.java | 13 ++ .../BedrockPlayerAuthInputTranslator.java | 15 +- .../java/JavaRecipeBookAddTranslator.java | 148 ++++++++++-------- 8 files changed, 134 insertions(+), 109 deletions(-) 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 0d3214709..2ad89dd2f 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 @@ -45,6 +45,7 @@ import org.geysermc.geyser.api.entity.type.GeyserEntity; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.entity.GeyserDirtyMetadata; import org.geysermc.geyser.entity.properties.GeyserEntityPropertyManager; +import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.scoreboard.Team; import org.geysermc.geyser.session.GeyserSession; 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 19e56c8a8..b797eb811 100644 --- a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java @@ -41,6 +41,7 @@ import org.cloudburstmc.protocol.bedrock.packet.ModalFormResponsePacket; import org.cloudburstmc.protocol.bedrock.packet.MovePlayerPacket; import org.cloudburstmc.protocol.bedrock.packet.NetworkSettingsPacket; import org.cloudburstmc.protocol.bedrock.packet.PlayStatusPacket; +import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket; import org.cloudburstmc.protocol.bedrock.packet.RequestNetworkSettingsPacket; import org.cloudburstmc.protocol.bedrock.packet.ResourcePackChunkDataPacket; import org.cloudburstmc.protocol.bedrock.packet.ResourcePackChunkRequestPacket; @@ -64,6 +65,7 @@ import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.PendingMicrosoftAuthentication; +import org.geysermc.geyser.text.ChatColor; import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.util.LoginEncryptionUtils; import org.geysermc.geyser.util.MathUtils; @@ -94,6 +96,11 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { } private PacketSignal translateAndDefault(BedrockPacket packet) { + if (packet instanceof PlayerAuthInputPacket) { + //System.out.println(packet); + } else { + System.out.println(ChatColor.toANSI(ChatColor.GREEN) + packet + ChatColor.ANSI_RESET); + } Registries.BEDROCK_PACKET_TRANSLATORS.translate(packet.getClass(), packet, session); return PacketSignal.HANDLED; // PacketSignal.UNHANDLED will log a WARN publicly } 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 dd8fdd59b..1ca127657 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -1371,14 +1371,28 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { } public void setSwimming(boolean swimming) { - if (swimming) { + if (!swimming && playerEntity.getFlag(EntityFlag.CRAWLING)) { + // Do not update bounding box. + playerEntity.setFlag(EntityFlag.SWIMMING, false); + playerEntity.updateBedrockMetadata(); + return; + } + toggleSwimmingPose(swimming, EntityFlag.SWIMMING); + } + + public void setCrawling(boolean crawling) { + toggleSwimmingPose(crawling, EntityFlag.CRAWLING); + } + + private void toggleSwimmingPose(boolean crawling, EntityFlag flag) { + if (crawling) { this.pose = Pose.SWIMMING; playerEntity.setBoundingBoxHeight(0.6f); } else { this.pose = Pose.STANDING; playerEntity.setBoundingBoxHeight(playerEntity.getDefinition().height()); } - playerEntity.setFlag(EntityFlag.SWIMMING, swimming); + playerEntity.setFlag(flag, crawling); playerEntity.updateBedrockMetadata(); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockAnimateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockAnimateTranslator.java index 487c3ef75..5f3b9662f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockAnimateTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockAnimateTranslator.java @@ -44,7 +44,6 @@ public class BedrockAnimateTranslator extends PacketTranslator<AnimatePacket> { return; } - System.out.println("wewewewewewewewewewewe"); if (packet.getAction() == AnimatePacket.Action.SWING_ARM) { session.armSwingPending(); // Delay so entity damage can be processed first diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockBlockActions.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockBlockActions.java index 8a56915fb..f1b91a0a5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockBlockActions.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockBlockActions.java @@ -31,14 +31,10 @@ import org.cloudburstmc.protocol.bedrock.data.LevelEvent; import org.cloudburstmc.protocol.bedrock.data.PlayerActionType; import org.cloudburstmc.protocol.bedrock.data.PlayerBlockActionData; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; -import org.cloudburstmc.protocol.bedrock.packet.AnimatePacket; import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket; -import org.cloudburstmc.protocol.bedrock.packet.PlayStatusPacket; -import org.cloudburstmc.protocol.bedrock.packet.UpdateAttributesPacket; import org.geysermc.geyser.api.block.custom.CustomBlockState; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.ItemFrameEntity; -import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.level.block.Blocks; import org.geysermc.geyser.level.block.type.Block; @@ -49,7 +45,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.SkullCache; import org.geysermc.geyser.translator.item.CustomItemTranslator; import org.geysermc.geyser.util.BlockUtils; -import org.geysermc.geyser.util.CooldownUtils; import org.geysermc.mcprotocollib.protocol.data.game.entity.object.Direction; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; @@ -57,24 +52,21 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.player.InteractActio import org.geysermc.mcprotocollib.protocol.data.game.entity.player.PlayerAction; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundInteractPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundPlayerActionPacket; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundSwingPacket; import java.util.List; final class BedrockBlockActions { static void translate(GeyserSession session, List<PlayerBlockActionData> playerActions) { - SessionPlayerEntity entity = session.getPlayerEntity(); - // Send book update before any player action session.getBookEditCache().checkForSend(); for (PlayerBlockActionData blockActionData : playerActions) { - handle(session, entity, blockActionData); + handle(session, blockActionData); } } - private static void handle(GeyserSession session, SessionPlayerEntity entity, PlayerBlockActionData blockActionData) { + private static void handle(GeyserSession session, PlayerBlockActionData blockActionData) { PlayerActionType action = blockActionData.getAction(); Vector3i vector = blockActionData.getBlockPosition(); int blockFace = blockActionData.getFace(); @@ -198,34 +190,6 @@ final class BedrockBlockActions { // Handled in BedrockInventoryTransactionTranslator case STOP_BREAK -> { } - case DIMENSION_CHANGE_SUCCESS -> { - //sometimes the client doesn't feel like loading - PlayStatusPacket spawnPacket = new PlayStatusPacket(); - spawnPacket.setStatus(PlayStatusPacket.Status.PLAYER_SPAWN); - session.sendUpstreamPacket(spawnPacket); - - UpdateAttributesPacket attributesPacket = new UpdateAttributesPacket(); - attributesPacket.setRuntimeEntityId(entity.getGeyserId()); - attributesPacket.getAttributes().addAll(entity.getAttributes().values()); - session.sendUpstreamPacket(attributesPacket); - } - case MISSED_SWING -> { - // Java edition sends a cooldown when hitting air. - // Normally handled by BedrockLevelSoundEventTranslator, but there is no sound on Java for this. - CooldownUtils.sendCooldown(session); - - // TODO Re-evaluate after pre-1.20.10 is no longer supported? - if (session.getArmAnimationTicks() == -1) { - session.sendDownstreamGamePacket(new ServerboundSwingPacket(Hand.MAIN_HAND)); - session.activateArmAnimationTicking(); - - // Send packet to Bedrock so it knows - AnimatePacket animatePacket = new AnimatePacket(); - animatePacket.setRuntimeEntityId(session.getPlayerEntity().getGeyserId()); - animatePacket.setAction(AnimatePacket.Action.SWING_ARM); - session.sendUpstreamPacket(animatePacket); - } - } } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerActionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerActionTranslator.java index 39f773418..797505e99 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerActionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerActionTranslator.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.translator.protocol.bedrock.entity.player; import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.protocol.bedrock.data.entity.EntityEventType; import org.cloudburstmc.protocol.bedrock.packet.EntityEventPacket; +import org.cloudburstmc.protocol.bedrock.packet.PlayStatusPacket; import org.cloudburstmc.protocol.bedrock.packet.PlayerActionPacket; import org.cloudburstmc.protocol.bedrock.packet.UpdateAttributesPacket; import org.geysermc.geyser.entity.type.Entity; @@ -103,6 +104,18 @@ public class BedrockPlayerActionTranslator extends PacketTranslator<PlayerAction session.sendDownstreamGamePacket(interactPacket); } } + case DIMENSION_CHANGE_SUCCESS -> { + SessionPlayerEntity entity = session.getPlayerEntity(); + // Sometimes the client doesn't feel like loading + PlayStatusPacket spawnPacket = new PlayStatusPacket(); + spawnPacket.setStatus(PlayStatusPacket.Status.PLAYER_SPAWN); + session.sendUpstreamPacket(spawnPacket); + + UpdateAttributesPacket attributesPacket = new UpdateAttributesPacket(); + attributesPacket.setRuntimeEntityId(entity.getGeyserId()); + attributesPacket.getAttributes().addAll(entity.getAttributes().values()); + session.sendUpstreamPacket(attributesPacket); + } } } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java index 9f9d061e1..93e4cb92a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java @@ -49,6 +49,7 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.translator.protocol.bedrock.BedrockInventoryTransactionTranslator; +import org.geysermc.geyser.util.CooldownUtils; import org.geysermc.geyser.util.MathUtils; import org.geysermc.mcprotocollib.protocol.data.game.entity.object.Direction; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; @@ -65,18 +66,23 @@ import java.util.Set; @Translator(packet = PlayerAuthInputPacket.class) public final class BedrockPlayerAuthInputTranslator extends PacketTranslator<PlayerAuthInputPacket> { + private Set<PlayerAuthInputData> data = Set.of(); @Override public void translate(GeyserSession session, PlayerAuthInputPacket packet) { + if (!data.equals(packet.getInputData())) { + System.out.println(data); + this.data = packet.getInputData(); + } SessionPlayerEntity entity = session.getPlayerEntity(); boolean wasJumping = session.getInputCache().wasJumping(); session.getInputCache().processInputs(packet); - processVehicleInput(session, packet, wasJumping); - BedrockMovePlayerTranslator.translate(session, packet); + processVehicleInput(session, packet, wasJumping); + Set<PlayerAuthInputData> inputData = packet.getInputData(); for (PlayerAuthInputData input : inputData) { switch (input) { @@ -110,6 +116,8 @@ public final class BedrockPlayerAuthInputTranslator extends PacketTranslator<Pla } case START_SWIMMING -> session.setSwimming(true); case STOP_SWIMMING -> session.setSwimming(false); + case START_CRAWLING -> session.setCrawling(true); + case STOP_CRAWLING -> session.setCrawling(false); case START_FLYING -> { // Since 1.20.30 if (session.isCanFly()) { if (session.getGameMode() == GameMode.SPECTATOR) { @@ -151,6 +159,7 @@ public final class BedrockPlayerAuthInputTranslator extends PacketTranslator<Pla sendPlayerGlideToggle(session, entity); } case STOP_GLIDING -> sendPlayerGlideToggle(session, entity); + case MISSED_SWING -> CooldownUtils.sendCooldown(session); // Java edition sends a cooldown when hitting air. } } if (entity.getVehicle() instanceof BoatEntity) { @@ -249,7 +258,7 @@ public final class BedrockPlayerAuthInputTranslator extends PacketTranslator<Pla if (currentJumpingTicks < 0) { session.getInputCache().setJumpingTicks(++currentJumpingTicks); if (currentJumpingTicks == 0) { - session.getPlayerEntity().setVehicleJumpStrength(0); + session.getInputCache().setJumpScale(0); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java index 9cb238c71..f7fa9883f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java @@ -33,6 +33,7 @@ import net.kyori.adventure.key.Key; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.RecipeUnlockingRequirement; import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapedRecipeData; +import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapelessRecipeData; import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.SmithingTransformRecipeData; import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.DefaultDescriptor; import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.ItemDescriptorWithCount; @@ -81,8 +82,6 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec int netId = session.getLastRecipeNetId().get(); Int2ObjectMap<List<String>> javaToBedrockRecipeIds = session.getJavaToBedrockRecipeIds(); CraftingDataPacket craftingDataPacket = new CraftingDataPacket(); - // Check if we should set cleanRecipes here or not. - UnlockedRecipesPacket recipesPacket = new UnlockedRecipesPacket(); recipesPacket.setAction(packet.isReplace() ? UnlockedRecipesPacket.ActionType.INITIALLY_UNLOCKED : UnlockedRecipesPacket.ActionType.NEWLY_UNLOCKED); @@ -94,78 +93,42 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec switch (display.getType()) { case CRAFTING_SHAPED -> { ShapedCraftingRecipeDisplay shapedRecipe = (ShapedCraftingRecipeDisplay) display; - Pair<Item, ItemData> pair = translateToOutput(session, shapedRecipe.result()); - if (pair == null || !pair.right().isValid()) { - // Likely modded item Bedrock will complain about + var bedrockRecipes = combinations(session, display, shapedRecipe.ingredients()); + if (bedrockRecipes == null) { continue; } - - ItemData output = pair.right(); - if (!(pair.left() instanceof BedrockRequiresTagItem)) { - // Strip NBT - tools won't appear in the recipe book otherwise - output = output.toBuilder().tag(null).build(); + List<String> bedrockRecipeIds = new ArrayList<>(); + ItemData output = bedrockRecipes.right(); + List<List<ItemDescriptorWithCount>> left = bedrockRecipes.left(); + for (int i = 0; i < left.size(); i++) { + List<ItemDescriptorWithCount> inputs = left.get(i); + String recipeId = contents.id() + "_" + i; + craftingDataPacket.getCraftingData().add(ShapedRecipeData.shaped(recipeId, + shapedRecipe.width(), shapedRecipe.height(), inputs, + Collections.singletonList(output), UUID.randomUUID(), "crafting_table", 0, netId++, false, RecipeUnlockingRequirement.INVALID)); + recipesPacket.getUnlockedRecipes().add(recipeId); + bedrockRecipeIds.add(recipeId); } - - boolean empty = true; - boolean complexInputs = false; - List<List<ItemDescriptorWithCount>> inputs = new ArrayList<>(shapedRecipe.ingredients().size()); - for (SlotDisplay input : shapedRecipe.ingredients()) { - List<ItemDescriptorWithCount> translated = translateToInput(session, input); - if (translated == null) { - continue; - } - inputs.add(translated); - if (translated.size() != 1 || translated.get(0) != ItemDescriptorWithCount.EMPTY) { - empty = false; - } - complexInputs |= translated.size() > 1; - } - if (empty) { - // Crashes Bedrock 1.19.70 otherwise - // Fixes https://github.com/GeyserMC/Geyser/issues/3549 - continue; - } - - if (complexInputs) { - System.out.println(inputs); - if (true) continue; - List<List<ItemDescriptorWithCount>> processedInputs = Lists.cartesianProduct(inputs); - System.out.println(processedInputs.size()); - if (processedInputs.size() <= 500) { // Do not let us process giant lists. - List<String> bedrockRecipeIds = new ArrayList<>(); - for (int i = 0; i < processedInputs.size(); i++) { - List<ItemDescriptorWithCount> possibleInput = processedInputs.get(i); - String recipeId = contents.id() + "_" + i; - craftingDataPacket.getCraftingData().add(ShapedRecipeData.shaped(recipeId, - shapedRecipe.width(), shapedRecipe.height(), possibleInput, - Collections.singletonList(output), UUID.randomUUID(), "crafting_table", 0, netId++, false, RecipeUnlockingRequirement.INVALID)); - recipesPacket.getUnlockedRecipes().add(recipeId); - bedrockRecipeIds.add(recipeId); - } - javaToBedrockRecipeIds.put(contents.id(), bedrockRecipeIds); - continue; - } - } - String recipeId = Integer.toString(contents.id()); - craftingDataPacket.getCraftingData().add(ShapedRecipeData.shaped(recipeId, - shapedRecipe.width(), shapedRecipe.height(), inputs.stream().map(descriptors -> descriptors.get(0)).toList(), - Collections.singletonList(output), UUID.randomUUID(), "crafting_table", 0, netId++, false, RecipeUnlockingRequirement.INVALID)); - recipesPacket.getUnlockedRecipes().add(recipeId); - javaToBedrockRecipeIds.put(contents.id(), Collections.singletonList(recipeId)); + javaToBedrockRecipeIds.put(contents.id(), List.copyOf(bedrockRecipeIds)); } case CRAFTING_SHAPELESS -> { ShapelessCraftingRecipeDisplay shapelessRecipe = (ShapelessCraftingRecipeDisplay) display; - Pair<Item, ItemData> pair = translateToOutput(session, shapelessRecipe.result()); - if (pair == null || !pair.right().isValid()) { - // Likely modded item Bedrock will complain about + var bedrockRecipes = combinations(session, display, shapelessRecipe.ingredients()); + if (bedrockRecipes == null) { continue; } - - ItemData output = pair.right(); - if (!(pair.left() instanceof BedrockRequiresTagItem)) { - // Strip NBT - tools won't appear in the recipe book otherwise - output = output.toBuilder().tag(null).build(); + List<String> bedrockRecipeIds = new ArrayList<>(); + ItemData output = bedrockRecipes.right(); + List<List<ItemDescriptorWithCount>> left = bedrockRecipes.left(); + for (int i = 0; i < left.size(); i++) { + List<ItemDescriptorWithCount> inputs = left.get(i); + String recipeId = contents.id() + "_" + i; + craftingDataPacket.getCraftingData().add(ShapelessRecipeData.shapeless(recipeId, + inputs, Collections.singletonList(output), UUID.randomUUID(), "crafting_table", 0, netId++, RecipeUnlockingRequirement.INVALID)); + recipesPacket.getUnlockedRecipes().add(recipeId); + bedrockRecipeIds.add(recipeId); } + javaToBedrockRecipeIds.put(contents.id(), List.copyOf(bedrockRecipeIds)); } case SMITHING -> { if (true) { @@ -299,4 +262,59 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec ItemMapping mapping = session.getItemMappings().getMapping(item); return new ItemDescriptorWithCount(new DefaultDescriptor(mapping.getBedrockDefinition(), mapping.getBedrockData()), 1); // Need to check count } + + private Pair<List<List<ItemDescriptorWithCount>>, ItemData> combinations(GeyserSession session, RecipeDisplay display, List<SlotDisplay> ingredients) { + Pair<Item, ItemData> pair = translateToOutput(session, display.result()); + if (pair == null || !pair.right().isValid()) { + // Likely modded item Bedrock will complain about + return null; + } + + ItemData output = pair.right(); + if (!(pair.left() instanceof BedrockRequiresTagItem)) { + // Strip NBT - tools won't appear in the recipe book otherwise + output = output.toBuilder().tag(null).build(); + } + + boolean empty = true; + boolean complexInputs = false; + List<List<ItemDescriptorWithCount>> inputs = new ArrayList<>(ingredients.size()); + for (SlotDisplay input : ingredients) { + List<ItemDescriptorWithCount> translated = translateToInput(session, input); + if (translated == null) { + continue; + } + inputs.add(translated); + if (translated.size() != 1 || translated.get(0) != ItemDescriptorWithCount.EMPTY) { + empty = false; + } + complexInputs |= translated.size() > 1; + } + if (empty) { + // Crashes Bedrock 1.19.70 otherwise + // Fixes https://github.com/GeyserMC/Geyser/issues/3549 + return null; + } + + if (complexInputs) { + System.out.println(inputs); + long size = 1; + // See how big a cartesian product will get without creating one (Guava throws an error; not really ideal) + for (List<ItemDescriptorWithCount> list : inputs) { + size *= list.size(); + if (size > 500) { + // Too much. No. + complexInputs = false; + break; + } + } + if (complexInputs) { + return Pair.of(Lists.cartesianProduct(inputs), output); + } + } + return Pair.of( + Collections.singletonList(inputs.stream().map(descriptors -> descriptors.get(0)).toList()), + output + ); + } } From d6d19b02b204ef21f74b203cf26badb36f42ec46 Mon Sep 17 00:00:00 2001 From: Tim203 <mctim203@gmail.com> Date: Sun, 27 Oct 2024 22:53:56 +0100 Subject: [PATCH 025/165] Fix #5089 and don't auto-load Registries (#5093) * Fix #5089 and made Registries instance based * Instead of using instance based Registries, manually initialize them * Address review * Commit this too pls --- .../geyser/entity/EntityDefinition.java | 8 +- .../geyser/entity/EntityDefinitions.java | 6 +- .../geyser/entity/GeyserDirtyMetadata.java | 10 +- .../entity/type/living/ArmorStandEntity.java | 8 + .../entity/type/player/PlayerEntity.java | 21 +- .../geysermc/geyser/registry/Registries.java | 41 ++- .../geysermc/geyser/registry/Registry.java | 20 +- .../loader/PotionMixRegistryLoader.java | 2 +- .../registry/loader/RegistryLoaderHolder.java | 33 ++ .../org/geysermc/geyser/scoreboard/Team.java | 11 + .../geyser/session/cache/EntityCache.java | 11 +- .../JavaPlayerInfoUpdateTranslator.java | 4 +- .../entity/spawn/JavaAddEntityTranslator.java | 28 +- .../JavaSetDisplayObjectiveTranslator.java | 2 +- .../org/geysermc/geyser/util/EntityUtils.java | 2 +- .../geyser/util/EnvironmentUtils.java | 2 +- .../network/NameVisibilityScoreboardTest.java | 42 +-- .../network/ScoreboardIssueTests.java | 170 +++++++++- .../BasicBelownameScoreboardTests.java | 36 +- .../BasicPlayerlistScoreboardTests.java | 31 +- .../server/CubecraftScoreboardTest.java | 313 +++++++----------- .../sidebar/BasicSidebarScoreboardTests.java | 35 +- .../OrderAndLimitSidebarScoreboardTests.java | 112 +++---- .../VanillaSidebarScoreboardTests.java | 52 +-- .../scoreboard/network/util/AssertUtils.java | 13 +- .../network/util/GeyserMockContext.java | 19 +- .../util/GeyserMockContextScoreboard.java | 18 +- 27 files changed, 626 insertions(+), 424 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoaderHolder.java 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 ea3950bd4..5b4dc0969 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java @@ -37,7 +37,6 @@ import org.geysermc.geyser.entity.properties.GeyserEntityProperties; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.translator.entity.EntityMetadataTranslator; -import org.geysermc.geyser.util.EnvironmentUtils; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.MetadataType; import org.geysermc.mcprotocollib.protocol.data.game.entity.type.EntityType; @@ -146,13 +145,8 @@ public record EntityDefinition<T extends Entity>(EntityFactory<T> factory, Entit return this; } - /** - * Build the given entity. If a testing environment has been discovered the entity is not registered, - * otherwise it is. This is to prevent all the registries from loading, which will fail (and should - * not be loaded) while testing - */ public EntityDefinition<T> build() { - return build(!EnvironmentUtils.isUnitTesting); + return build(true); } /** 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 39357eb60..391130146 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java @@ -145,7 +145,6 @@ import org.geysermc.geyser.entity.type.living.monster.raid.VindicatorEntity; import org.geysermc.geyser.entity.type.player.PlayerEntity; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.translator.text.MessageTranslator; -import org.geysermc.geyser.util.EnvironmentUtils; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.MetadataType; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.FloatEntityMetadata; @@ -1122,10 +1121,7 @@ public final class EntityDefinitions { .identifier("minecraft:armor_stand") // Emulated .build(false); // Never sent over the network - // causes the registries to load - if (!EnvironmentUtils.isUnitTesting) { - Registries.JAVA_ENTITY_IDENTIFIERS.get().put("minecraft:marker", null); // We don't need an entity definition for this as it is never sent over the network - } + Registries.JAVA_ENTITY_IDENTIFIERS.get().put("minecraft:marker", null); // We don't need an entity definition for this as it is never sent over the network } public static void init() { diff --git a/core/src/main/java/org/geysermc/geyser/entity/GeyserDirtyMetadata.java b/core/src/main/java/org/geysermc/geyser/entity/GeyserDirtyMetadata.java index bc567ab91..1ee84f4b5 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/GeyserDirtyMetadata.java +++ b/core/src/main/java/org/geysermc/geyser/entity/GeyserDirtyMetadata.java @@ -32,7 +32,7 @@ import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataType; import java.util.Map; /** - * A write-only wrapper for temporarily storing entity metadata that will be sent to Bedrock. + * A wrapper for temporarily storing entity metadata that will be sent to Bedrock. */ public final class GeyserDirtyMetadata { private final Map<EntityDataType<?>, Object> metadata = new Object2ObjectLinkedOpenHashMap<>(); @@ -53,6 +53,14 @@ public final class GeyserDirtyMetadata { return !metadata.isEmpty(); } + /** + * Intended for testing purposes only + */ + public <T> T get(EntityDataType<T> entityData) { + //noinspection unchecked + return (T) metadata.get(entityData); + } + @Override public String toString() { return metadata.toString(); 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 d057f09c7..e1c82345f 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 @@ -27,6 +27,7 @@ package org.geysermc.geyser.entity.type.living; import lombok.Getter; import net.kyori.adventure.text.Component; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataType; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; @@ -36,6 +37,7 @@ import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.type.LivingEntity; import org.geysermc.geyser.item.Items; +import org.geysermc.geyser.scoreboard.Team; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.MathUtils; @@ -123,6 +125,12 @@ public class ArmorStandEntity extends LivingEntity { this.position = position; } + @Override + public void updateNametag(@Nullable Team team) { + // unlike all other LivingEntities, armor stands are not affected by team nametag visibility + super.updateNametag(team, true); + } + @Override public void setDisplayName(EntityMetadata<Optional<Component>, ?> entityMetadata) { super.setDisplayName(entityMetadata); 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 4e0de44ea..2abc34d2b 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 @@ -43,7 +43,6 @@ import org.cloudburstmc.protocol.bedrock.data.AbilityLayer; 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.EntityDataMap; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.cloudburstmc.protocol.bedrock.data.entity.EntityLinkData; @@ -112,20 +111,6 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { this.texturesProperty = texturesProperty; } - /** - * Do not use! For testing purposes only - */ - public PlayerEntity(GeyserSession session, long geyserId, UUID uuid, String username) { - super(session, -1, geyserId, uuid, EntityDefinitions.PLAYER, Vector3f.ZERO, Vector3f.ZERO, 0, 0, 0); - this.username = username; - this.nametag = username; - this.texturesProperty = null; - - // clear initial metadata - dirtyMetadata.apply(new EntityDataMap()); - setFlagsDirty(false); - } - @Override protected void initializeMetadata() { super.initializeMetadata(); @@ -193,11 +178,7 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { if (session.getEntityCache().getPlayerEntity(uuid) == null) return; - if (session.getEntityCache().getEntityByGeyserId(geyserId) == null) { - session.getEntityCache().spawnEntity(this); - } else { - spawnEntity(); - } + session.getEntityCache().spawnEntity(this); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/registry/Registries.java b/core/src/main/java/org/geysermc/geyser/registry/Registries.java index 30d3c0763..e9ff837ab 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/Registries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/Registries.java @@ -62,6 +62,8 @@ import java.util.*; * Holds all the common registries in Geyser. */ public final class Registries { + private static boolean initialized = false; + /** * A registry holding all the providers. * This has to be initialized first to allow extensions to access providers during other registry events. @@ -69,7 +71,7 @@ public final class Registries { public static final SimpleMappedRegistry<Class<?>, ProviderSupplier> PROVIDERS = SimpleMappedRegistry.create(new IdentityHashMap<>(), ProviderRegistryLoader::new); /** - * A registry holding a CompoundTag of the known entity identifiers. + * A registry holding a NbtMap of the known entity identifiers. */ public static final SimpleRegistry<NbtMap> BEDROCK_ENTITY_IDENTIFIERS = SimpleRegistry.create("bedrock/entity_identifiers.dat", RegistryLoaders.NBT); @@ -79,7 +81,7 @@ public final class Registries { public static final PacketTranslatorRegistry<BedrockPacket> BEDROCK_PACKET_TRANSLATORS = PacketTranslatorRegistry.create(); /** - * A registry holding a CompoundTag of all the known biomes. + * A registry holding a NbtMap of all the known biomes. */ public static final SimpleRegistry<NbtMap> BIOMES_NBT = SimpleRegistry.create("bedrock/biome_definitions.dat", RegistryLoaders.NBT); @@ -118,6 +120,9 @@ public final class Registries { */ public static final ListRegistry<Item> JAVA_ITEMS = ListRegistry.create(RegistryLoaders.empty(ArrayList::new)); + /** + * A registry containing item identifiers. + */ public static final SimpleMappedRegistry<String, Item> JAVA_ITEM_IDENTIFIERS = SimpleMappedRegistry.create(RegistryLoaders.empty(Object2ObjectOpenHashMap::new)); /** @@ -135,7 +140,7 @@ public final class Registries { /** * A registry holding all the potion mixes. */ - public static final VersionedRegistry<Set<PotionMixData>> POTION_MIXES; + public static final VersionedRegistry<Set<PotionMixData>> POTION_MIXES = VersionedRegistry.create(PotionMixRegistryLoader::new); /** * A versioned registry holding all the recipes, with the net ID being the key, and {@link GeyserRecipe} as the value. @@ -163,15 +168,35 @@ public final class Registries { public static final SimpleMappedRegistry<SoundTranslator, SoundInteractionTranslator<?>> SOUND_TRANSLATORS = SimpleMappedRegistry.create("org.geysermc.geyser.translator.sound.SoundTranslator", SoundTranslatorRegistryLoader::new); public static void init() { - // no-op - } + if (initialized) return; + initialized = true; + + PROVIDERS.load(); + BEDROCK_ENTITY_IDENTIFIERS.load(); + BEDROCK_PACKET_TRANSLATORS.load(); + BIOMES_NBT.load(); + BIOME_IDENTIFIERS.load(); + BLOCK_ENTITIES.load(); + ENTITY_DEFINITIONS.load(); + BEDROCK_ENTITY_PROPERTIES.load(); + JAVA_ENTITY_IDENTIFIERS.load(); + JAVA_PACKET_TRANSLATORS.load(); + JAVA_ITEMS.load(); + JAVA_ITEM_IDENTIFIERS.load(); + ITEMS.load(); + PARTICLES.load(); + // load potion mixes later + RECIPES.load(); + RESOURCE_PACKS.load(); + SOUNDS.load(); + SOUND_LEVEL_EVENTS.load(); + SOUND_TRANSLATORS.load(); - static { PacketRegistryPopulator.populate(); ItemRegistryPopulator.populate(); - // Create registries that require other registries to load first - POTION_MIXES = VersionedRegistry.create(PotionMixRegistryLoader::new); + // potion mixes depend on other registries + POTION_MIXES.load(); // Remove unneeded client generation data from NbtMapBuilder NbtMapBuilder biomesNbt = NbtMap.builder(); 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 8836502b3..4e83a3c2e 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/Registry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/Registry.java @@ -25,9 +25,9 @@ package org.geysermc.geyser.registry; -import org.geysermc.geyser.registry.loader.RegistryLoader; - import java.util.function.Consumer; +import org.geysermc.geyser.registry.loader.RegistryLoader; +import org.geysermc.geyser.registry.loader.RegistryLoaderHolder; /** * A wrapper around a value which is loaded based on the output from the provided @@ -63,7 +63,9 @@ import java.util.function.Consumer; * * @param <M> the value being held by the registry */ +@SuppressWarnings("rawtypes") public abstract class Registry<M> implements IRegistry<M> { + protected RegistryLoaderHolder loaderHolder; protected M mappings; /** @@ -76,7 +78,17 @@ public abstract class Registry<M> implements IRegistry<M> { * @param <I> the input type */ protected <I> Registry(I input, RegistryLoader<I, M> registryLoader) { - this.mappings = registryLoader.load(input); + this.loaderHolder = new RegistryLoaderHolder<>(input, registryLoader); + } + + public void load() { + // don't load twice + if (this.mappings != null) return; + + var holder = this.loaderHolder; + this.loaderHolder = null; + //noinspection unchecked + this.mappings = (M) holder.registryLoader().load(holder.input()); } /** @@ -111,4 +123,4 @@ public abstract class Registry<M> implements IRegistry<M> { public void register(Consumer<M> consumer) { consumer.accept(this.mappings); } -} \ No newline at end of file +} 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 eae4e2bea..613df61aa 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 @@ -125,4 +125,4 @@ public class PotionMixRegistryLoader implements RegistryLoader<Object, Int2Objec return itemMapping; } -} \ No newline at end of file +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoaderHolder.java b/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoaderHolder.java new file mode 100644 index 000000000..751cb4ed4 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoaderHolder.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 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.loader; + +/** + * A holder of the constructor parameters to prevent them from automatically loading, + * and instead load them when the load method is called. + */ +public record RegistryLoaderHolder<I, M>(I input, RegistryLoader<I, M> registryLoader) { +} 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 d7c06ac4f..507523539 100644 --- a/core/src/main/java/org/geysermc/geyser/scoreboard/Team.java +++ b/core/src/main/java/org/geysermc/geyser/scoreboard/Team.java @@ -90,6 +90,8 @@ public final class Team { // Remove old team from this map, and from the set of players of the old team. // Java 1.19.3 Mojmap: Scoreboard#addPlayerToTeam calls #removePlayerFromTeam oldTeam.entities.remove(player); + // also remove the managed entity if there is one + removeManagedEntity(player); } return this; }); @@ -282,6 +284,15 @@ public final class Team { } } + /** + * Used internally to remove a managed entity without causing an update. + * This is fine because its only used when the entity is added to another team, + * which will fire the correct nametag updates etc. + */ + private void removeManagedEntity(String name) { + managedEntities.removeIf(entity -> name.equals(entity.teamIdentifier())); + } + private void refreshAllEntities() { for (Entity entity : session().getEntityCache().getEntities().values()) { entity.updateNametag(scoreboard.getTeamFor(entity.teamIdentifier())); 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 a80ed3e3a..78d21e63b 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 @@ -69,12 +69,13 @@ public class EntityCache { public void spawnEntity(Entity entity) { if (cacheEntity(entity)) { - entity.spawnEntity(); - - // start tracking newly spawned entities. - // This is however not called for players, that's done in addPlayerEntity + // start tracking newly spawned entities. Doing this before the actual entity spawn can result in combining + // the otherwise sent metadata packet (in the case of team visibility, which sets the NAME metadata to + // empty) with the entity spawn packet (which also includes metadata). Resulting in 1 less packet sent. session.getWorldCache().getScoreboard().entityRegistered(entity); + entity.spawnEntity(); + if (entity instanceof Tickable) { // Start ticking it tickableEntities.add((Tickable) entity); @@ -144,8 +145,6 @@ public class EntityCache { // notify scoreboard for new entity var scoreboard = session.getWorldCache().getScoreboard(); scoreboard.playerRegistered(entity); - // spawnPlayer's entityRegistered is not called for players - scoreboard.entityRegistered(entity); } public PlayerEntity getPlayerEntity(UUID uuid) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoUpdateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoUpdateTranslator.java index 19f34db74..d950d9d0e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoUpdateTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoUpdateTranslator.java @@ -25,7 +25,6 @@ package org.geysermc.geyser.translator.protocol.java.entity.player; -import org.geysermc.mcprotocollib.auth.GameProfile; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.packet.PlayerListPacket; @@ -35,6 +34,7 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.skin.SkinManager; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; +import org.geysermc.mcprotocollib.auth.GameProfile; import org.geysermc.mcprotocollib.protocol.data.game.PlayerListEntry; import org.geysermc.mcprotocollib.protocol.data.game.PlayerListEntryAction; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundPlayerInfoUpdatePacket; @@ -95,8 +95,6 @@ public class JavaPlayerInfoUpdateTranslator extends PacketTranslator<Clientbound if (self) { SkinManager.requestAndHandleSkinAndCape(playerEntity, session, skinAndCape -> GeyserImpl.getInstance().getLogger().debug("Loaded Local Bedrock Java Skin Data for " + session.getClientData().getUsername())); - } else { - playerEntity.setValid(true); } } } 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 572d233d0..ed1951243 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 @@ -25,17 +25,14 @@ package org.geysermc.geyser.translator.protocol.java.entity.spawn; -import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.Pose; -import org.geysermc.mcprotocollib.protocol.data.game.entity.object.Direction; -import org.geysermc.mcprotocollib.protocol.data.game.entity.object.FallingBlockData; -import org.geysermc.mcprotocollib.protocol.data.game.entity.object.ProjectileData; -import org.geysermc.mcprotocollib.protocol.data.game.entity.object.WardenData; -import org.geysermc.mcprotocollib.protocol.data.game.entity.type.EntityType; -import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.spawn.ClientboundAddEntityPacket; import org.cloudburstmc.math.vector.Vector3f; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.entity.EntityDefinition; -import org.geysermc.geyser.entity.type.*; +import org.geysermc.geyser.entity.type.Entity; +import org.geysermc.geyser.entity.type.FallingBlockEntity; +import org.geysermc.geyser.entity.type.FishingHookEntity; +import org.geysermc.geyser.entity.type.ItemFrameEntity; +import org.geysermc.geyser.entity.type.PaintingEntity; import org.geysermc.geyser.entity.type.player.PlayerEntity; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.session.GeyserSession; @@ -43,6 +40,14 @@ import org.geysermc.geyser.skin.SkinManager; import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; +import org.geysermc.geyser.util.EnvironmentUtils; +import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.Pose; +import org.geysermc.mcprotocollib.protocol.data.game.entity.object.Direction; +import org.geysermc.mcprotocollib.protocol.data.game.entity.object.FallingBlockData; +import org.geysermc.mcprotocollib.protocol.data.game.entity.object.ProjectileData; +import org.geysermc.mcprotocollib.protocol.data.game.entity.object.WardenData; +import org.geysermc.mcprotocollib.protocol.data.game.entity.type.EntityType; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.spawn.ClientboundAddEntityPacket; @Translator(packet = ClientboundAddEntityPacket.class) public class JavaAddEntityTranslator extends PacketTranslator<ClientboundAddEntityPacket> { @@ -83,10 +88,13 @@ public class JavaAddEntityTranslator extends PacketTranslator<ClientboundAddEnti entity.setHeadYaw(headYaw); entity.setMotion(motion); } - session.getEntityCache().cacheEntity(entity); entity.sendPlayer(); - SkinManager.requestAndHandleSkinAndCape(entity, session, null); + // only load skin if we're not in a test environment. + // Otherwise, it tries to load various resources + if (!EnvironmentUtils.IS_UNIT_TESTING) { + SkinManager.requestAndHandleSkinAndCape(entity, session, null); + } return; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetDisplayObjectiveTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetDisplayObjectiveTranslator.java index 4ce971cdf..241c54cba 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetDisplayObjectiveTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetDisplayObjectiveTranslator.java @@ -25,13 +25,13 @@ package org.geysermc.geyser.translator.protocol.java.scoreboard; -import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.scoreboard.ClientboundSetDisplayObjectivePacket; 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; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.scoreboard.ClientboundSetDisplayObjectivePacket; @Translator(packet = ClientboundSetDisplayObjectivePacket.class) public class JavaSetDisplayObjectiveTranslator extends PacketTranslator<ClientboundSetDisplayObjectivePacket> { 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 8e5a57fae..f8b20fbc4 100644 --- a/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java @@ -297,7 +297,7 @@ public final class EntityUtils { private static String translatedEntityName(@NonNull String namespace, @NonNull String name, @NonNull GeyserSession session) { // MinecraftLocale would otherwise invoke getBootstrap (which doesn't exist) and create some folders, // so use the default fallback value as used in Minecraft Java - if (EnvironmentUtils.isUnitTesting) { + if (EnvironmentUtils.IS_UNIT_TESTING) { return "entity." + namespace + "." + name; } return MinecraftLocale.getLocaleString("entity." + namespace + "." + name, session.locale()); diff --git a/core/src/main/java/org/geysermc/geyser/util/EnvironmentUtils.java b/core/src/main/java/org/geysermc/geyser/util/EnvironmentUtils.java index 909398bf4..35a1a1e8f 100644 --- a/core/src/main/java/org/geysermc/geyser/util/EnvironmentUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/EnvironmentUtils.java @@ -26,7 +26,7 @@ package org.geysermc.geyser.util; public final class EnvironmentUtils { - public static final boolean isUnitTesting = isUnitTesting(); + public static final boolean IS_UNIT_TESTING = isUnitTesting(); private EnvironmentUtils() {} diff --git a/core/src/test/java/org/geysermc/geyser/scoreboard/network/NameVisibilityScoreboardTest.java b/core/src/test/java/org/geysermc/geyser/scoreboard/network/NameVisibilityScoreboardTest.java index 523e4dca2..29882ca2e 100644 --- a/core/src/test/java/org/geysermc/geyser/scoreboard/network/NameVisibilityScoreboardTest.java +++ b/core/src/test/java/org/geysermc/geyser/scoreboard/network/NameVisibilityScoreboardTest.java @@ -27,7 +27,7 @@ package org.geysermc.geyser.scoreboard.network; import static org.geysermc.geyser.scoreboard.network.util.AssertUtils.assertNextPacket; import static org.geysermc.geyser.scoreboard.network.util.AssertUtils.assertNoNextPacket; -import static org.geysermc.geyser.scoreboard.network.util.GeyserMockContextScoreboard.mockAndAddPlayerEntity; +import static org.geysermc.geyser.scoreboard.network.util.GeyserMockContextScoreboard.spawnPlayerSilently; import static org.geysermc.geyser.scoreboard.network.util.GeyserMockContextScoreboard.mockContextScoreboard; import net.kyori.adventure.text.Component; @@ -47,7 +47,7 @@ public class NameVisibilityScoreboardTest { mockContextScoreboard(context -> { var setPlayerTeamTranslator = new JavaSetPlayerTeamTranslator(); - mockAndAddPlayerEntity(context, "player1", 2); + spawnPlayerSilently(context, "player1", 2); context.translate( setPlayerTeamTranslator, @@ -64,12 +64,12 @@ public class NameVisibilityScoreboardTest { new String[]{"player1"} ) ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetEntityDataPacket(); packet.setRuntimeEntityId(2); packet.getMetadata().put(EntityDataTypes.NAME, ""); return packet; - }, context); + }); }); } @@ -78,7 +78,7 @@ public class NameVisibilityScoreboardTest { mockContextScoreboard(context -> { var setPlayerTeamTranslator = new JavaSetPlayerTeamTranslator(); - mockAndAddPlayerEntity(context, "player1", 2); + spawnPlayerSilently(context, "player1", 2); context.translate( setPlayerTeamTranslator, @@ -96,12 +96,12 @@ public class NameVisibilityScoreboardTest { ) ); // only hidden if session player (Tim203) is in a team as well - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetEntityDataPacket(); packet.setRuntimeEntityId(2); packet.getMetadata().put(EntityDataTypes.NAME, "§4prefix§r§4player1§r§4suffix"); return packet; - }, context); + }); assertNoNextPacket(context); // create another team and add Tim203 to it @@ -121,12 +121,12 @@ public class NameVisibilityScoreboardTest { ) ); // Tim203 is now in another team, so it should be hidden - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetEntityDataPacket(); packet.setRuntimeEntityId(2); packet.getMetadata().put(EntityDataTypes.NAME, ""); return packet; - }, context); + }); assertNoNextPacket(context); // add Tim203 to same team as player1, score should be visible again @@ -134,12 +134,12 @@ public class NameVisibilityScoreboardTest { setPlayerTeamTranslator, new ClientboundSetPlayerTeamPacket("team1", TeamAction.ADD_PLAYER, new String[]{"Tim203"}) ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetEntityDataPacket(); packet.setRuntimeEntityId(2); packet.getMetadata().put(EntityDataTypes.NAME, "§4prefix§r§4player1§r§4suffix"); return packet; - }, context); + }); }); } @@ -148,7 +148,7 @@ public class NameVisibilityScoreboardTest { mockContextScoreboard(context -> { var setPlayerTeamTranslator = new JavaSetPlayerTeamTranslator(); - mockAndAddPlayerEntity(context, "player1", 2); + spawnPlayerSilently(context, "player1", 2); context.translate( setPlayerTeamTranslator, @@ -166,12 +166,12 @@ public class NameVisibilityScoreboardTest { ) ); // Tim203 is not in a team (let alone the same team), so should be visible - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetEntityDataPacket(); packet.setRuntimeEntityId(2); packet.getMetadata().put(EntityDataTypes.NAME, "§4prefix§r§4player1§r§4suffix"); return packet; - }, context); + }); assertNoNextPacket(context); // Tim203 is now in the same team as player1, so should be hidden @@ -179,12 +179,12 @@ public class NameVisibilityScoreboardTest { setPlayerTeamTranslator, new ClientboundSetPlayerTeamPacket("team1", TeamAction.ADD_PLAYER, new String[]{"Tim203"}) ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetEntityDataPacket(); packet.setRuntimeEntityId(2); packet.getMetadata().put(EntityDataTypes.NAME, ""); return packet; - }, context); + }); assertNoNextPacket(context); // create another team and add Tim203 to there, score should be visible again @@ -203,12 +203,12 @@ public class NameVisibilityScoreboardTest { new String[]{"Tim203"} ) ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetEntityDataPacket(); packet.setRuntimeEntityId(2); packet.getMetadata().put(EntityDataTypes.NAME, "§4prefix§r§4player1§r§4suffix"); return packet; - }, context); + }); }); } @@ -217,7 +217,7 @@ public class NameVisibilityScoreboardTest { mockContextScoreboard(context -> { var setPlayerTeamTranslator = new JavaSetPlayerTeamTranslator(); - mockAndAddPlayerEntity(context, "player1", 2); + spawnPlayerSilently(context, "player1", 2); context.translate( setPlayerTeamTranslator, @@ -234,12 +234,12 @@ public class NameVisibilityScoreboardTest { new String[]{"player1"} ) ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetEntityDataPacket(); packet.setRuntimeEntityId(2); packet.getMetadata().put(EntityDataTypes.NAME, "§4prefix§r§4player1§r§4suffix"); return packet; - }, context); + }); // adding self to another team shouldn't make a difference context.translate( diff --git a/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java b/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java index 1ec245007..17ad7f3d3 100644 --- a/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java +++ b/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java @@ -25,23 +25,58 @@ package org.geysermc.geyser.scoreboard.network; +import static org.geysermc.geyser.scoreboard.network.util.AssertUtils.assertNextPacket; +import static org.geysermc.geyser.scoreboard.network.util.AssertUtils.assertNextPacketMatch; import static org.geysermc.geyser.scoreboard.network.util.AssertUtils.assertNextPacketType; +import static org.geysermc.geyser.scoreboard.network.util.AssertUtils.assertNoNextPacket; import static org.geysermc.geyser.scoreboard.network.util.GeyserMockContextScoreboard.mockContextScoreboard; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; +import net.kyori.adventure.text.Component; +import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.packet.AddEntityPacket; +import org.cloudburstmc.protocol.bedrock.packet.AddPlayerPacket; +import org.cloudburstmc.protocol.bedrock.packet.MoveEntityAbsolutePacket; +import org.cloudburstmc.protocol.bedrock.packet.PlayerListPacket; import org.cloudburstmc.protocol.bedrock.packet.RemoveEntityPacket; +import org.cloudburstmc.protocol.bedrock.packet.SetEntityDataPacket; import org.geysermc.geyser.entity.type.living.monster.EnderDragonPartEntity; import org.geysermc.geyser.session.cache.EntityCache; import org.geysermc.geyser.translator.protocol.java.entity.JavaRemoveEntitiesTranslator; +import org.geysermc.geyser.translator.protocol.java.entity.JavaSetEntityDataTranslator; +import org.geysermc.geyser.translator.protocol.java.entity.player.JavaPlayerInfoUpdateTranslator; +import org.geysermc.geyser.translator.protocol.java.entity.spawn.JavaAddEntityTranslator; import org.geysermc.geyser.translator.protocol.java.entity.spawn.JavaAddExperienceOrbTranslator; +import org.geysermc.geyser.translator.protocol.java.scoreboard.JavaSetPlayerTeamTranslator; +import org.geysermc.mcprotocollib.auth.GameProfile; +import org.geysermc.mcprotocollib.protocol.data.game.PlayerListEntry; +import org.geysermc.mcprotocollib.protocol.data.game.PlayerListEntryAction; +import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata; +import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.MetadataType; +import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; +import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ByteEntityMetadata; +import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ObjectEntityMetadata; +import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; +import org.geysermc.mcprotocollib.protocol.data.game.entity.type.EntityType; +import org.geysermc.mcprotocollib.protocol.data.game.scoreboard.CollisionRule; +import org.geysermc.mcprotocollib.protocol.data.game.scoreboard.NameTagVisibility; +import org.geysermc.mcprotocollib.protocol.data.game.scoreboard.TeamAction; +import org.geysermc.mcprotocollib.protocol.data.game.scoreboard.TeamColor; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundPlayerInfoUpdatePacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.ClientboundRemoveEntitiesPacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.ClientboundSetEntityDataPacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.spawn.ClientboundAddEntityPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.spawn.ClientboundAddExperienceOrbPacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.scoreboard.ClientboundSetPlayerTeamPacket; import org.junit.jupiter.api.Test; +import java.util.EnumSet; +import java.util.Optional; +import java.util.UUID; + /** - * Tests that don't fit in a larger system (e.g. sidebar objective) that were reported on GitHub + * Tests for issues reported on GitHub. */ public class ScoreboardIssueTests { /** @@ -90,4 +125,137 @@ public class ScoreboardIssueTests { }); }); } + + /** + * Test for <a href="https://github.com/GeyserMC/Geyser/issues/5089">#5089</a>. + * It follows the reproduction steps with all the packets it sends along its way. + * Tested with the 2.0.0-SNAPSHOT version. + * Note that this exact issue is actually 2 issues: + * <ul> + * <li> + * An issue caused by remainders of code that was part of the initial PR that added support for players. + * The code is now more streamlined. + * </li> + * <li>Armor stands are excluded from team visibility checks (the only living entity)</li> + * </ul> + */ + @Test + void nameNotUpdating() { + mockContextScoreboard(context -> { + var playerInfoUpdateTranslator = new JavaPlayerInfoUpdateTranslator(); + var setPlayerTeamTranslator = new JavaSetPlayerTeamTranslator(); + var addEntityTranslator = new JavaAddEntityTranslator(); + var setEntityDataTranslator = new JavaSetEntityDataTranslator(); + + + // first command, create NPC + + + var npcUuid = UUID.fromString("b0eb01d7-52c9-4730-9fd3-2c03fcb00d6e"); + context.translate( + playerInfoUpdateTranslator, + new ClientboundPlayerInfoUpdatePacket( + EnumSet.of(PlayerListEntryAction.ADD_PLAYER, PlayerListEntryAction.UPDATE_LISTED), + new PlayerListEntry[] { + new PlayerListEntry(npcUuid, new GameProfile(npcUuid, "1297"), false, 0, GameMode.SURVIVAL, null, null, 0, null, null) + })); + + //todo we don't have to remove an entry that was never in the playerlist in the first place + assertNextPacket(context, () -> { + var packet = new PlayerListPacket(); + packet.getEntries().add(new PlayerListPacket.Entry(npcUuid)); + packet.setAction(PlayerListPacket.Action.REMOVE); + return packet; + }); + assertNoNextPacket(context); + + context.translate( + setPlayerTeamTranslator, + new ClientboundSetPlayerTeamPacket( + "npc_team_1297", + Component.empty(), + Component.empty(), + Component.empty(), + false, + false, + NameTagVisibility.NEVER, + CollisionRule.NEVER, + TeamColor.WHITE, + new String[0] + ) + ); + context.translate( + setPlayerTeamTranslator, + new ClientboundSetPlayerTeamPacket("npc_team_1297", TeamAction.ADD_PLAYER, new String[]{ "1297" })); + + context.translate(addEntityTranslator, new ClientboundAddEntityPacket(1297, npcUuid, EntityType.PLAYER, 1, 2, 3, 4, 5, 6)); + // then it updates the displayed skin parts, which isn't relevant for us + + assertNextPacketMatch(context, AddPlayerPacket.class, packet -> { + assertEquals(3, packet.getRuntimeEntityId()); + assertEquals(npcUuid, packet.getUuid()); + assertEquals("1297", packet.getUsername()); + assertEquals((byte) 1, packet.getMetadata().get(EntityDataTypes.NAMETAG_ALWAYS_SHOW)); + assertEquals("", packet.getMetadata().get(EntityDataTypes.NAME)); + }); + assertNoNextPacket(context); + + + // second command, create hologram + + + var hologramUuid = UUID.fromString("b1586291-5f68-44dc-847d-6c123c5b8cbf"); + context.translate( + addEntityTranslator, + new ClientboundAddEntityPacket(1298, hologramUuid, EntityType.ARMOR_STAND, 6, 5, 4, 3, 2, 1)); + + assertNextPacketMatch(context, AddEntityPacket.class, packet -> { + assertEquals(4, packet.getRuntimeEntityId()); + assertEquals("minecraft:armor_stand", packet.getIdentifier()); + }); + + // metadata set: invisible, custom name, custom name visible + context.translate(setEntityDataTranslator, new ClientboundSetEntityDataPacket(1298, new EntityMetadata[]{ + new ByteEntityMetadata(0, MetadataType.BYTE, (byte) 0x20), + new ObjectEntityMetadata<>(2, MetadataType.OPTIONAL_CHAT, Optional.of(Component.text("tesss"))), + new BooleanEntityMetadata(3, MetadataType.BOOLEAN, true) + })); + + assertNextPacketMatch(context, SetEntityDataPacket.class, packet -> { + assertEquals(4, packet.getRuntimeEntityId()); + var metadata = packet.getMetadata(); + assertEquals(0.0f, metadata.get(EntityDataTypes.SCALE)); + assertEquals("tesss", metadata.get(EntityDataTypes.NAME)); + assertEquals((byte) 1, metadata.get(EntityDataTypes.NAMETAG_ALWAYS_SHOW)); + }); + // because the armor stand turned invisible and has a nametag (nametag is hidden when invisible) + assertNextPacketType(context, MoveEntityAbsolutePacket.class); + + context.translate( + setPlayerTeamTranslator, + new ClientboundSetPlayerTeamPacket( + "npc_team_1298", + Component.empty(), + Component.empty(), + Component.empty(), + false, + false, + NameTagVisibility.NEVER, + CollisionRule.NEVER, + TeamColor.WHITE, + new String[0] + ) + ); + context.translate( + setPlayerTeamTranslator, + new ClientboundSetPlayerTeamPacket("npc_team_1298", TeamAction.ADD_PLAYER, new String[]{ hologramUuid.toString() })); + + assertNextPacket(context, () -> { + var packet = new SetEntityDataPacket(); + packet.getMetadata().put(EntityDataTypes.NAME, "§f§r§ftesss§r§f"); + packet.setRuntimeEntityId(4); + return packet; + }); + }); + } } diff --git a/core/src/test/java/org/geysermc/geyser/scoreboard/network/belowname/BasicBelownameScoreboardTests.java b/core/src/test/java/org/geysermc/geyser/scoreboard/network/belowname/BasicBelownameScoreboardTests.java index 5d8d8309f..dfe85a0ee 100644 --- a/core/src/test/java/org/geysermc/geyser/scoreboard/network/belowname/BasicBelownameScoreboardTests.java +++ b/core/src/test/java/org/geysermc/geyser/scoreboard/network/belowname/BasicBelownameScoreboardTests.java @@ -27,7 +27,7 @@ package org.geysermc.geyser.scoreboard.network.belowname; import static org.geysermc.geyser.scoreboard.network.util.AssertUtils.assertNextPacket; import static org.geysermc.geyser.scoreboard.network.util.AssertUtils.assertNoNextPacket; -import static org.geysermc.geyser.scoreboard.network.util.GeyserMockContextScoreboard.mockAndAddPlayerEntity; +import static org.geysermc.geyser.scoreboard.network.util.GeyserMockContextScoreboard.spawnPlayerSilently; import static org.geysermc.geyser.scoreboard.network.util.GeyserMockContextScoreboard.mockContextScoreboard; import net.kyori.adventure.text.Component; @@ -80,7 +80,7 @@ public class BasicBelownameScoreboardTests { var setObjectiveTranslator = new JavaSetObjectiveTranslator(); var setDisplayObjectiveTranslator = new JavaSetDisplayObjectiveTranslator(); - mockAndAddPlayerEntity(context, "player1", 2); + spawnPlayerSilently(context, "player1", 2); context.translate( setObjectiveTranslator, @@ -98,12 +98,12 @@ public class BasicBelownameScoreboardTests { setDisplayObjectiveTranslator, new ClientboundSetDisplayObjectivePacket(ScoreboardPosition.BELOW_NAME, "objective") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetEntityDataPacket(); packet.setRuntimeEntityId(2); packet.getMetadata().put(EntityDataTypes.SCORE, "0 §r§9objective"); return packet; - }, context); + }); }); } @@ -113,7 +113,7 @@ public class BasicBelownameScoreboardTests { var setObjectiveTranslator = new JavaSetObjectiveTranslator(); var setDisplayObjectiveTranslator = new JavaSetDisplayObjectiveTranslator(); - mockAndAddPlayerEntity(context, "player1", 2); + spawnPlayerSilently(context, "player1", 2); context.translate( setObjectiveTranslator, @@ -131,24 +131,24 @@ public class BasicBelownameScoreboardTests { setDisplayObjectiveTranslator, new ClientboundSetDisplayObjectivePacket(ScoreboardPosition.BELOW_NAME, "objective") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetEntityDataPacket(); packet.setRuntimeEntityId(2); packet.getMetadata().put(EntityDataTypes.SCORE, "0 §robjective"); return packet; - }, context); + }); assertNoNextPacket(context); context.translate( setDisplayObjectiveTranslator, new ClientboundSetDisplayObjectivePacket(ScoreboardPosition.BELOW_NAME, "") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetEntityDataPacket(); packet.setRuntimeEntityId(2); packet.getMetadata().put(EntityDataTypes.SCORE, ""); return packet; - }, context); + }); }); } @@ -158,7 +158,7 @@ public class BasicBelownameScoreboardTests { var setObjectiveTranslator = new JavaSetObjectiveTranslator(); var setDisplayObjectiveTranslator = new JavaSetDisplayObjectiveTranslator(); - mockAndAddPlayerEntity(context, "player1", 2); + spawnPlayerSilently(context, "player1", 2); context.translate( setObjectiveTranslator, @@ -186,42 +186,42 @@ public class BasicBelownameScoreboardTests { setDisplayObjectiveTranslator, new ClientboundSetDisplayObjectivePacket(ScoreboardPosition.BELOW_NAME, "objective2") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetEntityDataPacket(); packet.setRuntimeEntityId(2); packet.getMetadata().put(EntityDataTypes.SCORE, "0 §robjective2"); return packet; - }, context); + }); assertNoNextPacket(context); context.translate( setDisplayObjectiveTranslator, new ClientboundSetDisplayObjectivePacket(ScoreboardPosition.BELOW_NAME, "objective1") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetEntityDataPacket(); packet.setRuntimeEntityId(2); packet.getMetadata().put(EntityDataTypes.SCORE, ""); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetEntityDataPacket(); packet.setRuntimeEntityId(2); packet.getMetadata().put(EntityDataTypes.SCORE, "0 §robjective1"); return packet; - }, context); + }); assertNoNextPacket(context); context.translate( setDisplayObjectiveTranslator, new ClientboundSetDisplayObjectivePacket(ScoreboardPosition.BELOW_NAME, "") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetEntityDataPacket(); packet.setRuntimeEntityId(2); packet.getMetadata().put(EntityDataTypes.SCORE, ""); return packet; - }, context); + }); }); } } diff --git a/core/src/test/java/org/geysermc/geyser/scoreboard/network/playerlist/BasicPlayerlistScoreboardTests.java b/core/src/test/java/org/geysermc/geyser/scoreboard/network/playerlist/BasicPlayerlistScoreboardTests.java index a3d4ad671..4ac5ee098 100644 --- a/core/src/test/java/org/geysermc/geyser/scoreboard/network/playerlist/BasicPlayerlistScoreboardTests.java +++ b/core/src/test/java/org/geysermc/geyser/scoreboard/network/playerlist/BasicPlayerlistScoreboardTests.java @@ -32,7 +32,6 @@ import static org.geysermc.geyser.scoreboard.network.util.GeyserMockContextScore import java.util.List; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; -import net.kyori.adventure.text.format.Style; import net.kyori.adventure.text.format.TextDecoration; import org.cloudburstmc.protocol.bedrock.data.ScoreInfo; import org.cloudburstmc.protocol.bedrock.packet.RemoveObjectivePacket; @@ -75,7 +74,7 @@ public class BasicPlayerlistScoreboardTests { setDisplayObjectiveTranslator, new ClientboundSetDisplayObjectivePacket(ScoreboardPosition.PLAYER_LIST, "objective") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetDisplayObjectivePacket(); packet.setObjectiveId("0"); packet.setDisplayName("objective"); @@ -83,7 +82,7 @@ public class BasicPlayerlistScoreboardTests { packet.setDisplaySlot("list"); packet.setSortOrder(1); return packet; - }, context); + }); }); } @@ -98,7 +97,7 @@ public class BasicPlayerlistScoreboardTests { new ClientboundSetObjectivePacket( "objective", ObjectiveAction.ADD, - Component.text("objective", Style.style(NamedTextColor.AQUA, TextDecoration.BOLD)), + Component.text("objective", NamedTextColor.AQUA, TextDecoration.BOLD), ScoreType.INTEGER, null ) @@ -109,7 +108,7 @@ public class BasicPlayerlistScoreboardTests { setDisplayObjectiveTranslator, new ClientboundSetDisplayObjectivePacket(ScoreboardPosition.PLAYER_LIST, "objective") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetDisplayObjectivePacket(); packet.setObjectiveId("0"); packet.setDisplayName("§b§lobjective"); @@ -117,7 +116,7 @@ public class BasicPlayerlistScoreboardTests { packet.setDisplaySlot("list"); packet.setSortOrder(1); return packet; - }, context); + }); }); } @@ -156,7 +155,7 @@ public class BasicPlayerlistScoreboardTests { setDisplayObjectiveTranslator, new ClientboundSetDisplayObjectivePacket(ScoreboardPosition.PLAYER_LIST, "objective2") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetDisplayObjectivePacket(); packet.setObjectiveId("0"); packet.setDisplayName("objective2"); @@ -164,26 +163,26 @@ public class BasicPlayerlistScoreboardTests { packet.setDisplaySlot("list"); packet.setSortOrder(1); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); // session player name is Tim203 packet.setInfos(List.of(new ScoreInfo(1, "0", 2, ScoreInfo.ScorerType.PLAYER, 1))); return packet; - }, context); + }); assertNoNextPacket(context); context.translate( setDisplayObjectiveTranslator, new ClientboundSetDisplayObjectivePacket(ScoreboardPosition.PLAYER_LIST, "objective1") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new RemoveObjectivePacket(); packet.setObjectiveId("0"); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetDisplayObjectivePacket(); packet.setObjectiveId("2"); packet.setDisplayName("objective1"); @@ -191,14 +190,14 @@ public class BasicPlayerlistScoreboardTests { packet.setDisplaySlot("list"); packet.setSortOrder(1); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); // session player name is Tim203 packet.setInfos(List.of(new ScoreInfo(3, "2", 1, ScoreInfo.ScorerType.PLAYER, 1))); return packet; - }, context); + }); }); } } diff --git a/core/src/test/java/org/geysermc/geyser/scoreboard/network/server/CubecraftScoreboardTest.java b/core/src/test/java/org/geysermc/geyser/scoreboard/network/server/CubecraftScoreboardTest.java index dd693022c..80f562fc3 100644 --- a/core/src/test/java/org/geysermc/geyser/scoreboard/network/server/CubecraftScoreboardTest.java +++ b/core/src/test/java/org/geysermc/geyser/scoreboard/network/server/CubecraftScoreboardTest.java @@ -26,21 +26,22 @@ package org.geysermc.geyser.scoreboard.network.server; import static org.geysermc.geyser.scoreboard.network.util.AssertUtils.assertNextPacket; +import static org.geysermc.geyser.scoreboard.network.util.AssertUtils.assertNextPacketMatch; import static org.geysermc.geyser.scoreboard.network.util.AssertUtils.assertNoNextPacket; -import static org.geysermc.geyser.scoreboard.network.util.GeyserMockContextScoreboard.mockAndAddPlayerEntity; +import static org.geysermc.geyser.scoreboard.network.util.GeyserMockContextScoreboard.spawnPlayer; import static org.geysermc.geyser.scoreboard.network.util.GeyserMockContextScoreboard.mockContextScoreboard; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; -import net.kyori.adventure.text.format.Style; import net.kyori.adventure.text.format.TextColor; import net.kyori.adventure.text.format.TextDecoration; import org.cloudburstmc.protocol.bedrock.data.ScoreInfo; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; +import org.cloudburstmc.protocol.bedrock.packet.AddPlayerPacket; import org.cloudburstmc.protocol.bedrock.packet.RemoveObjectivePacket; import org.cloudburstmc.protocol.bedrock.packet.SetDisplayObjectivePacket; -import org.cloudburstmc.protocol.bedrock.packet.SetEntityDataPacket; import org.cloudburstmc.protocol.bedrock.packet.SetScorePacket; import org.geysermc.geyser.translator.protocol.java.scoreboard.JavaSetDisplayObjectiveTranslator; import org.geysermc.geyser.translator.protocol.java.scoreboard.JavaSetObjectiveTranslator; @@ -88,7 +89,7 @@ public class CubecraftScoreboardTest { setDisplayObjectiveTranslator, new ClientboundSetDisplayObjectivePacket(ScoreboardPosition.SIDEBAR, "sidebar") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetDisplayObjectivePacket(); packet.setObjectiveId("0"); packet.setDisplayName("sidebar"); @@ -96,7 +97,7 @@ public class CubecraftScoreboardTest { packet.setDisplaySlot("sidebar"); packet.setSortOrder(1); return packet; - }, context); + }); // Now they're going to create a bunch of teams and add players to those teams in a very inefficient way. @@ -191,27 +192,23 @@ public class CubecraftScoreboardTest { ObjectiveAction.UPDATE, Component.empty() .append(Component.text( - "CubeCraft", Style.style(NamedTextColor.WHITE, TextDecoration.BOLD))), + "CubeCraft", NamedTextColor.WHITE, TextDecoration.BOLD)), ScoreType.INTEGER, null)); - assertNextPacket( - () -> { - var packet = new RemoveObjectivePacket(); - packet.setObjectiveId("0"); - return packet; - }, - context); - assertNextPacket( - () -> { - var packet = new SetDisplayObjectivePacket(); - packet.setObjectiveId("0"); - packet.setDisplayName("§f§lCubeCraft"); - packet.setCriteria("dummy"); - packet.setDisplaySlot("sidebar"); - packet.setSortOrder(1); - return packet; - }, - context); + assertNextPacket(context, () -> { + var packet = new RemoveObjectivePacket(); + packet.setObjectiveId("0"); + return packet; + }); + assertNextPacket(context, () -> { + var packet = new SetDisplayObjectivePacket(); + packet.setObjectiveId("0"); + packet.setDisplayName("§f§lCubeCraft"); + packet.setCriteria("dummy"); + packet.setDisplaySlot("sidebar"); + packet.setSortOrder(1); + return packet; + }); context.translate( setTeamTranslator, @@ -234,7 +231,7 @@ public class CubecraftScoreboardTest { new ClientboundSetPlayerTeamPacket( "SB_l-0", Component.text("SB_l-0"), - Component.empty().append(Component.text("", Style.style(NamedTextColor.BLACK))), + Component.empty().append(Component.text("", NamedTextColor.BLACK)), Component.empty(), true, true, @@ -244,14 +241,12 @@ public class CubecraftScoreboardTest { assertNoNextPacket(context); context.translate(setScoreTranslator, new ClientboundSetScorePacket("§0§0", "sidebar", 10)); - assertNextPacket( - () -> { - var packet = new SetScorePacket(); - packet.setAction(SetScorePacket.Action.SET); - packet.setInfos(List.of(new ScoreInfo(1, "0", 10, "§r§0§0§r"))); - return packet; - }, - context); + assertNextPacket(context, () -> { + var packet = new SetScorePacket(); + packet.setAction(SetScorePacket.Action.SET); + packet.setInfos(List.of(new ScoreInfo(1, "0", 10, "§r§0§0§r"))); + return packet; + }); context.translate( setTeamTranslator, @@ -287,14 +282,12 @@ public class CubecraftScoreboardTest { assertNoNextPacket(context); context.translate(setScoreTranslator, new ClientboundSetScorePacket("§0§1", "sidebar", 9)); - assertNextPacket( - () -> { - var packet = new SetScorePacket(); - packet.setAction(SetScorePacket.Action.SET); - packet.setInfos(List.of(new ScoreInfo(2, "0", 9, "§bUser: §r§fTim203§r§0§1§r"))); - return packet; - }, - context); + assertNextPacket(context, () -> { + var packet = new SetScorePacket(); + packet.setAction(SetScorePacket.Action.SET); + packet.setInfos(List.of(new ScoreInfo(2, "0", 9, "§bUser: §r§fTim203§r§0§1§r"))); + return packet; + }); context.translate( setTeamTranslator, @@ -330,14 +323,12 @@ public class CubecraftScoreboardTest { assertNoNextPacket(context); context.translate(setScoreTranslator, new ClientboundSetScorePacket("§0§2", "sidebar", 8)); - assertNextPacket( - () -> { - var packet = new SetScorePacket(); - packet.setAction(SetScorePacket.Action.SET); - packet.setInfos(List.of(new ScoreInfo(3, "0", 8, "§bRank: §r§f\uE1AB §r§0§2§r"))); - return packet; - }, - context); + assertNextPacket(context, () -> { + var packet = new SetScorePacket(); + packet.setAction(SetScorePacket.Action.SET); + packet.setInfos(List.of(new ScoreInfo(3, "0", 8, "§bRank: §r§f\uE1AB §r§0§2§r"))); + return packet; + }); context.translate( setTeamTranslator, @@ -370,14 +361,12 @@ public class CubecraftScoreboardTest { assertNoNextPacket(context); context.translate(setScoreTranslator, new ClientboundSetScorePacket("§0§3", "sidebar", 7)); - assertNextPacket( - () -> { - var packet = new SetScorePacket(); - packet.setAction(SetScorePacket.Action.SET); - packet.setInfos(List.of(new ScoreInfo(4, "0", 7, "§r§0§3§r"))); - return packet; - }, - context); + assertNextPacket(context, () -> { + var packet = new SetScorePacket(); + packet.setAction(SetScorePacket.Action.SET); + packet.setInfos(List.of(new ScoreInfo(4, "0", 7, "§r§0§3§r"))); + return packet; + }); context.translate( setTeamTranslator, @@ -410,14 +399,12 @@ public class CubecraftScoreboardTest { assertNoNextPacket(context); context.translate(setScoreTranslator, new ClientboundSetScorePacket("§0§4", "sidebar", 6)); - assertNextPacket( - () -> { - var packet = new SetScorePacket(); - packet.setAction(SetScorePacket.Action.SET); - packet.setInfos(List.of(new ScoreInfo(5, "0", 6, "§r§0§4§r"))); - return packet; - }, - context); + assertNextPacket(context, () -> { + var packet = new SetScorePacket(); + packet.setAction(SetScorePacket.Action.SET); + packet.setInfos(List.of(new ScoreInfo(5, "0", 6, "§r§0§4§r"))); + return packet; + }); context.translate( setTeamTranslator, @@ -450,14 +437,12 @@ public class CubecraftScoreboardTest { assertNoNextPacket(context); context.translate(setScoreTranslator, new ClientboundSetScorePacket("§0§5", "sidebar", 5)); - assertNextPacket( - () -> { - var packet = new SetScorePacket(); - packet.setAction(SetScorePacket.Action.SET); - packet.setInfos(List.of(new ScoreInfo(6, "0", 5, "§r§0§5§r"))); - return packet; - }, - context); + assertNextPacket(context, () -> { + var packet = new SetScorePacket(); + packet.setAction(SetScorePacket.Action.SET); + packet.setInfos(List.of(new ScoreInfo(6, "0", 5, "§r§0§5§r"))); + return packet; + }); context.translate( setTeamTranslator, @@ -493,14 +478,12 @@ public class CubecraftScoreboardTest { assertNoNextPacket(context); context.translate(setScoreTranslator, new ClientboundSetScorePacket("§0§6", "sidebar", 4)); - assertNextPacket( - () -> { - var packet = new SetScorePacket(); - packet.setAction(SetScorePacket.Action.SET); - packet.setInfos(List.of(new ScoreInfo(7, "0", 4, "§bLobby: §r§fEU #10§r§0§6§r"))); - return packet; - }, - context); + assertNextPacket(context, () -> { + var packet = new SetScorePacket(); + packet.setAction(SetScorePacket.Action.SET); + packet.setInfos(List.of(new ScoreInfo(7, "0", 4, "§bLobby: §r§fEU #10§r§0§6§r"))); + return packet; + }); context.translate( setTeamTranslator, @@ -536,14 +519,12 @@ public class CubecraftScoreboardTest { assertNoNextPacket(context); context.translate(setScoreTranslator, new ClientboundSetScorePacket("§0§7", "sidebar", 3)); - assertNextPacket( - () -> { - var packet = new SetScorePacket(); - packet.setAction(SetScorePacket.Action.SET); - packet.setInfos(List.of(new ScoreInfo(8, "0", 3, "§bPlayers: §r§f783§r§0§7§r"))); - return packet; - }, - context); + assertNextPacket(context, () -> { + var packet = new SetScorePacket(); + packet.setAction(SetScorePacket.Action.SET); + packet.setInfos(List.of(new ScoreInfo(8, "0", 3, "§bPlayers: §r§f783§r§0§7§r"))); + return packet; + }); context.translate( setTeamTranslator, @@ -576,14 +557,12 @@ public class CubecraftScoreboardTest { assertNoNextPacket(context); context.translate(setScoreTranslator, new ClientboundSetScorePacket("§0§8", "sidebar", 2)); - assertNextPacket( - () -> { - var packet = new SetScorePacket(); - packet.setAction(SetScorePacket.Action.SET); - packet.setInfos(List.of(new ScoreInfo(9, "0", 2, "§r§0§8§r"))); - return packet; - }, - context); + assertNextPacket(context, () -> { + var packet = new SetScorePacket(); + packet.setAction(SetScorePacket.Action.SET); + packet.setInfos(List.of(new ScoreInfo(9, "0", 2, "§r§0§8§r"))); + return packet; + }); context.translate( setTeamTranslator, @@ -616,14 +595,12 @@ public class CubecraftScoreboardTest { assertNoNextPacket(context); context.translate(setScoreTranslator, new ClientboundSetScorePacket("§0§9", "sidebar", 1)); - assertNextPacket( - () -> { - var packet = new SetScorePacket(); - packet.setAction(SetScorePacket.Action.SET); - packet.setInfos(List.of(new ScoreInfo(10, "0", 1, "§824/09/24 (g2208)§r§0§9§r"))); - return packet; - }, - context); + assertNextPacket(context, () -> { + var packet = new SetScorePacket(); + packet.setAction(SetScorePacket.Action.SET); + packet.setInfos(List.of(new ScoreInfo(10, "0", 1, "§824/09/24 (g2208)§r§0§9§r"))); + return packet; + }); context.translate( setTeamTranslator, @@ -656,14 +633,12 @@ public class CubecraftScoreboardTest { assertNoNextPacket(context); context.translate(setScoreTranslator, new ClientboundSetScorePacket("§0§a", "sidebar", 0)); - assertNextPacket( - () -> { - var packet = new SetScorePacket(); - packet.setAction(SetScorePacket.Action.SET); - packet.setInfos(List.of(new ScoreInfo(11, "0", 0, "§6play.cubecraft.net§r§0§a§r"))); - return packet; - }, - context); + assertNextPacket(context, () -> { + var packet = new SetScorePacket(); + packet.setAction(SetScorePacket.Action.SET); + packet.setInfos(List.of(new ScoreInfo(11, "0", 0, "§6play.cubecraft.net§r§0§a§r"))); + return packet; + }); // after this we get a ClientboundPlayerInfoUpdatePacket with the action UPDATE_DISPLAY_NAME, // but that one is only shown in the tablist so we don't have to handle that. @@ -672,85 +647,53 @@ public class CubecraftScoreboardTest { // CubeCraft seems to use two armor stands per player: 1 for the rank badge and 1 for the player name. // So the only thing we have to verify is that the nametag is hidden - mockAndAddPlayerEntity(context, "A_Player", 2); - assertNextPacket( - () -> { - var packet = new SetEntityDataPacket(); - packet.setRuntimeEntityId(2); - packet.getMetadata().put(EntityDataTypes.NAME, ""); - return packet; - }, - context); + spawnPlayer(context, "A_Player", 2); + assertNextPacketMatch(context, AddPlayerPacket.class, packet -> { + assertEquals(2, packet.getRuntimeEntityId()); + assertEquals("", packet.getMetadata().get(EntityDataTypes.NAME)); + }); - mockAndAddPlayerEntity(context, "B_Player", 3); - assertNextPacket( - () -> { - var packet = new SetEntityDataPacket(); - packet.setRuntimeEntityId(3); - packet.getMetadata().put(EntityDataTypes.NAME, ""); - return packet; - }, - context); + spawnPlayer(context, "B_Player", 3); + assertNextPacketMatch(context, AddPlayerPacket.class, packet -> { + assertEquals(3, packet.getRuntimeEntityId()); + assertEquals("", packet.getMetadata().get(EntityDataTypes.NAME)); + }); - mockAndAddPlayerEntity(context, "E_Player", 4); - assertNextPacket( - () -> { - var packet = new SetEntityDataPacket(); - packet.setRuntimeEntityId(4); - packet.getMetadata().put(EntityDataTypes.NAME, ""); - return packet; - }, - context); + spawnPlayer(context, "E_Player", 4); + assertNextPacketMatch(context, AddPlayerPacket.class, packet -> { + assertEquals(4, packet.getRuntimeEntityId()); + assertEquals("", packet.getMetadata().get(EntityDataTypes.NAME)); + }); - mockAndAddPlayerEntity(context, "H_Player", 5); - assertNextPacket( - () -> { - var packet = new SetEntityDataPacket(); - packet.setRuntimeEntityId(5); - packet.getMetadata().put(EntityDataTypes.NAME, ""); - return packet; - }, - context); + spawnPlayer(context, "H_Player", 5); + assertNextPacketMatch(context, AddPlayerPacket.class, packet -> { + assertEquals(5, packet.getRuntimeEntityId()); + assertEquals("", packet.getMetadata().get(EntityDataTypes.NAME)); + }); - mockAndAddPlayerEntity(context, "J_Player", 6); - assertNextPacket( - () -> { - var packet = new SetEntityDataPacket(); - packet.setRuntimeEntityId(6); - packet.getMetadata().put(EntityDataTypes.NAME, ""); - return packet; - }, - context); + spawnPlayer(context, "J_Player", 6); + assertNextPacketMatch(context, AddPlayerPacket.class, packet -> { + assertEquals(6, packet.getRuntimeEntityId()); + assertEquals("", packet.getMetadata().get(EntityDataTypes.NAME)); + }); - mockAndAddPlayerEntity(context, "K_Player", 7); - assertNextPacket( - () -> { - var packet = new SetEntityDataPacket(); - packet.setRuntimeEntityId(7); - packet.getMetadata().put(EntityDataTypes.NAME, ""); - return packet; - }, - context); + spawnPlayer(context, "K_Player", 7); + assertNextPacketMatch(context, AddPlayerPacket.class, packet -> { + assertEquals(7, packet.getRuntimeEntityId()); + assertEquals("", packet.getMetadata().get(EntityDataTypes.NAME)); + }); - mockAndAddPlayerEntity(context, "L_Player", 8); - assertNextPacket( - () -> { - var packet = new SetEntityDataPacket(); - packet.setRuntimeEntityId(8); - packet.getMetadata().put(EntityDataTypes.NAME, ""); - return packet; - }, - context); + spawnPlayer(context, "L_Player", 8); + assertNextPacketMatch(context, AddPlayerPacket.class, packet -> { + assertEquals(8, packet.getRuntimeEntityId()); + assertEquals("", packet.getMetadata().get(EntityDataTypes.NAME)); + }); - mockAndAddPlayerEntity(context, "O_Player", 9); - assertNextPacket( - () -> { - var packet = new SetEntityDataPacket(); - packet.setRuntimeEntityId(9); - packet.getMetadata().put(EntityDataTypes.NAME, ""); - return packet; - }, - context); + spawnPlayer(context, "O_Player", 9); + assertNextPacketMatch(context, AddPlayerPacket.class, packet -> { + assertEquals(9, packet.getRuntimeEntityId()); + assertEquals("", packet.getMetadata().get(EntityDataTypes.NAME)); + }); }); } } diff --git a/core/src/test/java/org/geysermc/geyser/scoreboard/network/sidebar/BasicSidebarScoreboardTests.java b/core/src/test/java/org/geysermc/geyser/scoreboard/network/sidebar/BasicSidebarScoreboardTests.java index b3999303e..bd0d64c80 100644 --- a/core/src/test/java/org/geysermc/geyser/scoreboard/network/sidebar/BasicSidebarScoreboardTests.java +++ b/core/src/test/java/org/geysermc/geyser/scoreboard/network/sidebar/BasicSidebarScoreboardTests.java @@ -32,7 +32,6 @@ import static org.geysermc.geyser.scoreboard.network.util.GeyserMockContextScore import java.util.List; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; -import net.kyori.adventure.text.format.Style; import net.kyori.adventure.text.format.TextDecoration; import org.cloudburstmc.protocol.bedrock.data.ScoreInfo; import org.cloudburstmc.protocol.bedrock.packet.RemoveObjectivePacket; @@ -75,7 +74,7 @@ public class BasicSidebarScoreboardTests { setDisplayObjectiveTranslator, new ClientboundSetDisplayObjectivePacket(ScoreboardPosition.PLAYER_LIST, "objective") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetDisplayObjectivePacket(); packet.setObjectiveId("0"); packet.setDisplayName("objective"); @@ -83,17 +82,17 @@ public class BasicSidebarScoreboardTests { packet.setDisplaySlot("list"); packet.setSortOrder(1); return packet; - }, context); + }); context.translate( setDisplayObjectiveTranslator, new ClientboundSetDisplayObjectivePacket(ScoreboardPosition.PLAYER_LIST, "") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new RemoveObjectivePacket(); packet.setObjectiveId("0"); return packet; - }, context); + }); }); } @@ -108,7 +107,7 @@ public class BasicSidebarScoreboardTests { new ClientboundSetObjectivePacket( "objective", ObjectiveAction.ADD, - Component.text("objective", Style.style(NamedTextColor.AQUA, TextDecoration.BOLD)), + Component.text("objective", NamedTextColor.AQUA, TextDecoration.BOLD), ScoreType.INTEGER, null ) @@ -119,7 +118,7 @@ public class BasicSidebarScoreboardTests { setDisplayObjectiveTranslator, new ClientboundSetDisplayObjectivePacket(ScoreboardPosition.SIDEBAR, "objective") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetDisplayObjectivePacket(); packet.setObjectiveId("0"); packet.setDisplayName("§b§lobjective"); @@ -127,7 +126,7 @@ public class BasicSidebarScoreboardTests { packet.setDisplaySlot("sidebar"); packet.setSortOrder(1); return packet; - }, context); + }); }); } @@ -170,7 +169,7 @@ public class BasicSidebarScoreboardTests { new ClientboundSetDisplayObjectivePacket(ScoreboardPosition.SIDEBAR, "objective2") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetDisplayObjectivePacket(); packet.setObjectiveId("0"); packet.setDisplayName("objective2"); @@ -178,13 +177,13 @@ public class BasicSidebarScoreboardTests { packet.setDisplaySlot("sidebar"); packet.setSortOrder(1); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); packet.setInfos(List.of(new ScoreInfo(1, "0", 2, "Tim203"))); return packet; - }, context); + }); assertNoNextPacket(context); @@ -193,12 +192,12 @@ public class BasicSidebarScoreboardTests { new ClientboundSetDisplayObjectivePacket(ScoreboardPosition.SIDEBAR, "objective1") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new RemoveObjectivePacket(); packet.setObjectiveId("0"); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetDisplayObjectivePacket(); packet.setObjectiveId("2"); packet.setDisplayName("objective1"); @@ -206,13 +205,13 @@ public class BasicSidebarScoreboardTests { packet.setDisplaySlot("sidebar"); packet.setSortOrder(1); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); packet.setInfos(List.of(new ScoreInfo(3, "2", 1, "Tim203"))); return packet; - }, context); + }); }); } } diff --git a/core/src/test/java/org/geysermc/geyser/scoreboard/network/sidebar/OrderAndLimitSidebarScoreboardTests.java b/core/src/test/java/org/geysermc/geyser/scoreboard/network/sidebar/OrderAndLimitSidebarScoreboardTests.java index 3e0be1c02..aab837456 100644 --- a/core/src/test/java/org/geysermc/geyser/scoreboard/network/sidebar/OrderAndLimitSidebarScoreboardTests.java +++ b/core/src/test/java/org/geysermc/geyser/scoreboard/network/sidebar/OrderAndLimitSidebarScoreboardTests.java @@ -98,7 +98,7 @@ public class OrderAndLimitSidebarScoreboardTests { setDisplayObjectiveTranslator, new ClientboundSetDisplayObjectivePacket(ScoreboardPosition.SIDEBAR, "objective") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetDisplayObjectivePacket(); packet.setObjectiveId("0"); packet.setDisplayName("objective"); @@ -106,8 +106,8 @@ public class OrderAndLimitSidebarScoreboardTests { packet.setDisplaySlot("sidebar"); packet.setSortOrder(1); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); packet.setInfos(List.of( @@ -128,7 +128,7 @@ public class OrderAndLimitSidebarScoreboardTests { new ScoreInfo(15, "0", 3, "c") )); return packet; - }, context); + }); assertNoNextPacket(context); // remove a score @@ -136,43 +136,43 @@ public class OrderAndLimitSidebarScoreboardTests { resetScoreTranslator, new ClientboundResetScorePacket("m", "objective") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.REMOVE); packet.setInfos(List.of(new ScoreInfo(5, "0", 13, "m"))); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); packet.setInfos(List.of(new ScoreInfo(16, "0", 2, "b"))); return packet; - }, context); + }); // add a score context.translate( setScoreTranslator, new ClientboundSetScorePacket("aa", "objective", 13) ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.REMOVE); packet.setInfos(List.of(new ScoreInfo(16, "0", 2, "b"))); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); packet.setInfos(List.of(new ScoreInfo(17, "0", 13, "aa"))); return packet; - }, context); + }); // add score with same score value (after) context.translate( setScoreTranslator, new ClientboundSetScorePacket("ga", "objective", 9) ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.REMOVE); packet.setInfos(List.of( @@ -180,8 +180,8 @@ public class OrderAndLimitSidebarScoreboardTests { new ScoreInfo(9, "0", 9, "§0§rg") )); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); packet.setInfos(List.of( @@ -189,14 +189,14 @@ public class OrderAndLimitSidebarScoreboardTests { new ScoreInfo(18, "0", 9, "§1§rga") )); return packet; - }, context); + }); // add another score with same score value (before all) context.translate( setScoreTranslator, new ClientboundSetScorePacket("ag", "objective", 9) ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.REMOVE); packet.setInfos(List.of( @@ -205,8 +205,8 @@ public class OrderAndLimitSidebarScoreboardTests { new ScoreInfo(18, "0", 9, "§2§rga") )); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); packet.setInfos(List.of( @@ -215,14 +215,14 @@ public class OrderAndLimitSidebarScoreboardTests { new ScoreInfo(18, "0", 9, "§2§rga") )); return packet; - }, context); + }); // remove score with same value context.translate( resetScoreTranslator, new ClientboundResetScorePacket("g", "objective") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.REMOVE); packet.setInfos(List.of( @@ -230,8 +230,8 @@ public class OrderAndLimitSidebarScoreboardTests { new ScoreInfo(18, "0", 9, "§1§rga") )); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); packet.setInfos(List.of( @@ -239,14 +239,14 @@ public class OrderAndLimitSidebarScoreboardTests { new ScoreInfo(20, "0", 4, "e") )); return packet; - }, context); + }); // remove the other score with the same value context.translate( resetScoreTranslator, new ClientboundResetScorePacket("ga", "objective") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.REMOVE); packet.setInfos(List.of( @@ -254,8 +254,8 @@ public class OrderAndLimitSidebarScoreboardTests { new ScoreInfo(19, "0", 9, "ag") )); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); packet.setInfos(List.of( @@ -263,7 +263,7 @@ public class OrderAndLimitSidebarScoreboardTests { new ScoreInfo(21, "0", 3, "c") )); return packet; - }, context); + }); }); } @@ -327,7 +327,7 @@ public class OrderAndLimitSidebarScoreboardTests { setDisplayObjectiveTranslator, new ClientboundSetDisplayObjectivePacket(ScoreboardPosition.SIDEBAR, "objective") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetDisplayObjectivePacket(); packet.setObjectiveId("0"); packet.setDisplayName("objective"); @@ -335,8 +335,8 @@ public class OrderAndLimitSidebarScoreboardTests { packet.setDisplaySlot("sidebar"); packet.setSortOrder(1); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); packet.setInfos(List.of( @@ -357,7 +357,7 @@ public class OrderAndLimitSidebarScoreboardTests { new ScoreInfo(15, "0", 3, "c") )); return packet; - }, context); + }); assertNoNextPacket(context); // remove a score @@ -365,36 +365,36 @@ public class OrderAndLimitSidebarScoreboardTests { resetScoreTranslator, new ClientboundResetScorePacket("m", "objective") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.REMOVE); packet.setInfos(List.of(new ScoreInfo(5, "0", 13, "m"))); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); packet.setInfos(List.of(new ScoreInfo(16, "0", 2, "b"))); return packet; - }, context); + }); // add a score context.translate( setScoreTranslator, new ClientboundSetScorePacket("aa", "objective", 13) ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.REMOVE); packet.setInfos(List.of(new ScoreInfo(16, "0", 2, "b"))); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); packet.setInfos(List.of(new ScoreInfo(17, "0", 13, "aa"))); return packet; - }, context); + }); // add some teams for the upcoming score adds context.translate( @@ -435,7 +435,7 @@ public class OrderAndLimitSidebarScoreboardTests { setScoreTranslator, new ClientboundSetScorePacket("oa", "objective", 11) ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.REMOVE); packet.setInfos(List.of( @@ -443,8 +443,8 @@ public class OrderAndLimitSidebarScoreboardTests { new ScoreInfo(7, "0", 11, "§0§r§4prefix§r§4o§r§4suffix") )); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); packet.setInfos(List.of( @@ -452,7 +452,7 @@ public class OrderAndLimitSidebarScoreboardTests { new ScoreInfo(18, "0", 11, "§1§r§3prefix§r§3oa§r§3suffix") )); return packet; - }, context); + }); // add a score that on Java should be before 'o', but would be after on Bedrock without manual order // due to the team color @@ -460,7 +460,7 @@ public class OrderAndLimitSidebarScoreboardTests { setScoreTranslator, new ClientboundSetScorePacket("ao", "objective", 11) ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.REMOVE); packet.setInfos(List.of( @@ -469,8 +469,8 @@ public class OrderAndLimitSidebarScoreboardTests { new ScoreInfo(18, "0", 11, "§2§r§3prefix§r§3oa§r§3suffix") )); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); packet.setInfos(List.of( @@ -479,14 +479,14 @@ public class OrderAndLimitSidebarScoreboardTests { new ScoreInfo(18, "0", 11, "§2§r§3prefix§r§3oa§r§3suffix") )); return packet; - }, context); + }); // remove original 'o' score context.translate( resetScoreTranslator, new ClientboundResetScorePacket("o", "objective") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.REMOVE); packet.setInfos(List.of( @@ -494,8 +494,8 @@ public class OrderAndLimitSidebarScoreboardTests { new ScoreInfo(18, "0", 11, "§1§r§3prefix§r§3oa§r§3suffix") )); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); packet.setInfos(List.of( @@ -503,14 +503,14 @@ public class OrderAndLimitSidebarScoreboardTests { new ScoreInfo(20, "0", 4, "e") )); return packet; - }, context); + }); // remove the other score with the same value as 'o' context.translate( resetScoreTranslator, new ClientboundResetScorePacket("oa", "objective") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.REMOVE); packet.setInfos(List.of( @@ -518,8 +518,8 @@ public class OrderAndLimitSidebarScoreboardTests { new ScoreInfo(19, "0", 11, "§5prefix§r§5ao§r§5suffix") )); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); packet.setInfos(List.of( @@ -527,7 +527,7 @@ public class OrderAndLimitSidebarScoreboardTests { new ScoreInfo(21, "0", 3, "c") )); return packet; - }, context); + }); }); } } diff --git a/core/src/test/java/org/geysermc/geyser/scoreboard/network/sidebar/VanillaSidebarScoreboardTests.java b/core/src/test/java/org/geysermc/geyser/scoreboard/network/sidebar/VanillaSidebarScoreboardTests.java index 0a02a58d9..f511f59c7 100644 --- a/core/src/test/java/org/geysermc/geyser/scoreboard/network/sidebar/VanillaSidebarScoreboardTests.java +++ b/core/src/test/java/org/geysermc/geyser/scoreboard/network/sidebar/VanillaSidebarScoreboardTests.java @@ -69,7 +69,7 @@ public class VanillaSidebarScoreboardTests { setDisplayObjectiveTranslator, new ClientboundSetDisplayObjectivePacket(ScoreboardPosition.SIDEBAR, "objective") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetDisplayObjectivePacket(); packet.setObjectiveId("0"); packet.setDisplayName("objective"); @@ -77,16 +77,16 @@ public class VanillaSidebarScoreboardTests { packet.setDisplaySlot("sidebar"); packet.setSortOrder(1); return packet; - }, context); + }); assertNoNextPacket(context); context.translate(setScoreTranslator, new ClientboundSetScorePacket("owner", "objective", 1)); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); packet.setInfos(List.of(new ScoreInfo(1, "0", 1, "owner"))); return packet; - }, context); + }); }); } @@ -114,7 +114,7 @@ public class VanillaSidebarScoreboardTests { setDisplayObjectiveTranslator, new ClientboundSetDisplayObjectivePacket(ScoreboardPosition.SIDEBAR, "objective") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetDisplayObjectivePacket(); packet.setObjectiveId("0"); packet.setDisplayName("objective"); @@ -122,22 +122,22 @@ public class VanillaSidebarScoreboardTests { packet.setDisplaySlot("sidebar"); packet.setSortOrder(1); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); packet.setInfos(List.of(new ScoreInfo(1, "0", 1, "owner"))); return packet; - }, context); + }); assertNoNextPacket(context); context.translate(setScoreTranslator, new ClientboundSetScorePacket("owner", "objective", 2)); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); packet.setInfos(List.of(new ScoreInfo(1, "0", 2, "owner"))); return packet; - }, context); + }); }); } @@ -166,7 +166,7 @@ public class VanillaSidebarScoreboardTests { setDisplayObjectiveTranslator, new ClientboundSetDisplayObjectivePacket(ScoreboardPosition.SIDEBAR, "objective") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetDisplayObjectivePacket(); packet.setObjectiveId("0"); packet.setDisplayName("objective"); @@ -174,31 +174,31 @@ public class VanillaSidebarScoreboardTests { packet.setDisplaySlot("sidebar"); packet.setSortOrder(1); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); packet.setInfos(List.of(new ScoreInfo(1, "0", 1, "owner"))); return packet; - }, context); + }); assertNoNextPacket(context); context.translate( setScoreTranslator, new ClientboundSetScorePacket("owner", "objective", 1).withDisplay(Component.text("hi")) ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.REMOVE); packet.setInfos(List.of(new ScoreInfo(1, "0", 1, "hi"))); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); packet.setInfos(List.of(new ScoreInfo(1, "0", 1, "hi"))); return packet; - }, context); + }); }); } @@ -227,7 +227,7 @@ public class VanillaSidebarScoreboardTests { setDisplayObjectiveTranslator, new ClientboundSetDisplayObjectivePacket(ScoreboardPosition.SIDEBAR, "objective") ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetDisplayObjectivePacket(); packet.setObjectiveId("0"); packet.setDisplayName("objective"); @@ -235,31 +235,31 @@ public class VanillaSidebarScoreboardTests { packet.setDisplaySlot("sidebar"); packet.setSortOrder(1); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); packet.setInfos(List.of(new ScoreInfo(1, "0", 1, "owner"))); return packet; - }, context); + }); assertNoNextPacket(context); context.translate( setScoreTranslator, new ClientboundSetScorePacket("owner", "objective", 2).withDisplay(Component.text("hi")) ); - assertNextPacket(() -> { + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.REMOVE); packet.setInfos(List.of(new ScoreInfo(1, "0", 2, "hi"))); return packet; - }, context); - assertNextPacket(() -> { + }); + assertNextPacket(context, () -> { var packet = new SetScorePacket(); packet.setAction(SetScorePacket.Action.SET); packet.setInfos(List.of(new ScoreInfo(1, "0", 2, "hi"))); return packet; - }, context); + }); }); } } diff --git a/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/AssertUtils.java b/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/AssertUtils.java index b15994533..9177f205a 100644 --- a/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/AssertUtils.java +++ b/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/AssertUtils.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.scoreboard.network.util; import java.util.Collections; +import java.util.function.Consumer; import java.util.function.Supplier; import org.cloudburstmc.protocol.bedrock.packet.BedrockPacket; import org.junit.jupiter.api.Assertions; @@ -38,7 +39,7 @@ public class AssertUtils { Assertions.assertEquals(expected.get(), actual); } - public static void assertNextPacket(Supplier<BedrockPacket> expected, GeyserMockContext context) { + public static void assertNextPacket(GeyserMockContext context, Supplier<BedrockPacket> expected) { assertContextEquals(expected, context.nextPacket()); } @@ -50,6 +51,16 @@ public class AssertUtils { Assertions.assertEquals(type, actual.getClass()); } + public static <T extends BedrockPacket> void assertNextPacketMatch(GeyserMockContext context, Class<T> type, Consumer<T> matcher) { + var actual = context.nextPacket(); + if (actual == null) { + Assertions.fail("Expected another packet!"); + } + Assertions.assertEquals(type, actual.getClass(), "Expected packet to be an instance of " + type); + //noinspection unchecked verified in the line above me + matcher.accept((T) actual); + } + public static void assertNoNextPacket(GeyserMockContext context) { Assertions.assertEquals( Collections.emptyList(), diff --git a/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/GeyserMockContext.java b/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/GeyserMockContext.java index 72515d714..1d262d8b8 100644 --- a/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/GeyserMockContext.java +++ b/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/GeyserMockContext.java @@ -35,16 +35,15 @@ import java.util.function.Consumer; import org.cloudburstmc.protocol.bedrock.packet.BedrockPacket; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.configuration.GeyserConfiguration; +import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; -import org.mockito.MockedStatic; import org.mockito.Mockito; public class GeyserMockContext { private final List<Object> mocksAndSpies = new ArrayList<>(); private final List<Object> storedObjects = new ArrayList<>(); private final List<BedrockPacket> packets = Collections.synchronizedList(new ArrayList<>()); - private MockedStatic<GeyserImpl> geyserImplMock; public static void mockContext(Consumer<GeyserMockContext> geyserContext) { var context = new GeyserMockContext(); @@ -59,9 +58,15 @@ public class GeyserMockContext { var logger = context.storeObject(new EmptyGeyserLogger()); when(geyserImpl.getLogger()).thenReturn(logger); - try (var mocked = mockStatic(GeyserImpl.class)) { - mocked.when(GeyserImpl::getInstance).thenReturn(geyserImpl); - context.geyserImplMock = mocked; + try (var geyserImplMock = mockStatic(GeyserImpl.class)) { + geyserImplMock.when(GeyserImpl::getInstance).thenReturn(geyserImpl); + + // Since Geyser isn't actually loaded, the Registries#init will not be called. + // This means that we manually load the registries we want to use + Registries.ENTITY_DEFINITIONS.load(); + Registries.JAVA_ENTITY_IDENTIFIERS.load(); + Registries.BEDROCK_ENTITY_PROPERTIES.load(); + geyserContext.accept(context); } } @@ -136,8 +141,4 @@ public class GeyserMockContext { public <T> void translate(PacketTranslator<T> translator, T packet) { translator.translate(session(), packet); } - - public MockedStatic<GeyserImpl> geyserImplMock() { - return geyserImplMock; - } } diff --git a/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/GeyserMockContextScoreboard.java b/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/GeyserMockContextScoreboard.java index bc76a1b70..e0d9918e5 100644 --- a/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/GeyserMockContextScoreboard.java +++ b/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/GeyserMockContextScoreboard.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.scoreboard.network.util; +import static org.geysermc.geyser.scoreboard.network.util.AssertUtils.assertNextPacketType; import static org.geysermc.geyser.scoreboard.network.util.AssertUtils.assertNoNextPacket; import static org.geysermc.geyser.scoreboard.network.util.GeyserMockContext.mockContext; import static org.mockito.ArgumentMatchers.any; @@ -34,6 +35,8 @@ import static org.mockito.Mockito.when; import java.util.UUID; import java.util.function.Consumer; +import org.cloudburstmc.math.vector.Vector3f; +import org.cloudburstmc.protocol.bedrock.packet.AddPlayerPacket; import org.cloudburstmc.protocol.bedrock.packet.BedrockPacket; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.entity.type.player.PlayerEntity; @@ -82,15 +85,20 @@ public class GeyserMockContextScoreboard { when(worldCache.increaseAndGetScoreboardPacketsPerSecond()).thenReturn(0); } - public static PlayerEntity mockAndAddPlayerEntity(GeyserMockContext context, String username, long geyserId) { - var playerEntity = spy(new PlayerEntity(context.session(), geyserId, UUID.randomUUID(), username)); - // fake the player being spawned - when(playerEntity.isValid()).thenReturn(true); + public static PlayerEntity spawnPlayerSilently(GeyserMockContext context, String username, long geyserId) { + var player = spawnPlayer(context, username, geyserId); + assertNextPacketType(context, AddPlayerPacket.class); + return player; + } + + public static PlayerEntity spawnPlayer(GeyserMockContext context, String username, long geyserId) { + var playerEntity = spy(new PlayerEntity(context.session(), (int) geyserId, geyserId, UUID.randomUUID(), Vector3f.ZERO, Vector3f.ZERO, 0, 0, 0, username, null)); var entityCache = context.mockOrSpy(EntityCache.class); entityCache.addPlayerEntity(playerEntity); // called when the player spawns - entityCache.cacheEntity(playerEntity); + entityCache.spawnEntity(playerEntity); + return playerEntity; } } From 8f7a0d0778aa9106ea32527e535fe5d1cc7d7d0d Mon Sep 17 00:00:00 2001 From: Tim203 <mctim203@gmail.com> Date: Mon, 28 Oct 2024 00:56:39 +0100 Subject: [PATCH 026/165] Correct the loading of the block registries and the common registries --- .../java/org/geysermc/geyser/GeyserImpl.java | 12 ++++++-- .../geyser/registry/BlockRegistries.java | 30 ++++++++++++++----- .../geysermc/geyser/registry/Registries.java | 10 ++++--- 3 files changed, 37 insertions(+), 15 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java index 4672aef5b..f679b412c 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java @@ -231,9 +231,15 @@ public class GeyserImpl implements GeyserApi, EventRegistrar { } logger.info("******************************************"); - /* Initialize registries */ - Registries.init(); - BlockRegistries.init(); + /* + First load the registries and then populate them. + Both the block registries and the common registries depend on each other, + so maintaining this order is crucial for Geyser to load. + */ + BlockRegistries.load(); + Registries.load(); + BlockRegistries.populate(); + Registries.populate(); RegistryCache.init(); 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 2f15094ef..8cf11979f 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -69,7 +69,7 @@ public class BlockRegistries { /** * A mapped registry containing which holds block IDs to its {@link BlockCollision}. */ - public static final ListRegistry<BlockCollision> COLLISIONS; + public static final ListRegistry<BlockCollision> COLLISIONS = ListRegistry.create(Pair.of("org.geysermc.geyser.translator.collision.CollisionRemapper", "mappings/collisions.nbt"), CollisionRegistryLoader::new); /** * A registry which stores Java IDs to {@link Block}, containing miscellaneous information about @@ -130,22 +130,36 @@ public class BlockRegistries { */ public static final SimpleMappedRegistry<String, CustomSkull> CUSTOM_SKULLS = SimpleMappedRegistry.create(RegistryLoaders.empty(Object2ObjectOpenHashMap::new)); - static { + public static void load() { + BLOCKS.load(); + BLOCK_STATES.load(); + // collisions are loaded later, because they are initialized later + JAVA_BLOCKS.load(); + JAVA_IDENTIFIER_TO_ID.load(); + WATERLOGGED.load(); + INTERACTIVE.load(); + INTERACTIVE_MAY_BUILD.load(); + CUSTOM_BLOCKS.load(); + CUSTOM_BLOCK_STATE_OVERRIDES.load(); + NON_VANILLA_BLOCK_STATE_OVERRIDES.load(); + CUSTOM_BLOCK_ITEM_OVERRIDES.load(); + EXTENDED_COLLISION_BOXES.load(); + CUSTOM_SKULLS.load(); + + COLLISIONS.load(); + } + + public static void populate() { Blocks.VAULT.javaId(); // FIXME CustomSkullRegistryPopulator.populate(); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.PRE_INIT); CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.DEFINITION); CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.NON_VANILLA_REGISTRATION); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.INIT_JAVA); - COLLISIONS = ListRegistry.create(Pair.of("org.geysermc.geyser.translator.collision.CollisionRemapper", "mappings/collisions.nbt"), CollisionRegistryLoader::new); CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.VANILLA_REGISTRATION); CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.CUSTOM_REGISTRATION); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.INIT_BEDROCK); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.POST_INIT); } - public static void init() { - // no-op - } - -} \ No newline at end of file +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/Registries.java b/core/src/main/java/org/geysermc/geyser/registry/Registries.java index e9ff837ab..b86ea3bbf 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/Registries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/Registries.java @@ -62,7 +62,7 @@ import java.util.*; * Holds all the common registries in Geyser. */ public final class Registries { - private static boolean initialized = false; + private static boolean loaded = false; /** * A registry holding all the providers. @@ -167,9 +167,9 @@ public final class Registries { */ public static final SimpleMappedRegistry<SoundTranslator, SoundInteractionTranslator<?>> SOUND_TRANSLATORS = SimpleMappedRegistry.create("org.geysermc.geyser.translator.sound.SoundTranslator", SoundTranslatorRegistryLoader::new); - public static void init() { - if (initialized) return; - initialized = true; + public static void load() { + if (loaded) return; + loaded = true; PROVIDERS.load(); BEDROCK_ENTITY_IDENTIFIERS.load(); @@ -191,7 +191,9 @@ public final class Registries { SOUNDS.load(); SOUND_LEVEL_EVENTS.load(); SOUND_TRANSLATORS.load(); + } + public static void populate() { PacketRegistryPopulator.populate(); ItemRegistryPopulator.populate(); From 0f1a32e1c11231a0faaf623e0a7ebe979de4c9d6 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Mon, 28 Oct 2024 01:29:03 -0400 Subject: [PATCH 027/165] Clear recipes during the configuration phase --- .../geyser/session/GeyserSession.java | 10 ++----- ...vaFinishConfigurationPacketTranslator.java | 30 +++++++++++++++++++ .../java/JavaUpdateRecipesTranslator.java | 13 -------- 3 files changed, 32 insertions(+), 21 deletions(-) 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 1ca127657..fa06a53ba 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -83,7 +83,6 @@ import org.cloudburstmc.protocol.bedrock.packet.BiomeDefinitionListPacket; import org.cloudburstmc.protocol.bedrock.packet.CameraPresetsPacket; import org.cloudburstmc.protocol.bedrock.packet.ChunkRadiusUpdatedPacket; import org.cloudburstmc.protocol.bedrock.packet.ClientboundCloseFormPacket; -import org.cloudburstmc.protocol.bedrock.packet.CraftingDataPacket; import org.cloudburstmc.protocol.bedrock.packet.CreativeContentPacket; import org.cloudburstmc.protocol.bedrock.packet.DimensionDataPacket; import org.cloudburstmc.protocol.bedrock.packet.EmoteListPacket; @@ -179,6 +178,7 @@ import org.geysermc.geyser.translator.inventory.InventoryTranslator; import org.geysermc.geyser.translator.text.MessageTranslator; import org.geysermc.geyser.util.ChunkUtils; import org.geysermc.geyser.util.EntityUtils; +import org.geysermc.geyser.util.InventoryUtils; import org.geysermc.geyser.util.LoginEncryptionUtils; import org.geysermc.geyser.util.MinecraftAuthLogger; import org.geysermc.mcprotocollib.auth.GameProfile; @@ -684,7 +684,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { this.openInventory = null; this.craftingRecipes = new Int2ObjectOpenHashMap<>(); this.javaToBedrockRecipeIds = new Int2ObjectOpenHashMap<>(); - this.lastRecipeNetId = new AtomicInteger(1); + this.lastRecipeNetId = new AtomicInteger(InventoryUtils.LAST_RECIPE_NET_ID); this.spawned = false; this.loggedIn = false; @@ -756,12 +756,6 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { creativePacket.setContents(this.itemMappings.getCreativeItems()); upstream.sendPacket(creativePacket); - // Potion mixes are registered by default, as they are needed to be able to put ingredients into the brewing stand. - CraftingDataPacket craftingDataPacket = new CraftingDataPacket(); - craftingDataPacket.setCleanRecipes(true); - craftingDataPacket.getPotionMixData().addAll(Registries.POTION_MIXES.forVersion(this.upstream.getProtocolVersion())); - upstream.sendPacket(craftingDataPacket); - PlayStatusPacket playStatusPacket = new PlayStatusPacket(); playStatusPacket.setStatus(PlayStatusPacket.Status.PLAYER_SPAWN); upstream.sendPacket(playStatusPacket); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationPacketTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationPacketTranslator.java index 8ade4a1f0..1a32c1a97 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationPacketTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationPacketTranslator.java @@ -25,15 +25,33 @@ package org.geysermc.geyser.translator.protocol.java; +import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.MultiRecipeData; +import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.RecipeData; +import org.cloudburstmc.protocol.bedrock.packet.CraftingDataPacket; import org.cloudburstmc.protocol.bedrock.packet.PlayerListPacket; import org.geysermc.geyser.entity.type.player.PlayerEntity; +import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.mcprotocollib.protocol.packet.configuration.clientbound.ClientboundFinishConfigurationPacket; +import java.util.List; +import java.util.UUID; + +import static org.geysermc.geyser.util.InventoryUtils.LAST_RECIPE_NET_ID; + @Translator(packet = ClientboundFinishConfigurationPacket.class) public class JavaFinishConfigurationPacketTranslator extends PacketTranslator<ClientboundFinishConfigurationPacket> { + /** + * Required to use the specified cartography table recipes + */ + private static final List<RecipeData> CARTOGRAPHY_RECIPES = List.of( + MultiRecipeData.of(UUID.fromString("8b36268c-1829-483c-a0f1-993b7156a8f2"), ++LAST_RECIPE_NET_ID), // Map extending + MultiRecipeData.of(UUID.fromString("442d85ed-8272-4543-a6f1-418f90ded05d"), ++LAST_RECIPE_NET_ID), // Map cloning + MultiRecipeData.of(UUID.fromString("98c84b38-1085-46bd-b1ce-dd38c159e6cc"), ++LAST_RECIPE_NET_ID), // Map upgrading + MultiRecipeData.of(UUID.fromString("602234e4-cac1-4353-8bb7-b1ebff70024b"), ++LAST_RECIPE_NET_ID) // Map locking + ); @Override public void translate(GeyserSession session, ClientboundFinishConfigurationPacket packet) { @@ -45,5 +63,17 @@ public class JavaFinishConfigurationPacketTranslator extends PacketTranslator<Cl } session.sendUpstreamPacket(playerListPacket); session.getEntityCache().removeAllPlayerEntities(); + + // Potion mixes are registered by default, as they are needed to be able to put ingredients into the brewing stand. + // (Also add it here so recipes get cleared on configuration - 1.21.3) + CraftingDataPacket craftingDataPacket = new CraftingDataPacket(); + craftingDataPacket.setCleanRecipes(true); + craftingDataPacket.getCraftingData().addAll(CARTOGRAPHY_RECIPES); + craftingDataPacket.getPotionMixData().addAll(Registries.POTION_MIXES.forVersion(session.getUpstream().getProtocolVersion())); + if (session.isSentSpawnPacket()) { + session.getUpstream().sendPacket(craftingDataPacket); + } else { + session.getUpstream().queuePostStartGamePacket(craftingDataPacket); + } } } 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 de62fb922..693b451ba 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 @@ -30,8 +30,6 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import net.kyori.adventure.key.Key; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.RecipeUnlockingRequirement; -import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.MultiRecipeData; -import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.RecipeData; import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapelessRecipeData; import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.DefaultDescriptor; import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.ItemDescriptorWithCount; @@ -58,8 +56,6 @@ import java.util.List; import java.util.Map; import java.util.UUID; -import static org.geysermc.geyser.util.InventoryUtils.LAST_RECIPE_NET_ID; - /** * Used to send all valid recipes from Java to Bedrock. * <p> @@ -67,15 +63,6 @@ import static org.geysermc.geyser.util.InventoryUtils.LAST_RECIPE_NET_ID; */ @Translator(packet = ClientboundUpdateRecipesPacket.class) public class JavaUpdateRecipesTranslator extends PacketTranslator<ClientboundUpdateRecipesPacket> { - /** - * Required to use the specified cartography table recipes - */ - private static final List<RecipeData> CARTOGRAPHY_RECIPES = List.of( - MultiRecipeData.of(UUID.fromString("8b36268c-1829-483c-a0f1-993b7156a8f2"), ++LAST_RECIPE_NET_ID), // Map extending - MultiRecipeData.of(UUID.fromString("442d85ed-8272-4543-a6f1-418f90ded05d"), ++LAST_RECIPE_NET_ID), // Map cloning - MultiRecipeData.of(UUID.fromString("98c84b38-1085-46bd-b1ce-dd38c159e6cc"), ++LAST_RECIPE_NET_ID), // Map upgrading - MultiRecipeData.of(UUID.fromString("602234e4-cac1-4353-8bb7-b1ebff70024b"), ++LAST_RECIPE_NET_ID) // Map locking - ); private static final List<String> NETHERITE_UPGRADES = List.of( "minecraft:netherite_sword", From 6c0d3419fc5439e534755f2d453a5679fe2a36cf Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Mon, 28 Oct 2024 01:31:08 -0400 Subject: [PATCH 028/165] Prevent recipe ID conflict --- .../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 fa06a53ba..25bfe19e7 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -684,7 +684,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { this.openInventory = null; this.craftingRecipes = new Int2ObjectOpenHashMap<>(); this.javaToBedrockRecipeIds = new Int2ObjectOpenHashMap<>(); - this.lastRecipeNetId = new AtomicInteger(InventoryUtils.LAST_RECIPE_NET_ID); + this.lastRecipeNetId = new AtomicInteger(InventoryUtils.LAST_RECIPE_NET_ID + 1); this.spawned = false; this.loggedIn = false; From 3f60db1483b8b48d00bc94b77afad0b79ad84dd9 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Mon, 28 Oct 2024 01:38:45 -0400 Subject: [PATCH 029/165] Fix collision registry loading --- .../java/org/geysermc/geyser/registry/BlockRegistries.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 8cf11979f..b7c5e2d07 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -145,8 +145,6 @@ public class BlockRegistries { CUSTOM_BLOCK_ITEM_OVERRIDES.load(); EXTENDED_COLLISION_BOXES.load(); CUSTOM_SKULLS.load(); - - COLLISIONS.load(); } public static void populate() { @@ -156,6 +154,7 @@ public class BlockRegistries { CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.DEFINITION); CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.NON_VANILLA_REGISTRATION); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.INIT_JAVA); + COLLISIONS.load(); CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.VANILLA_REGISTRATION); CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.CUSTOM_REGISTRATION); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.INIT_BEDROCK); From 344d40dd1f0dc6a39f840e6ab6c4127298359a04 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Mon, 28 Oct 2024 17:58:37 -0400 Subject: [PATCH 030/165] Smithing recipes mostly work --- .../geyser/session/cache/InputCache.java | 26 +++++- .../BedrockPlayerAuthInputTranslator.java | 6 +- .../java/JavaRecipeBookAddTranslator.java | 26 ++---- .../java/JavaUpdateRecipesTranslator.java | 84 +++++++++++++------ .../player/JavaPlayerPositionTranslator.java | 1 + .../inventory/JavaOpenScreenTranslator.java | 5 +- .../org/geysermc/geyser/util/MathUtils.java | 11 --- 7 files changed, 95 insertions(+), 64 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/InputCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/InputCache.java index c666ded64..79c37a5a8 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/InputCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/InputCache.java @@ -27,6 +27,8 @@ package org.geysermc.geyser.session.cache; import lombok.Getter; import lombok.Setter; +import org.cloudburstmc.math.vector.Vector2f; +import org.cloudburstmc.protocol.bedrock.data.InputMode; import org.cloudburstmc.protocol.bedrock.data.PlayerAuthInputData; import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket; import org.geysermc.geyser.session.GeyserSession; @@ -52,12 +54,28 @@ public final class InputCache { // Input is sent to the server before packet positions, as of 1.21.2 Set<PlayerAuthInputData> bedrockInput = packet.getInputData(); var oldInputPacket = this.inputPacket; + + boolean up, down, left, right; + if (packet.getInputMode() == InputMode.MOUSE) { + up = bedrockInput.contains(PlayerAuthInputData.UP); + down = bedrockInput.contains(PlayerAuthInputData.DOWN); + left = bedrockInput.contains(PlayerAuthInputData.LEFT); + right = bedrockInput.contains(PlayerAuthInputData.RIGHT); + } else { + // The above flags don't fire TODO test console + Vector2f analogMovement = packet.getAnalogMoveVector(); + up = analogMovement.getY() > 0; + down = analogMovement.getY() < 0; + left = analogMovement.getX() > 0; + right = analogMovement.getX() < 0; + } + // TODO when is UP_LEFT, etc. used? this.inputPacket = this.inputPacket - .withForward(bedrockInput.contains(PlayerAuthInputData.UP)) - .withBackward(bedrockInput.contains(PlayerAuthInputData.DOWN)) - .withLeft(bedrockInput.contains(PlayerAuthInputData.LEFT)) - .withRight(bedrockInput.contains(PlayerAuthInputData.RIGHT)) + .withForward(up) + .withBackward(down) + .withLeft(left) + .withRight(right) .withJump(bedrockInput.contains(PlayerAuthInputData.JUMPING)) // Looks like this only triggers when the JUMP key input is being pressed. There's also JUMP_DOWN? .withShift(bedrockInput.contains(PlayerAuthInputData.SNEAKING)) .withSprint(bedrockInput.contains(PlayerAuthInputData.SPRINTING)); // SPRINTING will trigger even if the player isn't moving diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java index 93e4cb92a..a366a5b69 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.translator.protocol.bedrock.entity.player; +import org.cloudburstmc.math.GenericMath; import org.cloudburstmc.math.vector.Vector2f; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.math.vector.Vector3i; @@ -50,7 +51,6 @@ import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.translator.protocol.bedrock.BedrockInventoryTransactionTranslator; import org.geysermc.geyser.util.CooldownUtils; -import org.geysermc.geyser.util.MathUtils; import org.geysermc.mcprotocollib.protocol.data.game.entity.object.Direction; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.InteractAction; @@ -71,7 +71,7 @@ public final class BedrockPlayerAuthInputTranslator extends PacketTranslator<Pla @Override public void translate(GeyserSession session, PlayerAuthInputPacket packet) { if (!data.equals(packet.getInputData())) { - System.out.println(data); + System.out.println(packet.getInputData()); this.data = packet.getInputData(); } SessionPlayerEntity entity = session.getPlayerEntity(); @@ -267,7 +267,7 @@ public final class BedrockPlayerAuthInputTranslator extends PacketTranslator<Pla // Jump released // Yes, I'm fairly certain that entity ID is correct. session.sendDownstreamGamePacket(new ServerboundPlayerCommandPacket(session.getPlayerEntity().getEntityId(), - PlayerState.START_HORSE_JUMP, MathUtils.floor(session.getInputCache().getJumpScale() * 100f))); + PlayerState.START_HORSE_JUMP, GenericMath.floor(session.getInputCache().getJumpScale() * 100f))); session.getInputCache().setJumpingTicks(-10); } else if (!wasJumping && holdingJump) { session.getInputCache().setJumpingTicks(0); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java index f7fa9883f..94dab5dea 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java @@ -61,6 +61,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.EmptySl import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.ItemSlotDisplay; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.ItemStackSlotDisplay; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SmithingTrimDemoSlotDisplay; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.TagSlotDisplay; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundRecipeBookAddPacket; @@ -78,7 +79,7 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec @Override public void translate(GeyserSession session, ClientboundRecipeBookAddPacket packet) { - System.out.println(packet); + //System.out.println(packet); int netId = session.getLastRecipeNetId().get(); Int2ObjectMap<List<String>> javaToBedrockRecipeIds = session.getJavaToBedrockRecipeIds(); CraftingDataPacket craftingDataPacket = new CraftingDataPacket(); @@ -131,8 +132,8 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec javaToBedrockRecipeIds.put(contents.id(), List.copyOf(bedrockRecipeIds)); } case SMITHING -> { - if (true) { - System.out.println(display); + if (display.result() instanceof SmithingTrimDemoSlotDisplay) { + // Skip these - Bedrock already knows about them from the TrimDataPacket continue; } SmithingRecipeDisplay smithingRecipe = (SmithingRecipeDisplay) display; @@ -169,7 +170,7 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec } } - System.out.println(craftingDataPacket); + //System.out.println(craftingDataPacket); session.sendUpstreamPacket(craftingDataPacket); session.sendUpstreamPacket(recipesPacket); session.getLastRecipeNetId().set(netId); @@ -212,26 +213,11 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec // Cache is implemented as, presumably, an item tag will be used multiple times in succession // (E.G. a chest with planks tags) return TAG_TO_ITEM_DESCRIPTOR_CACHE.get().computeIfAbsent(items, key -> { -// String molang = "q.is_item_name_any('', " -// + Arrays.stream(items).mapToObj(item -> { -// ItemMapping mapping = session.getItemMappings().getMapping(item); -// return "'" + mapping.getBedrockIdentifier() + "'"; -// }).collect(Collectors.joining(", ")) -// + ")"; -// String molang = Arrays.stream(items).mapToObj(item -> { -// ItemMapping mapping = session.getItemMappings().getMapping(item); -// return "q.identifier == '" + mapping.getBedrockIdentifier() + "'"; -// }).collect(Collectors.joining(" || ")); -// if ("minecraft:planks".equals(tag.toString())) { -// String molang = "q.any_tag('minecraft:planks')"; -// return Collections.singletonList(new ItemDescriptorWithCount(new MolangDescriptor(molang, 10), 1)); -// } - Set<ItemDescriptorWithCount> itemDescriptors = new HashSet<>(); for (int item : key) { itemDescriptors.add(fromItem(session, item)); } - return new ArrayList<>(itemDescriptors); // This, or a list from the start with contains -> add? + return List.copyOf(itemDescriptors); // This, or a list from the start with contains -> add? }); } } 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 693b451ba..9f53a9af4 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 @@ -28,13 +28,20 @@ package org.geysermc.geyser.translator.protocol.java; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import net.kyori.adventure.key.Key; +import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.RecipeUnlockingRequirement; +import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.RecipeData; import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapelessRecipeData; +import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.SmithingTransformRecipeData; +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.packet.CraftingDataPacket; +import org.cloudburstmc.protocol.bedrock.packet.TrimDataPacket; +import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.inventory.recipe.GeyserStonecutterData; +import org.geysermc.geyser.inventory.recipe.TrimRecipe; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.type.ItemMapping; @@ -50,11 +57,14 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.Clientbound import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundUpdateRecipesPacket.SelectableRecipe; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.UUID; +import java.util.stream.Collectors; /** * Used to send all valid recipes from Java to Bedrock. @@ -94,6 +104,34 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator<ClientboundUpd int netId = session.getLastRecipeNetId().get(); CraftingDataPacket craftingDataPacket = new CraftingDataPacket(); System.out.println(packet); + + boolean oldSmithingTable; + int[] smithingBase = packet.getItemSets().get(SMITHING_BASE); + int[] smithingTemplate = packet.getItemSets().get(SMITHING_TEMPLATE); + int[] smithingAddition = packet.getItemSets().get(SMITHING_ADDITION); + if (smithingBase == null || smithingTemplate == null || smithingAddition == null) { + // We're probably on a version before the smithing table got expanded functionality. + oldSmithingTable = true; + addSmithingTransformRecipes(session, craftingDataPacket.getCraftingData()); + netId = session.getLastRecipeNetId().get(); // Was updated in the above method. + } else { + System.out.println(Arrays.stream(smithingTemplate).mapToObj(i -> Registries.JAVA_ITEMS.get(i).javaIdentifier()).collect(Collectors.joining(" "))); + System.out.println(Arrays.stream(smithingAddition).mapToObj(i -> Registries.JAVA_ITEMS.get(i).javaIdentifier()).collect(Collectors.joining(" "))); + oldSmithingTable = false; + // BDS sends armor trim templates and materials before the CraftingDataPacket + TrimDataPacket trimDataPacket = new TrimDataPacket(); + trimDataPacket.getPatterns().addAll(session.getRegistryCache().trimPatterns().values()); + trimDataPacket.getMaterials().addAll(session.getRegistryCache().trimMaterials().values()); + session.sendUpstreamPacket(trimDataPacket); + + // Identical smithing_trim recipe sent by BDS that uses tag-descriptors, as the client seems to ignore the + // approach of using many default-descriptors (which we do for smithing_transform) + craftingDataPacket.getCraftingData().add(SmithingTrimRecipeData.of(TrimRecipe.ID, + TrimRecipe.BASE, TrimRecipe.ADDITION, TrimRecipe.TEMPLATE, "smithing_table", netId++)); + } + session.getGeyser().getLogger().debug("Using old smithing table workaround? " + oldSmithingTable); + session.setOldSmithingTable(oldSmithingTable); + Int2ObjectMap<List<SelectableRecipe>> unsortedStonecutterData = new Int2ObjectOpenHashMap<>(); List<SelectableRecipe> stonecutterRecipes = packet.getStonecutterRecipes(); @@ -433,30 +471,28 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator<ClientboundUpd // return combinations; // } // -// private List<RecipeData> getSmithingTransformRecipes(GeyserSession session) { -// List<RecipeData> recipes = new ArrayList<>(); -// ItemMapping template = session.getItemMappings().getStoredItems().upgradeTemplate(); -// -// for (String identifier : NETHERITE_UPGRADES) { -// recipes.add(org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.SmithingTransformRecipeData.of(identifier + "_smithing", -// getDescriptorFromId(session, template.getBedrockIdentifier()), -// getDescriptorFromId(session, identifier.replace("netherite", "diamond")), -// getDescriptorFromId(session, "minecraft:netherite_ingot"), -// ItemData.builder().definition(Objects.requireNonNull(session.getItemMappings().getDefinition(identifier))).count(1).build(), -// "smithing_table", -// session.getLastRecipeNetId().getAndIncrement())); -// } -// return recipes; -// } -// -// private ItemDescriptorWithCount getDescriptorFromId(GeyserSession session, String bedrockId) { -// ItemDefinition bedrockDefinition = session.getItemMappings().getDefinition(bedrockId); -// if (bedrockDefinition != null) { -// return ItemDescriptorWithCount.fromItem(ItemData.builder().definition(bedrockDefinition).count(1).build()); -// } -// GeyserImpl.getInstance().getLogger().debug("Unable to find item with identifier " + bedrockId); -// return ItemDescriptorWithCount.EMPTY; -// } + private void addSmithingTransformRecipes(GeyserSession session, List<RecipeData> recipes) { + ItemMapping template = session.getItemMappings().getStoredItems().upgradeTemplate(); + + for (String identifier : NETHERITE_UPGRADES) { + recipes.add(SmithingTransformRecipeData.of(identifier + "_smithing", + getDescriptorFromId(session, template.getBedrockIdentifier()), + getDescriptorFromId(session, identifier.replace("netherite", "diamond")), + getDescriptorFromId(session, "minecraft:netherite_ingot"), + ItemData.builder().definition(Objects.requireNonNull(session.getItemMappings().getDefinition(identifier))).count(1).build(), + "smithing_table", + session.getLastRecipeNetId().getAndIncrement())); + } + } + + private ItemDescriptorWithCount getDescriptorFromId(GeyserSession session, String bedrockId) { + ItemDefinition bedrockDefinition = session.getItemMappings().getDefinition(bedrockId); + if (bedrockDefinition != null) { + return ItemDescriptorWithCount.fromItem(ItemData.builder().definition(bedrockDefinition).count(1).build()); + } + GeyserImpl.getInstance().getLogger().debug("Unable to find item with identifier " + bedrockId); + return ItemDescriptorWithCount.EMPTY; + } // // @EqualsAndHashCode // @AllArgsConstructor diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java index ca1b95997..89e8eff82 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java @@ -47,6 +47,7 @@ public class JavaPlayerPositionTranslator extends PacketTranslator<ClientboundPl @Override public void translate(GeyserSession session, ClientboundPlayerPositionPacket packet) { + System.out.println(packet); if (!session.isLoggedIn()) return; 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 edb13f806..bc4e22b5a 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 @@ -52,8 +52,9 @@ public class JavaOpenScreenTranslator extends PacketTranslator<ClientboundOpenSc InventoryTranslator newTranslator; Inventory openInventory = session.getOpenInventory(); - // Hack: ViaVersion translates the old (pre 1.20) smithing table to a furnace (does not work for Bedrock). We can detect this and translate it back to a smithing table. - if (session.isOldSmithingTable() && packet.getType() == ContainerType.FURNACE && packet.getTitle().equals(SMITHING_TABLE_COMPONENT)) { + // Hack: ViaVersion translates the old (pre 1.20) smithing table to a anvil (does not work for Bedrock). We can detect this and translate it back to a smithing table. + // (Implementation note: used to be a furnace. Was changed sometime before 1.21.2) + if (session.isOldSmithingTable() && packet.getType() == ContainerType.ANVIL && packet.getTitle().equals(SMITHING_TABLE_COMPONENT)) { newTranslator = OldSmithingTableTranslator.INSTANCE; } else { newTranslator = InventoryTranslator.inventoryTranslator(packet.getType()); diff --git a/core/src/main/java/org/geysermc/geyser/util/MathUtils.java b/core/src/main/java/org/geysermc/geyser/util/MathUtils.java index 6d3b63c8f..08bed56f4 100644 --- a/core/src/main/java/org/geysermc/geyser/util/MathUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/MathUtils.java @@ -105,17 +105,6 @@ public class MathUtils { return floatNumber > truncated ? truncated + 1 : truncated; } - /** - * Round the given float to the previous whole number - * - * @param floatNumber Float to round - * @return Rounded number - */ - public static int floor(float floatNumber) { - int truncated = (int) floatNumber; - return floatNumber < truncated ? truncated - 1 : truncated; - } - /** * If number is greater than the max, set it to max, and if number is lower than low, set it to low. * From 05f153c9416302564317fe79589ae4310a102a2e Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Mon, 28 Oct 2024 18:53:16 -0400 Subject: [PATCH 031/165] Re-implement on-the-fly recipe sending --- .../geyser/inventory/GeyserItemStack.java | 19 +++ .../geyser/inventory/recipe/GeyserRecipe.java | 4 +- .../inventory/recipe/GeyserShapedRecipe.java | 14 ++- .../recipe/GeyserShapelessRecipe.java | 14 ++- .../registry/loader/RecipeRegistryLoader.java | 6 +- .../geyser/session/GeyserSession.java | 3 +- .../inventory/InventoryTranslator.java | 52 +++++--- ...=> JavaFinishConfigurationTranslator.java} | 5 +- .../java/JavaRecipeBookAddTranslator.java | 16 ++- .../JavaContainerSetSlotTranslator.java | 17 ++- .../geysermc/geyser/util/InventoryUtils.java | 118 ++++++++++-------- 11 files changed, 170 insertions(+), 98 deletions(-) rename core/src/main/java/org/geysermc/geyser/translator/protocol/java/{JavaFinishConfigurationPacketTranslator.java => JavaFinishConfigurationTranslator.java} (93%) 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 b843b3d4d..b4809edf2 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java @@ -29,6 +29,7 @@ import lombok.*; 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.item.Items; import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.registry.Registries; @@ -38,6 +39,10 @@ import org.geysermc.geyser.translator.item.ItemTranslator; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.EmptySlotDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.ItemSlotDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.ItemStackSlotDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; import java.util.HashMap; @@ -77,6 +82,20 @@ public class GeyserItemStack { return itemStack == null ? EMPTY : new GeyserItemStack(itemStack.getId(), itemStack.getAmount(), itemStack.getDataComponents()); } + public static @NonNull GeyserItemStack from(@NonNull SlotDisplay slotDisplay) { + if (slotDisplay instanceof EmptySlotDisplay) { + return GeyserItemStack.EMPTY; + } + if (slotDisplay instanceof ItemSlotDisplay itemSlotDisplay) { + return GeyserItemStack.of(itemSlotDisplay.item(), 1); + } + if (slotDisplay instanceof ItemStackSlotDisplay itemStackSlotDisplay) { + return GeyserItemStack.from(itemStackSlotDisplay.itemStack()); + } + GeyserImpl.getInstance().getLogger().warning("Unsure how to convert to ItemStack: " + slotDisplay); + return GeyserItemStack.EMPTY; + } + public int getJavaId() { return isEmpty() ? 0 : javaId; } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java index 3037b725e..d9cae943f 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java @@ -26,7 +26,7 @@ package org.geysermc.geyser.inventory.recipe; import org.checkerframework.checker.nullness.qual.Nullable; -import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; /** * A more compact version of {link org.geysermc.mcprotocollib.protocol.data.game.recipe.Recipe}. @@ -38,5 +38,5 @@ public interface GeyserRecipe { boolean isShaped(); @Nullable - ItemStack result(); + SlotDisplay result(); } 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 413041ba7..70b71cf4d 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 @@ -26,14 +26,16 @@ package org.geysermc.geyser.inventory.recipe; import org.checkerframework.checker.nullness.qual.Nullable; -import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; -import org.geysermc.mcprotocollib.protocol.data.game.recipe.Ingredient; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.ShapedCraftingRecipeDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; -public record GeyserShapedRecipe(int width, int height, Ingredient[] ingredients, @Nullable ItemStack result) implements GeyserRecipe { +import java.util.List; -// public GeyserShapedRecipe(ShapedRecipeData data) { -// this(data.getWidth(), data.getHeight(), data.getIngredients(), data.getResult()); -// } +public record GeyserShapedRecipe(int width, int height, List<SlotDisplay> ingredients, @Nullable SlotDisplay result) implements GeyserRecipe { + + public GeyserShapedRecipe(ShapedCraftingRecipeDisplay data) { + this(data.width(), data.height(), data.ingredients(), data.result()); + } @Override public boolean isShaped() { 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 6b9e36956..90eeb01c9 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 @@ -26,14 +26,16 @@ package org.geysermc.geyser.inventory.recipe; import org.checkerframework.checker.nullness.qual.Nullable; -import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; -import org.geysermc.mcprotocollib.protocol.data.game.recipe.Ingredient; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.ShapelessCraftingRecipeDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; -public record GeyserShapelessRecipe(Ingredient[] ingredients, @Nullable ItemStack result) implements GeyserRecipe { +import java.util.List; -// public GeyserShapelessRecipe(ShapelessRecipeData data) { -// this(data.getIngredients(), data.getResult()); -// } +public record GeyserShapelessRecipe(List<SlotDisplay> ingredients, @Nullable SlotDisplay result) implements GeyserRecipe { + + public GeyserShapelessRecipe(ShapelessCraftingRecipeDisplay data) { + this(data.ingredients(), data.result()); + } @Override public boolean isShaped() { diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/RecipeRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/RecipeRegistryLoader.java index f061ed070..4cbd2ea47 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/RecipeRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/RecipeRegistryLoader.java @@ -31,8 +31,6 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtType; import org.geysermc.geyser.inventory.recipe.GeyserRecipe; -import org.geysermc.geyser.inventory.recipe.GeyserShapedRecipe; -import org.geysermc.geyser.inventory.recipe.GeyserShapelessRecipe; import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodecHelper; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; @@ -92,7 +90,7 @@ public abstract class RecipeRegistryLoader implements RegistryLoader<String, Map for (int i = 0; i < rawInputs.size(); i++) { //javaInputs[i] = new Ingredient(new ItemStack[] {toItemStack(rawInputs.get(i), helper)}); } - deserializedRecipes.add(new GeyserShapelessRecipe(javaInputs, output)); + //deserializedRecipes.add(new GeyserShapelessRecipe(javaInputs, output)); } return deserializedRecipes; } @@ -118,7 +116,7 @@ public abstract class RecipeRegistryLoader implements RegistryLoader<String, Map //inputs[i++] = new Ingredient(new ItemStack[] {stack}); } } - deserializedRecipes.add(new GeyserShapedRecipe(shape.size(), shape.get(0).length, inputs, output)); + //deserializedRecipes.add(new GeyserShapedRecipe(shape.size(), shape.get(0).length, inputs, output)); } return deserializedRecipes; } 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 25bfe19e7..7e55261f4 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -446,8 +446,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { */ private final Int2ObjectMap<List<String>> javaToBedrockRecipeIds; - @Setter - private Int2ObjectMap<GeyserRecipe> craftingRecipes; + private final Int2ObjectMap<GeyserRecipe> craftingRecipes; private final AtomicInteger lastRecipeNetId; /** 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 f051885d4..15c19c542 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 @@ -25,21 +25,40 @@ package org.geysermc.geyser.translator.inventory; -import it.unimi.dsi.fastutil.ints.*; +import it.unimi.dsi.fastutil.ints.Int2IntMap; +import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.ints.IntIterator; +import it.unimi.dsi.fastutil.ints.IntLinkedOpenHashSet; +import it.unimi.dsi.fastutil.ints.IntOpenHashSet; +import it.unimi.dsi.fastutil.ints.IntSet; +import it.unimi.dsi.fastutil.ints.IntSortedSet; import lombok.AllArgsConstructor; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequest; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequestSlotData; -import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.*; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.AutoCraftRecipeAction; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.ConsumeAction; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.CraftResultsDeprecatedAction; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.DropAction; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.ItemStackRequestAction; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.SwapAction; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.TransferItemStackRequestAction; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.response.ItemStackResponse; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.response.ItemStackResponseContainer; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.response.ItemStackResponseSlot; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.response.ItemStackResponseStatus; import org.cloudburstmc.protocol.bedrock.packet.ItemStackResponsePacket; import org.geysermc.geyser.GeyserImpl; -import org.geysermc.geyser.inventory.*; +import org.geysermc.geyser.inventory.BedrockContainerSlot; +import org.geysermc.geyser.inventory.CartographyContainer; +import org.geysermc.geyser.inventory.GeyserItemStack; +import org.geysermc.geyser.inventory.Inventory; +import org.geysermc.geyser.inventory.PlayerInventory; +import org.geysermc.geyser.inventory.SlotType; import org.geysermc.geyser.inventory.click.Click; import org.geysermc.geyser.inventory.click.ClickPlan; import org.geysermc.geyser.inventory.recipe.GeyserRecipe; @@ -56,12 +75,17 @@ import org.geysermc.geyser.translator.inventory.furnace.SmokerInventoryTranslato import org.geysermc.geyser.util.InventoryUtils; import org.geysermc.geyser.util.ItemUtils; import org.geysermc.mcprotocollib.protocol.data.game.inventory.ContainerType; -import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; -import org.geysermc.mcprotocollib.protocol.data.game.recipe.Ingredient; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.EmptySlotDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.List; +import java.util.Map; @AllArgsConstructor public abstract class InventoryTranslator { @@ -642,8 +666,8 @@ public abstract class InventoryTranslator { } int gridDimensions = gridSize == 4 ? 2 : 3; - Ingredient[] ingredients = new Ingredient[0]; - ItemStack output = null; + List<SlotDisplay> ingredients = Collections.emptyList(); + SlotDisplay output = null; int recipeWidth = 0; int ingRemaining = 0; int ingredientIndex = -1; @@ -697,7 +721,7 @@ public abstract class InventoryTranslator { ingredients = shapelessRecipe.ingredients(); recipeWidth = gridDimensions; output = shapelessRecipe.result(); - if (ingredients.length > gridSize) { + if (ingredients.size() > gridSize) { return rejectRequest(request); } } @@ -728,11 +752,11 @@ public abstract class InventoryTranslator { craftState = CraftState.INGREDIENTS; if (ingRemaining == 0) { - while (++ingredientIndex < ingredients.length) { -// if (ingredients[ingredientIndex].getOptions().length != 0) { -// ingRemaining = timesCrafted; -// break; -// } + while (++ingredientIndex < ingredients.size()) { + if (!(ingredients.get(ingredientIndex) instanceof EmptySlotDisplay)) { // TODO I guess can technically other options be empty? + ingRemaining = timesCrafted; + break; + } } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationPacketTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationTranslator.java similarity index 93% rename from core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationPacketTranslator.java rename to core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationTranslator.java index 1a32c1a97..6cbefde0d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationPacketTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationTranslator.java @@ -42,7 +42,7 @@ import java.util.UUID; import static org.geysermc.geyser.util.InventoryUtils.LAST_RECIPE_NET_ID; @Translator(packet = ClientboundFinishConfigurationPacket.class) -public class JavaFinishConfigurationPacketTranslator extends PacketTranslator<ClientboundFinishConfigurationPacket> { +public class JavaFinishConfigurationTranslator extends PacketTranslator<ClientboundFinishConfigurationPacket> { /** * Required to use the specified cartography table recipes */ @@ -72,6 +72,9 @@ public class JavaFinishConfigurationPacketTranslator extends PacketTranslator<Cl craftingDataPacket.getPotionMixData().addAll(Registries.POTION_MIXES.forVersion(session.getUpstream().getProtocolVersion())); if (session.isSentSpawnPacket()) { session.getUpstream().sendPacket(craftingDataPacket); + session.getCraftingRecipes().clear(); + session.getJavaToBedrockRecipeIds().clear(); + session.getStonecutterRecipes().clear(); } else { session.getUpstream().queuePostStartGamePacket(craftingDataPacket); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java index 94dab5dea..da8fd01d3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java @@ -39,6 +39,9 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.DefaultDescri import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.ItemDescriptorWithCount; import org.cloudburstmc.protocol.bedrock.packet.CraftingDataPacket; import org.cloudburstmc.protocol.bedrock.packet.UnlockedRecipesPacket; +import org.geysermc.geyser.inventory.recipe.GeyserRecipe; +import org.geysermc.geyser.inventory.recipe.GeyserShapedRecipe; +import org.geysermc.geyser.inventory.recipe.GeyserShapelessRecipe; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.type.BedrockRequiresTagItem; import org.geysermc.geyser.item.type.Item; @@ -79,9 +82,10 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec @Override public void translate(GeyserSession session, ClientboundRecipeBookAddPacket packet) { - //System.out.println(packet); + System.out.println(packet); int netId = session.getLastRecipeNetId().get(); Int2ObjectMap<List<String>> javaToBedrockRecipeIds = session.getJavaToBedrockRecipeIds(); + Int2ObjectMap<GeyserRecipe> geyserRecipes = session.getCraftingRecipes(); CraftingDataPacket craftingDataPacket = new CraftingDataPacket(); UnlockedRecipesPacket recipesPacket = new UnlockedRecipesPacket(); @@ -101,14 +105,17 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec List<String> bedrockRecipeIds = new ArrayList<>(); ItemData output = bedrockRecipes.right(); List<List<ItemDescriptorWithCount>> left = bedrockRecipes.left(); + GeyserRecipe geyserRecipe = new GeyserShapedRecipe(shapedRecipe); for (int i = 0; i < left.size(); i++) { List<ItemDescriptorWithCount> inputs = left.get(i); String recipeId = contents.id() + "_" + i; + int recipeNetworkId = netId++; craftingDataPacket.getCraftingData().add(ShapedRecipeData.shaped(recipeId, shapedRecipe.width(), shapedRecipe.height(), inputs, - Collections.singletonList(output), UUID.randomUUID(), "crafting_table", 0, netId++, false, RecipeUnlockingRequirement.INVALID)); + Collections.singletonList(output), UUID.randomUUID(), "crafting_table", 0, recipeNetworkId, false, RecipeUnlockingRequirement.INVALID)); recipesPacket.getUnlockedRecipes().add(recipeId); bedrockRecipeIds.add(recipeId); + geyserRecipes.put(recipeNetworkId, geyserRecipe); } javaToBedrockRecipeIds.put(contents.id(), List.copyOf(bedrockRecipeIds)); } @@ -121,13 +128,16 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec List<String> bedrockRecipeIds = new ArrayList<>(); ItemData output = bedrockRecipes.right(); List<List<ItemDescriptorWithCount>> left = bedrockRecipes.left(); + GeyserRecipe geyserRecipe = new GeyserShapelessRecipe(shapelessRecipe); for (int i = 0; i < left.size(); i++) { List<ItemDescriptorWithCount> inputs = left.get(i); String recipeId = contents.id() + "_" + i; + int recipeNetworkId = netId++; craftingDataPacket.getCraftingData().add(ShapelessRecipeData.shapeless(recipeId, - inputs, Collections.singletonList(output), UUID.randomUUID(), "crafting_table", 0, netId++, RecipeUnlockingRequirement.INVALID)); + inputs, Collections.singletonList(output), UUID.randomUUID(), "crafting_table", 0, recipeNetworkId, RecipeUnlockingRequirement.INVALID)); recipesPacket.getUnlockedRecipes().add(recipeId); bedrockRecipeIds.add(recipeId); + geyserRecipes.put(recipeNetworkId, geyserRecipe); } javaToBedrockRecipeIds.put(contents.id(), List.copyOf(bedrockRecipeIds)); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java index 743c07a31..c98ab1ff6 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java @@ -44,12 +44,15 @@ import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.util.InventoryUtils; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; -import org.geysermc.mcprotocollib.protocol.data.game.recipe.Ingredient; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.EmptySlotDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.ItemStackSlotDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.inventory.ClientboundContainerSetSlotPacket; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.List; import java.util.UUID; import java.util.concurrent.TimeUnit; @@ -104,9 +107,6 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound * Checks for a changed output slot in the crafting grid, and ensures Bedrock sees the recipe. */ private static void updateCraftingGrid(GeyserSession session, int slot, ItemStack item, Inventory inventory, InventoryTranslator translator) { - if (true) { - return; - } // Check if it's the crafting grid result slot. if (slot != 0) { return; @@ -166,14 +166,13 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound ItemData[] ingredients = new ItemData[height * width]; //construct ingredient list and clear slots on client - Ingredient[] javaIngredients = new Ingredient[height * width]; + List<SlotDisplay> javaIngredients = new ArrayList<>(height * width); int index = 0; for (int row = firstRow; row < height + firstRow; row++) { for (int col = firstCol; col < width + firstCol; col++) { GeyserItemStack geyserItemStack = inventory.getItem(col + (row * gridDimensions) + 1); ingredients[index] = geyserItemStack.getItemData(session); - int[] items = new int[] {geyserItemStack.isEmpty() ? 0 : geyserItemStack.getJavaId()}; - javaIngredients[index] = new Ingredient(new HolderSet(items)); + javaIngredients.add(geyserItemStack.isEmpty() ? new EmptySlotDisplay() : new ItemStackSlotDisplay(geyserItemStack.getItemStack())); InventorySlotPacket slotPacket = new InventorySlotPacket(); slotPacket.setContainerId(ContainerId.UI); @@ -185,7 +184,7 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound } // Cache this recipe so we know the client has received it - session.getCraftingRecipes().put(newRecipeId, new GeyserShapedRecipe(width, height, javaIngredients, item)); + session.getCraftingRecipes().put(newRecipeId, new GeyserShapedRecipe(width, height, javaIngredients, new ItemStackSlotDisplay(item))); CraftingDataPacket craftPacket = new CraftingDataPacket(); craftPacket.getCraftingData().add(ShapedRecipeData.shaped( 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 3b99d5e47..196a66c0a 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java @@ -51,6 +51,8 @@ import org.geysermc.geyser.level.BedrockDimension; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.session.cache.registry.JavaRegistries; +import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.text.ChatColor; import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.translator.inventory.InventoryTranslator; @@ -59,15 +61,21 @@ import org.geysermc.geyser.translator.inventory.chest.DoubleChestInventoryTransl import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; -import org.geysermc.mcprotocollib.protocol.data.game.recipe.Ingredient; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.CompositeSlotDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.EmptySlotDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.ItemSlotDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.ItemStackSlotDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.TagSlotDisplay; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundContainerClosePacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundPickItemPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundSetCreativeModeSlotPacket; import org.jetbrains.annotations.Contract; -import java.util.Arrays; +import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Objects; import java.util.concurrent.TimeUnit; import java.util.function.IntFunction; @@ -441,6 +449,35 @@ public class InventoryUtils { }; } + /** + * Returns if the provided item stack would be accepted by the slot display. + */ + public static boolean acceptsAsInput(GeyserSession session, SlotDisplay slotDisplay, GeyserItemStack itemStack) { + if (slotDisplay instanceof EmptySlotDisplay) { + return itemStack.isEmpty(); + } + if (slotDisplay instanceof CompositeSlotDisplay compositeSlotDisplay) { + if (compositeSlotDisplay.contents().size() == 1) { + return acceptsAsInput(session, compositeSlotDisplay.contents().get(0), itemStack); + } + return compositeSlotDisplay.contents().stream().anyMatch(aSlotDisplay -> acceptsAsInput(session, aSlotDisplay, itemStack)); + } + if (slotDisplay instanceof ItemSlotDisplay itemSlotDisplay) { + return itemStack.getJavaId() == itemSlotDisplay.item(); + } + if (slotDisplay instanceof ItemStackSlotDisplay itemStackSlotDisplay) { + ItemStack other = itemStackSlotDisplay.itemStack(); + // Amount check might be flimsy? + return itemStack.getJavaId() == other.getId() && itemStack.getAmount() >= other.getAmount() + && Objects.equals(itemStack.getComponents(), other.getDataComponents()); + } + if (slotDisplay instanceof TagSlotDisplay tagSlotDisplay) { + return session.getTagCache().is(new Tag<>(JavaRegistries.ITEM, tagSlotDisplay.tag()), itemStack.asItem()); + } + session.getGeyser().getLogger().warning("Unknown slot display type: " + slotDisplay); + return false; + } + /** * Test all known recipes to find a valid match * @@ -462,91 +499,70 @@ public class InventoryUtils { for (GeyserRecipe recipe : session.getCraftingRecipes().values()) { if (recipe.isShaped()) { GeyserShapedRecipe shapedRecipe = (GeyserShapedRecipe) recipe; - if (output != null && !shapedRecipe.result().equals(output)) { + if (output != null && !acceptsAsInput(session, shapedRecipe.result(), GeyserItemStack.from(output))) { continue; } - Ingredient[] ingredients = shapedRecipe.ingredients(); - if (shapedRecipe.width() != width || shapedRecipe.height() != height || width * height != ingredients.length) { + List<SlotDisplay> ingredients = shapedRecipe.ingredients(); + if (shapedRecipe.width() != width || shapedRecipe.height() != height || width * height != ingredients.size()) { continue; } - if (!testShapedRecipe(ingredients, inventoryGetter, gridDimensions, firstRow, height, firstCol, width)) { - Ingredient[] mirroredIngredients = new Ingredient[ingredients.length]; + if (!testShapedRecipe(session, ingredients, inventoryGetter, gridDimensions, firstRow, height, firstCol, width)) { + List<SlotDisplay> mirroredIngredients = new ArrayList<>(ingredients.size()); for (int row = 0; row < height; row++) { for (int col = 0; col < width; col++) { - mirroredIngredients[col + (row * width)] = ingredients[(width - 1 - col) + (row * width)]; + mirroredIngredients.add(ingredients.get((width - 1 - col) + (row * width))); } } - if (Arrays.equals(ingredients, mirroredIngredients) || - !testShapedRecipe(mirroredIngredients, inventoryGetter, gridDimensions, firstRow, height, firstCol, width)) { + if (!ingredients.equals(mirroredIngredients) || + !testShapedRecipe(session, mirroredIngredients, inventoryGetter, gridDimensions, firstRow, height, firstCol, width)) { continue; } } } else { GeyserShapelessRecipe data = (GeyserShapelessRecipe) recipe; - if (output != null && !data.result().equals(output)) { + if (output != null && !acceptsAsInput(session, data.result(), GeyserItemStack.from(output))) { continue; } - if (nonAirCount != data.ingredients().length) { + if (nonAirCount != data.ingredients().size()) { // There is an amount of items on the crafting table that is not the same as the ingredient count so this is invalid continue; } - for (int i = 0; i < data.ingredients().length; i++) { - Ingredient ingredient = data.ingredients()[i]; - for (int item : ingredient.getValues().getHolders()) { // FIXME - boolean inventoryHasItem = false; - // Iterate only over the crafting table to find this item - crafting: - for (int row = firstRow; row < height + firstRow; row++) { - for (int col = firstCol; col < width + firstCol; col++) { - GeyserItemStack geyserItemStack = inventoryGetter.apply(col + (row * gridDimensions) + 1); - if (geyserItemStack.isEmpty()) { - inventoryHasItem = item == 0; - if (inventoryHasItem) { - break crafting; - } - } else if (item == geyserItemStack.getJavaId()) { - inventoryHasItem = true; - break crafting; - } + for (int i = 0; i < data.ingredients().size(); i++) { + SlotDisplay slotDisplay = data.ingredients().get(i); + boolean inventoryHasItem = false; + // Iterate only over the crafting table to find this item + for (int row = firstRow; row < height + firstRow; row++) { + for (int col = firstCol; col < width + firstCol; col++) { + GeyserItemStack geyserItemStack = inventoryGetter.apply(col + (row * gridDimensions) + 1); + if (acceptsAsInput(session, slotDisplay, geyserItemStack)) { + inventoryHasItem = true; + break; } } - if (!inventoryHasItem) { - continue recipes; - } + } + if (!inventoryHasItem) { + continue recipes; } } } + System.out.println("Found existing match for item: " + recipe); return recipe; } return null; } @SuppressWarnings("BooleanMethodIsAlwaysInverted") - private static boolean testShapedRecipe(final Ingredient[] ingredients, final IntFunction<GeyserItemStack> inventoryGetter, + private static boolean testShapedRecipe(final GeyserSession session, final List<SlotDisplay> ingredients, final IntFunction<GeyserItemStack> inventoryGetter, final int gridDimensions, final int firstRow, final int height, final int firstCol, final int width) { int ingredientIndex = 0; for (int row = firstRow; row < height + firstRow; row++) { for (int col = firstCol; col < width + firstCol; col++) { GeyserItemStack geyserItemStack = inventoryGetter.apply(col + (row * gridDimensions) + 1); - Ingredient ingredient = ingredients[ingredientIndex++]; - int[] items = ingredient.getValues().getHolders(); // FIXME - if (items.length == 0) { - if (!geyserItemStack.isEmpty()) { - return false; - } - } else { - boolean inventoryHasItem = false; - for (int item : items) { - if (geyserItemStack.getJavaId() == item) { - inventoryHasItem = true; - break; - } - } - if (!inventoryHasItem) { - return false; - } + SlotDisplay slotDisplay = ingredients.get(ingredientIndex++); + if (!acceptsAsInput(session, slotDisplay, geyserItemStack)) { + return false; } } } From 52679f9f8139a512eebdcf0ef177e29072833f7e Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Tue, 29 Oct 2024 01:33:57 -0400 Subject: [PATCH 032/165] On-the-fly smithing transform recipes --- .../geyser/inventory/GeyserItemStack.java | 7 ++ .../recipe/GeyserSmithingRecipe.java | 43 +++++++++ .../geyser/session/GeyserSession.java | 8 +- .../SmithingInventoryTranslator.java | 29 +++--- .../java/JavaRecipeBookAddTranslator.java | 3 + .../JavaContainerSetSlotTranslator.java | 89 +++++++++++++++++-- 6 files changed, 160 insertions(+), 19 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserSmithingRecipe.java 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 b4809edf2..a2797e6dd 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java @@ -182,6 +182,13 @@ public class GeyserItemStack { return session.getItemMappings().getMapping(this.javaId); } + public SlotDisplay asSlotDisplay() { + if (isEmpty()) { + return new EmptySlotDisplay(); + } + return new ItemStackSlotDisplay(this.getItemStack()); + } + public Item asItem() { if (isEmpty()) { return Items.AIR; diff --git a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserSmithingRecipe.java b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserSmithingRecipe.java new file mode 100644 index 000000000..7e4131a4c --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserSmithingRecipe.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 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.inventory.recipe; + +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.SmithingRecipeDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; + +public record GeyserSmithingRecipe(SlotDisplay template, + SlotDisplay base, + SlotDisplay addition, + SlotDisplay result) implements GeyserRecipe { + public GeyserSmithingRecipe(SmithingRecipeDisplay display) { + this(display.template(), display.base(), display.addition(), display.result()); + } + + @Override + public boolean isShaped() { + return false; + } +} 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 7e55261f4..ef8ad17ef 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -29,6 +29,7 @@ import com.google.gson.Gson; import com.google.gson.JsonObject; import io.netty.channel.Channel; import io.netty.channel.EventLoop; +import it.unimi.dsi.fastutil.Pair; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2IntMap; @@ -77,6 +78,7 @@ import org.cloudburstmc.protocol.bedrock.data.command.SoftEnumUpdateType; import org.cloudburstmc.protocol.bedrock.data.definitions.DimensionDefinition; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; +import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.CraftingRecipeData; import org.cloudburstmc.protocol.bedrock.packet.AvailableEntityIdentifiersPacket; import org.cloudburstmc.protocol.bedrock.packet.BedrockPacket; import org.cloudburstmc.protocol.bedrock.packet.BiomeDefinitionListPacket; @@ -141,6 +143,7 @@ import org.geysermc.geyser.impl.camera.GeyserCameraData; import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.PlayerInventory; import org.geysermc.geyser.inventory.recipe.GeyserRecipe; +import org.geysermc.geyser.inventory.recipe.GeyserSmithingRecipe; import org.geysermc.geyser.inventory.recipe.GeyserStonecutterData; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.type.BlockItem; @@ -311,7 +314,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { private final AtomicInteger itemNetId = new AtomicInteger(2); @Setter - private ScheduledFuture<?> craftingGridFuture; + private ScheduledFuture<?> containerOutputFuture; /** * Stores session collision @@ -447,6 +450,8 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { private final Int2ObjectMap<List<String>> javaToBedrockRecipeIds; private final Int2ObjectMap<GeyserRecipe> craftingRecipes; + @Setter + private Pair<CraftingRecipeData, GeyserRecipe> lastCreatedRecipe = null; // TODO try to prevent sending duplicate recipes private final AtomicInteger lastRecipeNetId; /** @@ -455,6 +460,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { */ @Setter private Int2ObjectMap<GeyserStonecutterData> stonecutterRecipes; + private final List<GeyserSmithingRecipe> smithingRecipes = new ArrayList<>(); /** * Whether to work around 1.13's different behavior in villager trading menus. diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/SmithingInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/SmithingInventoryTranslator.java index c68347fd3..dbe24230a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/SmithingInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/SmithingInventoryTranslator.java @@ -33,6 +33,11 @@ import org.geysermc.geyser.inventory.updater.UIInventoryUpdater; import org.geysermc.geyser.level.block.Blocks; public class SmithingInventoryTranslator extends AbstractBlockInventoryTranslator { + public static final int TEMPLATE = 0; + public static final int INPUT = 1; + public static final int MATERIAL = 2; + public static final int OUTPUT = 3; + public SmithingInventoryTranslator() { super(4, Blocks.SMITHING_TABLE, ContainerType.SMITHING_TABLE, UIInventoryUpdater.INSTANCE); } @@ -40,10 +45,10 @@ public class SmithingInventoryTranslator extends AbstractBlockInventoryTranslato @Override public int bedrockSlotToJava(ItemStackRequestSlotData slotInfoData) { return switch (slotInfoData.getContainer()) { - case SMITHING_TABLE_TEMPLATE -> 0; - case SMITHING_TABLE_INPUT -> 1; - case SMITHING_TABLE_MATERIAL -> 2; - case SMITHING_TABLE_RESULT, CREATED_OUTPUT -> 3; + case SMITHING_TABLE_TEMPLATE -> TEMPLATE; + case SMITHING_TABLE_INPUT -> INPUT; + case SMITHING_TABLE_MATERIAL -> MATERIAL; + case SMITHING_TABLE_RESULT, CREATED_OUTPUT -> OUTPUT; default -> super.bedrockSlotToJava(slotInfoData); }; } @@ -51,10 +56,10 @@ public class SmithingInventoryTranslator extends AbstractBlockInventoryTranslato @Override public BedrockContainerSlot javaSlotToBedrockContainer(int slot) { return switch (slot) { - case 0 -> new BedrockContainerSlot(ContainerSlotType.SMITHING_TABLE_TEMPLATE, 53); - case 1 -> new BedrockContainerSlot(ContainerSlotType.SMITHING_TABLE_INPUT, 51); - case 2 -> new BedrockContainerSlot(ContainerSlotType.SMITHING_TABLE_MATERIAL, 52); - case 3 -> new BedrockContainerSlot(ContainerSlotType.SMITHING_TABLE_RESULT, 50); + case TEMPLATE -> new BedrockContainerSlot(ContainerSlotType.SMITHING_TABLE_TEMPLATE, 53); + case INPUT -> new BedrockContainerSlot(ContainerSlotType.SMITHING_TABLE_INPUT, 51); + case MATERIAL -> new BedrockContainerSlot(ContainerSlotType.SMITHING_TABLE_MATERIAL, 52); + case OUTPUT -> new BedrockContainerSlot(ContainerSlotType.SMITHING_TABLE_RESULT, 50); default -> super.javaSlotToBedrockContainer(slot); }; } @@ -62,10 +67,10 @@ public class SmithingInventoryTranslator extends AbstractBlockInventoryTranslato @Override public int javaSlotToBedrock(int slot) { return switch (slot) { - case 0 -> 53; - case 1 -> 51; - case 2 -> 52; - case 3 -> 50; + case TEMPLATE -> 53; + case INPUT -> 51; + case MATERIAL -> 52; + case OUTPUT -> 50; default -> super.javaSlotToBedrock(slot); }; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java index da8fd01d3..f23ebebcb 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java @@ -42,6 +42,7 @@ import org.cloudburstmc.protocol.bedrock.packet.UnlockedRecipesPacket; import org.geysermc.geyser.inventory.recipe.GeyserRecipe; import org.geysermc.geyser.inventory.recipe.GeyserShapedRecipe; import org.geysermc.geyser.inventory.recipe.GeyserShapelessRecipe; +import org.geysermc.geyser.inventory.recipe.GeyserSmithingRecipe; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.type.BedrockRequiresTagItem; import org.geysermc.geyser.item.type.Item; @@ -176,6 +177,8 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec } } javaToBedrockRecipeIds.put(contents.id(), bedrockRecipeIds); + session.getSmithingRecipes().add(new GeyserSmithingRecipe(smithingRecipe)); + System.out.println(new GeyserSmithingRecipe(smithingRecipe)); } } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java index c98ab1ff6..8f5fab1f9 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java @@ -29,6 +29,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.RecipeUnlockingRequirement; import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapedRecipeData; +import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.SmithingTransformRecipeData; import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.ItemDescriptorWithCount; import org.cloudburstmc.protocol.bedrock.packet.CraftingDataPacket; import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket; @@ -36,15 +37,17 @@ import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.recipe.GeyserShapedRecipe; +import org.geysermc.geyser.inventory.recipe.GeyserSmithingRecipe; +import org.geysermc.geyser.item.Items; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.inventory.InventoryTranslator; import org.geysermc.geyser.translator.inventory.PlayerInventoryTranslator; +import org.geysermc.geyser.translator.inventory.SmithingInventoryTranslator; import org.geysermc.geyser.translator.item.ItemTranslator; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.util.InventoryUtils; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; -import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.EmptySlotDisplay; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.ItemStackSlotDisplay; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.inventory.ClientboundContainerSetSlotPacket; @@ -83,7 +86,11 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound return; } - updateCraftingGrid(session, slot, packet.getItem(), inventory, translator); + if (translator instanceof SmithingInventoryTranslator) { + updateSmithingTableOutput(session, slot, packet.getItem(), inventory); + } else { + updateCraftingGrid(session, slot, packet.getItem(), inventory, translator); + } GeyserItemStack newItem = GeyserItemStack.from(packet.getItem()); if (packet.getContainerId() == 0 && !(translator instanceof PlayerInventoryTranslator)) { @@ -119,15 +126,15 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound } // Only process the most recent crafting grid result, and cancel the previous one. - if (session.getCraftingGridFuture() != null) { - session.getCraftingGridFuture().cancel(false); + if (session.getContainerOutputFuture() != null) { + session.getContainerOutputFuture().cancel(false); } if (InventoryUtils.isEmpty(item)) { return; } - session.setCraftingGridFuture(session.scheduleInEventLoop(() -> { + session.setContainerOutputFuture(session.scheduleInEventLoop(() -> { int offset = gridSize == 4 ? 28 : 32; int gridDimensions = gridSize == 4 ? 2 : 3; int firstRow = -1, height = -1; @@ -172,7 +179,7 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound for (int col = firstCol; col < width + firstCol; col++) { GeyserItemStack geyserItemStack = inventory.getItem(col + (row * gridDimensions) + 1); ingredients[index] = geyserItemStack.getItemData(session); - javaIngredients.add(geyserItemStack.isEmpty() ? new EmptySlotDisplay() : new ItemStackSlotDisplay(geyserItemStack.getItemStack())); + javaIngredients.add(geyserItemStack.asSlotDisplay()); InventorySlotPacket slotPacket = new InventorySlotPacket(); slotPacket.setContainerId(ContainerId.UI); @@ -216,4 +223,74 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound } }, 150, TimeUnit.MILLISECONDS)); } + + private static void updateSmithingTableOutput(GeyserSession session, int slot, ItemStack output, Inventory inventory) { + if (slot != SmithingInventoryTranslator.OUTPUT) { + return; + } + + // Only process the most recent output result, and cancel the previous one. + if (session.getContainerOutputFuture() != null) { + session.getContainerOutputFuture().cancel(false); + } + + if (InventoryUtils.isEmpty(output)) { + return; + } + + session.setContainerOutputFuture(session.scheduleInEventLoop(() -> { + GeyserItemStack template = inventory.getItem(SmithingInventoryTranslator.TEMPLATE); + if (template.asItem() != Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE) { + // Technically we should probably also do this for custom items, but last I checked Bedrock doesn't even support that. + return; + } + + GeyserItemStack input = inventory.getItem(SmithingInventoryTranslator.INPUT); + GeyserItemStack material = inventory.getItem(SmithingInventoryTranslator.MATERIAL); + GeyserItemStack geyserOutput = GeyserItemStack.from(output); + + for (GeyserSmithingRecipe recipe : session.getSmithingRecipes()) { + if (InventoryUtils.acceptsAsInput(session, recipe.result(), geyserOutput) + && InventoryUtils.acceptsAsInput(session, recipe.base(), input) + && InventoryUtils.acceptsAsInput(session, recipe.addition(), material) + && InventoryUtils.acceptsAsInput(session, recipe.template(), template)) { + // The client already recognizes this item. + return; + } + } + + session.getSmithingRecipes().add(new GeyserSmithingRecipe( + template.asSlotDisplay(), + input.asSlotDisplay(), + material.asSlotDisplay(), + new ItemStackSlotDisplay(output) + )); + + UUID uuid = UUID.randomUUID(); + + ItemData bedrockAddition = ItemTranslator.translateToBedrock(session, material.getItemStack()); + + CraftingDataPacket craftPacket = new CraftingDataPacket(); + craftPacket.getCraftingData().add(SmithingTransformRecipeData.of( + uuid.toString(), + ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, template.getItemStack())), + ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, input.getItemStack())), + ItemDescriptorWithCount.fromItem(bedrockAddition), + ItemTranslator.translateToBedrock(session, output), + "smithing_table", + session.getLastRecipeNetId().incrementAndGet() + )); + craftPacket.setCleanRecipes(false); + session.sendUpstreamPacket(craftPacket); + + // Just set one of the slots to air, then right back to its proper item. + InventorySlotPacket slotPacket = new InventorySlotPacket(); + slotPacket.setContainerId(ContainerId.UI); + slotPacket.setSlot(session.getInventoryTranslator().javaSlotToBedrock(SmithingInventoryTranslator.MATERIAL)); + slotPacket.setItem(ItemData.AIR); + session.sendUpstreamPacket(slotPacket); + + session.getInventoryTranslator().updateSlot(session, inventory, SmithingInventoryTranslator.MATERIAL); + }, 150, TimeUnit.MILLISECONDS)); + } } From 8ba70f0fc83c9732f4c84cb52808e9a49e4aed41 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Tue, 29 Oct 2024 23:16:24 -0400 Subject: [PATCH 033/165] Implement remainder slot display recipes --- .../java/org/geysermc/geyser/entity/EntityDefinitions.java | 1 + .../protocol/java/JavaFinishConfigurationTranslator.java | 1 + .../protocol/java/JavaRecipeBookAddTranslator.java | 5 +++++ .../protocol/java/JavaSelectKnownPacksTranslator.java | 3 ++- .../java/inventory/JavaContainerSetSlotTranslator.java | 4 +--- .../sound/block/ComparatorSoundInteractionTranslator.java | 5 ++--- .../sound/block/GrassPathInteractionTranslator.java | 4 +--- .../translator/sound/block/HoeInteractionTranslator.java | 4 +--- .../sound/block/LeverSoundInteractionTranslator.java | 5 ++--- .../sound/block/OpenableSoundInteractionTranslator.java | 5 ++--- .../main/java/org/geysermc/geyser/util/InventoryUtils.java | 4 ++++ 11 files changed, 22 insertions(+), 19 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 1443a9443..62283f4df 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java @@ -858,6 +858,7 @@ public final class EntityDefinitions { SALMON = EntityDefinition.inherited(abstractFishEntityBase.factory(), abstractFishEntityBase) .type(EntityType.SALMON) .height(0.5f).width(0.7f) + .addTranslator(null) // Scale/variant - TODO .build(); TADPOLE = EntityDefinition.inherited(TadpoleEntity::new, abstractFishEntityBase) .type(EntityType.TADPOLE) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationTranslator.java index 6cbefde0d..d73c2e2ed 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationTranslator.java @@ -74,6 +74,7 @@ public class JavaFinishConfigurationTranslator extends PacketTranslator<Clientbo session.getUpstream().sendPacket(craftingDataPacket); session.getCraftingRecipes().clear(); session.getJavaToBedrockRecipeIds().clear(); + session.getSmithingRecipes().clear(); session.getStonecutterRecipes().clear(); } else { session.getUpstream().queuePostStartGamePacket(craftingDataPacket); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java index f23ebebcb..182a1b7d5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java @@ -67,6 +67,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.ItemSta import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SmithingTrimDemoSlotDisplay; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.TagSlotDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.WithRemainderSlotDisplay; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundRecipeBookAddPacket; import java.util.ArrayList; @@ -208,6 +209,10 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec .flatMap(List::stream) .toList(); } + if (slotDisplay instanceof WithRemainderSlotDisplay remainder) { + // Don't need to worry about what will stay in the crafting table after crafting for the purposes of sending recipes to Bedrock + return translateToInput(session, remainder.input()); + } if (slotDisplay instanceof ItemSlotDisplay itemSlot) { return Collections.singletonList(fromItem(session, itemSlot.item())); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectKnownPacksTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectKnownPacksTranslator.java index 9192beacf..5420bee90 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectKnownPacksTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectKnownPacksTranslator.java @@ -40,7 +40,7 @@ import java.util.Set; @Translator(packet = ClientboundSelectKnownPacks.class) public class JavaSelectKnownPacksTranslator extends PacketTranslator<ClientboundSelectKnownPacks> { // todo: dump from client? - private static final Set<String> KNOWN_PACK_IDS = Set.of("core", "update_1_21", "bundle", "trade_rebalance"); + private static final Set<String> KNOWN_PACK_IDS = Set.of("core", "winter_drop", "trade_rebalance", "redstone_experiments", "minecart_improvements"); @Override public void translate(GeyserSession session, ClientboundSelectKnownPacks packet) { @@ -62,6 +62,7 @@ public class JavaSelectKnownPacksTranslator extends PacketTranslator<Clientbound @Override public boolean shouldExecuteInEventLoop() { + // This technically isn't correct behavior, but it prevents race conditions between MCProtocolLib's packet handler and ours. return false; } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java index 8f5fab1f9..fa2e3a544 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java @@ -268,14 +268,12 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound UUID uuid = UUID.randomUUID(); - ItemData bedrockAddition = ItemTranslator.translateToBedrock(session, material.getItemStack()); - CraftingDataPacket craftPacket = new CraftingDataPacket(); craftPacket.getCraftingData().add(SmithingTransformRecipeData.of( uuid.toString(), ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, template.getItemStack())), ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, input.getItemStack())), - ItemDescriptorWithCount.fromItem(bedrockAddition), + ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, material.getItemStack())), ItemTranslator.translateToBedrock(session, output), "smithing_table", session.getLastRecipeNetId().incrementAndGet() 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 9d5d3cd59..745b51117 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 @@ -28,6 +28,7 @@ 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.packet.LevelEventPacket; +import org.geysermc.geyser.level.block.property.Properties; import org.geysermc.geyser.level.block.type.BlockState; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.sound.BlockSoundInteractionTranslator; @@ -38,12 +39,10 @@ public class ComparatorSoundInteractionTranslator implements BlockSoundInteracti @Override public void translate(GeyserSession session, Vector3f position, BlockState state) { - String identifier = state.toString(); - boolean powered = identifier.contains("mode=compare"); LevelEventPacket levelEventPacket = new LevelEventPacket(); levelEventPacket.setPosition(position); levelEventPacket.setType(LevelEvent.SOUND_CLICK); //TODO: New ID? - levelEventPacket.setData(powered ? 500 : 550); + levelEventPacket.setData(state.getValue(Properties.MODE_COMPARATOR).equals("compare") ? 500 : 550); session.sendUpstreamPacket(levelEventPacket); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/block/GrassPathInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/block/GrassPathInteractionTranslator.java index a25beaa50..d601d5561 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/block/GrassPathInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/block/GrassPathInteractionTranslator.java @@ -29,7 +29,6 @@ import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.packet.LevelSoundEventPacket; import org.geysermc.geyser.level.block.type.BlockState; -import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.sound.BlockSoundInteractionTranslator; import org.geysermc.geyser.translator.sound.SoundTranslator; @@ -39,14 +38,13 @@ public class GrassPathInteractionTranslator implements BlockSoundInteractionTran @Override public void translate(GeyserSession session, Vector3f position, BlockState state) { - String identifier = state.toString(); LevelSoundEventPacket levelSoundEventPacket = new LevelSoundEventPacket(); levelSoundEventPacket.setPosition(position); levelSoundEventPacket.setBabySound(false); levelSoundEventPacket.setRelativeVolumeDisabled(false); levelSoundEventPacket.setIdentifier(":"); levelSoundEventPacket.setSound(SoundEvent.ITEM_USE_ON); - levelSoundEventPacket.setExtraData(session.getBlockMappings().getBedrockBlockId(BlockRegistries.JAVA_IDENTIFIER_TO_ID.get().getInt(identifier))); + levelSoundEventPacket.setExtraData(session.getBlockMappings().getBedrockBlockId(state.javaId())); session.sendUpstreamPacket(levelSoundEventPacket); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/block/HoeInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/block/HoeInteractionTranslator.java index 1a583ab8a..f30aa7493 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/block/HoeInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/block/HoeInteractionTranslator.java @@ -29,7 +29,6 @@ import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.packet.LevelSoundEventPacket; import org.geysermc.geyser.level.block.type.BlockState; -import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.sound.BlockSoundInteractionTranslator; import org.geysermc.geyser.translator.sound.SoundTranslator; @@ -39,14 +38,13 @@ public class HoeInteractionTranslator implements BlockSoundInteractionTranslator @Override public void translate(GeyserSession session, Vector3f position, BlockState state) { - String identifier = state.toString(); LevelSoundEventPacket levelSoundEventPacket = new LevelSoundEventPacket(); levelSoundEventPacket.setPosition(position); levelSoundEventPacket.setBabySound(false); levelSoundEventPacket.setRelativeVolumeDisabled(false); levelSoundEventPacket.setIdentifier(":"); levelSoundEventPacket.setSound(SoundEvent.ITEM_USE_ON); - levelSoundEventPacket.setExtraData(session.getBlockMappings().getBedrockBlockId(BlockRegistries.JAVA_IDENTIFIER_TO_ID.get().getInt(identifier))); + levelSoundEventPacket.setExtraData(session.getBlockMappings().getBedrockBlockId(state.javaId())); session.sendUpstreamPacket(levelSoundEventPacket); } } 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 fd045739c..2f596f6aa 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 @@ -28,6 +28,7 @@ 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.packet.LevelEventPacket; +import org.geysermc.geyser.level.block.property.Properties; import org.geysermc.geyser.level.block.type.BlockState; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.sound.BlockSoundInteractionTranslator; @@ -38,12 +39,10 @@ public class LeverSoundInteractionTranslator implements BlockSoundInteractionTra @Override public void translate(GeyserSession session, Vector3f position, BlockState state) { - String identifier = state.toString(); - boolean powered = identifier.contains("powered=true"); LevelEventPacket levelEventPacket = new LevelEventPacket(); levelEventPacket.setPosition(position); levelEventPacket.setType(LevelEvent.SOUND_CLICK); - levelEventPacket.setData(powered ? 600 : 500); + levelEventPacket.setData(state.getValue(Properties.POWERED) ? 600 : 500); session.sendUpstreamPacket(levelEventPacket); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/block/OpenableSoundInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/block/OpenableSoundInteractionTranslator.java index 93d55ca33..05a4804af 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/block/OpenableSoundInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/block/OpenableSoundInteractionTranslator.java @@ -26,10 +26,9 @@ 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.SoundEvent; -import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket; import org.cloudburstmc.protocol.bedrock.packet.LevelSoundEventPacket; +import org.geysermc.geyser.level.block.property.Properties; import org.geysermc.geyser.level.block.type.BlockState; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.sound.BlockSoundInteractionTranslator; @@ -42,7 +41,7 @@ public class OpenableSoundInteractionTranslator implements BlockSoundInteraction public void translate(GeyserSession session, Vector3f position, BlockState state) { String identifier = state.toString(); if (identifier.contains("iron")) return; - SoundEvent event = getSound(identifier.contains("open=true"), identifier); + SoundEvent event = getSound(state.getValue(Properties.OPEN, false), identifier); LevelSoundEventPacket levelSoundEventPacket = new LevelSoundEventPacket(); levelSoundEventPacket.setPosition(position.add(0.5, 0.5, 0.5)); levelSoundEventPacket.setBabySound(false); 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 196a66c0a..41b35d0db 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java @@ -67,6 +67,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.ItemSlo import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.ItemStackSlotDisplay; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.TagSlotDisplay; +import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.WithRemainderSlotDisplay; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundContainerClosePacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundPickItemPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundSetCreativeModeSlotPacket; @@ -462,6 +463,9 @@ public class InventoryUtils { } return compositeSlotDisplay.contents().stream().anyMatch(aSlotDisplay -> acceptsAsInput(session, aSlotDisplay, itemStack)); } + if (slotDisplay instanceof WithRemainderSlotDisplay remainderSlotDisplay) { + return acceptsAsInput(session, remainderSlotDisplay.input(), itemStack); + } if (slotDisplay instanceof ItemSlotDisplay itemSlotDisplay) { return itemStack.getJavaId() == itemSlotDisplay.item(); } From 74b25ea3a5f5e1e4ad45805140553b4c539837ee Mon Sep 17 00:00:00 2001 From: Tim203 <mctim203@gmail.com> Date: Wed, 30 Oct 2024 10:41:00 +0100 Subject: [PATCH 034/165] Use deferred where needed instead of a load method on all registries (#5112) * Use deferred where needed instead of a load method on all registries * We don't have to load the registries, they're now safe to use for tests * Renamed the deferred registries --- .../java/org/geysermc/geyser/GeyserImpl.java | 1 - .../AbstractMappedDeferredRegistry.java | 103 +++++++++++ .../geyser/registry/BlockRegistries.java | 20 +- .../geyser/registry/DeferredRegistry.java | 72 ++----- .../geyser/registry/ListDeferredRegistry.java | 175 ++++++++++++++++++ .../geyser/registry/ListRegistry.java | 12 ++ .../geysermc/geyser/registry/Registries.java | 55 +++--- .../geysermc/geyser/registry/Registry.java | 15 +- .../registry/SimpleDeferredRegistry.java | 119 ++++++++++++ .../SimpleMappedDeferredRegistry.java | 120 ++++++++++++ .../registry/VersionedDeferredRegistry.java | 114 ++++++++++++ .../registry/loader/RegistryLoaderHolder.java | 33 ---- .../network/util/GeyserMockContext.java | 6 - 13 files changed, 689 insertions(+), 156 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/registry/AbstractMappedDeferredRegistry.java create mode 100644 core/src/main/java/org/geysermc/geyser/registry/ListDeferredRegistry.java create mode 100644 core/src/main/java/org/geysermc/geyser/registry/SimpleDeferredRegistry.java create mode 100644 core/src/main/java/org/geysermc/geyser/registry/SimpleMappedDeferredRegistry.java create mode 100644 core/src/main/java/org/geysermc/geyser/registry/VersionedDeferredRegistry.java delete mode 100644 core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoaderHolder.java diff --git a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java index f679b412c..0a8222f8d 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java @@ -236,7 +236,6 @@ public class GeyserImpl implements GeyserApi, EventRegistrar { Both the block registries and the common registries depend on each other, so maintaining this order is crucial for Geyser to load. */ - BlockRegistries.load(); Registries.load(); BlockRegistries.populate(); Registries.populate(); diff --git a/core/src/main/java/org/geysermc/geyser/registry/AbstractMappedDeferredRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/AbstractMappedDeferredRegistry.java new file mode 100644 index 000000000..2506bb873 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/registry/AbstractMappedDeferredRegistry.java @@ -0,0 +1,103 @@ +/* + * Copyright (c) 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; + +import org.checkerframework.checker.nullness.qual.Nullable; +import org.geysermc.geyser.registry.loader.RegistryLoader; + +import java.util.Map; +import java.util.Optional; +import java.util.function.Function; +import java.util.function.Supplier; + +public abstract class AbstractMappedDeferredRegistry<K, V, M extends Map<K, V>, R extends AbstractMappedRegistry<K, V, M>> extends DeferredRegistry<M, R> { + protected <I> AbstractMappedDeferredRegistry(Function<RegistryLoader<I, M>, R> registryLoader, RegistryLoader<I, M> deferredLoader) { + super(registryLoader, deferredLoader); + } + + protected <I> AbstractMappedDeferredRegistry(Function<RegistryLoader<I, M>, R> registryLoader, Supplier<RegistryLoader<I, M>> deferredLoader) { + super(registryLoader, deferredLoader); + } + + protected <I> AbstractMappedDeferredRegistry(I input, RegistryInitializer<M, R> registryInitializer, RegistryLoader<I, M> deferredLoader) { + super(input, registryInitializer, deferredLoader); + } + + protected <I> AbstractMappedDeferredRegistry(I input, RegistryInitializer<M, R> registryInitializer, Supplier<RegistryLoader<I, M>> deferredLoader) { + super(input, registryInitializer, deferredLoader); + } + + /** + * Returns the value registered by the given key. + * + * @param key the key + * @return the value registered by the given key. + */ + public @Nullable V get(K key) { + return get().get(key); + } + + /** + * Returns and maps the value by the given key if present. + * + * @param key the key + * @param mapper the mapper + * @param <U> the type + * @return the mapped value from the given key if present + */ + public <U> Optional<U> map(K key, Function<? super V, ? extends U> mapper) { + V value = this.get(key); + if (value == null) { + return Optional.empty(); + } else { + return Optional.ofNullable(mapper.apply(value)); + } + } + + /** + * Returns the value registered by the given key or the default value + * specified if null. + * + * @param key the key + * @param defaultValue the default value + * @return the value registered by the given key or the default value + * specified if null. + */ + public V getOrDefault(K key, V defaultValue) { + return get().getOrDefault(key, defaultValue); + } + + /** + * Registers a new value into this registry with the given key. + * + * @param key the key + * @param value the value + * @return a new value into this registry with the given key. + */ + public V register(K key, V value) { + return get().put(key, value); + } +} 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 b7c5e2d07..521d67542 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -69,7 +69,7 @@ public class BlockRegistries { /** * A mapped registry containing which holds block IDs to its {@link BlockCollision}. */ - public static final ListRegistry<BlockCollision> COLLISIONS = ListRegistry.create(Pair.of("org.geysermc.geyser.translator.collision.CollisionRemapper", "mappings/collisions.nbt"), CollisionRegistryLoader::new); + public static final ListDeferredRegistry<BlockCollision> COLLISIONS = ListDeferredRegistry.create(Pair.of("org.geysermc.geyser.translator.collision.CollisionRemapper", "mappings/collisions.nbt"), CollisionRegistryLoader::new); /** * A registry which stores Java IDs to {@link Block}, containing miscellaneous information about @@ -130,23 +130,6 @@ public class BlockRegistries { */ public static final SimpleMappedRegistry<String, CustomSkull> CUSTOM_SKULLS = SimpleMappedRegistry.create(RegistryLoaders.empty(Object2ObjectOpenHashMap::new)); - public static void load() { - BLOCKS.load(); - BLOCK_STATES.load(); - // collisions are loaded later, because they are initialized later - JAVA_BLOCKS.load(); - JAVA_IDENTIFIER_TO_ID.load(); - WATERLOGGED.load(); - INTERACTIVE.load(); - INTERACTIVE_MAY_BUILD.load(); - CUSTOM_BLOCKS.load(); - CUSTOM_BLOCK_STATE_OVERRIDES.load(); - NON_VANILLA_BLOCK_STATE_OVERRIDES.load(); - CUSTOM_BLOCK_ITEM_OVERRIDES.load(); - EXTENDED_COLLISION_BOXES.load(); - CUSTOM_SKULLS.load(); - } - public static void populate() { Blocks.VAULT.javaId(); // FIXME CustomSkullRegistryPopulator.populate(); @@ -160,5 +143,4 @@ public class BlockRegistries { BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.INIT_BEDROCK); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.POST_INIT); } - } diff --git a/core/src/main/java/org/geysermc/geyser/registry/DeferredRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/DeferredRegistry.java index ce77261ae..f4273edea 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/DeferredRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/DeferredRegistry.java @@ -43,32 +43,36 @@ import java.util.function.Supplier; * * @param <M> the value being held by the registry */ -public final class DeferredRegistry<M> implements IRegistry<M> { - private final Registry<M> backingRegistry; +class DeferredRegistry<M, R extends IRegistry<M>> implements IRegistry<M> { + private final R backingRegistry; private final Supplier<M> loader; private boolean loaded; - private <I> DeferredRegistry(Function<RegistryLoader<I, M>, Registry<M>> registryLoader, RegistryLoader<I, M> deferredLoader) { + protected <I> DeferredRegistry(Function<RegistryLoader<I, M>, R> registryLoader, RegistryLoader<I, M> deferredLoader) { this.backingRegistry = registryLoader.apply(RegistryLoaders.uninitialized()); this.loader = () -> deferredLoader.load(null); } - private <I> DeferredRegistry(Function<RegistryLoader<I, M>, Registry<M>> registryLoader, Supplier<RegistryLoader<I, M>> deferredLoader) { + protected <I> DeferredRegistry(Function<RegistryLoader<I, M>, R> registryLoader, Supplier<RegistryLoader<I, M>> deferredLoader) { this.backingRegistry = registryLoader.apply(RegistryLoaders.uninitialized()); this.loader = () -> deferredLoader.get().load(null); } - private <I> DeferredRegistry(I input, RegistryInitializer<M> registryInitializer, RegistryLoader<I, M> deferredLoader) { + protected <I> DeferredRegistry(I input, RegistryInitializer<M, R> registryInitializer, RegistryLoader<I, M> deferredLoader) { this.backingRegistry = registryInitializer.initialize(input, RegistryLoaders.uninitialized()); this.loader = () -> deferredLoader.load(input); } - private <I> DeferredRegistry(I input, RegistryInitializer<M> registryInitializer, Supplier<RegistryLoader<I, M>> deferredLoader) { + protected <I> DeferredRegistry(I input, RegistryInitializer<M, R> registryInitializer, Supplier<RegistryLoader<I, M>> deferredLoader) { this.backingRegistry = registryInitializer.initialize(input, RegistryLoaders.uninitialized()); this.loader = () -> deferredLoader.get().load(input); } + protected R backingRegistry() { + return this.backingRegistry; + } + /** * Gets the underlying value held by this registry. * @@ -119,64 +123,12 @@ public final class DeferredRegistry<M> implements IRegistry<M> { return this.loaded; } - /** - * Creates a new deferred registry. - * - * @param registryLoader the registry loader - * @param deferredLoader the deferred loader - * @param <I> the input type - * @param <M> the registry type - * @return the new deferred registry - */ - public static <I, M> DeferredRegistry<M> create(Function<RegistryLoader<I, M>, Registry<M>> registryLoader, RegistryLoader<I, M> deferredLoader) { - return new DeferredRegistry<>(registryLoader, deferredLoader); - } - - /** - * Creates a new deferred registry. - * - * @param registryLoader the registry loader - * @param deferredLoader the deferred loader - * @param <I> the input type - * @param <M> the registry type - * @return the new deferred registry - */ - public static <I, M> DeferredRegistry<M> create(Function<RegistryLoader<I, M>, Registry<M>> registryLoader, Supplier<RegistryLoader<I, M>> deferredLoader) { - return new DeferredRegistry<>(registryLoader, deferredLoader); - } - - /** - * Creates a new deferred registry. - * - * @param registryInitializer the registry initializer - * @param deferredLoader the deferred loader - * @param <I> the input type - * @param <M> the registry type - * @return the new deferred registry - */ - public static <I, M> DeferredRegistry<M> create(I input, RegistryInitializer<M> registryInitializer, RegistryLoader<I, M> deferredLoader) { - return new DeferredRegistry<>(input, registryInitializer, deferredLoader); - } - - /** - * Creates a new deferred registry. - * - * @param registryInitializer the registry initializer - * @param deferredLoader the deferred loader - * @param <I> the input type - * @param <M> the registry type - * @return the new deferred registry - */ - public static <I, M> DeferredRegistry<M> create(I input, RegistryInitializer<M> registryInitializer, Supplier<RegistryLoader<I, M>> deferredLoader) { - return new DeferredRegistry<>(input, registryInitializer, deferredLoader); - } - /** * A registry initializer. * * @param <M> the registry type */ - interface RegistryInitializer<M> { + public interface RegistryInitializer<M, R extends IRegistry<M>> { /** * Initializes the registry. @@ -186,6 +138,6 @@ public final class DeferredRegistry<M> implements IRegistry<M> { * @param <I> the input type * @return the initialized registry */ - <I> Registry<M> initialize(I input, RegistryLoader<I, M> registryLoader); + <I> R initialize(I input, RegistryLoader<I, M> registryLoader); } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/ListDeferredRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/ListDeferredRegistry.java new file mode 100644 index 000000000..91dc74eb7 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/registry/ListDeferredRegistry.java @@ -0,0 +1,175 @@ +/* + * Copyright (c) 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; + +import org.checkerframework.checker.nullness.qual.Nullable; +import org.geysermc.geyser.registry.loader.RegistryLoader; + +import java.util.List; +import java.util.function.Function; +import java.util.function.Supplier; + +public class ListDeferredRegistry<V> extends DeferredRegistry<List<V>, ListRegistry<V>> { + protected <I> ListDeferredRegistry(Function<RegistryLoader<I, List<V>>, ListRegistry<V>> registryLoader, RegistryLoader<I, List<V>> deferredLoader) { + super(registryLoader, deferredLoader); + } + + protected <I> ListDeferredRegistry(Function<RegistryLoader<I, List<V>>, ListRegistry<V>> registryLoader, Supplier<RegistryLoader<I, List<V>>> deferredLoader) { + super(registryLoader, deferredLoader); + } + + protected <I> ListDeferredRegistry(I input, RegistryInitializer<List<V>, ListRegistry<V>> registryInitializer, RegistryLoader<I, List<V>> deferredLoader) { + super(input, registryInitializer, deferredLoader); + } + + protected <I> ListDeferredRegistry(I input, RegistryInitializer<List<V>, ListRegistry<V>> registryInitializer, Supplier<RegistryLoader<I, List<V>>> deferredLoader) { + super(input, registryInitializer, deferredLoader); + } + /** + * Returns the value registered by the given index. + * + * @param index the index + * @return the value registered by the given index. + */ + @Nullable + public V get(int index) { + return backingRegistry().get(index); + } + + /** + * Returns the value registered by the given index or the default value + * specified if null. + * + * @param index the index + * @param defaultValue the default value + * @return the value registered by the given key or the default value + * specified if null. + */ + public V getOrDefault(int index, V defaultValue) { + return backingRegistry().getOrDefault(index, defaultValue); + } + + /** + * Registers a new value into this registry with the given index. + * + * @param index the index + * @param value the value + * @return a new value into this registry with the given index. + */ + public V register(int index, V value) { + return backingRegistry().register(index, value); + } + + /** + * Registers a new value into this registry with the given index, even if this value would normally be outside + * the range of a list. + * + * @param index the index + * @param value the value + * @param defaultValue the default value to fill empty spaces in the registry with. + * @return a new value into this registry with the given index. + */ + public V registerWithAnyIndex(int index, V value, V defaultValue) { + return backingRegistry().registerWithAnyIndex(index, value, defaultValue); + } + + /** + * Mark this registry as unsuitable for new additions. The backing list will then be optimized for storage. + */ + public void freeze() { + backingRegistry().freeze(); + } + + /** + * Creates a new deferred registry. + * + * @param registryLoader the registry loader + * @param deferredLoader the deferred loader + * @param <I> the input type + * @return the new deferred registry + */ + public static <I, V> ListDeferredRegistry<V> create(Function<RegistryLoader<I, List<V>>, ListRegistry<V>> registryLoader, RegistryLoader<I, List<V>> deferredLoader) { + return new ListDeferredRegistry<>(registryLoader, deferredLoader); + } + + /** + * Creates a new deferred registry. + * + * @param registryLoader the registry loader + * @param deferredLoader the deferred loader + * @param <I> the input type + * @return the new deferred registry + */ + public static <I, V> ListDeferredRegistry<V> create(Function<RegistryLoader<I, List<V>>, ListRegistry<V>> registryLoader, Supplier<RegistryLoader<I, List<V>>> deferredLoader) { + return new ListDeferredRegistry<>(registryLoader, deferredLoader); + } + + /** + * Creates a new deferred registry. + * + * @param registryInitializer the registry initializer + * @param deferredLoader the deferred loader + * @param <I> the input type + * @return the new deferred registry + */ + public static <I, V> ListDeferredRegistry<V> create(I input, RegistryInitializer<List<V>, ListRegistry<V>> registryInitializer, RegistryLoader<I, List<V>> deferredLoader) { + return new ListDeferredRegistry<>(input, registryInitializer, deferredLoader); + } + + /** + * Creates a new deferred registry. + * + * @param registryInitializer the registry initializer + * @param deferredLoader the deferred loader + * @param <I> the input type + * @return the new deferred registry + */ + public static <I, V> ListDeferredRegistry<V> create(I input, RegistryInitializer<List<V>, ListRegistry<V>> registryInitializer, Supplier<RegistryLoader<I, List<V>>> deferredLoader) { + return new ListDeferredRegistry<>(input, registryInitializer, deferredLoader); + } + + /** + * Creates a new deferred registry. + * + * @param deferredLoader the deferred loader + * @param <I> the input type + * @return the new deferred registry + */ + public static <I, V> ListDeferredRegistry<V> create(I input, RegistryLoader<I, List<V>> deferredLoader) { + return create(input, ListRegistry::create, deferredLoader); + } + + /** + * Creates a new deferred registry. + * + * @param deferredLoader the deferred loader + * @param <I> the input type + * @return the new deferred registry + */ + public static <I, V> ListDeferredRegistry<V> create(I input, Supplier<RegistryLoader<I, List<V>>> deferredLoader) { + return create(input, ListRegistry::create, deferredLoader); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/ListRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/ListRegistry.java index 2070d67ae..d1d3d7af0 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/ListRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/ListRegistry.java @@ -140,6 +140,18 @@ public class ListRegistry<M> extends Registry<List<M>> { return new ListRegistry<>(null, registryLoader); } + /** + * Creates a new integer mapped registry with the given {@link RegistryLoader} and input. + * + * @param registryLoader the registry loader + * @param <I> the input + * @param <M> the type value + * @return a new registry with the given RegistryLoader + */ + public static <I, M> ListRegistry<M> create(I input, RegistryLoader<I, List<M>> registryLoader) { + return new ListRegistry<>(input, registryLoader); + } + /** * Creates a new integer mapped registry with the given {@link RegistryLoader} and input. * diff --git a/core/src/main/java/org/geysermc/geyser/registry/Registries.java b/core/src/main/java/org/geysermc/geyser/registry/Registries.java index b86ea3bbf..0d286d5c3 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/Registries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/Registries.java @@ -37,10 +37,18 @@ import org.geysermc.geyser.api.pack.ResourcePack; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.inventory.recipe.GeyserRecipe; import org.geysermc.geyser.item.type.Item; -import org.geysermc.geyser.registry.loader.*; +import org.geysermc.geyser.registry.loader.BiomeIdentifierRegistryLoader; +import org.geysermc.geyser.registry.loader.BlockEntityRegistryLoader; +import org.geysermc.geyser.registry.loader.ParticleTypesRegistryLoader; +import org.geysermc.geyser.registry.loader.PotionMixRegistryLoader; +import org.geysermc.geyser.registry.loader.ProviderRegistryLoader; +import org.geysermc.geyser.registry.loader.RecipeRegistryLoader; +import org.geysermc.geyser.registry.loader.RegistryLoaders; +import org.geysermc.geyser.registry.loader.SoundEventsRegistryLoader; +import org.geysermc.geyser.registry.loader.SoundRegistryLoader; +import org.geysermc.geyser.registry.loader.SoundTranslatorRegistryLoader; import org.geysermc.geyser.registry.populator.ItemRegistryPopulator; import org.geysermc.geyser.registry.populator.PacketRegistryPopulator; -import org.geysermc.geyser.registry.loader.RecipeRegistryLoader; import org.geysermc.geyser.registry.provider.ProviderSupplier; import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.registry.type.ParticleMapping; @@ -56,7 +64,13 @@ import org.geysermc.mcprotocollib.protocol.data.game.level.event.LevelEvent; import org.geysermc.mcprotocollib.protocol.data.game.level.particle.ParticleType; import org.geysermc.mcprotocollib.protocol.data.game.recipe.RecipeType; -import java.util.*; +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.HashSet; +import java.util.IdentityHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; /** * Holds all the common registries in Geyser. @@ -73,7 +87,7 @@ public final class Registries { /** * A registry holding a NbtMap of the known entity identifiers. */ - public static final SimpleRegistry<NbtMap> BEDROCK_ENTITY_IDENTIFIERS = SimpleRegistry.create("bedrock/entity_identifiers.dat", RegistryLoaders.NBT); + public static final SimpleDeferredRegistry<NbtMap> BEDROCK_ENTITY_IDENTIFIERS = SimpleDeferredRegistry.create("bedrock/entity_identifiers.dat", RegistryLoaders.NBT); /** * A registry containing all the Bedrock packet translators. @@ -83,17 +97,17 @@ public final class Registries { /** * A registry holding a NbtMap of all the known biomes. */ - public static final SimpleRegistry<NbtMap> BIOMES_NBT = SimpleRegistry.create("bedrock/biome_definitions.dat", RegistryLoaders.NBT); + public static final SimpleDeferredRegistry<NbtMap> BIOMES_NBT = SimpleDeferredRegistry.create("bedrock/biome_definitions.dat", RegistryLoaders.NBT); /** * A mapped registry which stores Java biome identifiers and their Bedrock biome identifier. */ - public static final SimpleRegistry<Object2IntMap<String>> BIOME_IDENTIFIERS = SimpleRegistry.create("mappings/biomes.json", BiomeIdentifierRegistryLoader::new); + public static final SimpleDeferredRegistry<Object2IntMap<String>> BIOME_IDENTIFIERS = SimpleDeferredRegistry.create("mappings/biomes.json", BiomeIdentifierRegistryLoader::new); /** * A mapped registry which stores a block entity identifier to its {@link BlockEntityTranslator}. */ - public static final SimpleMappedRegistry<BlockEntityType, BlockEntityTranslator> BLOCK_ENTITIES = SimpleMappedRegistry.create("org.geysermc.geyser.translator.level.block.entity.BlockEntity", BlockEntityRegistryLoader::new); + public static final SimpleMappedDeferredRegistry<BlockEntityType, BlockEntityTranslator> BLOCK_ENTITIES = SimpleMappedDeferredRegistry.create("org.geysermc.geyser.translator.level.block.entity.BlockEntity", BlockEntityRegistryLoader::new); /** * A map containing all entity types and their respective Geyser definitions @@ -135,55 +149,50 @@ public final class Registries { * A mapped registry holding the {@link ParticleType} to a corresponding {@link ParticleMapping}, containing various pieces of * data primarily for how Bedrock should handle the particle. */ - public static final SimpleMappedRegistry<ParticleType, ParticleMapping> PARTICLES = SimpleMappedRegistry.create("mappings/particles.json", ParticleTypesRegistryLoader::new); + public static final SimpleMappedDeferredRegistry<ParticleType, ParticleMapping> PARTICLES = SimpleMappedDeferredRegistry.create("mappings/particles.json", ParticleTypesRegistryLoader::new); /** * A registry holding all the potion mixes. */ - public static final VersionedRegistry<Set<PotionMixData>> POTION_MIXES = VersionedRegistry.create(PotionMixRegistryLoader::new); + public static final VersionedDeferredRegistry<Set<PotionMixData>> POTION_MIXES = VersionedDeferredRegistry.create(VersionedRegistry::create, PotionMixRegistryLoader::new); /** * A versioned registry holding all the recipes, with the net ID being the key, and {@link GeyserRecipe} as the value. */ - public static final SimpleMappedRegistry<RecipeType, List<GeyserRecipe>> RECIPES = SimpleMappedRegistry.create("mappings/recipes.nbt", RecipeRegistryLoader::new); + public static final SimpleMappedDeferredRegistry<RecipeType, List<GeyserRecipe>> RECIPES = SimpleMappedDeferredRegistry.create("mappings/recipes.nbt", RecipeRegistryLoader::new); /** * A mapped registry holding {@link ResourcePack}'s with the pack uuid as keys. */ - public static final DeferredRegistry<Map<String, ResourcePack>> RESOURCE_PACKS = DeferredRegistry.create(GeyserImpl.getInstance().packDirectory(), SimpleMappedRegistry::create, RegistryLoaders.RESOURCE_PACKS); + public static final SimpleMappedDeferredRegistry<String, ResourcePack> RESOURCE_PACKS = SimpleMappedDeferredRegistry.create(GeyserImpl.getInstance().packDirectory(), RegistryLoaders.RESOURCE_PACKS); /** * A mapped registry holding sound identifiers to their corresponding {@link SoundMapping}. */ - public static final SimpleMappedRegistry<String, SoundMapping> SOUNDS = SimpleMappedRegistry.create("mappings/sounds.json", SoundRegistryLoader::new); + public static final SimpleMappedDeferredRegistry<String, SoundMapping> SOUNDS = SimpleMappedDeferredRegistry.create("mappings/sounds.json", SoundRegistryLoader::new); /** * A mapped registry holding {@link LevelEvent}s to their corresponding {@link LevelEventTranslator}. */ - public static final SimpleMappedRegistry<LevelEvent, LevelEventTranslator> SOUND_LEVEL_EVENTS = SimpleMappedRegistry.create("mappings/effects.json", SoundEventsRegistryLoader::new); + public static final SimpleMappedDeferredRegistry<LevelEvent, LevelEventTranslator> SOUND_LEVEL_EVENTS = SimpleMappedDeferredRegistry.create("mappings/effects.json", SoundEventsRegistryLoader::new); /** * A mapped registry holding {@link SoundTranslator}s to their corresponding {@link SoundInteractionTranslator}. */ - public static final SimpleMappedRegistry<SoundTranslator, SoundInteractionTranslator<?>> SOUND_TRANSLATORS = SimpleMappedRegistry.create("org.geysermc.geyser.translator.sound.SoundTranslator", SoundTranslatorRegistryLoader::new); + public static final SimpleMappedDeferredRegistry<SoundTranslator, SoundInteractionTranslator<?>> SOUND_TRANSLATORS = SimpleMappedDeferredRegistry.create("org.geysermc.geyser.translator.sound.SoundTranslator", SoundTranslatorRegistryLoader::new); public static void load() { if (loaded) return; loaded = true; - PROVIDERS.load(); + // the following registries are registries that are more complicated than initializing as an empty collection. + // They generally have in common that they either depend on loading a resource file directly or indirectly + // (by using the Items or Blocks class, which loads all the blocks) + BEDROCK_ENTITY_IDENTIFIERS.load(); - BEDROCK_PACKET_TRANSLATORS.load(); BIOMES_NBT.load(); BIOME_IDENTIFIERS.load(); BLOCK_ENTITIES.load(); - ENTITY_DEFINITIONS.load(); - BEDROCK_ENTITY_PROPERTIES.load(); - JAVA_ENTITY_IDENTIFIERS.load(); - JAVA_PACKET_TRANSLATORS.load(); - JAVA_ITEMS.load(); - JAVA_ITEM_IDENTIFIERS.load(); - ITEMS.load(); PARTICLES.load(); // load potion mixes later RECIPES.load(); 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 4e83a3c2e..8a82af053 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/Registry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/Registry.java @@ -27,7 +27,6 @@ package org.geysermc.geyser.registry; import java.util.function.Consumer; import org.geysermc.geyser.registry.loader.RegistryLoader; -import org.geysermc.geyser.registry.loader.RegistryLoaderHolder; /** * A wrapper around a value which is loaded based on the output from the provided @@ -63,9 +62,7 @@ import org.geysermc.geyser.registry.loader.RegistryLoaderHolder; * * @param <M> the value being held by the registry */ -@SuppressWarnings("rawtypes") public abstract class Registry<M> implements IRegistry<M> { - protected RegistryLoaderHolder loaderHolder; protected M mappings; /** @@ -78,17 +75,7 @@ public abstract class Registry<M> implements IRegistry<M> { * @param <I> the input type */ protected <I> Registry(I input, RegistryLoader<I, M> registryLoader) { - this.loaderHolder = new RegistryLoaderHolder<>(input, registryLoader); - } - - public void load() { - // don't load twice - if (this.mappings != null) return; - - var holder = this.loaderHolder; - this.loaderHolder = null; - //noinspection unchecked - this.mappings = (M) holder.registryLoader().load(holder.input()); + this.mappings = registryLoader.load(input); } /** diff --git a/core/src/main/java/org/geysermc/geyser/registry/SimpleDeferredRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/SimpleDeferredRegistry.java new file mode 100644 index 000000000..cdbd985be --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/registry/SimpleDeferredRegistry.java @@ -0,0 +1,119 @@ +/* + * Copyright (c) 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; + +import org.geysermc.geyser.registry.loader.RegistryLoader; + +import java.util.function.Function; +import java.util.function.Supplier; + +public class SimpleDeferredRegistry<V> extends DeferredRegistry<V, SimpleRegistry<V>> { + protected <I> SimpleDeferredRegistry(Function<RegistryLoader<I, V>, SimpleRegistry<V>> registryLoader, RegistryLoader<I, V> deferredLoader) { + super(registryLoader, deferredLoader); + } + + protected <I> SimpleDeferredRegistry(Function<RegistryLoader<I, V>, SimpleRegistry<V>> registryLoader, Supplier<RegistryLoader<I, V>> deferredLoader) { + super(registryLoader, deferredLoader); + } + + protected <I> SimpleDeferredRegistry(I input, RegistryInitializer<V, SimpleRegistry<V>> registryInitializer, RegistryLoader<I, V> deferredLoader) { + super(input, registryInitializer, deferredLoader); + } + + protected <I> SimpleDeferredRegistry(I input, RegistryInitializer<V, SimpleRegistry<V>> registryInitializer, Supplier<RegistryLoader<I, V>> deferredLoader) { + super(input, registryInitializer, deferredLoader); + } + + /** + * Creates a new deferred registry. + * + * @param registryLoader the registry loader + * @param deferredLoader the deferred loader + * @param <I> the input type + * @return the new deferred registry + */ + public static <I, V> SimpleDeferredRegistry<V> create(Function<RegistryLoader<I, V>, SimpleRegistry<V>> registryLoader, RegistryLoader<I, V> deferredLoader) { + return new SimpleDeferredRegistry<>(registryLoader, deferredLoader); + } + + /** + * Creates a new deferred registry. + * + * @param registryLoader the registry loader + * @param deferredLoader the deferred loader + * @param <I> the input type + * @return the new deferred registry + */ + public static <I, V> SimpleDeferredRegistry<V> create(Function<RegistryLoader<I, V>, SimpleRegistry<V>> registryLoader, Supplier<RegistryLoader<I, V>> deferredLoader) { + return new SimpleDeferredRegistry<>(registryLoader, deferredLoader); + } + + /** + * Creates a new deferred registry. + * + * @param registryInitializer the registry initializer + * @param deferredLoader the deferred loader + * @param <I> the input type + * @return the new deferred registry + */ + public static <I, V> SimpleDeferredRegistry<V> create(I input, RegistryInitializer<V, SimpleRegistry<V>> registryInitializer, RegistryLoader<I, V> deferredLoader) { + return new SimpleDeferredRegistry<>(input, registryInitializer, deferredLoader); + } + + /** + * Creates a new deferred registry. + * + * @param registryInitializer the registry initializer + * @param deferredLoader the deferred loader + * @param <I> the input type + * @return the new deferred registry + */ + public static <I, V> SimpleDeferredRegistry<V> create(I input, RegistryInitializer<V, SimpleRegistry<V>> registryInitializer, Supplier<RegistryLoader<I, V>> deferredLoader) { + return new SimpleDeferredRegistry<>(input, registryInitializer, deferredLoader); + } + + /** + * Creates a new deferred registry. + * + * @param deferredLoader the deferred loader + * @param <I> the input type + * @return the new deferred registry + */ + public static <I, V> SimpleDeferredRegistry<V> create(I input, RegistryLoader<I, V> deferredLoader) { + return create(input, SimpleRegistry::create, deferredLoader); + } + + /** + * Creates a new deferred registry. + * + * @param deferredLoader the deferred loader + * @param <I> the input type + * @return the new deferred registry + */ + public static <I, V> SimpleDeferredRegistry<V> create(I input, Supplier<RegistryLoader<I, V>> deferredLoader) { + return create(input, SimpleRegistry::create, deferredLoader); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/SimpleMappedDeferredRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/SimpleMappedDeferredRegistry.java new file mode 100644 index 000000000..6a837c9e0 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/registry/SimpleMappedDeferredRegistry.java @@ -0,0 +1,120 @@ +/* + * Copyright (c) 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; + +import org.geysermc.geyser.registry.loader.RegistryLoader; + +import java.util.Map; +import java.util.function.Function; +import java.util.function.Supplier; + +public class SimpleMappedDeferredRegistry<K, V> extends AbstractMappedDeferredRegistry<K, V, Map<K, V>, SimpleMappedRegistry<K, V>> { + protected <I> SimpleMappedDeferredRegistry(Function<RegistryLoader<I, Map<K, V>>, SimpleMappedRegistry<K, V>> registryLoader, RegistryLoader<I, Map<K, V>> deferredLoader) { + super(registryLoader, deferredLoader); + } + + protected <I> SimpleMappedDeferredRegistry(Function<RegistryLoader<I, Map<K, V>>, SimpleMappedRegistry<K, V>> registryLoader, Supplier<RegistryLoader<I, Map<K, V>>> deferredLoader) { + super(registryLoader, deferredLoader); + } + + protected <I> SimpleMappedDeferredRegistry(I input, RegistryInitializer<Map<K, V>, SimpleMappedRegistry<K, V>> registryInitializer, RegistryLoader<I, Map<K, V>> deferredLoader) { + super(input, registryInitializer, deferredLoader); + } + + protected <I> SimpleMappedDeferredRegistry(I input, RegistryInitializer<Map<K, V>, SimpleMappedRegistry<K, V>> registryInitializer, Supplier<RegistryLoader<I, Map<K, V>>> deferredLoader) { + super(input, registryInitializer, deferredLoader); + } + + /** + * Creates a new deferred registry. + * + * @param registryLoader the registry loader + * @param deferredLoader the deferred loader + * @param <I> the input type + * @return the new deferred registry + */ + public static <I, K, V> SimpleMappedDeferredRegistry<K, V> create(Function<RegistryLoader<I, Map<K, V>>, SimpleMappedRegistry<K, V>> registryLoader, RegistryLoader<I, Map<K, V>> deferredLoader) { + return new SimpleMappedDeferredRegistry<>(registryLoader, deferredLoader); + } + + /** + * Creates a new deferred registry. + * + * @param registryLoader the registry loader + * @param deferredLoader the deferred loader + * @param <I> the input type + * @return the new deferred registry + */ + public static <I, K, V> SimpleMappedDeferredRegistry<K, V> create(Function<RegistryLoader<I, Map<K, V>>, SimpleMappedRegistry<K, V>> registryLoader, Supplier<RegistryLoader<I, Map<K, V>>> deferredLoader) { + return new SimpleMappedDeferredRegistry<>(registryLoader, deferredLoader); + } + + /** + * Creates a new deferred registry. + * + * @param registryInitializer the registry initializer + * @param deferredLoader the deferred loader + * @param <I> the input type + * @return the new deferred registry + */ + public static <I, K, V> SimpleMappedDeferredRegistry<K, V> create(I input, DeferredRegistry.RegistryInitializer<Map<K, V>, SimpleMappedRegistry<K, V>> registryInitializer, RegistryLoader<I, Map<K, V>> deferredLoader) { + return new SimpleMappedDeferredRegistry<>(input, registryInitializer, deferredLoader); + } + + /** + * Creates a new deferred registry. + * + * @param registryInitializer the registry initializer + * @param deferredLoader the deferred loader + * @param <I> the input type + * @return the new deferred registry + */ + public static <I, K, V> SimpleMappedDeferredRegistry<K, V> create(I input, DeferredRegistry.RegistryInitializer<Map<K, V>, SimpleMappedRegistry<K, V>> registryInitializer, Supplier<RegistryLoader<I, Map<K, V>>> deferredLoader) { + return new SimpleMappedDeferredRegistry<>(input, registryInitializer, deferredLoader); + } + + /** + * Creates a new deferred registry. + * + * @param deferredLoader the deferred loader + * @param <I> the input type + * @return the new deferred registry + */ + public static <I, K, V> SimpleMappedDeferredRegistry<K, V> create(I input, RegistryLoader<I, Map<K, V>> deferredLoader) { + return create(input, SimpleMappedRegistry::create, deferredLoader); + } + + /** + * Creates a new deferred registry. + * + * @param deferredLoader the deferred loader + * @param <I> the input type + * @return the new deferred registry + */ + public static <I, K, V> SimpleMappedDeferredRegistry<K, V> create(I input, Supplier<RegistryLoader<I, Map<K, V>>> deferredLoader) { + return create(input, SimpleMappedRegistry::create, deferredLoader); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/VersionedDeferredRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/VersionedDeferredRegistry.java new file mode 100644 index 000000000..6b2f9906b --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/registry/VersionedDeferredRegistry.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 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; + +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.registry.loader.RegistryLoader; + +import java.util.function.Function; +import java.util.function.Supplier; + +public class VersionedDeferredRegistry<V> extends AbstractMappedDeferredRegistry<Integer, V, Int2ObjectMap<V>, VersionedRegistry<V>> { + protected <I> VersionedDeferredRegistry(Function<RegistryLoader<I, Int2ObjectMap<V>>, VersionedRegistry<V>> registryLoader, RegistryLoader<I, Int2ObjectMap<V>> deferredLoader) { + super(registryLoader, deferredLoader); + } + + protected <I> VersionedDeferredRegistry(Function<RegistryLoader<I, Int2ObjectMap<V>>, VersionedRegistry<V>> registryLoader, Supplier<RegistryLoader<I, Int2ObjectMap<V>>> deferredLoader) { + super(registryLoader, deferredLoader); + } + + protected <I> VersionedDeferredRegistry(I input, RegistryInitializer<Int2ObjectMap<V>, VersionedRegistry<V>> registryInitializer, RegistryLoader<I, Int2ObjectMap<V>> deferredLoader) { + super(input, registryInitializer, deferredLoader); + } + + protected <I> VersionedDeferredRegistry(I input, RegistryInitializer<Int2ObjectMap<V>, VersionedRegistry<V>> registryInitializer, Supplier<RegistryLoader<I, Int2ObjectMap<V>>> deferredLoader) { + super(input, registryInitializer, deferredLoader); + } + + /** + * Gets the closest value for the specified version. Only + * returns versions higher up than the specified if one + * does not exist for the given one. Useful in the event + * that you want to get a resource which is guaranteed for + * older versions, but not on newer ones. + * + * @param version the version + * @return the closest value for the specified version + * @throws IllegalArgumentException if no values exist at or above the given version + */ + @NonNull + public V forVersion(int version) { + return backingRegistry().forVersion(version); + } + /** + * Creates a new deferred registry. + * + * @param registryLoader the registry loader + * @param deferredLoader the deferred loader + * @param <I> the input type + * @return the new deferred registry + */ + public static <I, V> VersionedDeferredRegistry<V> create(Function<RegistryLoader<I, Int2ObjectMap<V>>, VersionedRegistry<V>> registryLoader, RegistryLoader<I, Int2ObjectMap<V>> deferredLoader) { + return new VersionedDeferredRegistry<>(registryLoader, deferredLoader); + } + + /** + * Creates a new deferred registry. + * + * @param registryLoader the registry loader + * @param deferredLoader the deferred loader + * @param <I> the input type + * @return the new deferred registry + */ + public static <I, V> VersionedDeferredRegistry<V> create(Function<RegistryLoader<I, Int2ObjectMap<V>>, VersionedRegistry<V>> registryLoader, Supplier<RegistryLoader<I, Int2ObjectMap<V>>> deferredLoader) { + return new VersionedDeferredRegistry<>(registryLoader, deferredLoader); + } + + /** + * Creates a new deferred registry. + * + * @param registryInitializer the registry initializer + * @param deferredLoader the deferred loader + * @param <I> the input type + * @return the new deferred registry + */ + public static <I, V> VersionedDeferredRegistry<V> create(I input, RegistryInitializer<Int2ObjectMap<V>, VersionedRegistry<V>> registryInitializer, RegistryLoader<I, Int2ObjectMap<V>> deferredLoader) { + return new VersionedDeferredRegistry<>(input, registryInitializer, deferredLoader); + } + + /** + * Creates a new deferred registry. + * + * @param registryInitializer the registry initializer + * @param deferredLoader the deferred loader + * @param <I> the input type + * @return the new deferred registry + */ + public static <I, V> VersionedDeferredRegistry<V> create(I input, RegistryInitializer<Int2ObjectMap<V>, VersionedRegistry<V>> registryInitializer, Supplier<RegistryLoader<I, Int2ObjectMap<V>>> deferredLoader) { + return new VersionedDeferredRegistry<>(input, registryInitializer, deferredLoader); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoaderHolder.java b/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoaderHolder.java deleted file mode 100644 index 751cb4ed4..000000000 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoaderHolder.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 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.loader; - -/** - * A holder of the constructor parameters to prevent them from automatically loading, - * and instead load them when the load method is called. - */ -public record RegistryLoaderHolder<I, M>(I input, RegistryLoader<I, M> registryLoader) { -} diff --git a/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/GeyserMockContext.java b/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/GeyserMockContext.java index 1d262d8b8..2b89867fb 100644 --- a/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/GeyserMockContext.java +++ b/core/src/test/java/org/geysermc/geyser/scoreboard/network/util/GeyserMockContext.java @@ -61,12 +61,6 @@ public class GeyserMockContext { try (var geyserImplMock = mockStatic(GeyserImpl.class)) { geyserImplMock.when(GeyserImpl::getInstance).thenReturn(geyserImpl); - // Since Geyser isn't actually loaded, the Registries#init will not be called. - // This means that we manually load the registries we want to use - Registries.ENTITY_DEFINITIONS.load(); - Registries.JAVA_ENTITY_IDENTIFIERS.load(); - Registries.BEDROCK_ENTITY_PROPERTIES.load(); - geyserContext.accept(context); } } From 448c75e8f2ec330893f8669e5ab4b8d5fb7c3121 Mon Sep 17 00:00:00 2001 From: Tjorven Liebe <32434395+Tjorven-Liebe@users.noreply.github.com> Date: Wed, 30 Oct 2024 15:53:43 +0100 Subject: [PATCH 035/165] Fix pulling and placing skulls/heads from creative inventory (#5114) * fix: pulling and placing skulls/heads from creative inventory * fix: getting values of map * fix: correct submodule permalink --- .../registry/populator/Conversion685_671.java | 21 ++++---- .../registry/populator/Conversion712_685.java | 51 +++++++++---------- .../registry/populator/Conversion729_712.java | 1 + .../registry/populator/Conversion748_729.java | 48 +++++++++++++++++ .../populator/ItemRegistryPopulator.java | 10 +--- core/src/main/resources/mappings | 2 +- 6 files changed, 87 insertions(+), 46 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/registry/populator/Conversion748_729.java diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion685_671.java b/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion685_671.java index 0c7f540bf..c72ea64b2 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion685_671.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion685_671.java @@ -46,8 +46,7 @@ public class Conversion685_671 { static GeyserMappingItem remapItem(Item item, GeyserMappingItem mapping) { mapping = Conversion712_685.remapItem(item, mapping); - - String identifer = mapping.getBedrockIdentifier(); + String identifier = mapping.getBedrockIdentifier(); if (NEW_MUSIC_DISCS.contains(item)) { return mapping.withBedrockIdentifier("minecraft:music_disc_otherside"); @@ -59,12 +58,12 @@ public class Conversion685_671 { return mapping.withBedrockIdentifier("minecraft:glass_bottle"); } - if (!NEW_BLOCKS.contains(identifer)) { + if (!NEW_BLOCKS.contains(identifier)) { return mapping; } - if (NEW_CORAL_BLOCKS.contains(identifer)) { - switch (identifer) { + if (NEW_CORAL_BLOCKS.contains(identifier)) { + switch (identifier) { case "minecraft:tube_coral_block" -> { return mapping.withBedrockIdentifier("minecraft:coral_block").withBedrockData(0); } case "minecraft:brain_coral_block" -> { return mapping.withBedrockIdentifier("minecraft:coral_block").withBedrockData(1); } case "minecraft:bubble_coral_block" -> { return mapping.withBedrockIdentifier("minecraft:coral_block").withBedrockData(2); } @@ -78,8 +77,8 @@ public class Conversion685_671 { } } - if (NEW_DOUBLE_PLANTS.contains(identifer)) { - switch (identifer) { + if (NEW_DOUBLE_PLANTS.contains(identifier)) { + switch (identifier) { case "minecraft:sunflower" -> { return mapping.withBedrockIdentifier("minecraft:double_plant").withBedrockData(0); } case "minecraft:lilac" -> { return mapping.withBedrockIdentifier("minecraft:double_plant").withBedrockData(1); } case "minecraft:tall_grass" -> { return mapping.withBedrockIdentifier("minecraft:double_plant").withBedrockData(2); } @@ -89,8 +88,8 @@ public class Conversion685_671 { } } - if (NEW_STONE_BLOCK_SLABS.contains(identifer)) { - switch (identifer) { + if (NEW_STONE_BLOCK_SLABS.contains(identifier)) { + switch (identifier) { case "minecraft:smooth_stone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab").withBedrockData(0); } case "minecraft:sandstone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab").withBedrockData(1); } case "minecraft:petrified_oak_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab").withBedrockData(2); } @@ -102,8 +101,8 @@ public class Conversion685_671 { } } - if (NEW_TALLGRASSES.contains(identifer)) { - switch (identifer) { + if (NEW_TALLGRASSES.contains(identifier)) { + switch (identifier) { case "minecraft:short_grass" -> { return mapping.withBedrockIdentifier("minecraft:tallgrass").withBedrockData(1); } case "minecraft:fern" -> { return mapping.withBedrockIdentifier("minecraft:tallgrass").withBedrockData(2); } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion712_685.java b/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion712_685.java index db715e015..45963cb90 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion712_685.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion712_685.java @@ -33,35 +33,34 @@ public class Conversion712_685 { static GeyserMappingItem remapItem(Item item, GeyserMappingItem mapping) { mapping = Conversion729_712.remapItem(item, mapping); + String identifier = mapping.getBedrockIdentifier(); - String identifer = mapping.getBedrockIdentifier(); - - if (!NEW_BLOCKS.contains(identifer)) { + if (!NEW_BLOCKS.contains(identifier)) { return mapping; } - if (identifer.equals("minecraft:coarse_dirt")) { + if (identifier.equals("minecraft:coarse_dirt")) { return mapping.withBedrockIdentifier("minecraft:dirt").withBedrockData(1); } - if (identifer.equals("minecraft:dandelion")) { + if (identifier.equals("minecraft:dandelion")) { return mapping.withBedrockIdentifier("minecraft:yellow_flower").withBedrockData(0); } - if (identifer.equals("minecraft:red_sand")) { + if (identifier.equals("minecraft:red_sand")) { return mapping.withBedrockIdentifier("minecraft:sand").withBedrockData(1); } - if (NEW_PRISMARINE_BLOCKS.contains(identifer)) { - switch (identifer) { + if (NEW_PRISMARINE_BLOCKS.contains(identifier)) { + switch (identifier) { case "minecraft:prismarine" -> { return mapping.withBedrockIdentifier("minecraft:prismarine").withBedrockData(0); } case "minecraft:dark_prismarine" -> { return mapping.withBedrockIdentifier("minecraft:prismarine").withBedrockData(1); } case "minecraft:prismarine_bricks" -> { return mapping.withBedrockIdentifier("minecraft:prismarine").withBedrockData(2); } } } - if (NEW_SANDSTONE_BLOCKS.contains(identifer)) { - switch (identifer) { + if (NEW_SANDSTONE_BLOCKS.contains(identifier)) { + switch (identifier) { case "minecraft:sandstone" -> { return mapping.withBedrockIdentifier("minecraft:sandstone").withBedrockData(0); } case "minecraft:chiseled_sandstone" -> { return mapping.withBedrockIdentifier("minecraft:sandstone").withBedrockData(1); } case "minecraft:cut_sandstone" -> { return mapping.withBedrockIdentifier("minecraft:sandstone").withBedrockData(2); } @@ -69,8 +68,8 @@ public class Conversion712_685 { } } - if (NEW_RED_SANDSTONE_BLOCKS.contains(identifer)) { - switch (identifer) { + if (NEW_RED_SANDSTONE_BLOCKS.contains(identifier)) { + switch (identifier) { case "minecraft:red_sandstone" -> { return mapping.withBedrockIdentifier("minecraft:red_sandstone").withBedrockData(0); } case "minecraft:chiseled_red_sandstone" -> { return mapping.withBedrockIdentifier("minecraft:red_sandstone").withBedrockData(1); } case "minecraft:cut_red_sandstone" -> { return mapping.withBedrockIdentifier("minecraft:red_sandstone").withBedrockData(2); } @@ -78,8 +77,8 @@ public class Conversion712_685 { } } - if (NEW_QUARTZ_BLOCKS.contains(identifer)) { - switch (identifer) { + if (NEW_QUARTZ_BLOCKS.contains(identifier)) { + switch (identifier) { case "minecraft:quartz_block" -> { return mapping.withBedrockIdentifier("minecraft:quartz_block").withBedrockData(0); } case "minecraft:chiseled_quartz_block" -> { return mapping.withBedrockIdentifier("minecraft:quartz_block").withBedrockData(1); } case "minecraft:quartz_pillar" -> { return mapping.withBedrockIdentifier("minecraft:quartz_block").withBedrockData(2); } @@ -87,8 +86,8 @@ public class Conversion712_685 { } } - if (NEW_STONE_BLOCK_SLABS_2.contains(identifer)) { - switch (identifer) { + if (NEW_STONE_BLOCK_SLABS_2.contains(identifier)) { + switch (identifier) { case "minecraft:red_sandstone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab2").withBedrockData(0); } case "minecraft:purpur_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab2").withBedrockData(1); } case "minecraft:prismarine_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab2").withBedrockData(2); } @@ -100,8 +99,8 @@ public class Conversion712_685 { } } - if (NEW_STONE_BLOCK_SLABS_3.contains(identifer)) { - switch (identifer) { + if (NEW_STONE_BLOCK_SLABS_3.contains(identifier)) { + switch (identifier) { case "minecraft:end_stone_brick_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab3").withBedrockData(0); } case "minecraft:smooth_red_sandstone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab3").withBedrockData(1); } case "minecraft:polished_andesite_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab3").withBedrockData(2); } @@ -113,8 +112,8 @@ public class Conversion712_685 { } } - if (NEW_STONE_BLOCK_SLABS_4.contains(identifer)) { - switch (identifer) { + if (NEW_STONE_BLOCK_SLABS_4.contains(identifier)) { + switch (identifier) { case "minecraft:mossy_stone_brick_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab4").withBedrockData(0); } case "minecraft:smooth_quartz_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab4").withBedrockData(1); } case "minecraft:normal_stone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab4").withBedrockData(2); } @@ -123,8 +122,8 @@ public class Conversion712_685 { } } - if (NEW_MONSTER_EGGS.contains(identifer)) { - switch (identifer) { + if (NEW_MONSTER_EGGS.contains(identifier)) { + switch (identifier) { case "minecraft:infested_stone" -> { return mapping.withBedrockIdentifier("minecraft:monster_egg").withBedrockData(0); } case "minecraft:infested_cobblestone" -> { return mapping.withBedrockIdentifier("minecraft:monster_egg").withBedrockData(1); } case "minecraft:infested_stone_bricks" -> { return mapping.withBedrockIdentifier("minecraft:monster_egg").withBedrockData(2); } @@ -134,8 +133,8 @@ public class Conversion712_685 { } } - if (NEW_STONEBRICK_BLOCKS.contains(identifer)) { - switch (identifer) { + if (NEW_STONEBRICK_BLOCKS.contains(identifier)) { + switch (identifier) { case "minecraft:stone_bricks" -> { return mapping.withBedrockIdentifier("minecraft:stonebrick").withBedrockData(0); } case "minecraft:mossy_stone_bricks" -> { return mapping.withBedrockIdentifier("minecraft:stonebrick").withBedrockData(1); } case "minecraft:cracked_stone_bricks" -> { return mapping.withBedrockIdentifier("minecraft:stonebrick").withBedrockData(2); } @@ -143,8 +142,8 @@ public class Conversion712_685 { } } - if (NEW_ANVILS.contains(identifer)) { - switch (identifer) { + if (NEW_ANVILS.contains(identifier)) { + switch (identifier) { case "minecraft:anvil" -> { return mapping.withBedrockIdentifier("minecraft:anvil").withBedrockData(0); } case "minecraft:chipped_anvil" -> { return mapping.withBedrockIdentifier("minecraft:anvil").withBedrockData(4); } case "minecraft:damaged_anvil" -> { return mapping.withBedrockIdentifier("minecraft:anvil").withBedrockData(8); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion729_712.java b/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion729_712.java index 5d4ebdc47..fbc2233bc 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion729_712.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion729_712.java @@ -16,6 +16,7 @@ public class Conversion729_712 { private static final List<String> NEW_BLOCKS = Stream.of(NEW_PURPUR_BLOCKS, NEW_WALL_BLOCKS, NEW_SPONGE_BLOCKS, NEW_TNT_BLOCKS, STRUCTURE_VOID).flatMap(List::stream).toList(); static GeyserMappingItem remapItem(Item item, GeyserMappingItem mapping) { + mapping = Conversion748_729.remapItem(item, mapping); String identifier = mapping.getBedrockIdentifier(); if (!NEW_BLOCKS.contains(identifier)) { diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion748_729.java b/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion748_729.java new file mode 100644 index 000000000..7a2d1a0cb --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion748_729.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 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; + +import java.util.Map; + +public class Conversion748_729 { + + private static final Map<String, Integer> NEW_PLAYER_HEADS = Map.of("minecraft:skeleton_skull", 0, "minecraft:wither_skeleton_skull", 1, "minecraft:zombie_head", 2, "minecraft:player_head", 3, "minecraft:creeper_head", 4, "minecraft:dragon_head", 5, "minecraft:piglin_head", 6); + + static GeyserMappingItem remapItem(Item item, GeyserMappingItem mapping) { + String identifier = mapping.getBedrockIdentifier(); + + if (NEW_PLAYER_HEADS.containsKey(identifier)) { + return mapping.withBedrockIdentifier("minecraft:skull") + .withBedrockData(NEW_PLAYER_HEADS.get(identifier)); + } + + return mapping; + } + +} 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 0b61c7999..65a35aa50 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 @@ -113,14 +113,8 @@ public class ItemRegistryPopulator { paletteVersions.add(new PaletteVersion("1_20_80", Bedrock_v671.CODEC.getProtocolVersion(), Collections.emptyMap(), Conversion685_671::remapItem)); paletteVersions.add(new PaletteVersion("1_21_0", Bedrock_v685.CODEC.getProtocolVersion(), Collections.emptyMap(), Conversion712_685::remapItem)); paletteVersions.add(new PaletteVersion("1_21_20", Bedrock_v712.CODEC.getProtocolVersion(), Collections.emptyMap(), Conversion729_712::remapItem)); - paletteVersions.add(new PaletteVersion("1_21_30", Bedrock_v729.CODEC.getProtocolVersion())); - paletteVersions.add(new PaletteVersion("1_21_40", Bedrock_v748.CODEC.getProtocolVersion(), Collections.emptyMap(), (item, mapping) -> { - String identifier = item.javaIdentifier(); - if (identifier.endsWith("_head") || identifier.endsWith("_skull")) { - return mapping.withBedrockIdentifier(item.javaIdentifier()); - } - return mapping; - })); + paletteVersions.add(new PaletteVersion("1_21_30", Bedrock_v729.CODEC.getProtocolVersion(), Collections.emptyMap(), Conversion748_729::remapItem)); + paletteVersions.add(new PaletteVersion("1_21_40", Bedrock_v748.CODEC.getProtocolVersion())); GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); diff --git a/core/src/main/resources/mappings b/core/src/main/resources/mappings index 93f207e7e..a6d04157d 160000 --- a/core/src/main/resources/mappings +++ b/core/src/main/resources/mappings @@ -1 +1 @@ -Subproject commit 93f207e7e9d73f58a7c8902f7deda9dcb0524c8e +Subproject commit a6d04157d1866e55e35f2ce3ebde3cf4e007aabf From c34b4b311f960b49c8f606cc80534ed7392ef69d Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Wed, 30 Oct 2024 15:37:10 -0400 Subject: [PATCH 036/165] Clean out debug logging statements --- .../org/geysermc/geyser/network/UpstreamPacketHandler.java | 7 ------- .../entity/player/BedrockPlayerAuthInputTranslator.java | 5 ----- .../protocol/java/JavaRecipeBookAddTranslator.java | 4 ---- .../protocol/java/JavaUpdateRecipesTranslator.java | 5 ----- .../java/entity/player/JavaPlayerPositionTranslator.java | 1 - .../main/java/org/geysermc/geyser/util/InventoryUtils.java | 3 +-- 6 files changed, 1 insertion(+), 24 deletions(-) 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 b797eb811..19e56c8a8 100644 --- a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java @@ -41,7 +41,6 @@ import org.cloudburstmc.protocol.bedrock.packet.ModalFormResponsePacket; import org.cloudburstmc.protocol.bedrock.packet.MovePlayerPacket; import org.cloudburstmc.protocol.bedrock.packet.NetworkSettingsPacket; import org.cloudburstmc.protocol.bedrock.packet.PlayStatusPacket; -import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket; import org.cloudburstmc.protocol.bedrock.packet.RequestNetworkSettingsPacket; import org.cloudburstmc.protocol.bedrock.packet.ResourcePackChunkDataPacket; import org.cloudburstmc.protocol.bedrock.packet.ResourcePackChunkRequestPacket; @@ -65,7 +64,6 @@ import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.PendingMicrosoftAuthentication; -import org.geysermc.geyser.text.ChatColor; import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.util.LoginEncryptionUtils; import org.geysermc.geyser.util.MathUtils; @@ -96,11 +94,6 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { } private PacketSignal translateAndDefault(BedrockPacket packet) { - if (packet instanceof PlayerAuthInputPacket) { - //System.out.println(packet); - } else { - System.out.println(ChatColor.toANSI(ChatColor.GREEN) + packet + ChatColor.ANSI_RESET); - } Registries.BEDROCK_PACKET_TRANSLATORS.translate(packet.getClass(), packet, session); return PacketSignal.HANDLED; // PacketSignal.UNHANDLED will log a WARN publicly } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java index a366a5b69..a07ebe04a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java @@ -66,14 +66,9 @@ import java.util.Set; @Translator(packet = PlayerAuthInputPacket.class) public final class BedrockPlayerAuthInputTranslator extends PacketTranslator<PlayerAuthInputPacket> { - private Set<PlayerAuthInputData> data = Set.of(); @Override public void translate(GeyserSession session, PlayerAuthInputPacket packet) { - if (!data.equals(packet.getInputData())) { - System.out.println(packet.getInputData()); - this.data = packet.getInputData(); - } SessionPlayerEntity entity = session.getPlayerEntity(); boolean wasJumping = session.getInputCache().wasJumping(); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java index 182a1b7d5..5cc2e3063 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java @@ -84,7 +84,6 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec @Override public void translate(GeyserSession session, ClientboundRecipeBookAddPacket packet) { - System.out.println(packet); int netId = session.getLastRecipeNetId().get(); Int2ObjectMap<List<String>> javaToBedrockRecipeIds = session.getJavaToBedrockRecipeIds(); Int2ObjectMap<GeyserRecipe> geyserRecipes = session.getCraftingRecipes(); @@ -179,12 +178,10 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec } javaToBedrockRecipeIds.put(contents.id(), bedrockRecipeIds); session.getSmithingRecipes().add(new GeyserSmithingRecipe(smithingRecipe)); - System.out.println(new GeyserSmithingRecipe(smithingRecipe)); } } } - //System.out.println(craftingDataPacket); session.sendUpstreamPacket(craftingDataPacket); session.sendUpstreamPacket(recipesPacket); session.getLastRecipeNetId().set(netId); @@ -301,7 +298,6 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec } if (complexInputs) { - System.out.println(inputs); long size = 1; // See how big a cartesian product will get without creating one (Guava throws an error; not really ideal) for (List<ItemDescriptorWithCount> list : inputs) { 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 9f53a9af4..ad67da81e 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 @@ -57,14 +57,12 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.Clientbound import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundUpdateRecipesPacket.SelectableRecipe; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.UUID; -import java.util.stream.Collectors; /** * Used to send all valid recipes from Java to Bedrock. @@ -103,7 +101,6 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator<ClientboundUpd public void translate(GeyserSession session, ClientboundUpdateRecipesPacket packet) { int netId = session.getLastRecipeNetId().get(); CraftingDataPacket craftingDataPacket = new CraftingDataPacket(); - System.out.println(packet); boolean oldSmithingTable; int[] smithingBase = packet.getItemSets().get(SMITHING_BASE); @@ -115,8 +112,6 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator<ClientboundUpd addSmithingTransformRecipes(session, craftingDataPacket.getCraftingData()); netId = session.getLastRecipeNetId().get(); // Was updated in the above method. } else { - System.out.println(Arrays.stream(smithingTemplate).mapToObj(i -> Registries.JAVA_ITEMS.get(i).javaIdentifier()).collect(Collectors.joining(" "))); - System.out.println(Arrays.stream(smithingAddition).mapToObj(i -> Registries.JAVA_ITEMS.get(i).javaIdentifier()).collect(Collectors.joining(" "))); oldSmithingTable = false; // BDS sends armor trim templates and materials before the CraftingDataPacket TrimDataPacket trimDataPacket = new TrimDataPacket(); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java index 89e8eff82..ca1b95997 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java @@ -47,7 +47,6 @@ public class JavaPlayerPositionTranslator extends PacketTranslator<ClientboundPl @Override public void translate(GeyserSession session, ClientboundPlayerPositionPacket packet) { - System.out.println(packet); if (!session.isLoggedIn()) return; 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 41b35d0db..be357cebd 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java @@ -519,7 +519,7 @@ public class InventoryUtils { } } - if (!ingredients.equals(mirroredIngredients) || + if (ingredients.equals(mirroredIngredients) || !testShapedRecipe(session, mirroredIngredients, inventoryGetter, gridDimensions, firstRow, height, firstCol, width)) { continue; } @@ -551,7 +551,6 @@ public class InventoryUtils { } } } - System.out.println("Found existing match for item: " + recipe); return recipe; } return null; From b3e57fd4653282efbd2ed84f7bff3cb9f92273da Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Wed, 30 Oct 2024 20:11:34 -0400 Subject: [PATCH 037/165] Indicate support for Bedrock 1.21.43 --- README.md | 2 +- .../main/java/org/geysermc/geyser/network/GameProtocol.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 3e99a96a7..fedb5bb96 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,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! ## Supported Versions -Geyser is currently supporting Minecraft Bedrock 1.20.80 - 1.21.41 and Minecraft Java 1.21/1.21.1. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). +Geyser is currently supporting Minecraft Bedrock 1.20.80 - 1.21.43 and Minecraft Java 1.21/1.21.1. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). ## Setting Up Take a look [here](https://geysermc.org/wiki/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 c39629917..464edd487 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -52,7 +52,7 @@ public final class GameProtocol { * release of the game that Geyser supports. */ public static final BedrockCodec DEFAULT_BEDROCK_CODEC = CodecProcessor.processCodec(Bedrock_v748.CODEC.toBuilder() - .minecraftVersion("1.21.41") + .minecraftVersion("1.21.43") .build()); /** @@ -83,7 +83,7 @@ public final class GameProtocol { .minecraftVersion("1.21.30/1.21.31") .build())); SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC.toBuilder() - .minecraftVersion("1.21.40/1.21.41") + .minecraftVersion("1.21.40/1.21.41/1.21.43") .build()); } From 37b9e6591ee15471f27d025b75f43e5e435f1032 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Wed, 30 Oct 2024 20:25:57 -0400 Subject: [PATCH 038/165] Re-enable testing --- core/build.gradle.kts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index ff1de4dc0..b0ea5fdf6 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -6,10 +6,6 @@ plugins { id("io.freefair.lombok") } -tasks.test { - enabled = false -} - dependencies { constraints { implementation(libs.raknet) // Ensure protocol does not override the RakNet version From 4588f341ec2cc484a3bb3c1e0b1acfd90aa2ef8a Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Wed, 30 Oct 2024 20:40:34 -0400 Subject: [PATCH 039/165] Fix test --- .../scoreboard/network/ScoreboardIssueTests.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java b/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java index 17ad7f3d3..7ab518f1d 100644 --- a/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java +++ b/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java @@ -25,14 +25,6 @@ package org.geysermc.geyser.scoreboard.network; -import static org.geysermc.geyser.scoreboard.network.util.AssertUtils.assertNextPacket; -import static org.geysermc.geyser.scoreboard.network.util.AssertUtils.assertNextPacketMatch; -import static org.geysermc.geyser.scoreboard.network.util.AssertUtils.assertNextPacketType; -import static org.geysermc.geyser.scoreboard.network.util.AssertUtils.assertNoNextPacket; -import static org.geysermc.geyser.scoreboard.network.util.GeyserMockContextScoreboard.mockContextScoreboard; -import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; -import static org.junit.jupiter.api.Assertions.assertEquals; - import net.kyori.adventure.text.Component; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.packet.AddEntityPacket; @@ -75,6 +67,11 @@ import java.util.EnumSet; import java.util.Optional; import java.util.UUID; +import static org.geysermc.geyser.scoreboard.network.util.AssertUtils.*; +import static org.geysermc.geyser.scoreboard.network.util.GeyserMockContextScoreboard.mockContextScoreboard; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; + /** * Tests for issues reported on GitHub. */ @@ -157,7 +154,7 @@ public class ScoreboardIssueTests { new ClientboundPlayerInfoUpdatePacket( EnumSet.of(PlayerListEntryAction.ADD_PLAYER, PlayerListEntryAction.UPDATE_LISTED), new PlayerListEntry[] { - new PlayerListEntry(npcUuid, new GameProfile(npcUuid, "1297"), false, 0, GameMode.SURVIVAL, null, null, 0, null, null) + new PlayerListEntry(npcUuid, new GameProfile(npcUuid, "1297"), false, 0, GameMode.SURVIVAL, null, 0, null, 0, null, null) })); //todo we don't have to remove an entry that was never in the playerlist in the first place From faf663d3cd235d129dadf86bdab2e18ec2acedb2 Mon Sep 17 00:00:00 2001 From: Tim203 <mctim203@gmail.com> Date: Thu, 31 Oct 2024 09:30:01 +0100 Subject: [PATCH 040/165] Check if objective is null and made scoreboard errors player-specific --- .../org/geysermc/geyser/scoreboard/Scoreboard.java | 2 +- .../java/scoreboard/JavaResetScorePacket.java | 14 ++++++++++++++ .../java/scoreboard/JavaSetScoreTranslator.java | 11 ++++------- 3 files changed, 19 insertions(+), 8 deletions(-) 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 6e0867ddc..3d3bfb48d 100644 --- a/core/src/main/java/org/geysermc/geyser/scoreboard/Scoreboard.java +++ b/core/src/main/java/org/geysermc/geyser/scoreboard/Scoreboard.java @@ -178,7 +178,7 @@ public final class Scoreboard { Team team = teams.get(teamName); if (team != null) { if (SHOW_SCOREBOARD_LOGS) { - logger.info(GeyserLocale.getLocaleStringLog("geyser.network.translator.team.failed_overrides", teamName)); + logger.info("Ignoring team %s for %s. It overrides without removing old team.".formatted(teamName, session.javaUsername())); } 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 index cf688bbfd..72dcd4062 100644 --- 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 @@ -25,6 +25,8 @@ package org.geysermc.geyser.translator.protocol.java.scoreboard; +import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.scoreboard.Objective; import org.geysermc.geyser.scoreboard.Scoreboard; import org.geysermc.geyser.scoreboard.ScoreboardUpdater; @@ -36,6 +38,10 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.scoreboard. @Translator(packet = ClientboundResetScorePacket.class) public class JavaResetScorePacket extends PacketTranslator<ClientboundResetScorePacket> { + private static final boolean SHOW_SCOREBOARD_LOGS = Boolean.parseBoolean(System.getProperty("Geyser.ShowScoreboardLogs", "true")); + + private final GeyserLogger logger = GeyserImpl.getInstance().getLogger(); + @Override public void translate(GeyserSession session, ClientboundResetScorePacket packet) { WorldCache worldCache = session.getWorldCache(); @@ -47,6 +53,14 @@ public class JavaResetScorePacket extends PacketTranslator<ClientboundResetScore scoreboard.resetPlayerScores(packet.getOwner()); } else { Objective objective = scoreboard.getObjective(packet.getObjective()); + if (objective == null) { + if (SHOW_SCOREBOARD_LOGS) { + logger.info(String.format( + "Tried to reset score %s for %s without the existence of its requested objective %s", + packet.getOwner(), session.javaUsername(), packet.getObjective())); + } + return; + } objective.removeScore(packet.getOwner()); } 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 989f0f2cb..c7159041b 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 @@ -32,7 +32,6 @@ 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.text.GeyserLocale; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.scoreboard.ClientboundSetScorePacket; @@ -41,11 +40,7 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.scoreboard. public class JavaSetScoreTranslator extends PacketTranslator<ClientboundSetScorePacket> { private static final boolean SHOW_SCOREBOARD_LOGS = Boolean.parseBoolean(System.getProperty("Geyser.ShowScoreboardLogs", "true")); - private final GeyserLogger logger; - - public JavaSetScoreTranslator() { - logger = GeyserImpl.getInstance().getLogger(); - } + private final GeyserLogger logger = GeyserImpl.getInstance().getLogger(); @Override public void translate(GeyserSession session, ClientboundSetScorePacket packet) { @@ -56,7 +51,9 @@ public class JavaSetScoreTranslator extends PacketTranslator<ClientboundSetScore Objective objective = scoreboard.getObjective(packet.getObjective()); if (objective == null) { if (SHOW_SCOREBOARD_LOGS) { - logger.info(GeyserLocale.getLocaleStringLog("geyser.network.translator.score.failed_objective", packet.getObjective())); + logger.info(String.format( + "Tried to update score %s for %s without the existence of its requested objective %s", + packet.getOwner(), session.javaUsername(), packet.getObjective())); } return; } From 6cc2aa3697c4ec7dd822ef7839a0fe3b460d54e1 Mon Sep 17 00:00:00 2001 From: Eclipse <eclipse@eclipseisoffline.xyz> Date: Thu, 31 Oct 2024 22:52:26 +0000 Subject: [PATCH 041/165] Goat horns and item cooldowns for 1.21.2 (#5102) Co-authored-by: Camotoy <20743703+Camotoy@users.noreply.github.com> --- .../inventory/item/GeyserInstrument.java | 166 ++++++++++++++++++ .../geyser/item/enchantment/Enchantment.java | 4 +- .../geysermc/geyser/item/type/ArrowItem.java | 5 +- .../geyser/item/type/CompassItem.java | 10 +- .../geyser/item/type/FilledMapItem.java | 5 +- .../geyser/item/type/GoatHornItem.java | 40 ++++- .../org/geysermc/geyser/item/type/Item.java | 4 +- .../geyser/item/type/OminousBottleItem.java | 9 +- .../geysermc/geyser/item/type/PotionItem.java | 11 +- .../geyser/item/type/TippedArrowItem.java | 5 +- .../geysermc/geyser/level/JukeboxSong.java | 12 +- .../geyser/session/cache/RegistryCache.java | 3 + .../geyser/session/cache/WorldCache.java | 28 ++- .../cache/registry/JavaRegistries.java | 2 + .../translator/item/ItemTranslator.java | 4 +- ...BedrockInventoryTransactionTranslator.java | 33 ++-- .../java/level/JavaCooldownTranslator.java | 9 +- .../translator/text/MessageTranslator.java | 21 +++ .../org/geysermc/geyser/util/SoundUtils.java | 15 ++ 19 files changed, 320 insertions(+), 66 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/inventory/item/GeyserInstrument.java diff --git a/core/src/main/java/org/geysermc/geyser/inventory/item/GeyserInstrument.java b/core/src/main/java/org/geysermc/geyser/inventory/item/GeyserInstrument.java new file mode 100644 index 000000000..9983a8e90 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/inventory/item/GeyserInstrument.java @@ -0,0 +1,166 @@ +/* + * Copyright (c) 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.inventory.item; + +import net.kyori.adventure.key.Key; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.cloudburstmc.nbt.NbtMap; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.session.cache.registry.JavaRegistry; +import org.geysermc.geyser.session.cache.registry.RegistryEntryContext; +import org.geysermc.geyser.translator.text.MessageTranslator; +import org.geysermc.geyser.util.MinecraftKey; +import org.geysermc.geyser.util.SoundUtils; +import org.geysermc.mcprotocollib.protocol.data.game.Holder; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.Instrument; +import org.geysermc.mcprotocollib.protocol.data.game.level.sound.BuiltinSound; + +import java.util.Locale; + +public interface GeyserInstrument { + + static GeyserInstrument read(RegistryEntryContext context) { + NbtMap data = context.data(); + String soundEvent = SoundUtils.readSoundEvent(data, "instrument " + context.id()); + float range = data.getFloat("range"); + String description = MessageTranslator.deserializeDescriptionForTooltip(context.session(), data); + BedrockInstrument bedrockInstrument = BedrockInstrument.getByJavaIdentifier(context.id()); + return new GeyserInstrument.Impl(soundEvent, range, description, bedrockInstrument); + } + + String soundEvent(); + + float range(); + + /** + * In Bedrock format + */ + String description(); + + BedrockInstrument bedrockInstrument(); + + /** + * @return the ID of the Bedrock counterpart for this instrument. If there is none ({@link #bedrockInstrument()} is null), then -1 is returned. + */ + default int bedrockId() { + BedrockInstrument bedrockInstrument = bedrockInstrument(); + if (bedrockInstrument != null) { + return bedrockInstrument.ordinal(); + } + return -1; + } + + /** + * @return the ID of the Java counterpart for the given Bedrock ID. If an invalid Bedrock ID was given, or there is no counterpart, -1 is returned. + */ + static int bedrockIdToJava(GeyserSession session, int id) { + JavaRegistry<GeyserInstrument> instruments = session.getRegistryCache().instruments(); + BedrockInstrument bedrockInstrument = BedrockInstrument.getByBedrockId(id); + if (bedrockInstrument != null) { + for (int i = 0; i < instruments.values().size(); i++) { + GeyserInstrument instrument = instruments.byId(i); + if (instrument.bedrockInstrument() == bedrockInstrument) { + return i; + } + } + } + return -1; + } + + static GeyserInstrument fromHolder(GeyserSession session, Holder<Instrument> holder) { + if (holder.isId()) { + return session.getRegistryCache().instruments().byId(holder.id()); + } + Instrument custom = holder.custom(); + return new Wrapper(custom, session.locale()); + } + + record Wrapper(Instrument instrument, String locale) implements GeyserInstrument { + @Override + public String soundEvent() { + return instrument.getSoundEvent().getName(); + } + + @Override + public float range() { + return instrument.getRange(); + } + + @Override + public String description() { + return MessageTranslator.convertMessageForTooltip(instrument.getDescription(), locale); + } + + @Override + public BedrockInstrument bedrockInstrument() { + if (instrument.getSoundEvent() instanceof BuiltinSound) { + return BedrockInstrument.getByJavaIdentifier(MinecraftKey.key(instrument.getSoundEvent().getName())); + } + // Probably custom + return null; + } + } + + record Impl(String soundEvent, float range, String description, @Nullable BedrockInstrument bedrockInstrument) implements GeyserInstrument { + } + + /** + * Each vanilla instrument on Bedrock, ordered in their network IDs. + */ + enum BedrockInstrument { + PONDER, + SING, + SEEK, + FEEL, + ADMIRE, + CALL, + YEARN, + DREAM; + + private static final BedrockInstrument[] VALUES = values(); + private final Key javaIdentifier; + + BedrockInstrument() { + this.javaIdentifier = MinecraftKey.key(this.name().toLowerCase(Locale.ENGLISH) + "_goat_horn"); + } + + public static @Nullable BedrockInstrument getByJavaIdentifier(Key javaIdentifier) { + for (BedrockInstrument instrument : VALUES) { + if (instrument.javaIdentifier.equals(javaIdentifier)) { + return instrument; + } + } + return null; + } + + public static @Nullable BedrockInstrument getByBedrockId(int bedrockId) { + if (bedrockId >= 0 && bedrockId < VALUES.length) { + return VALUES[bedrockId]; + } + return null; + } + } +} diff --git a/core/src/main/java/org/geysermc/geyser/item/enchantment/Enchantment.java b/core/src/main/java/org/geysermc/geyser/item/enchantment/Enchantment.java index 9088d9626..e0b4f6e0f 100644 --- a/core/src/main/java/org/geysermc/geyser/item/enchantment/Enchantment.java +++ b/core/src/main/java/org/geysermc/geyser/item/enchantment/Enchantment.java @@ -41,7 +41,7 @@ import java.util.Map; import java.util.Set; /** - * @param description only populated if {@link #bedrockEnchantment()} is not null. + * @param description only populated if {@link #bedrockEnchantment()} is null. * @param anvilCost also as a rarity multiplier */ public record Enchantment(String identifier, @@ -66,8 +66,6 @@ public record Enchantment(String identifier, BedrockEnchantment bedrockEnchantment = BedrockEnchantment.getByJavaIdentifier(context.id().asString()); - // TODO - description is a component. So if a hardcoded literal string is given, this will display normally on Java, - // but Geyser will attempt to lookup the literal string as translation - and will fail, displaying an empty string as enchantment name. String description = bedrockEnchantment == null ? MessageTranslator.deserializeDescription(context.session(), data) : null; return new Enchantment(context.id().asString(), effects, supportedItems, maxLevel, 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 4e4f1830e..b2d3737d8 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 @@ -32,6 +32,7 @@ import org.geysermc.geyser.inventory.item.Potion; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; +import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.PotionContents; @@ -41,9 +42,9 @@ public class ArrowItem extends Item { } @Override - public @NonNull GeyserItemStack translateToJava(@NonNull ItemData itemData, @NonNull ItemMapping mapping, @NonNull ItemMappings mappings) { + public @NonNull GeyserItemStack translateToJava(GeyserSession session, @NonNull ItemData itemData, @NonNull ItemMapping mapping, @NonNull ItemMappings mappings) { Potion potion = Potion.getByTippedArrowDamage(itemData.getDamage()); - GeyserItemStack itemStack = super.translateToJava(itemData, mapping, mappings); + GeyserItemStack itemStack = super.translateToJava(session, itemData, mapping, mappings); if (potion != null) { itemStack = Items.TIPPED_ARROW.newItemStack(itemStack.getAmount(), itemStack.getComponents()); PotionContents contents = potion.toComponent(); 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 712e75a23..1c0ec0d5f 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 @@ -43,11 +43,11 @@ public class CompassItem extends Item { } @Override - public ItemData.Builder translateToBedrock(int count, DataComponents components, ItemMapping mapping, ItemMappings mappings) { + public ItemData.Builder translateToBedrock(GeyserSession session, int count, DataComponents components, ItemMapping mapping, ItemMappings mappings) { if (isLodestoneCompass(components)) { - return super.translateToBedrock(count, components, mappings.getLodestoneCompass(), mappings); + return super.translateToBedrock(session, count, components, mappings.getLodestoneCompass(), mappings); } - return super.translateToBedrock(count, components, mapping, mappings); + return super.translateToBedrock(session, count, components, mapping, mappings); } @Override @@ -78,12 +78,12 @@ public class CompassItem extends Item { } @Override - public @NonNull GeyserItemStack translateToJava(@NonNull ItemData itemData, @NonNull ItemMapping mapping, @NonNull ItemMappings mappings) { + public @NonNull GeyserItemStack translateToJava(GeyserSession session, @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(); } - return super.translateToJava(itemData, mapping, mappings); + return super.translateToJava(session, itemData, mapping, mappings); } } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/FilledMapItem.java b/core/src/main/java/org/geysermc/geyser/item/type/FilledMapItem.java index e571a796a..07a0ad133 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/FilledMapItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/FilledMapItem.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.item.type; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; +import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; @@ -37,8 +38,8 @@ public class FilledMapItem extends MapItem { } @Override - public ItemData.Builder translateToBedrock(int count, DataComponents components, ItemMapping mapping, ItemMappings mappings) { - ItemData.Builder builder = super.translateToBedrock(count, components, mapping, mappings); + public ItemData.Builder translateToBedrock(GeyserSession session, int count, DataComponents components, ItemMapping mapping, ItemMappings mappings) { + ItemData.Builder builder = super.translateToBedrock(session, count, components, mapping, mappings); if (components == null) { // This is a fallback for maps with no nbt (Change added back in June 2020; is it needed in 2023?) //return builder.tag(NbtMap.builder().putInt("map", 0).build()); TODO if this is *still* broken, let's move it to translateComponentsToBedrock 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 d0e85ec52..9af07a40e 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 @@ -28,8 +28,11 @@ package org.geysermc.geyser.item.type; import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.inventory.GeyserItemStack; +import org.geysermc.geyser.inventory.item.GeyserInstrument; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.mcprotocollib.protocol.data.game.Holder; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; @@ -41,24 +44,45 @@ public class GoatHornItem extends Item { } @Override - public ItemData.Builder translateToBedrock(int count, DataComponents components, ItemMapping mapping, ItemMappings mappings) { - ItemData.Builder builder = super.translateToBedrock(count, components, mapping, mappings); + public ItemData.Builder translateToBedrock(GeyserSession session, int count, DataComponents components, ItemMapping mapping, ItemMappings mappings) { + ItemData.Builder builder = super.translateToBedrock(session, count, components, mapping, mappings); if (components == null) { return builder; } - Holder<Instrument> instrument = components.get(DataComponentType.INSTRUMENT); - if (instrument != null && instrument.isId()) { - builder.damage(instrument.id()); + + Holder<Instrument> holder = components.get(DataComponentType.INSTRUMENT); + if (holder != null) { + GeyserInstrument instrument = GeyserInstrument.fromHolder(session, holder); + int bedrockId = instrument.bedrockId(); + if (bedrockId >= 0) { + builder.damage(bedrockId); + } } + return builder; } @Override - public @NonNull GeyserItemStack translateToJava(@NonNull ItemData itemData, @NonNull ItemMapping mapping, @NonNull ItemMappings mappings) { - GeyserItemStack itemStack = super.translateToJava(itemData, mapping, mappings); + public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNull DataComponents components, @NonNull BedrockItemBuilder builder) { + super.translateComponentsToBedrock(session, components, builder); + + Holder<Instrument> holder = components.get(DataComponentType.INSTRUMENT); + if (holder != null && components.get(DataComponentType.HIDE_TOOLTIP) == null + && components.get(DataComponentType.HIDE_ADDITIONAL_TOOLTIP) == null) { + GeyserInstrument instrument = GeyserInstrument.fromHolder(session, holder); + if (instrument.bedrockInstrument() == null) { + builder.getOrCreateLore().add(instrument.description()); + } + } + } + + @Override + public @NonNull GeyserItemStack translateToJava(GeyserSession session, @NonNull ItemData itemData, @NonNull ItemMapping mapping, @NonNull ItemMappings mappings) { + GeyserItemStack itemStack = super.translateToJava(session, itemData, mapping, mappings); int damage = itemData.getDamage(); - itemStack.getOrCreateComponents().put(DataComponentType.INSTRUMENT, Holder.ofId(damage)); + // This could cause an issue since -1 is returned for non-vanilla goat horns + itemStack.getOrCreateComponents().put(DataComponentType.INSTRUMENT, Holder.ofId(GeyserInstrument.bedrockIdToJava(session, damage))); return itemStack; } 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 a8a477025..249936e5a 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 @@ -115,7 +115,7 @@ public class Item { /* Translation methods to Bedrock and back */ - public ItemData.Builder translateToBedrock(int count, DataComponents components, ItemMapping mapping, ItemMappings mappings) { + public ItemData.Builder translateToBedrock(GeyserSession session, int count, DataComponents components, ItemMapping mapping, ItemMappings mappings) { if (this == Items.AIR || count <= 0) { // Return, essentially, air return ItemData.builder(); @@ -130,7 +130,7 @@ public class Item { return builder; } - public @NonNull GeyserItemStack translateToJava(@NonNull ItemData itemData, @NonNull ItemMapping mapping, @NonNull ItemMappings mappings) { + public @NonNull GeyserItemStack translateToJava(GeyserSession session, @NonNull ItemData itemData, @NonNull ItemMapping mapping, @NonNull ItemMappings mappings) { return GeyserItemStack.of(javaId, itemData.getCount()); } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/OminousBottleItem.java b/core/src/main/java/org/geysermc/geyser/item/type/OminousBottleItem.java index 815f71419..92a8d726d 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/OminousBottleItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/OminousBottleItem.java @@ -31,6 +31,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; +import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; @@ -40,8 +41,8 @@ public class OminousBottleItem extends Item { } @Override - public ItemData.Builder translateToBedrock(int count, @Nullable DataComponents components, ItemMapping mapping, ItemMappings mappings) { - var builder = super.translateToBedrock(count, components, mapping, mappings); + public ItemData.Builder translateToBedrock(GeyserSession session, int count, @Nullable DataComponents components, ItemMapping mapping, ItemMappings mappings) { + var builder = super.translateToBedrock(session, count, components, mapping, mappings); if (components == null) { // Level 1 ominous bottle is null components - Java 1.21. return builder; @@ -54,9 +55,9 @@ public class OminousBottleItem extends Item { } @Override - public @NonNull GeyserItemStack translateToJava(@NonNull ItemData itemData, @NonNull ItemMapping mapping, @NonNull ItemMappings mappings) { + public @NonNull GeyserItemStack translateToJava(GeyserSession session, @NonNull ItemData itemData, @NonNull ItemMapping mapping, @NonNull ItemMappings mappings) { // This item can be pulled from the creative inventory with amplifiers. - GeyserItemStack itemStack = super.translateToJava(itemData, mapping, mappings); + GeyserItemStack itemStack = super.translateToJava(session, itemData, mapping, mappings); int damage = itemData.getDamage(); if (damage == 0) { return itemStack; 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 f8fe2b4ee..89e60b325 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 @@ -33,6 +33,7 @@ import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.item.Potion; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; +import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.item.CustomItemTranslator; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; @@ -44,8 +45,8 @@ public class PotionItem extends Item { } @Override - public ItemData.Builder translateToBedrock(int count, DataComponents components, ItemMapping mapping, ItemMappings mappings) { - if (components == null) return super.translateToBedrock(count, components, mapping, mappings); + public ItemData.Builder translateToBedrock(GeyserSession session, int count, DataComponents components, ItemMapping mapping, ItemMappings mappings) { + if (components == null) return super.translateToBedrock(session, count, components, mapping, mappings); PotionContents potionContents = components.get(DataComponentType.POTION_CONTENTS); if (potionContents != null) { ItemDefinition customItemDefinition = CustomItemTranslator.getCustomItem(components, mapping); @@ -64,13 +65,13 @@ public class PotionItem extends Item { .count(count); } } - return super.translateToBedrock(count, components, mapping, mappings); + return super.translateToBedrock(session, count, components, mapping, mappings); } @Override - public @NonNull GeyserItemStack translateToJava(@NonNull ItemData itemData, @NonNull ItemMapping mapping, @NonNull ItemMappings mappings) { + public @NonNull GeyserItemStack translateToJava(GeyserSession session, @NonNull ItemData itemData, @NonNull ItemMapping mapping, @NonNull ItemMappings mappings) { Potion potion = Potion.getByBedrockId(itemData.getDamage()); - GeyserItemStack itemStack = super.translateToJava(itemData, mapping, mappings); + GeyserItemStack itemStack = super.translateToJava(session, itemData, mapping, mappings); if (potion != null) { itemStack.getOrCreateComponents().put(DataComponentType.POTION_CONTENTS, potion.toComponent()); } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java b/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java index d9e58eaf9..09e4ee21f 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java @@ -30,6 +30,7 @@ import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.inventory.item.Potion; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; +import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.PotionContents; @@ -40,7 +41,7 @@ public class TippedArrowItem extends ArrowItem { } @Override - public ItemData.Builder translateToBedrock(int count, DataComponents components, ItemMapping mapping, ItemMappings mappings) { + public ItemData.Builder translateToBedrock(GeyserSession session, int count, DataComponents components, ItemMapping mapping, ItemMappings mappings) { if (components != null) { PotionContents potionContents = components.get(DataComponentType.POTION_CONTENTS); if (potionContents != null) { @@ -54,6 +55,6 @@ public class TippedArrowItem extends ArrowItem { GeyserImpl.getInstance().getLogger().debug("Unknown Java potion (tipped arrow): " + potionContents.getPotionId()); } } - return super.translateToBedrock(count, components, mapping, mappings); + return super.translateToBedrock(session, count, components, mapping, mappings); } } diff --git a/core/src/main/java/org/geysermc/geyser/level/JukeboxSong.java b/core/src/main/java/org/geysermc/geyser/level/JukeboxSong.java index 86d66e209..fad13d1bb 100644 --- a/core/src/main/java/org/geysermc/geyser/level/JukeboxSong.java +++ b/core/src/main/java/org/geysermc/geyser/level/JukeboxSong.java @@ -29,21 +29,13 @@ import org.cloudburstmc.nbt.NbtMap; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.session.cache.registry.RegistryEntryContext; import org.geysermc.geyser.translator.text.MessageTranslator; +import org.geysermc.geyser.util.SoundUtils; public record JukeboxSong(String soundEvent, String description) { public static JukeboxSong read(RegistryEntryContext context) { NbtMap data = context.data(); - Object soundEventObject = data.get("sound_event"); - String soundEvent; - if (soundEventObject instanceof NbtMap map) { - soundEvent = map.getString("sound_id"); - } else if (soundEventObject instanceof String string) { - soundEvent = string; - } else { - soundEvent = ""; - GeyserImpl.getInstance().getLogger().debug("Sound event for " + context.id() + " was of an unexpected type! Expected string or NBT map, got " + soundEventObject); - } + String soundEvent = SoundUtils.readSoundEvent(data, "jukebox song " + context.id());; String description = MessageTranslator.deserializeDescription(context.session(), data); return new JukeboxSong(soundEvent, description); } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java index fcbc7c64c..2cc7bd5a6 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java @@ -42,6 +42,7 @@ import org.geysermc.geyser.entity.type.living.animal.tameable.WolfEntity; import org.geysermc.geyser.inventory.item.BannerPattern; import org.geysermc.geyser.inventory.recipe.TrimRecipe; import org.geysermc.geyser.item.enchantment.Enchantment; +import org.geysermc.geyser.inventory.item.GeyserInstrument; import org.geysermc.geyser.level.JavaDimension; import org.geysermc.geyser.level.JukeboxSong; import org.geysermc.geyser.level.PaintingType; @@ -90,6 +91,7 @@ public final class RegistryCache { register(JavaRegistries.BIOME, (cache, array) -> cache.biomeTranslations = array, BiomeTranslator::loadServerBiome); register(JavaRegistries.BANNER_PATTERN, cache -> cache.bannerPatterns, context -> BannerPattern.getByJavaIdentifier(context.id())); register(JavaRegistries.WOLF_VARIANT, cache -> cache.wolfVariants, context -> WolfEntity.BuiltInWolfVariant.getByJavaIdentifier(context.id().asString())); + register(JavaRegistries.INSTRUMENT, cache -> cache.instruments, GeyserInstrument::read); // Load from MCProtocolLib's classloader NbtMap tag = MinecraftProtocol.loadNetworkCodec(); @@ -129,6 +131,7 @@ public final class RegistryCache { private final JavaRegistry<BannerPattern> bannerPatterns = new SimpleJavaRegistry<>(); private final JavaRegistry<WolfEntity.BuiltInWolfVariant> wolfVariants = new SimpleJavaRegistry<>(); + private final JavaRegistry<GeyserInstrument> instruments = new SimpleJavaRegistry<>(); public RegistryCache(GeyserSession session) { this.session = session; diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java index 5927963c0..2663fc511 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java @@ -31,15 +31,18 @@ import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import lombok.Getter; import lombok.Setter; +import net.kyori.adventure.key.Key; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.protocol.bedrock.packet.SetTitlePacket; -import org.geysermc.geyser.item.type.Item; +import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.scoreboard.Scoreboard; import org.geysermc.geyser.scoreboard.ScoreboardUpdater.ScoreboardSession; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.ChunkUtils; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.UseCooldown; import org.geysermc.mcprotocollib.protocol.data.game.setting.Difficulty; import java.util.Iterator; @@ -72,7 +75,7 @@ public final class WorldCache { @Setter private boolean editingSignOnFront; - private final Object2IntMap<Item> activeCooldowns = new Object2IntOpenHashMap<>(2); + private final Object2IntMap<String> activeCooldowns = new Object2IntOpenHashMap<>(2); public WorldCache(GeyserSession session) { this.session = session; @@ -204,17 +207,24 @@ public final class WorldCache { return this.activeRecords.remove(pos); } - public void setCooldown(Item item, int ticks) { + public void setCooldown(Key cooldownGroup, int ticks) { if (ticks == 0) { // As of Java 1.21 - this.activeCooldowns.removeInt(item); + this.activeCooldowns.removeInt(cooldownGroup.asString()); return; } - this.activeCooldowns.put(item, session.getTicks() + ticks); + this.activeCooldowns.put(cooldownGroup.asString(), session.getTicks() + ticks); } - public boolean hasCooldown(Item item) { - return this.activeCooldowns.containsKey(item); + public boolean hasCooldown(GeyserItemStack item) { + UseCooldown cooldown = item.getComponent(DataComponentType.USE_COOLDOWN); + String cooldownGroup; + if (cooldown != null && cooldown.cooldownGroup() != null) { + cooldownGroup = cooldown.cooldownGroup().asString(); + } else { + cooldownGroup = item.asItem().javaIdentifier(); + } + return this.activeCooldowns.containsKey(cooldownGroup); } public void tick() { @@ -222,9 +232,9 @@ public final class WorldCache { // but we don't want the cooldown field to balloon in size from overuse. if (!this.activeCooldowns.isEmpty()) { int ticks = session.getTicks(); - Iterator<Object2IntMap.Entry<Item>> it = Object2IntMaps.fastIterator(this.activeCooldowns); + Iterator<Object2IntMap.Entry<String>> it = Object2IntMaps.fastIterator(this.activeCooldowns); while (it.hasNext()) { - Object2IntMap.Entry<Item> entry = it.next(); + Object2IntMap.Entry<String> entry = it.next(); if (entry.getIntValue() <= ticks) { it.remove(); } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/registry/JavaRegistries.java b/core/src/main/java/org/geysermc/geyser/session/cache/registry/JavaRegistries.java index cb51f488e..f0cd3afde 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/registry/JavaRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/registry/JavaRegistries.java @@ -33,6 +33,7 @@ import org.geysermc.geyser.entity.type.living.animal.tameable.WolfEntity; import org.geysermc.geyser.inventory.item.BannerPattern; import org.geysermc.geyser.item.enchantment.Enchantment; import org.geysermc.geyser.item.type.Item; +import org.geysermc.geyser.inventory.item.GeyserInstrument; import org.geysermc.geyser.level.JavaDimension; import org.geysermc.geyser.level.JukeboxSong; import org.geysermc.geyser.level.PaintingType; @@ -62,6 +63,7 @@ public class JavaRegistries { public static final JavaRegistryKey<PaintingType> PAINTING_VARIANT = create("painting_variant", RegistryCache::paintings); public static final JavaRegistryKey<TrimMaterial> TRIM_MATERIAL = create("trim_material", RegistryCache::trimMaterials); public static final JavaRegistryKey<TrimPattern> TRIM_PATTERN = create("trim_pattern", RegistryCache::trimPatterns); + public static final JavaRegistryKey<GeyserInstrument> INSTRUMENT = create("instrument", RegistryCache::instruments); /** * This registry should not be used in holder sets, tags, etc. It's simply used as a mapping from Java biomes to Bedrock ones. */ diff --git a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java index 163eef20b..3cfd00233 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java @@ -108,7 +108,7 @@ public final class ItemTranslator { ItemMapping bedrockItem = session.getItemMappings().getMapping(data); Item javaItem = bedrockItem.getJavaItem(); - GeyserItemStack itemStack = javaItem.translateToJava(data, bedrockItem, session.getItemMappings()); + GeyserItemStack itemStack = javaItem.translateToJava(session, data, bedrockItem, session.getItemMappings()); NbtMap nbt = data.getTag(); if (nbt != null && !nbt.isEmpty()) { @@ -198,7 +198,7 @@ public final class ItemTranslator { nbtMapBuilder.putIfAbsent("ench", NbtList.EMPTY); } - ItemData.Builder builder = javaItem.translateToBedrock(count, components, bedrockItem, session.getItemMappings()); + ItemData.Builder builder = javaItem.translateToBedrock(session, count, components, bedrockItem, session.getItemMappings()); // Finalize the Bedrock NBT builder.tag(nbtBuilder.build()); if (bedrockItem.isBlock()) { 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 421e082b1..422c45b9b 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 @@ -42,6 +42,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.transaction.LegacySetIte import org.cloudburstmc.protocol.bedrock.packet.ContainerOpenPacket; import org.cloudburstmc.protocol.bedrock.packet.InventoryTransactionPacket; import org.cloudburstmc.protocol.bedrock.packet.LevelSoundEventPacket; +import org.cloudburstmc.protocol.bedrock.packet.PlaySoundPacket; import org.cloudburstmc.protocol.bedrock.packet.UpdateBlockPacket; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.type.Entity; @@ -51,6 +52,7 @@ import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.PlayerInventory; import org.geysermc.geyser.inventory.click.Click; +import org.geysermc.geyser.inventory.item.GeyserInstrument; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.type.BlockItem; import org.geysermc.geyser.item.type.BoatItem; @@ -75,6 +77,7 @@ import org.geysermc.geyser.util.CooldownUtils; import org.geysermc.geyser.util.EntityUtils; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InventoryUtils; +import org.geysermc.geyser.util.SoundUtils; import org.geysermc.mcprotocollib.protocol.data.game.Holder; import org.geysermc.mcprotocollib.protocol.data.game.entity.object.Direction; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; @@ -379,18 +382,28 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve session.setCurrentBook(packet.getItemInHand()); } else if (session.getPlayerInventory().getItemInHand().asItem() == Items.GOAT_HORN) { // Temporary workaround while we don't have full item/block use tracking. - if (!session.getWorldCache().hasCooldown(Items.GOAT_HORN)) { - Holder<Instrument> instrument = session.getPlayerInventory() + if (!session.getWorldCache().hasCooldown(session.getPlayerInventory().getItemInHand())) { + Holder<Instrument> holder = session.getPlayerInventory() .getItemInHand() .getComponent(DataComponentType.INSTRUMENT); - if (instrument != null && instrument.isId()) { - // BDS uses a LevelSoundEvent2Packet, but that doesn't work here... (as of 1.21.20) - LevelSoundEventPacket soundPacket = new LevelSoundEventPacket(); - soundPacket.setSound(SoundEvent.valueOf("GOAT_CALL_" + instrument.id())); - soundPacket.setPosition(session.getPlayerEntity().getPosition()); - soundPacket.setIdentifier("minecraft:player"); - soundPacket.setExtraData(-1); - session.sendUpstreamPacket(soundPacket); + if (holder != null) { + GeyserInstrument instrument = GeyserInstrument.fromHolder(session, holder); + if (instrument.bedrockInstrument() != null) { + // BDS uses a LevelSoundEvent2Packet, but that doesn't work here... (as of 1.21.20) + LevelSoundEventPacket soundPacket = new LevelSoundEventPacket(); + soundPacket.setSound(SoundEvent.valueOf("GOAT_CALL_" + instrument.bedrockInstrument().ordinal())); + soundPacket.setPosition(session.getPlayerEntity().getPosition()); + soundPacket.setIdentifier("minecraft:player"); + soundPacket.setExtraData(-1); + session.sendUpstreamPacket(soundPacket); + } else { + PlaySoundPacket playSoundPacket = new PlaySoundPacket(); + playSoundPacket.setPosition(session.getPlayerEntity().position()); + playSoundPacket.setSound(SoundUtils.translatePlaySound(instrument.soundEvent())); + playSoundPacket.setPitch(1.0F); + playSoundPacket.setVolume(instrument.range() / 16.0F); + session.sendUpstreamPacket(playSoundPacket); + } } } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaCooldownTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaCooldownTranslator.java index 168992dd4..2b14f015f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaCooldownTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaCooldownTranslator.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.translator.protocol.java.level; +import net.kyori.adventure.key.Key; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundCooldownPacket; import org.cloudburstmc.protocol.bedrock.packet.PlayerStartItemCooldownPacket; import org.geysermc.geyser.item.Items; @@ -39,7 +40,11 @@ public class JavaCooldownTranslator extends PacketTranslator<ClientboundCooldown @Override public void translate(GeyserSession session, ClientboundCooldownPacket packet) { - Item item = Registries.JAVA_ITEMS.get().get(0); // FIXME + // If the cooldown group is a modded item, an item that Bedrock doesn't support custom cooldowns for, or a custom cooldown group, + // then the cooldown won't be translated correctly. The cooldown won't show up on Bedrock, but they are still unable to use the item. + Key cooldownGroup = packet.getCooldownGroup(); + Item item = Registries.JAVA_ITEM_IDENTIFIERS.get(cooldownGroup.asString()); + // Not every item, as of 1.19, appears to be server-driven. Just these two. // Use a map here if it gets too big. String cooldownCategory; @@ -58,6 +63,6 @@ public class JavaCooldownTranslator extends PacketTranslator<ClientboundCooldown session.sendUpstreamPacket(bedrockPacket); } - session.getWorldCache().setCooldown(item, packet.getCooldownTicks()); + session.getWorldCache().setCooldown(cooldownGroup, packet.getCooldownTicks()); } } 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 eca86ff32..5c3b21b5a 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 @@ -137,6 +137,18 @@ public class MessageTranslator { return convertMessage(message, locale, true); } + /** + * Convert a Java message to the legacy format ready for bedrock, for use in item tooltips + * (a gray color is applied). + * + * @param message Java message + * @param locale Locale to use for translation strings + * @return Parsed and formatted message for bedrock, in gray color + */ + public static String convertMessageForTooltip(Component message, String locale) { + return RESET + ChatColor.GRAY + convertMessageRaw(message, locale); + } + /** * Convert a Java message to the legacy format ready for bedrock. Unlike {@link #convertMessage(Component, String)} * this version does not add a leading color reset. In Bedrock some places have build-in colors. @@ -422,6 +434,15 @@ public class MessageTranslator { return convertMessage(session, parsed); } + /** + * Deserialize an NbtMap with a description text component (usually provided from a registry) into a Bedrock-formatted string. + */ + public static String deserializeDescriptionForTooltip(GeyserSession session, NbtMap tag) { + Object description = tag.get("description"); + Component parsed = componentFromNbtTag(description); + return convertMessageForTooltip(parsed, session.locale()); + } + public static Component componentFromNbtTag(Object nbtTag) { return componentFromNbtTag(nbtTag, Style.empty()); } 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 693ce136a..d1c1c77e3 100644 --- a/core/src/main/java/org/geysermc/geyser/util/SoundUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/SoundUtils.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.util; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; +import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.protocol.bedrock.data.LevelEvent; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket; @@ -162,6 +163,20 @@ public final class SoundUtils { session.sendUpstreamPacket(soundPacket); } + public static String readSoundEvent(NbtMap data, String context) { + Object soundEventObject = data.get("sound_event"); + String soundEvent; + if (soundEventObject instanceof NbtMap map) { + soundEvent = map.getString("sound_id"); + } else if (soundEventObject instanceof String string) { + soundEvent = string; + } else { + soundEvent = ""; + GeyserImpl.getInstance().getLogger().debug("Sound event for " + context + " was of an unexpected type! Expected string or NBT map, got " + soundEventObject); + } + return soundEvent; + } + private SoundUtils() { } } From 4da8eca99abeb86da93b9a13a1b4bd5735439fb9 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Thu, 31 Oct 2024 19:31:34 -0400 Subject: [PATCH 042/165] Cleanup and update Adapters --- .../geyser/inventory/recipe/GeyserRecipe.java | 2 +- .../geyser/session/cache/RegistryCache.java | 62 ++++++++++++------- .../cache/registry/JavaRegistries.java | 27 -------- gradle/libs.versions.toml | 2 +- 4 files changed, 43 insertions(+), 50 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java index d9cae943f..b0f5a1b44 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java @@ -29,7 +29,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; /** - * A more compact version of {link org.geysermc.mcprotocollib.protocol.data.game.recipe.Recipe}. + * A more compact version of {@link org.geysermc.mcprotocollib.protocol.data.game.recipe.display.RecipeDisplay}. */ public interface GeyserRecipe { /** diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java index 2cc7bd5a6..ecd293bff 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java @@ -40,9 +40,9 @@ import org.cloudburstmc.protocol.bedrock.data.TrimPattern; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.entity.type.living.animal.tameable.WolfEntity; import org.geysermc.geyser.inventory.item.BannerPattern; +import org.geysermc.geyser.inventory.item.GeyserInstrument; import org.geysermc.geyser.inventory.recipe.TrimRecipe; import org.geysermc.geyser.item.enchantment.Enchantment; -import org.geysermc.geyser.inventory.item.GeyserInstrument; import org.geysermc.geyser.level.JavaDimension; import org.geysermc.geyser.level.JukeboxSong; import org.geysermc.geyser.level.PaintingType; @@ -77,35 +77,35 @@ import java.util.function.ToIntFunction; @Accessors(fluent = true) @Getter public final class RegistryCache { - private static final Map<JavaRegistryKey<?>, Map<Key, NbtMap>> DEFAULTS; - private static final Map<JavaRegistryKey<?>, BiConsumer<RegistryCache, List<RegistryEntry>>> REGISTRIES = new HashMap<>(); + private static final Map<Key, Map<Key, NbtMap>> DEFAULTS; + private static final Map<Key, BiConsumer<RegistryCache, List<RegistryEntry>>> REGISTRIES = new HashMap<>(); static { - register(JavaRegistries.CHAT_TYPE, cache -> cache.chatTypes, ChatDecoration::readChatType); - register(JavaRegistries.DIMENSION_TYPE, cache -> cache.dimensions, JavaDimension::read); + register("chat_type", cache -> cache.chatTypes, ChatDecoration::readChatType); + register("dimension_type", cache -> cache.dimensions, JavaDimension::read); register(JavaRegistries.ENCHANTMENT, cache -> cache.enchantments, Enchantment::read); - register(JavaRegistries.JUKEBOX_SONG, cache -> cache.jukeboxSongs, JukeboxSong::read); - register(JavaRegistries.PAINTING_VARIANT, cache -> cache.paintings, context -> PaintingType.getByName(context.id())); - register(JavaRegistries.TRIM_MATERIAL, cache -> cache.trimMaterials, TrimRecipe::readTrimMaterial); - register(JavaRegistries.TRIM_PATTERN, cache -> cache.trimPatterns, TrimRecipe::readTrimPattern); - register(JavaRegistries.BIOME, (cache, array) -> cache.biomeTranslations = array, BiomeTranslator::loadServerBiome); - register(JavaRegistries.BANNER_PATTERN, cache -> cache.bannerPatterns, context -> BannerPattern.getByJavaIdentifier(context.id())); - register(JavaRegistries.WOLF_VARIANT, cache -> cache.wolfVariants, context -> WolfEntity.BuiltInWolfVariant.getByJavaIdentifier(context.id().asString())); - register(JavaRegistries.INSTRUMENT, cache -> cache.instruments, GeyserInstrument::read); + register("instrument", cache -> cache.instruments, GeyserInstrument::read); + register("jukebox_song", cache -> cache.jukeboxSongs, JukeboxSong::read); + register("painting_variant", cache -> cache.paintings, context -> PaintingType.getByName(context.id())); + register("trim_material", cache -> cache.trimMaterials, TrimRecipe::readTrimMaterial); + register("trim_pattern", cache -> cache.trimPatterns, TrimRecipe::readTrimPattern); + register("worldgen/biome", (cache, array) -> cache.biomeTranslations = array, BiomeTranslator::loadServerBiome); + register("banner_pattern", cache -> cache.bannerPatterns, context -> BannerPattern.getByJavaIdentifier(context.id())); + register("wolf_variant", cache -> cache.wolfVariants, context -> WolfEntity.BuiltInWolfVariant.getByJavaIdentifier(context.id().asString())); // Load from MCProtocolLib's classloader NbtMap tag = MinecraftProtocol.loadNetworkCodec(); - Map<JavaRegistryKey<?>, Map<Key, NbtMap>> defaults = new HashMap<>(); + Map<Key, Map<Key, NbtMap>> defaults = new HashMap<>(); // Don't create a keySet - no need to create the cached object in HashMap if we don't use it again - REGISTRIES.forEach((registry, $) -> { - List<NbtMap> rawValues = tag.getCompound(registry.registryKey().asString()).getList("value", NbtType.COMPOUND); + REGISTRIES.forEach((key, $) -> { + List<NbtMap> rawValues = tag.getCompound(key.asString()).getList("value", NbtType.COMPOUND); Map<Key, NbtMap> values = new HashMap<>(); for (NbtMap value : rawValues) { Key name = MinecraftKey.key(value.getString("name")); values.put(name, value.getCompound("element")); } // Can make these maps immutable and as efficient as possible after initialization - defaults.put(registry, Map.copyOf(values)); + defaults.put(key, Map.copyOf(values)); }); DEFAULTS = Map.copyOf(defaults); @@ -141,7 +141,7 @@ public final class RegistryCache { * Loads a registry in, if we are tracking it. */ public void load(ClientboundRegistryDataPacket packet) { - var reader = REGISTRIES.get(JavaRegistries.fromKey(packet.getRegistry())); + var reader = REGISTRIES.get(packet.getRegistry()); if (reader != null) { reader.accept(this, packet.getEntries()); } else { @@ -155,7 +155,27 @@ public final class RegistryCache { * @param reader converts the RegistryEntry NBT into a class file * @param <T> the class that represents these entries. */ - private static <T> void register(JavaRegistryKey<T> registry, Function<RegistryCache, JavaRegistry<T>> localCacheFunction, Function<RegistryEntryContext, T> reader) { + private static <T> void register(String registry, Function<RegistryCache, JavaRegistry<T>> localCacheFunction, Function<RegistryEntryContext, T> reader) { + register(MinecraftKey.key(registry), localCacheFunction, reader); + } + + /** + * @param registry the Java registry resource location. + * @param localCacheFunction which local field in RegistryCache are we caching entries for this registry? + * @param reader converts the RegistryEntry NBT into a class file + * @param <T> the class that represents these entries. + */ + private static <T> void register(JavaRegistryKey<?> registry, Function<RegistryCache, JavaRegistry<T>> localCacheFunction, Function<RegistryEntryContext, T> reader) { + register(registry.registryKey(), localCacheFunction, reader); + } + + /** + * @param registry the Java registry resource location. + * @param localCacheFunction which local field in RegistryCache are we caching entries for this registry? + * @param reader converts the RegistryEntry NBT into a class file + * @param <T> the class that represents these entries. + */ + private static <T> void register(Key registry, Function<RegistryCache, JavaRegistry<T>> localCacheFunction, Function<RegistryEntryContext, T> reader) { REGISTRIES.put(registry, (registryCache, entries) -> { Map<Key, NbtMap> localRegistry = null; JavaRegistry<T> localCache = localCacheFunction.apply(registryCache); @@ -192,8 +212,8 @@ public final class RegistryCache { /** * @param localCacheFunction the int array to set the final values to. */ - private static void register(JavaRegistryKey<?> registry, BiConsumer<RegistryCache, int[]> localCacheFunction, ToIntFunction<RegistryEntry> reader) { - REGISTRIES.put(registry, (registryCache, entries) -> { + private static void register(String registry, BiConsumer<RegistryCache, int[]> localCacheFunction, ToIntFunction<RegistryEntry> reader) { + REGISTRIES.put(MinecraftKey.key(registry), (registryCache, entries) -> { Int2IntMap temp = new Int2IntOpenHashMap(); int greatestId = 0; for (int i = 0; i < entries.size(); i++) { diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/registry/JavaRegistries.java b/core/src/main/java/org/geysermc/geyser/session/cache/registry/JavaRegistries.java index f0cd3afde..646b647d0 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/registry/JavaRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/registry/JavaRegistries.java @@ -27,23 +27,14 @@ package org.geysermc.geyser.session.cache.registry; import net.kyori.adventure.key.Key; import org.checkerframework.checker.nullness.qual.Nullable; -import org.cloudburstmc.protocol.bedrock.data.TrimMaterial; -import org.cloudburstmc.protocol.bedrock.data.TrimPattern; -import org.geysermc.geyser.entity.type.living.animal.tameable.WolfEntity; -import org.geysermc.geyser.inventory.item.BannerPattern; import org.geysermc.geyser.item.enchantment.Enchantment; import org.geysermc.geyser.item.type.Item; -import org.geysermc.geyser.inventory.item.GeyserInstrument; -import org.geysermc.geyser.level.JavaDimension; -import org.geysermc.geyser.level.JukeboxSong; -import org.geysermc.geyser.level.PaintingType; import org.geysermc.geyser.level.block.type.Block; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.ListRegistry; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.session.cache.RegistryCache; import org.geysermc.geyser.util.MinecraftKey; -import org.geysermc.mcprotocollib.protocol.data.game.chat.ChatType; import java.util.ArrayList; import java.util.List; @@ -56,20 +47,7 @@ public class JavaRegistries { public static final JavaRegistryKey<Block> BLOCK = create("block", BlockRegistries.JAVA_BLOCKS, Block::javaId); public static final JavaRegistryKey<Item> ITEM = create("item", Registries.JAVA_ITEMS, Item::javaId); - public static final JavaRegistryKey<ChatType> CHAT_TYPE = create("chat_type", RegistryCache::chatTypes); - public static final JavaRegistryKey<JavaDimension> DIMENSION_TYPE = create("dimension_type", RegistryCache::dimensions); public static final JavaRegistryKey<Enchantment> ENCHANTMENT = create("enchantment", RegistryCache::enchantments); - public static final JavaRegistryKey<JukeboxSong> JUKEBOX_SONG = create("jukebox_song", RegistryCache::jukeboxSongs); - public static final JavaRegistryKey<PaintingType> PAINTING_VARIANT = create("painting_variant", RegistryCache::paintings); - public static final JavaRegistryKey<TrimMaterial> TRIM_MATERIAL = create("trim_material", RegistryCache::trimMaterials); - public static final JavaRegistryKey<TrimPattern> TRIM_PATTERN = create("trim_pattern", RegistryCache::trimPatterns); - public static final JavaRegistryKey<GeyserInstrument> INSTRUMENT = create("instrument", RegistryCache::instruments); - /** - * This registry should not be used in holder sets, tags, etc. It's simply used as a mapping from Java biomes to Bedrock ones. - */ - public static final JavaRegistryKey<Integer> BIOME = create("worldgen/biome"); - public static final JavaRegistryKey<BannerPattern> BANNER_PATTERN = create("banner_pattern", RegistryCache::bannerPatterns); - public static final JavaRegistryKey<WolfEntity.BuiltInWolfVariant> WOLF_VARIANT = create("wolf_variant", RegistryCache::wolfVariants); private static <T> JavaRegistryKey<T> create(String key, JavaRegistryKey.NetworkSerializer<T> networkSerializer, JavaRegistryKey.NetworkDeserializer<T> networkDeserializer) { JavaRegistryKey<T> registry = new JavaRegistryKey<>(MinecraftKey.key(key), networkSerializer, networkDeserializer); @@ -85,11 +63,6 @@ public class JavaRegistries { return create(key, (session, object) -> getter.get(session.getRegistryCache()).byValue(object), (session, id) -> getter.get(session.getRegistryCache()).byId(id)); } - private static <T> JavaRegistryKey<T> create(String key) { - // Cast for ambiguous call - return create(key, (JavaRegistryKey.NetworkSerializer<T>) null, null); - } - @Nullable public static JavaRegistryKey<?> fromKey(Key registryKey) { for (JavaRegistryKey<?> registry : VALUES) { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a88862965..9031799cf 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -25,7 +25,7 @@ jline = "3.21.0" terminalconsoleappender = "1.2.0" folia = "1.19.4-R0.1-SNAPSHOT" viaversion = "4.9.2" -adapters = "1.13-SNAPSHOT" +adapters = "1.14-SNAPSHOT" cloud = "2.0.0-rc.2" cloud-minecraft = "2.0.0-beta.9" cloud-minecraft-modded = "2.0.0-beta.7" From edd62eb39e71cf23ee64141392766a86656bfd40 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Thu, 31 Oct 2024 19:48:22 -0400 Subject: [PATCH 043/165] Update CodecProcessor --- .../geysermc/geyser/level/JukeboxSong.java | 3 +- .../geyser/network/CodecProcessor.java | 25 ++++++- .../BedrockMoveEntityAbsoluteTranslator.java | 74 ------------------- .../bedrock/BedrockPlayerInputTranslator.java | 49 ------------ .../player/BedrockRiderJumpTranslator.java | 49 ------------ 5 files changed, 25 insertions(+), 175 deletions(-) delete mode 100644 core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMoveEntityAbsoluteTranslator.java delete mode 100644 core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPlayerInputTranslator.java delete mode 100644 core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockRiderJumpTranslator.java diff --git a/core/src/main/java/org/geysermc/geyser/level/JukeboxSong.java b/core/src/main/java/org/geysermc/geyser/level/JukeboxSong.java index fad13d1bb..1bed4099a 100644 --- a/core/src/main/java/org/geysermc/geyser/level/JukeboxSong.java +++ b/core/src/main/java/org/geysermc/geyser/level/JukeboxSong.java @@ -26,7 +26,6 @@ package org.geysermc.geyser.level; import org.cloudburstmc.nbt.NbtMap; -import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.session.cache.registry.RegistryEntryContext; import org.geysermc.geyser.translator.text.MessageTranslator; import org.geysermc.geyser.util.SoundUtils; @@ -35,7 +34,7 @@ public record JukeboxSong(String soundEvent, String description) { public static JukeboxSong read(RegistryEntryContext context) { NbtMap data = context.data(); - String soundEvent = SoundUtils.readSoundEvent(data, "jukebox song " + context.id());; + String soundEvent = SoundUtils.readSoundEvent(data, "jukebox song " + context.id()); String description = MessageTranslator.deserializeDescription(context.session(), data); return new JukeboxSong(soundEvent, description); } diff --git a/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java b/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java index d5a4dd246..15aa8bc2c 100644 --- a/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java +++ b/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java @@ -31,11 +31,13 @@ import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.MobArmorEquipmentSerializer_v291; import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.MobEquipmentSerializer_v291; +import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.MoveEntityAbsoluteSerializer_v291; import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.PlayerHotbarSerializer_v291; import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.SetEntityLinkSerializer_v291; import org.cloudburstmc.protocol.bedrock.codec.v390.serializer.PlayerSkinSerializer_v390; import org.cloudburstmc.protocol.bedrock.codec.v407.serializer.InventoryContentSerializer_v407; import org.cloudburstmc.protocol.bedrock.codec.v407.serializer.InventorySlotSerializer_v407; +import org.cloudburstmc.protocol.bedrock.codec.v419.serializer.MovePlayerSerializer_v419; import org.cloudburstmc.protocol.bedrock.codec.v486.serializer.BossEventSerializer_v486; import org.cloudburstmc.protocol.bedrock.codec.v557.serializer.SetEntityDataSerializer_v557; import org.cloudburstmc.protocol.bedrock.codec.v662.serializer.SetEntityMotionSerializer_v662; @@ -67,14 +69,18 @@ import org.cloudburstmc.protocol.bedrock.packet.MapCreateLockedCopyPacket; import org.cloudburstmc.protocol.bedrock.packet.MapInfoRequestPacket; import org.cloudburstmc.protocol.bedrock.packet.MobArmorEquipmentPacket; import org.cloudburstmc.protocol.bedrock.packet.MobEquipmentPacket; +import org.cloudburstmc.protocol.bedrock.packet.MoveEntityAbsolutePacket; +import org.cloudburstmc.protocol.bedrock.packet.MovePlayerPacket; import org.cloudburstmc.protocol.bedrock.packet.MultiplayerSettingsPacket; import org.cloudburstmc.protocol.bedrock.packet.NpcRequestPacket; import org.cloudburstmc.protocol.bedrock.packet.PhotoInfoRequestPacket; import org.cloudburstmc.protocol.bedrock.packet.PhotoTransferPacket; import org.cloudburstmc.protocol.bedrock.packet.PlayerHotbarPacket; +import org.cloudburstmc.protocol.bedrock.packet.PlayerInputPacket; import org.cloudburstmc.protocol.bedrock.packet.PlayerSkinPacket; import org.cloudburstmc.protocol.bedrock.packet.PurchaseReceiptPacket; import org.cloudburstmc.protocol.bedrock.packet.RefreshEntitlementsPacket; +import org.cloudburstmc.protocol.bedrock.packet.RiderJumpPacket; import org.cloudburstmc.protocol.bedrock.packet.ScriptMessagePacket; import org.cloudburstmc.protocol.bedrock.packet.SetEntityDataPacket; import org.cloudburstmc.protocol.bedrock.packet.SetEntityLinkPacket; @@ -189,6 +195,20 @@ class CodecProcessor { } }; + private static final BedrockPacketSerializer<MovePlayerPacket> MOVE_PLAYER_SERIALIZER = new MovePlayerSerializer_v419() { + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, MovePlayerPacket packet) { + throw new IllegalArgumentException("Client cannot send MovePlayerPacket in server-auth movement environment!"); + } + }; + + private static final BedrockPacketSerializer<MoveEntityAbsolutePacket> MOVE_ENTITY_SERIALIZER = new MoveEntityAbsoluteSerializer_v291() { + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, MoveEntityAbsolutePacket packet) { + throw new IllegalArgumentException("Client cannot send MoveEntityAbsolutePacket in server-auth movement environment!"); + } + }; + /** * Serializer that does nothing when trying to deserialize BossEventPacket since it is not used from the client. */ @@ -317,7 +337,6 @@ class CodecProcessor { .updateSerializer(ClientCheatAbilityPacket.class, ILLEGAL_SERIALIZER) .updateSerializer(CraftingEventPacket.class, ILLEGAL_SERIALIZER) // Illegal unusued serverbound packets that relate to unused features - //.updateSerializer(PlayerAuthInputPacket.class, ILLEGAL_SERIALIZER) TODO keeping until we determine which packets should replace .updateSerializer(ClientCacheBlobStatusPacket.class, ILLEGAL_SERIALIZER) .updateSerializer(SubClientLoginPacket.class, ILLEGAL_SERIALIZER) .updateSerializer(SubChunkRequestPacket.class, ILLEGAL_SERIALIZER) @@ -333,6 +352,10 @@ class CodecProcessor { // Illegal when serverbound due to Geyser specific setup .updateSerializer(InventoryContentPacket.class, inventoryContentSerializer) .updateSerializer(InventorySlotPacket.class, inventorySlotSerializer) + .updateSerializer(MovePlayerPacket.class, MOVE_PLAYER_SERIALIZER) + .updateSerializer(MoveEntityAbsolutePacket.class, MOVE_ENTITY_SERIALIZER) + .updateSerializer(RiderJumpPacket.class, ILLEGAL_SERIALIZER) + .updateSerializer(PlayerInputPacket.class, ILLEGAL_SERIALIZER) // Ignored only when serverbound .updateSerializer(BossEventPacket.class, BOSS_EVENT_SERIALIZER) .updateSerializer(MobArmorEquipmentPacket.class, is712OrAbove ? MOB_ARMOR_EQUIPMENT_SERIALIZER_V712 : MOB_ARMOR_EQUIPMENT_SERIALIZER_V291) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMoveEntityAbsoluteTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMoveEntityAbsoluteTranslator.java deleted file mode 100644 index 81b06c87d..000000000 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMoveEntityAbsoluteTranslator.java +++ /dev/null @@ -1,74 +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.protocol.bedrock; - -import org.cloudburstmc.math.vector.Vector3f; -import org.cloudburstmc.protocol.bedrock.packet.MoveEntityAbsolutePacket; -import org.geysermc.geyser.entity.type.BoatEntity; -import org.geysermc.geyser.entity.type.Entity; -import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.translator.protocol.PacketTranslator; -import org.geysermc.geyser.translator.protocol.Translator; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.level.ServerboundMoveVehiclePacket; - -/** - * Sent by the client when moving a horse or boat. - */ -@Translator(packet = MoveEntityAbsolutePacket.class) -public class BedrockMoveEntityAbsoluteTranslator extends PacketTranslator<MoveEntityAbsolutePacket> { - - @Override - public void translate(GeyserSession session, MoveEntityAbsolutePacket packet) { - Entity ridingEntity = session.getPlayerEntity().getVehicle(); - if (ridingEntity != null && session.getWorldBorder().isPassingIntoBorderBoundaries(packet.getPosition(), false)) { - Vector3f position = Vector3f.from(ridingEntity.getPosition().getX(), packet.getPosition().getY(), - ridingEntity.getPosition().getZ()); - if (ridingEntity instanceof BoatEntity) { - // Undo the changes usually applied to the boat -// ridingEntity.as(BoatEntity.class) -// .moveAbsoluteWithoutAdjustments(position, ridingEntity.getYaw(), -// ridingEntity.isOnGround(), true); - } else { - // This doesn't work if teleported is false - ridingEntity.moveAbsolute(position, - ridingEntity.getYaw(), ridingEntity.getPitch(), ridingEntity.getHeadYaw(), - ridingEntity.isOnGround(), true); - } - return; - } - - float y = packet.getPosition().getY(); - if (ridingEntity instanceof BoatEntity && !ridingEntity.isOnGround()) { - // Remove the offset to prevents boats from looking like they're floating in water - y -= ridingEntity.getDefinition().offset(); - } - ServerboundMoveVehiclePacket ServerboundMoveVehiclePacket = new ServerboundMoveVehiclePacket( - packet.getPosition().getX(), y, packet.getPosition().getZ(), - packet.getRotation().getY() - 90, packet.getRotation().getX() - ); - session.sendDownstreamGamePacket(ServerboundMoveVehiclePacket); - } -} diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPlayerInputTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPlayerInputTranslator.java deleted file mode 100644 index 46d6b9203..000000000 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPlayerInputTranslator.java +++ /dev/null @@ -1,49 +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.protocol.bedrock; - -import org.cloudburstmc.math.vector.Vector3f; -import org.cloudburstmc.protocol.bedrock.packet.PlayerInputPacket; -import org.geysermc.geyser.entity.type.BoatEntity; -import org.geysermc.geyser.entity.type.Entity; -import org.geysermc.geyser.entity.type.living.animal.horse.AbstractHorseEntity; -import org.geysermc.geyser.entity.type.living.animal.horse.LlamaEntity; -import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.translator.protocol.PacketTranslator; -import org.geysermc.geyser.translator.protocol.Translator; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.level.ServerboundMoveVehiclePacket; - -/** - * Sent by the client for minecarts and boats. - */ -@Translator(packet = PlayerInputPacket.class) -public class BedrockPlayerInputTranslator extends PacketTranslator<PlayerInputPacket> { - - @Override - public void translate(GeyserSession session, PlayerInputPacket packet) { - - } -} diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockRiderJumpTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockRiderJumpTranslator.java deleted file mode 100644 index 17668e000..000000000 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockRiderJumpTranslator.java +++ /dev/null @@ -1,49 +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.protocol.bedrock.entity.player; - -import org.geysermc.mcprotocollib.protocol.data.game.entity.player.PlayerState; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundPlayerCommandPacket; -import org.cloudburstmc.protocol.bedrock.packet.RiderJumpPacket; -import org.geysermc.geyser.entity.type.Entity; -import org.geysermc.geyser.entity.type.living.animal.horse.AbstractHorseEntity; -import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.translator.protocol.PacketTranslator; -import org.geysermc.geyser.translator.protocol.Translator; - -@Translator(packet = RiderJumpPacket.class) -public class BedrockRiderJumpTranslator extends PacketTranslator<RiderJumpPacket> { - @Override - public void translate(GeyserSession session, RiderJumpPacket packet) { - session.getPlayerEntity().setVehicleJumpStrength(packet.getJumpStrength()); - - Entity vehicle = session.getPlayerEntity().getVehicle(); - if (vehicle instanceof AbstractHorseEntity) { - ServerboundPlayerCommandPacket playerCommandPacket = new ServerboundPlayerCommandPacket(vehicle.getEntityId(), PlayerState.START_HORSE_JUMP, packet.getJumpStrength()); - session.sendDownstreamGamePacket(playerCommandPacket); - } - } -} From df8bd9b58319ea38535906c991484b7593af4871 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Fri, 1 Nov 2024 00:39:24 -0400 Subject: [PATCH 044/165] Implement rich commands for Cloud on standalone --- .../geyser/command/CommandRegistry.java | 111 ++++++++++++++++++ .../protocol/java/JavaCommandsTranslator.java | 5 + 2 files changed, 116 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java b/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java index 54681abea..78e8a5cb1 100644 --- a/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java @@ -27,6 +27,13 @@ package org.geysermc.geyser.command; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import org.checkerframework.checker.nullness.qual.NonNull; +import org.cloudburstmc.protocol.bedrock.data.command.CommandData; +import org.cloudburstmc.protocol.bedrock.data.command.CommandEnumConstraint; +import org.cloudburstmc.protocol.bedrock.data.command.CommandEnumData; +import org.cloudburstmc.protocol.bedrock.data.command.CommandOverloadData; +import org.cloudburstmc.protocol.bedrock.data.command.CommandParam; +import org.cloudburstmc.protocol.bedrock.data.command.CommandParamData; +import org.cloudburstmc.protocol.bedrock.data.command.CommandPermission; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.command.Command; import org.geysermc.geyser.api.event.EventRegistrar; @@ -51,14 +58,26 @@ import org.geysermc.geyser.command.defaults.StopCommand; import org.geysermc.geyser.command.defaults.VersionCommand; 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.incendo.cloud.Command.Builder; import org.incendo.cloud.CommandManager; import org.incendo.cloud.execution.ExecutionCoordinator; +import org.incendo.cloud.internal.CommandNode; +import org.incendo.cloud.parser.standard.EnumParser; +import org.incendo.cloud.parser.standard.IntegerParser; +import org.incendo.cloud.parser.standard.LiteralParser; +import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; +import java.util.EnumSet; import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; import java.util.Map; +import java.util.Set; import static org.geysermc.geyser.command.GeyserCommand.DEFAULT_ROOT_COMMAND; @@ -299,4 +318,96 @@ public class CommandRegistry implements EventRegistrar { public void runCommand(@NonNull GeyserCommandSource source, @NonNull String command) { cloud.commandExecutor().executeCommand(source, command); } + + public void export(GeyserSession session, List<CommandData> bedrockCommands) { + cloud.commandTree().rootNode().children().forEach(commandTree -> { + var command = commandTree.command(); + // Command null happens if you register an extension command with custom Cloud parameters... + if (command == null || session.hasPermission(command.commandPermission().permissionString())) { + var rootComponent = commandTree.component(); + String name = rootComponent.name(); + + LinkedHashMap<String, Set<CommandEnumConstraint>> values = new LinkedHashMap<>(); + for (String s : rootComponent.aliases()) { + values.put(s, EnumSet.of(CommandEnumConstraint.ALLOW_ALIASES)); + } + CommandEnumData aliases = new CommandEnumData(name + "Aliases", values, false); + + List<CommandOverloadData> data = new ArrayList<>(); + for (var node : commandTree.children()) { + List<List<CommandParamData>> params = new ArrayList<>(); + createParamData(node, params); + params.forEach(param -> data.add(new CommandOverloadData(false, param.toArray(CommandParamData[]::new)))); + } + + CommandData bedrockCommand = new CommandData(name, rootComponent.description().textDescription(), + Set.of(CommandData.Flag.NOT_CHEAT), CommandPermission.ANY, aliases, + Collections.emptyList(), data.toArray(new CommandOverloadData[0])); + bedrockCommands.add(bedrockCommand); + } + }); + } + + private void createParamData(CommandNode<GeyserCommandSource> node, List<List<CommandParamData>> bedrockData) { + CommandParamData data = new CommandParamData(); + var component = node.component(); + data.setName(component.name()); + data.setOptional(component.optional()); + var suggestionProvider = component.suggestionProvider(); + if (suggestionProvider instanceof LiteralParser<GeyserCommandSource> parser) { + Map<String, Set<CommandEnumConstraint>> values = new LinkedHashMap<>(); + for (String alias : parser.aliases()) { + values.put(alias, Set.of()); + } + + data.setEnumData(new CommandEnumData(component.name(), values, false)); + } else if (suggestionProvider instanceof IntegerParser<GeyserCommandSource>) { + data.setType(CommandParam.INT); + } else if (suggestionProvider instanceof EnumParser<?,?> parser) { + LinkedHashMap<String, Set<CommandEnumConstraint>> map = new LinkedHashMap<>(); + for (Enum<?> e : parser.acceptedValues()) { + map.put(e.name().toLowerCase(Locale.ROOT), Set.of()); + } + + data.setEnumData(new CommandEnumData(component.name().toLowerCase(Locale.ROOT), map, false)); + } else { + data.setType(CommandParam.STRING); + } + + // This, realistically, is not going to be used without extensions using internals and implementing complicated commands. + // It essentially does the same behavior as JavaCommandsTranslator#isCompatible. + // But, selfishly, I would like to use it, and in the future it's possible extensions can register commands + // using Cloud, and in that case this becomes relevant! + if (bedrockData.isEmpty()) { + List<CommandParamData> list = new ArrayList<>(); + list.add(data); + bedrockData.add(list); + } else { + int size = bedrockData.size(); // Preserve original list size in case new entries get added. + for (int i = 0; i < size; i++) { + List<CommandParamData> cpdList = bedrockData.get(i); + if (cpdList.size() <= 1) { // No commands or parent will be root. + cpdList.add(data); + } else { + String parentName = node.parent().component().name(); // Should never be null. + if (!cpdList.get(cpdList.size() - 1).getName().equals(parentName)) { // We need to copy the list as this is a new branch. + for (int j = cpdList.size() - 2; j >= 0; j--) { + if (cpdList.get(j).getName().equals(parentName)) { + List<CommandParamData> newList = new ArrayList<>(cpdList.subList(0, j + 1)); + newList.add(data); + bedrockData.add(newList); + break; + } + } + } else { + cpdList.add(data); + } + } + } + } + + for (var child : node.children()) { + createParamData(child, bedrockData); + } + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java index f189658cd..8eff3d16c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java @@ -41,6 +41,7 @@ import org.cloudburstmc.protocol.bedrock.data.command.*; import org.cloudburstmc.protocol.bedrock.packet.AvailableCommandsPacket; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.event.java.ServerDefineCommandsEvent; +import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.command.CommandRegistry; import org.geysermc.geyser.item.enchantment.Enchantment; import org.geysermc.geyser.registry.BlockRegistries; @@ -213,6 +214,10 @@ public class JavaCommandsTranslator extends PacketTranslator<ClientboundCommands commandData.add(createFakeHelpCommand()); } + if (session.getGeyser().platformType() == PlatformType.STANDALONE) { + session.getGeyser().commandRegistry().export(session, commandData); + } + // Add our commands to the AvailableCommandsPacket for the bedrock client AvailableCommandsPacket availableCommandsPacket = new AvailableCommandsPacket(); availableCommandsPacket.getCommands().addAll(commandData); From dc1674fcbfd321ab2a1c323b4333ba95d08ba596 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Fri, 1 Nov 2024 13:13:20 -0400 Subject: [PATCH 045/165] Massively clean up Cloud -> Bedrock code --- .../geyser/command/CommandRegistry.java | 55 ++++++------------- 1 file changed, 18 insertions(+), 37 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java b/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java index 78e8a5cb1..03569d49f 100644 --- a/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java @@ -67,6 +67,7 @@ import org.incendo.cloud.internal.CommandNode; import org.incendo.cloud.parser.standard.EnumParser; import org.incendo.cloud.parser.standard.IntegerParser; import org.incendo.cloud.parser.standard.LiteralParser; +import org.incendo.cloud.parser.standard.StringArrayParser; import java.util.ArrayList; import java.util.Collection; @@ -320,7 +321,7 @@ public class CommandRegistry implements EventRegistrar { } public void export(GeyserSession session, List<CommandData> bedrockCommands) { - cloud.commandTree().rootNode().children().forEach(commandTree -> { + cloud.commandTree().rootNodes().forEach(commandTree -> { var command = commandTree.command(); // Command null happens if you register an extension command with custom Cloud parameters... if (command == null || session.hasPermission(command.commandPermission().permissionString())) { @@ -335,9 +336,8 @@ public class CommandRegistry implements EventRegistrar { List<CommandOverloadData> data = new ArrayList<>(); for (var node : commandTree.children()) { - List<List<CommandParamData>> params = new ArrayList<>(); - createParamData(node, params); - params.forEach(param -> data.add(new CommandOverloadData(false, param.toArray(CommandParamData[]::new)))); + List<List<CommandParamData>> params = createParamData(node); + params.forEach(param -> data.add(new CommandOverloadData(false, param.toArray(CommandParamData[]::new)))); } CommandData bedrockCommand = new CommandData(name, rootComponent.description().textDescription(), @@ -348,7 +348,7 @@ public class CommandRegistry implements EventRegistrar { }); } - private void createParamData(CommandNode<GeyserCommandSource> node, List<List<CommandParamData>> bedrockData) { + private List<List<CommandParamData>> createParamData(CommandNode<GeyserCommandSource> node) { CommandParamData data = new CommandParamData(); var component = node.component(); data.setName(component.name()); @@ -370,44 +370,25 @@ public class CommandRegistry implements EventRegistrar { } data.setEnumData(new CommandEnumData(component.name().toLowerCase(Locale.ROOT), map, false)); + } else if (component.parser() instanceof StringArrayParser<?>) { + data.setType(CommandParam.TEXT); } else { data.setType(CommandParam.STRING); } - // This, realistically, is not going to be used without extensions using internals and implementing complicated commands. - // It essentially does the same behavior as JavaCommandsTranslator#isCompatible. - // But, selfishly, I would like to use it, and in the future it's possible extensions can register commands - // using Cloud, and in that case this becomes relevant! - if (bedrockData.isEmpty()) { - List<CommandParamData> list = new ArrayList<>(); + var children = node.children(); + if (children.isEmpty()) { + List<CommandParamData> list = new ArrayList<>(); // Must be mutable; parents will be added to list. list.add(data); - bedrockData.add(list); - } else { - int size = bedrockData.size(); // Preserve original list size in case new entries get added. - for (int i = 0; i < size; i++) { - List<CommandParamData> cpdList = bedrockData.get(i); - if (cpdList.size() <= 1) { // No commands or parent will be root. - cpdList.add(data); - } else { - String parentName = node.parent().component().name(); // Should never be null. - if (!cpdList.get(cpdList.size() - 1).getName().equals(parentName)) { // We need to copy the list as this is a new branch. - for (int j = cpdList.size() - 2; j >= 0; j--) { - if (cpdList.get(j).getName().equals(parentName)) { - List<CommandParamData> newList = new ArrayList<>(cpdList.subList(0, j + 1)); - newList.add(data); - bedrockData.add(newList); - break; - } - } - } else { - cpdList.add(data); - } - } - } + return Collections.singletonList(list); // Safe to do; will be consumed in an addAll call. } - - for (var child : node.children()) { - createParamData(child, bedrockData); + List<List<CommandParamData>> collectiveData = new ArrayList<>(); + // If a node has multiple children, this will need to be represented + // by creating a new list/branch for each and cloning this node down each line. + for (var child : children) { + collectiveData.addAll(createParamData(child)); } + collectiveData.forEach(list -> list.add(0, data)); + return collectiveData; } } From dd8a7a7edda4058748c5cd5d9c25adb73f26d524 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Fri, 1 Nov 2024 14:42:21 -0400 Subject: [PATCH 046/165] Map experimental items to 'minecraft:unknown' Bedrock block --- .../geyser/command/CommandRegistry.java | 6 ++++- .../populator/BlockRegistryPopulator.java | 2 +- .../populator/ItemRegistryPopulator.java | 26 ++++++++++++------- .../protocol/java/JavaCommandsTranslator.java | 2 +- .../java/JavaRecipeBookAddTranslator.java | 7 +++++ core/src/main/resources/mappings | 2 +- 6 files changed, 31 insertions(+), 14 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java b/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java index 03569d49f..9de7582a5 100644 --- a/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java @@ -320,13 +320,17 @@ public class CommandRegistry implements EventRegistrar { cloud.commandExecutor().executeCommand(source, command); } - public void export(GeyserSession session, List<CommandData> bedrockCommands) { + public void export(GeyserSession session, List<CommandData> bedrockCommands, Set<String> knownAliases) { cloud.commandTree().rootNodes().forEach(commandTree -> { var command = commandTree.command(); // Command null happens if you register an extension command with custom Cloud parameters... if (command == null || session.hasPermission(command.commandPermission().permissionString())) { var rootComponent = commandTree.component(); String name = rootComponent.name(); + if (!knownAliases.add(name)) { + // If the server already defined the command, let's not crash. + return; + } LinkedHashMap<String, Set<CommandEnumConstraint>> values = new LinkedHashMap<>(); for (String s : rootComponent.aliases()) { 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 a8c3ee89f..b95da4f8f 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 @@ -283,7 +283,7 @@ public final class BlockRegistryPopulator { .build(); } - GeyserBedrockBlock vanillaBedrockDefinition = blockStateOrderedMap.getOrDefault(bedrockTag, airDefinition); // FIXME EEE + GeyserBedrockBlock vanillaBedrockDefinition = blockStateOrderedMap.get(bedrockTag); GeyserBedrockBlock bedrockDefinition; CustomBlockState blockStateOverride = BlockRegistries.CUSTOM_BLOCK_STATE_OVERRIDES.get(javaRuntimeId); 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 e8b894759..18a34f088 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 @@ -84,6 +84,7 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -95,7 +96,7 @@ import java.util.concurrent.atomic.AtomicInteger; */ public class ItemRegistryPopulator { - record PaletteVersion(String version, int protocolVersion, Map<Item, String> javaOnlyItems, Remapper remapper) { + record PaletteVersion(String version, int protocolVersion, Map<Item, Item> javaOnlyItems, Remapper remapper) { public PaletteVersion(String version, int protocolVersion) { this(version, protocolVersion, Collections.emptyMap(), (item, mapping) -> mapping); @@ -109,11 +110,17 @@ public class ItemRegistryPopulator { } public static void populate() { + List<Item> bundles = List.of(Items.BUNDLE, Items.BLACK_BUNDLE, Items.BLUE_BUNDLE, Items.BROWN_BUNDLE, Items.CYAN_BUNDLE, Items.GRAY_BUNDLE, + Items.GREEN_BUNDLE, Items.LIGHT_BLUE_BUNDLE, Items.LIGHT_GRAY_BUNDLE, Items.LIME_BUNDLE, Items.MAGENTA_BUNDLE, Items.ORANGE_BUNDLE, Items.RED_BUNDLE, + Items.PINK_BUNDLE, Items.PURPLE_BUNDLE, Items.WHITE_BUNDLE, Items.YELLOW_BUNDLE); + Map<Item, Item> pre1_21_2Items = new HashMap<>(); + bundles.forEach(bundle -> pre1_21_2Items.put(bundle, Items.SHULKER_SHELL)); + List<PaletteVersion> paletteVersions = new ArrayList<>(3); - paletteVersions.add(new PaletteVersion("1_20_80", Bedrock_v671.CODEC.getProtocolVersion(), Collections.emptyMap(), Conversion685_671::remapItem)); - paletteVersions.add(new PaletteVersion("1_21_0", Bedrock_v685.CODEC.getProtocolVersion(), Collections.emptyMap(), Conversion712_685::remapItem)); - paletteVersions.add(new PaletteVersion("1_21_20", Bedrock_v712.CODEC.getProtocolVersion(), Collections.emptyMap(), Conversion729_712::remapItem)); - paletteVersions.add(new PaletteVersion("1_21_30", Bedrock_v729.CODEC.getProtocolVersion(), Collections.emptyMap(), Conversion748_729::remapItem)); + paletteVersions.add(new PaletteVersion("1_20_80", Bedrock_v671.CODEC.getProtocolVersion(), pre1_21_2Items, Conversion685_671::remapItem)); + paletteVersions.add(new PaletteVersion("1_21_0", Bedrock_v685.CODEC.getProtocolVersion(), pre1_21_2Items, Conversion712_685::remapItem)); + paletteVersions.add(new PaletteVersion("1_21_20", Bedrock_v712.CODEC.getProtocolVersion(), pre1_21_2Items, Conversion729_712::remapItem)); + paletteVersions.add(new PaletteVersion("1_21_30", Bedrock_v729.CODEC.getProtocolVersion(), pre1_21_2Items, Conversion748_729::remapItem)); paletteVersions.add(new PaletteVersion("1_21_40", Bedrock_v748.CODEC.getProtocolVersion())); GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); @@ -227,7 +234,7 @@ public class ItemRegistryPopulator { Set<Item> javaOnlyItems = new ObjectOpenHashSet<>(); Collections.addAll(javaOnlyItems, Items.SPECTRAL_ARROW, Items.DEBUG_STICK, - Items.KNOWLEDGE_BOOK, Items.TIPPED_ARROW, Items.BUNDLE); + Items.KNOWLEDGE_BOOK, Items.TIPPED_ARROW); if (!customItemsAllowed) { javaOnlyItems.add(Items.FURNACE_MINECART); } @@ -243,9 +250,9 @@ public class ItemRegistryPopulator { throw new RuntimeException("Extra item in mappings? " + entry.getKey()); } GeyserMappingItem mappingItem; - String replacementItem = palette.javaOnlyItems().get(javaItem); + Item replacementItem = palette.javaOnlyItems().get(javaItem); if (replacementItem != null) { - mappingItem = items.get(replacementItem); // java only item, a java id fallback has been provided + mappingItem = items.get(replacementItem.javaIdentifier()); // java only item, a java id fallback has been provided } else { // check if any mapping changes need to be made on this version mappingItem = palette.remapper().remap(javaItem, entry.getValue()); @@ -260,8 +267,7 @@ public class ItemRegistryPopulator { String bedrockIdentifier = mappingItem.getBedrockIdentifier(); ItemDefinition definition = definitions.get(bedrockIdentifier); if (definition == null) { - definition = definitions.get("minecraft:air"); - //throw new RuntimeException("Missing Bedrock ItemDefinition in version " + palette.version() + " for mapping: " + mappingItem); + throw new RuntimeException("Missing Bedrock ItemDefinition in version " + palette.version() + " for mapping: " + mappingItem); } BlockDefinition bedrockBlock = null; diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java index 8eff3d16c..5500deb80 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java @@ -215,7 +215,7 @@ public class JavaCommandsTranslator extends PacketTranslator<ClientboundCommands } if (session.getGeyser().platformType() == PlatformType.STANDALONE) { - session.getGeyser().commandRegistry().export(session, commandData); + session.getGeyser().commandRegistry().export(session, commandData, knownAliases); } // Add our commands to the AvailableCommandsPacket for the bedrock client diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java index 5cc2e3063..d59d608a2 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java @@ -110,6 +110,9 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec for (int i = 0; i < left.size(); i++) { List<ItemDescriptorWithCount> inputs = left.get(i); String recipeId = contents.id() + "_" + i; + if (recipeId.equals("1318_0")) { + System.out.println(display); + } int recipeNetworkId = netId++; craftingDataPacket.getCraftingData().add(ShapedRecipeData.shaped(recipeId, shapedRecipe.width(), shapedRecipe.height(), inputs, @@ -268,8 +271,12 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec Pair<Item, ItemData> pair = translateToOutput(session, display.result()); if (pair == null || !pair.right().isValid()) { // Likely modded item Bedrock will complain about + // Implementation note: ItemData#isValid() may return true for air because count might be > 0 and the air definition may not be ItemDefinition.AIR return null; } + if (pair.left() == Items.PALE_OAK_TRAPDOOR) { + System.out.println(pair.right()); + } ItemData output = pair.right(); if (!(pair.left() instanceof BedrockRequiresTagItem)) { diff --git a/core/src/main/resources/mappings b/core/src/main/resources/mappings index 4200a8c57..e1eafe2c5 160000 --- a/core/src/main/resources/mappings +++ b/core/src/main/resources/mappings @@ -1 +1 @@ -Subproject commit 4200a8c57a79a87b5b9e7ea1aaf9d5522c4f5626 +Subproject commit e1eafe2c5304012d23acba80659459f7868fe2b1 From 293102e60dd98a6d54e667b58c150698874f3489 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Fri, 1 Nov 2024 14:44:08 -0400 Subject: [PATCH 047/165] Remove debug code --- .../protocol/java/JavaRecipeBookAddTranslator.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java index d59d608a2..039afc2e7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java @@ -110,9 +110,6 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec for (int i = 0; i < left.size(); i++) { List<ItemDescriptorWithCount> inputs = left.get(i); String recipeId = contents.id() + "_" + i; - if (recipeId.equals("1318_0")) { - System.out.println(display); - } int recipeNetworkId = netId++; craftingDataPacket.getCraftingData().add(ShapedRecipeData.shaped(recipeId, shapedRecipe.width(), shapedRecipe.height(), inputs, @@ -274,9 +271,6 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec // Implementation note: ItemData#isValid() may return true for air because count might be > 0 and the air definition may not be ItemDefinition.AIR return null; } - if (pair.left() == Items.PALE_OAK_TRAPDOOR) { - System.out.println(pair.right()); - } ItemData output = pair.right(); if (!(pair.left() instanceof BedrockRequiresTagItem)) { From 67a1805fa65374b079e72da6ca8db83da6aabed4 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Fri, 1 Nov 2024 14:48:07 -0400 Subject: [PATCH 048/165] Indicate support for Bedrock 1.21.44 Bedrock are u ok --- README.md | 2 +- .../main/java/org/geysermc/geyser/network/GameProtocol.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index fedb5bb96..329a9045e 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,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! ## Supported Versions -Geyser is currently supporting Minecraft Bedrock 1.20.80 - 1.21.43 and Minecraft Java 1.21/1.21.1. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). +Geyser is currently supporting Minecraft Bedrock 1.20.80 - 1.21.44 and Minecraft Java 1.21/1.21.1. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). ## Setting Up Take a look [here](https://geysermc.org/wiki/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 464edd487..873fa413a 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -52,7 +52,7 @@ public final class GameProtocol { * release of the game that Geyser supports. */ public static final BedrockCodec DEFAULT_BEDROCK_CODEC = CodecProcessor.processCodec(Bedrock_v748.CODEC.toBuilder() - .minecraftVersion("1.21.43") + .minecraftVersion("1.21.44") .build()); /** @@ -83,7 +83,7 @@ public final class GameProtocol { .minecraftVersion("1.21.30/1.21.31") .build())); SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC.toBuilder() - .minecraftVersion("1.21.40/1.21.41/1.21.43") + .minecraftVersion("1.21.40 - 1.21.44") .build()); } From 0eec65c1880396a0ba105a58eccea30fa7d08eec Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Thu, 31 Oct 2024 18:24:54 +0800 Subject: [PATCH 049/165] Fix: Geyser-NeoForge complaining about jackson --- bootstrap/mod/fabric/build.gradle.kts | 1 - bootstrap/mod/neoforge/build.gradle.kts | 14 ++++++++++++++ ...eyser.modrinth-uploading-conventions.gradle.kts | 1 + gradle/libs.versions.toml | 5 +++-- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/bootstrap/mod/fabric/build.gradle.kts b/bootstrap/mod/fabric/build.gradle.kts index 56bec322e..2599a47b5 100644 --- a/bootstrap/mod/fabric/build.gradle.kts +++ b/bootstrap/mod/fabric/build.gradle.kts @@ -46,7 +46,6 @@ tasks.withType<Jar> { relocate("org.cloudburstmc.netty") relocate("org.cloudburstmc.protocol") -relocate("com.github.steveice10.mc.auth") tasks { remapJar { diff --git a/bootstrap/mod/neoforge/build.gradle.kts b/bootstrap/mod/neoforge/build.gradle.kts index 4ab005b4f..23f16d64e 100644 --- a/bootstrap/mod/neoforge/build.gradle.kts +++ b/bootstrap/mod/neoforge/build.gradle.kts @@ -13,6 +13,9 @@ architectury { provided("org.cloudburstmc.math", "api") provided("com.google.errorprone", "error_prone_annotations") +// Jackson shipped by Minecraft is too old, so we shade & relocate our newer version +relocate("com.fasterxml.jackson") + val includeTransitive: Configuration = configurations.getByName("includeTransitive") dependencies { @@ -31,6 +34,12 @@ dependencies { } shadow(projects.core) { isTransitive = false } + // Minecraft (1.21.2+) includes jackson. But an old version! + shadow(libs.jackson.core) { isTransitive = false } + shadow(libs.jackson.databind) { isTransitive = false } + shadow(libs.jackson.dataformat.yaml) { isTransitive = false } + shadow(libs.jackson.annotations) { isTransitive = false } + // Let's shade in our own api shadow(projects.api) { isTransitive = false } @@ -56,6 +65,11 @@ tasks { remapModrinthJar { archiveBaseName.set("geyser-neoforge") } + + shadowJar { + // Without this, jackson's service files are not relocated + mergeServiceFiles() + } } modrinth { diff --git a/build-logic/src/main/kotlin/geyser.modrinth-uploading-conventions.gradle.kts b/build-logic/src/main/kotlin/geyser.modrinth-uploading-conventions.gradle.kts index 3c0d102f7..59f85d182 100644 --- a/build-logic/src/main/kotlin/geyser.modrinth-uploading-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/geyser.modrinth-uploading-conventions.gradle.kts @@ -7,6 +7,7 @@ tasks.modrinth.get().dependsOn(tasks.modrinthSyncBody) modrinth { token.set(System.getenv("MODRINTH_TOKEN") ?: "") // Even though this is the default value, apparently this prevents GitHub Actions caching the token? + debugMode.set(System.getenv("MODRINTH_TOKEN") == null) projectId.set("geyser") versionName.set(versionName(project)) versionNumber.set(projectVersion(project)) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9031799cf..60fe78448 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -60,7 +60,8 @@ erosion-bukkit-nms = { group = "org.geysermc.erosion", name = "bukkit-nms", vers erosion-common = { group = "org.geysermc.erosion", name = "common", version.ref = "erosion" } jackson-annotations = { group = "com.fasterxml.jackson.core", name = "jackson-annotations", version.ref = "jackson" } -jackson-core = { group = "com.fasterxml.jackson.core", name = "jackson-databind", version.ref = "jackson" } +jackson-databind = { group = "com.fasterxml.jackson.core", name = "jackson-databind", version.ref = "jackson" } +jackson-core = { group = "com.fasterxml.jackson.core", name = "jackson-core", version.ref = "jackson" } jackson-dataformat-yaml = { group = "com.fasterxml.jackson.dataformat", name = "jackson-dataformat-yaml", version.ref = "jackson" } fastutil-int-int-maps = { group = "com.nukkitx.fastutil", name = "fastutil-int-int-maps", version.ref = "fastutil" } @@ -150,7 +151,7 @@ indra = { id = "net.kyori.indra", version.ref = "indra" } blossom = { id = "net.kyori.blossom", version.ref = "blossom" } [bundles] -jackson = [ "jackson-annotations", "jackson-core", "jackson-dataformat-yaml" ] +jackson = [ "jackson-annotations", "jackson-databind", "jackson-dataformat-yaml" ] fastutil = [ "fastutil-int-int-maps", "fastutil-int-long-maps", "fastutil-int-byte-maps", "fastutil-int-boolean-maps", "fastutil-object-int-maps", "fastutil-object-object-maps" ] adventure = [ "adventure-text-serializer-gson", "adventure-text-serializer-legacy", "adventure-text-serializer-plain" ] log4j = [ "log4j-api", "log4j-core", "log4j-slf4j2-impl" ] From 734e429cef16049ae0b4b3f39dc168b2b0ce52b1 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Sat, 2 Nov 2024 01:38:24 -0400 Subject: [PATCH 050/165] Map Java tags to Bedrock tags in recipes where possible Bedrock tags have been generated from Endstone's devtools. --- .../geysermc/geyser/registry/Registries.java | 8 + .../populator/TagRegistryPopulator.java | 133 +++ .../geyser/session/cache/TagCache.java | 11 +- .../java/JavaRecipeBookAddTranslator.java | 14 + .../resources/bedrock/item_tags.1_20_80.json | 784 +++++++++++++++++ .../resources/bedrock/item_tags.1_21_0.json | 802 +++++++++++++++++ .../resources/bedrock/item_tags.1_21_20.json | 806 ++++++++++++++++++ .../resources/bedrock/item_tags.1_21_30.json | 806 ++++++++++++++++++ .../resources/bedrock/item_tags.1_21_40.json | 806 ++++++++++++++++++ 9 files changed, 4167 insertions(+), 3 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java create mode 100644 core/src/main/resources/bedrock/item_tags.1_20_80.json create mode 100644 core/src/main/resources/bedrock/item_tags.1_21_0.json create mode 100644 core/src/main/resources/bedrock/item_tags.1_21_20.json create mode 100644 core/src/main/resources/bedrock/item_tags.1_21_30.json create mode 100644 core/src/main/resources/bedrock/item_tags.1_21_40.json diff --git a/core/src/main/java/org/geysermc/geyser/registry/Registries.java b/core/src/main/java/org/geysermc/geyser/registry/Registries.java index 20b3c9331..b0ae0d6aa 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/Registries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/Registries.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.registry; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2IntMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; @@ -48,6 +49,7 @@ import org.geysermc.geyser.registry.loader.SoundRegistryLoader; import org.geysermc.geyser.registry.loader.SoundTranslatorRegistryLoader; import org.geysermc.geyser.registry.populator.ItemRegistryPopulator; import org.geysermc.geyser.registry.populator.PacketRegistryPopulator; +import org.geysermc.geyser.registry.populator.TagRegistryPopulator; import org.geysermc.geyser.registry.provider.ProviderSupplier; import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.registry.type.ParticleMapping; @@ -163,6 +165,11 @@ public final class Registries { */ public static final SimpleMappedDeferredRegistry<String, ResourcePack> RESOURCE_PACKS = SimpleMappedDeferredRegistry.create(GeyserImpl.getInstance().packDirectory(), RegistryLoaders.RESOURCE_PACKS); + /** + * A versioned registry holding most Bedrock tags, with the Java item list (sorted) being the key, and the tag name as the value. + */ + public static final VersionedRegistry<Object2ObjectMap<int[], String>> TAGS = VersionedRegistry.create(RegistryLoaders.empty(Int2ObjectOpenHashMap::new)); + /** * A mapped registry holding sound identifiers to their corresponding {@link SoundMapping}. */ @@ -202,6 +209,7 @@ public final class Registries { public static void populate() { PacketRegistryPopulator.populate(); ItemRegistryPopulator.populate(); + TagRegistryPopulator.populate(); // potion mixes depend on other registries POTION_MIXES.load(); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java new file mode 100644 index 000000000..455145217 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java @@ -0,0 +1,133 @@ +/* + * Copyright (c) 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 com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; +import it.unimi.dsi.fastutil.Hash; +import it.unimi.dsi.fastutil.ints.IntArrayList; +import it.unimi.dsi.fastutil.ints.IntList; +import it.unimi.dsi.fastutil.objects.Object2ObjectMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap; +import it.unimi.dsi.fastutil.objects.ObjectIntPair; +import org.cloudburstmc.protocol.bedrock.codec.v671.Bedrock_v671; +import org.cloudburstmc.protocol.bedrock.codec.v685.Bedrock_v685; +import org.cloudburstmc.protocol.bedrock.codec.v712.Bedrock_v712; +import org.cloudburstmc.protocol.bedrock.codec.v729.Bedrock_v729; +import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748; +import org.geysermc.geyser.GeyserBootstrap; +import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.item.type.Item; +import org.geysermc.geyser.registry.Registries; +import org.geysermc.geyser.registry.type.ItemMapping; +import org.geysermc.geyser.registry.type.ItemMappings; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +public final class TagRegistryPopulator { + private static final Gson GSON = new GsonBuilder().create(); // temporary + + public static void populate() { + List<ObjectIntPair<String>> paletteVersions = List.of( + ObjectIntPair.of("1_20_80", Bedrock_v671.CODEC.getProtocolVersion()), + ObjectIntPair.of("1_21_0", Bedrock_v685.CODEC.getProtocolVersion()), + ObjectIntPair.of("1_21_20", Bedrock_v712.CODEC.getProtocolVersion()), + ObjectIntPair.of("1_21_30", Bedrock_v729.CODEC.getProtocolVersion()), + ObjectIntPair.of("1_21_40", Bedrock_v748.CODEC.getProtocolVersion()) + ); + TypeToken<Map<String, List<String>>> type = new TypeToken<>() {}; + + GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); + + for (var palette : paletteVersions) { + ItemMappings mappings = Registries.ITEMS.forVersion(palette.rightInt()); + + Map<String, List<String>> bedrockTags; + try (InputStream stream = bootstrap.getResourceOrThrow(String.format("bedrock/item_tags.%s.json", palette.left()))) { + bedrockTags = GSON.fromJson(new InputStreamReader(stream), type); + } catch (Exception e) { + throw new AssertionError("Unable to load Bedrock runtime item IDs", e); + } + + Object2ObjectMap<int[], String> javaItemsToBedrockTag = new Object2ObjectOpenCustomHashMap<>(new Hash.Strategy<>() { + // Necessary so arrays can actually be compared + @Override + public int hashCode(int[] o) { + return Arrays.hashCode(o); + } + + @Override + public boolean equals(int[] a, int[] b) { + return Arrays.equals(a, b); + } + }); + + for (var entry : bedrockTags.entrySet()) { + List<String> value = entry.getValue(); + if (value.isEmpty() || value.size() == 1) { + // For our usecase, we don't need this. Empty values are worthless; one value can just be a reference + // to the item itself, instead of the tag. + continue; + } + + // In some cases, the int list will need to be minimized + IntList javaNetworkIds = new IntArrayList(value.size()); + for (int i = 0; i < value.size(); i++) { + String bedrockIdentifier = value.get(i); + Item javaItem = Registries.JAVA_ITEM_IDENTIFIERS.get(bedrockIdentifier); + if (javaItem == null) { + // Time to search the long way around. + for (ItemMapping mapping : mappings.getItems()) { + if (mapping.getBedrockIdentifier().equals(bedrockIdentifier)) { + javaItem = mapping.getJavaItem(); + break; + } + } + } + if (javaItem == null) { + // Triggers for Bedrock-only spawn eggs. We don't care. + continue; + } + + javaNetworkIds.add(javaItem.javaId()); + } + + int[] javaNetworkIdArray = javaNetworkIds.toIntArray(); + // Sort IDs so equality checks just have to match if each is equal and not necessarily an order difference. + Arrays.sort(javaNetworkIdArray); + + javaItemsToBedrockTag.put(javaNetworkIdArray, entry.getKey()); + } + + Registries.TAGS.register(palette.rightInt(), javaItemsToBedrockTag); + } + } +} diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java index f01ef64c5..2b0f257a3 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java @@ -90,13 +90,18 @@ public final class TagCache { } } - loadTags(registryTags, registry); + loadTags(registryTags, registry, registry == JavaRegistries.ITEM); } } - private void loadTags(Map<Key, int[]> packetTags, JavaRegistryKey<?> registry) { + private void loadTags(Map<Key, int[]> packetTags, JavaRegistryKey<?> registry, boolean sort) { for (Map.Entry<Key, int[]> tag : packetTags.entrySet()) { - this.tags.put(new Tag<>(registry, tag.getKey()), tag.getValue()); + int[] value = tag.getValue(); + if (sort) { + // Used in RecipeBookAddTranslator + Arrays.sort(value); + } + this.tags.put(new Tag<>(registry, tag.getKey()), value); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java index 039afc2e7..05be7db3d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java @@ -37,6 +37,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.Shapeles import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.SmithingTransformRecipeData; 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.UnlockedRecipesPacket; import org.geysermc.geyser.inventory.recipe.GeyserRecipe; @@ -190,6 +191,7 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec TAG_TO_ITEM_DESCRIPTOR_CACHE.remove(); } + // Arrays are usually an issue in maps, but because it's referencing the tag array that is unchanged, it actually works out for us. private static final ThreadLocal<Map<int[], List<ItemDescriptorWithCount>>> TAG_TO_ITEM_DESCRIPTOR_CACHE = ThreadLocal.withInitial(Object2ObjectOpenHashMap::new); private List<ItemDescriptorWithCount> translateToInput(GeyserSession session, SlotDisplay slotDisplay) { @@ -228,6 +230,18 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec // Cache is implemented as, presumably, an item tag will be used multiple times in succession // (E.G. a chest with planks tags) return TAG_TO_ITEM_DESCRIPTOR_CACHE.get().computeIfAbsent(items, key -> { + var bedrockTags = Registries.TAGS.forVersion(session.getUpstream().getProtocolVersion()); + String bedrockTag = bedrockTags.get(key); + if (bedrockTag != null) { + return Collections.singletonList( + new ItemDescriptorWithCount(new ItemTagDescriptor(bedrockTag), 1) + ); + } + + // In the future, we can probably search through and use subsets of tags as well. + // I.E. if a Bedrock tag contains [stone stone_brick] and the Java tag uses [stone stone_brick bricks] + // we can still use that Bedrock tag alongside plain item descriptors for "bricks". + Set<ItemDescriptorWithCount> itemDescriptors = new HashSet<>(); for (int item : key) { itemDescriptors.add(fromItem(session, item)); diff --git a/core/src/main/resources/bedrock/item_tags.1_20_80.json b/core/src/main/resources/bedrock/item_tags.1_20_80.json new file mode 100644 index 000000000..4203c96c1 --- /dev/null +++ b/core/src/main/resources/bedrock/item_tags.1_20_80.json @@ -0,0 +1,784 @@ +{ + "minecraft:arrow": [ + "minecraft:arrow" + ], + "minecraft:banner": [ + "minecraft:banner" + ], + "minecraft:boat": [ + "minecraft:oak_boat", + "minecraft:birch_boat", + "minecraft:jungle_boat", + "minecraft:spruce_boat", + "minecraft:mangrove_boat", + "minecraft:acacia_boat", + "minecraft:oak_chest_boat", + "minecraft:dark_oak_boat", + "minecraft:birch_chest_boat", + "minecraft:jungle_chest_boat", + "minecraft:spruce_chest_boat", + "minecraft:acacia_chest_boat", + "minecraft:dark_oak_chest_boat", + "minecraft:mangrove_chest_boat", + "minecraft:cherry_boat", + "minecraft:cherry_chest_boat", + "minecraft:bamboo_raft", + "minecraft:bamboo_chest_raft" + ], + "minecraft:boats": [ + "minecraft:oak_boat", + "minecraft:birch_boat", + "minecraft:jungle_boat", + "minecraft:spruce_boat", + "minecraft:mangrove_boat", + "minecraft:acacia_boat", + "minecraft:oak_chest_boat", + "minecraft:dark_oak_boat", + "minecraft:birch_chest_boat", + "minecraft:jungle_chest_boat", + "minecraft:spruce_chest_boat", + "minecraft:acacia_chest_boat", + "minecraft:dark_oak_chest_boat", + "minecraft:mangrove_chest_boat", + "minecraft:cherry_boat", + "minecraft:cherry_chest_boat", + "minecraft:bamboo_raft", + "minecraft:bamboo_chest_raft" + ], + "minecraft:bookshelf_books": [ + "minecraft:book", + "minecraft:writable_book", + "minecraft:enchanted_book", + "minecraft:written_book" + ], + "minecraft:chainmail_tier": [ + "minecraft:chainmail_helmet", + "minecraft:chainmail_leggings", + "minecraft:chainmail_chestplate", + "minecraft:chainmail_boots" + ], + "minecraft:chest_boat": [], + "minecraft:coals": [ + "minecraft:coal", + "minecraft:charcoal" + ], + "minecraft:crimson_stems": [ + "minecraft:crimson_hyphae", + "minecraft:stripped_crimson_hyphae", + "minecraft:crimson_stem", + "minecraft:stripped_crimson_stem" + ], + "minecraft:decorated_pot_sherds": [ + "minecraft:blade_pottery_sherd", + "minecraft:brick", + "minecraft:angler_pottery_sherd", + "minecraft:burn_pottery_sherd", + "minecraft:archer_pottery_sherd", + "minecraft:arms_up_pottery_sherd", + "minecraft:heartbreak_pottery_sherd", + "minecraft:brewer_pottery_sherd", + "minecraft:danger_pottery_sherd", + "minecraft:explorer_pottery_sherd", + "minecraft:friend_pottery_sherd", + "minecraft:heart_pottery_sherd", + "minecraft:howl_pottery_sherd", + "minecraft:miner_pottery_sherd", + "minecraft:mourner_pottery_sherd", + "minecraft:plenty_pottery_sherd", + "minecraft:skull_pottery_sherd", + "minecraft:prize_pottery_sherd", + "minecraft:sheaf_pottery_sherd", + "minecraft:shelter_pottery_sherd", + "minecraft:snort_pottery_sherd" + ], + "minecraft:diamond_tier": [ + "minecraft:diamond_axe", + "minecraft:diamond_sword", + "minecraft:diamond_pickaxe", + "minecraft:diamond_shovel", + "minecraft:diamond_hoe", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots" + ], + "minecraft:digger": [ + "minecraft:stone_pickaxe", + "minecraft:iron_pickaxe", + "minecraft:iron_shovel", + "minecraft:iron_axe", + "minecraft:wooden_shovel", + "minecraft:wooden_pickaxe", + "minecraft:stone_shovel", + "minecraft:wooden_axe", + "minecraft:stone_axe", + "minecraft:diamond_shovel", + "minecraft:diamond_pickaxe", + "minecraft:diamond_axe", + "minecraft:golden_shovel", + "minecraft:golden_pickaxe", + "minecraft:golden_axe", + "minecraft:wooden_hoe", + "minecraft:stone_hoe", + "minecraft:iron_hoe", + "minecraft:diamond_hoe", + "minecraft:golden_hoe", + "minecraft:netherite_shovel", + "minecraft:netherite_pickaxe", + "minecraft:netherite_axe", + "minecraft:netherite_hoe" + ], + "minecraft:door": [ + "minecraft:wooden_door", + "minecraft:iron_door", + "minecraft:spruce_door", + "minecraft:birch_door", + "minecraft:crimson_door", + "minecraft:jungle_door", + "minecraft:dark_oak_door", + "minecraft:acacia_door", + "minecraft:mangrove_door", + "minecraft:warped_door", + "minecraft:cherry_door", + "minecraft:bamboo_door" + ], + "minecraft:golden_tier": [ + "minecraft:golden_sword", + "minecraft:golden_hoe", + "minecraft:golden_shovel", + "minecraft:golden_chestplate", + "minecraft:golden_pickaxe", + "minecraft:golden_axe", + "minecraft:golden_leggings", + "minecraft:golden_helmet", + "minecraft:golden_boots" + ], + "minecraft:hanging_actor": [ + "minecraft:painting" + ], + "minecraft:hanging_sign": [ + "minecraft:cherry_hanging_sign", + "minecraft:oak_hanging_sign", + "minecraft:crimson_hanging_sign", + "minecraft:acacia_hanging_sign", + "minecraft:spruce_hanging_sign", + "minecraft:birch_hanging_sign", + "minecraft:jungle_hanging_sign", + "minecraft:dark_oak_hanging_sign", + "minecraft:warped_hanging_sign", + "minecraft:mangrove_hanging_sign", + "minecraft:bamboo_hanging_sign" + ], + "minecraft:horse_armor": [ + "minecraft:leather_horse_armor", + "minecraft:iron_horse_armor", + "minecraft:golden_horse_armor", + "minecraft:diamond_horse_armor" + ], + "minecraft:iron_tier": [ + "minecraft:iron_pickaxe", + "minecraft:iron_shovel", + "minecraft:iron_sword", + "minecraft:iron_axe", + "minecraft:iron_hoe", + "minecraft:iron_chestplate", + "minecraft:iron_helmet", + "minecraft:iron_leggings", + "minecraft:iron_boots" + ], + "minecraft:is_armor": [ + "minecraft:leather_boots", + "minecraft:leather_leggings", + "minecraft:leather_helmet", + "minecraft:leather_chestplate", + "minecraft:chainmail_leggings", + "minecraft:elytra", + "minecraft:chainmail_helmet", + "minecraft:chainmail_chestplate", + "minecraft:chainmail_boots", + "minecraft:iron_helmet", + "minecraft:iron_chestplate", + "minecraft:iron_leggings", + "minecraft:iron_boots", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots", + "minecraft:golden_helmet", + "minecraft:golden_chestplate", + "minecraft:golden_leggings", + "minecraft:golden_boots", + "minecraft:turtle_helmet", + "minecraft:netherite_helmet", + "minecraft:netherite_chestplate", + "minecraft:netherite_leggings", + "minecraft:netherite_boots" + ], + "minecraft:is_axe": [ + "minecraft:iron_axe", + "minecraft:wooden_axe", + "minecraft:diamond_axe", + "minecraft:netherite_axe", + "minecraft:stone_axe", + "minecraft:golden_axe" + ], + "minecraft:is_cooked": [ + "minecraft:cooked_porkchop", + "minecraft:cooked_cod", + "minecraft:rabbit_stew", + "minecraft:cooked_salmon", + "minecraft:cooked_beef", + "minecraft:cooked_chicken", + "minecraft:cooked_rabbit", + "minecraft:cooked_mutton" + ], + "minecraft:is_fish": [ + "minecraft:cod", + "minecraft:salmon", + "minecraft:tropical_fish", + "minecraft:pufferfish", + "minecraft:cooked_salmon", + "minecraft:cooked_cod" + ], + "minecraft:is_food": [ + "minecraft:porkchop", + "minecraft:cooked_mutton", + "minecraft:apple", + "minecraft:golden_apple", + "minecraft:dried_kelp", + "minecraft:cooked_porkchop", + "minecraft:mushroom_stew", + "minecraft:enchanted_golden_apple", + "minecraft:bread", + "minecraft:cookie", + "minecraft:melon_slice", + "minecraft:beef", + "minecraft:cooked_beef", + "minecraft:chicken", + "minecraft:cooked_chicken", + "minecraft:rotten_flesh", + "minecraft:carrot", + "minecraft:potato", + "minecraft:baked_potato", + "minecraft:golden_carrot", + "minecraft:pumpkin_pie", + "minecraft:beetroot", + "minecraft:beetroot_soup", + "minecraft:sweet_berries", + "minecraft:rabbit", + "minecraft:cooked_rabbit", + "minecraft:rabbit_stew", + "minecraft:mutton" + ], + "minecraft:is_hoe": [ + "minecraft:wooden_hoe", + "minecraft:stone_hoe", + "minecraft:iron_hoe", + "minecraft:netherite_hoe", + "minecraft:diamond_hoe", + "minecraft:golden_hoe" + ], + "minecraft:is_meat": [ + "minecraft:rotten_flesh", + "minecraft:porkchop", + "minecraft:cooked_mutton", + "minecraft:cooked_porkchop", + "minecraft:cooked_chicken", + "minecraft:beef", + "minecraft:rabbit", + "minecraft:cooked_beef", + "minecraft:chicken", + "minecraft:cooked_rabbit", + "minecraft:rabbit_stew", + "minecraft:mutton" + ], + "minecraft:is_minecart": [ + "minecraft:minecart", + "minecraft:tnt_minecart", + "minecraft:chest_minecart", + "minecraft:hopper_minecart", + "minecraft:command_block_minecart" + ], + "minecraft:is_pickaxe": [ + "minecraft:iron_pickaxe", + "minecraft:stone_pickaxe", + "minecraft:netherite_pickaxe", + "minecraft:wooden_pickaxe", + "minecraft:diamond_pickaxe", + "minecraft:golden_pickaxe" + ], + "minecraft:is_shovel": [ + "minecraft:iron_shovel", + "minecraft:golden_shovel", + "minecraft:wooden_shovel", + "minecraft:stone_shovel", + "minecraft:diamond_shovel", + "minecraft:netherite_shovel" + ], + "minecraft:is_sword": [ + "minecraft:iron_sword", + "minecraft:wooden_sword", + "minecraft:stone_sword", + "minecraft:golden_sword", + "minecraft:diamond_sword", + "minecraft:netherite_sword" + ], + "minecraft:is_tool": [ + "minecraft:iron_pickaxe", + "minecraft:iron_shovel", + "minecraft:iron_sword", + "minecraft:stone_hoe", + "minecraft:iron_axe", + "minecraft:wooden_sword", + "minecraft:diamond_hoe", + "minecraft:wooden_shovel", + "minecraft:golden_sword", + "minecraft:wooden_pickaxe", + "minecraft:wooden_axe", + "minecraft:stone_sword", + "minecraft:stone_shovel", + "minecraft:stone_pickaxe", + "minecraft:stone_axe", + "minecraft:diamond_sword", + "minecraft:diamond_axe", + "minecraft:diamond_shovel", + "minecraft:diamond_pickaxe", + "minecraft:golden_shovel", + "minecraft:golden_pickaxe", + "minecraft:golden_axe", + "minecraft:wooden_hoe", + "minecraft:netherite_sword", + "minecraft:iron_hoe", + "minecraft:golden_hoe", + "minecraft:netherite_shovel", + "minecraft:netherite_pickaxe", + "minecraft:netherite_axe", + "minecraft:netherite_hoe" + ], + "minecraft:is_trident": [ + "minecraft:trident" + ], + "minecraft:leather_tier": [ + "minecraft:leather_helmet", + "minecraft:leather_leggings", + "minecraft:leather_boots", + "minecraft:leather_chestplate" + ], + "minecraft:lectern_books": [ + "minecraft:writable_book", + "minecraft:written_book" + ], + "minecraft:logs": [ + "minecraft:oak_log", + "minecraft:stripped_oak_wood", + "minecraft:spruce_log", + "minecraft:crimson_stem", + "minecraft:birch_log", + "minecraft:jungle_log", + "minecraft:dark_oak_wood", + "minecraft:oak_wood", + "minecraft:dark_oak_log", + "minecraft:acacia_log", + "minecraft:spruce_wood", + "minecraft:stripped_spruce_wood", + "minecraft:birch_wood", + "minecraft:stripped_birch_wood", + "minecraft:warped_hyphae", + "minecraft:jungle_wood", + "minecraft:stripped_jungle_wood", + "minecraft:stripped_warped_stem", + "minecraft:acacia_wood", + "minecraft:stripped_acacia_wood", + "minecraft:stripped_dark_oak_wood", + "minecraft:mangrove_log", + "minecraft:stripped_spruce_log", + "minecraft:stripped_dark_oak_log", + "minecraft:stripped_jungle_log", + "minecraft:stripped_crimson_stem", + "minecraft:mangrove_wood", + "minecraft:stripped_mangrove_wood", + "minecraft:crimson_hyphae", + "minecraft:stripped_cherry_log", + "minecraft:stripped_cherry_wood", + "minecraft:stripped_acacia_log", + "minecraft:stripped_warped_hyphae", + "minecraft:stripped_birch_log", + "minecraft:warped_stem", + "minecraft:stripped_crimson_hyphae", + "minecraft:cherry_wood", + "minecraft:stripped_oak_log", + "minecraft:cherry_log", + "minecraft:stripped_mangrove_log" + ], + "minecraft:logs_that_burn": [ + "minecraft:oak_log", + "minecraft:stripped_oak_wood", + "minecraft:spruce_log", + "minecraft:birch_log", + "minecraft:jungle_log", + "minecraft:dark_oak_wood", + "minecraft:oak_wood", + "minecraft:dark_oak_log", + "minecraft:acacia_log", + "minecraft:spruce_wood", + "minecraft:stripped_spruce_wood", + "minecraft:birch_wood", + "minecraft:stripped_birch_wood", + "minecraft:jungle_wood", + "minecraft:stripped_jungle_wood", + "minecraft:acacia_wood", + "minecraft:stripped_acacia_wood", + "minecraft:stripped_dark_oak_wood", + "minecraft:mangrove_log", + "minecraft:stripped_spruce_log", + "minecraft:stripped_dark_oak_log", + "minecraft:stripped_jungle_log", + "minecraft:mangrove_wood", + "minecraft:stripped_mangrove_wood", + "minecraft:stripped_cherry_log", + "minecraft:stripped_cherry_wood", + "minecraft:stripped_acacia_log", + "minecraft:stripped_birch_log", + "minecraft:cherry_wood", + "minecraft:stripped_oak_log", + "minecraft:cherry_log", + "minecraft:stripped_mangrove_log" + ], + "minecraft:mangrove_logs": [ + "minecraft:mangrove_log", + "minecraft:mangrove_wood", + "minecraft:stripped_mangrove_wood", + "minecraft:stripped_mangrove_log" + ], + "minecraft:music_disc": [ + "minecraft:music_disc_stal", + "minecraft:music_disc_13", + "minecraft:music_disc_cat", + "minecraft:music_disc_11", + "minecraft:music_disc_blocks", + "minecraft:music_disc_mellohi", + "minecraft:music_disc_chirp", + "minecraft:music_disc_ward", + "minecraft:music_disc_far", + "minecraft:music_disc_mall", + "minecraft:music_disc_strad", + "minecraft:music_disc_wait", + "minecraft:music_disc_otherside", + "minecraft:music_disc_pigstep", + "minecraft:music_disc_5", + "minecraft:music_disc_relic" + ], + "minecraft:netherite_tier": [ + "minecraft:netherite_chestplate", + "minecraft:netherite_axe", + "minecraft:netherite_sword", + "minecraft:netherite_hoe", + "minecraft:netherite_shovel", + "minecraft:netherite_pickaxe", + "minecraft:netherite_helmet", + "minecraft:netherite_leggings", + "minecraft:netherite_boots" + ], + "minecraft:piglin_loved": [], + "minecraft:piglin_repellents": [], + "minecraft:planks": [ + "minecraft:dark_oak_planks", + "minecraft:oak_planks", + "minecraft:warped_planks", + "minecraft:spruce_planks", + "minecraft:birch_planks", + "minecraft:jungle_planks", + "minecraft:mangrove_planks", + "minecraft:acacia_planks", + "minecraft:crimson_planks", + "minecraft:bamboo_planks", + "minecraft:cherry_planks" + ], + "minecraft:sand": [ + "minecraft:sand" + ], + "minecraft:sign": [ + "minecraft:dark_oak_sign", + "minecraft:oak_sign", + "minecraft:spruce_sign", + "minecraft:crimson_sign", + "minecraft:birch_sign", + "minecraft:jungle_sign", + "minecraft:warped_sign", + "minecraft:bamboo_sign", + "minecraft:acacia_sign", + "minecraft:mangrove_sign", + "minecraft:crimson_hanging_sign", + "minecraft:cherry_sign", + "minecraft:acacia_hanging_sign", + "minecraft:cherry_hanging_sign", + "minecraft:oak_hanging_sign", + "minecraft:spruce_hanging_sign", + "minecraft:birch_hanging_sign", + "minecraft:jungle_hanging_sign", + "minecraft:dark_oak_hanging_sign", + "minecraft:warped_hanging_sign", + "minecraft:mangrove_hanging_sign", + "minecraft:bamboo_hanging_sign" + ], + "minecraft:soul_fire_base_blocks": [ + "minecraft:soul_soil", + "minecraft:soul_sand" + ], + "minecraft:spawn_egg": [ + "minecraft:zombie_villager_spawn_egg", + "minecraft:ender_dragon_spawn_egg", + "minecraft:zombie_horse_spawn_egg", + "minecraft:creeper_spawn_egg", + "minecraft:chicken_spawn_egg", + "minecraft:skeleton_spawn_egg", + "minecraft:cow_spawn_egg", + "minecraft:pig_spawn_egg", + "minecraft:dolphin_spawn_egg", + "minecraft:sheep_spawn_egg", + "minecraft:slime_spawn_egg", + "minecraft:wolf_spawn_egg", + "minecraft:phantom_spawn_egg", + "minecraft:mooshroom_spawn_egg", + "minecraft:agent_spawn_egg", + "minecraft:enderman_spawn_egg", + "minecraft:silverfish_spawn_egg", + "minecraft:zoglin_spawn_egg", + "minecraft:fox_spawn_egg", + "minecraft:spider_spawn_egg", + "minecraft:zombie_spawn_egg", + "minecraft:bat_spawn_egg", + "minecraft:zombie_pigman_spawn_egg", + "minecraft:villager_spawn_egg", + "minecraft:vex_spawn_egg", + "minecraft:llama_spawn_egg", + "minecraft:squid_spawn_egg", + "minecraft:cat_spawn_egg", + "minecraft:ocelot_spawn_egg", + "minecraft:witch_spawn_egg", + "minecraft:ghast_spawn_egg", + "minecraft:allay_spawn_egg", + "minecraft:strider_spawn_egg", + "minecraft:magma_cube_spawn_egg", + "minecraft:blaze_spawn_egg", + "minecraft:cave_spider_spawn_egg", + "minecraft:guardian_spawn_egg", + "minecraft:horse_spawn_egg", + "minecraft:husk_spawn_egg", + "minecraft:rabbit_spawn_egg", + "minecraft:endermite_spawn_egg", + "minecraft:mule_spawn_egg", + "minecraft:stray_spawn_egg", + "minecraft:wither_skeleton_spawn_egg", + "minecraft:donkey_spawn_egg", + "minecraft:skeleton_horse_spawn_egg", + "minecraft:shulker_spawn_egg", + "minecraft:npc_spawn_egg", + "minecraft:elder_guardian_spawn_egg", + "minecraft:polar_bear_spawn_egg", + "minecraft:cod_spawn_egg", + "minecraft:vindicator_spawn_egg", + "minecraft:evoker_spawn_egg", + "minecraft:parrot_spawn_egg", + "minecraft:tropical_fish_spawn_egg", + "minecraft:pufferfish_spawn_egg", + "minecraft:salmon_spawn_egg", + "minecraft:drowned_spawn_egg", + "minecraft:turtle_spawn_egg", + "minecraft:piglin_spawn_egg", + "minecraft:panda_spawn_egg", + "minecraft:pillager_spawn_egg", + "minecraft:wandering_trader_spawn_egg", + "minecraft:ravager_spawn_egg", + "minecraft:bee_spawn_egg", + "minecraft:hoglin_spawn_egg", + "minecraft:piglin_brute_spawn_egg", + "minecraft:sniffer_spawn_egg", + "minecraft:axolotl_spawn_egg", + "minecraft:goat_spawn_egg", + "minecraft:glow_squid_spawn_egg", + "minecraft:iron_golem_spawn_egg", + "minecraft:snow_golem_spawn_egg", + "minecraft:wither_spawn_egg", + "minecraft:frog_spawn_egg", + "minecraft:tadpole_spawn_egg", + "minecraft:warden_spawn_egg", + "minecraft:trader_llama_spawn_egg", + "minecraft:camel_spawn_egg", + "minecraft:armadillo_spawn_egg", + "minecraft:spawn_egg" + ], + "minecraft:stone_bricks": [ + "minecraft:stonebrick" + ], + "minecraft:stone_crafting_materials": [ + "minecraft:cobblestone", + "minecraft:cobbled_deepslate", + "minecraft:blackstone" + ], + "minecraft:stone_tier": [ + "minecraft:stone_sword", + "minecraft:stone_shovel", + "minecraft:stone_pickaxe", + "minecraft:stone_axe", + "minecraft:stone_hoe" + ], + "minecraft:stone_tool_materials": [ + "minecraft:cobblestone", + "minecraft:cobbled_deepslate", + "minecraft:blackstone" + ], + "minecraft:transform_materials": [ + "minecraft:netherite_ingot" + ], + "minecraft:transform_templates": [ + "minecraft:netherite_upgrade_smithing_template" + ], + "minecraft:transformable_items": [ + "minecraft:diamond_axe", + "minecraft:diamond_sword", + "minecraft:diamond_pickaxe", + "minecraft:diamond_shovel", + "minecraft:diamond_hoe", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots", + "minecraft:golden_boots" + ], + "minecraft:trim_materials": [ + "minecraft:diamond", + "minecraft:emerald", + "minecraft:iron_ingot", + "minecraft:quartz", + "minecraft:lapis_lazuli", + "minecraft:gold_ingot", + "minecraft:redstone", + "minecraft:copper_ingot", + "minecraft:netherite_ingot", + "minecraft:amethyst_shard" + ], + "minecraft:trim_templates": [ + "minecraft:tide_armor_trim_smithing_template", + "minecraft:sentry_armor_trim_smithing_template", + "minecraft:coast_armor_trim_smithing_template", + "minecraft:dune_armor_trim_smithing_template", + "minecraft:wild_armor_trim_smithing_template", + "minecraft:ward_armor_trim_smithing_template", + "minecraft:eye_armor_trim_smithing_template", + "minecraft:vex_armor_trim_smithing_template", + "minecraft:snout_armor_trim_smithing_template", + "minecraft:rib_armor_trim_smithing_template", + "minecraft:spire_armor_trim_smithing_template", + "minecraft:silence_armor_trim_smithing_template", + "minecraft:wayfinder_armor_trim_smithing_template", + "minecraft:raiser_armor_trim_smithing_template", + "minecraft:shaper_armor_trim_smithing_template", + "minecraft:host_armor_trim_smithing_template" + ], + "minecraft:trimmable_armors": [ + "minecraft:leather_boots", + "minecraft:leather_leggings", + "minecraft:leather_helmet", + "minecraft:leather_chestplate", + "minecraft:chainmail_leggings", + "minecraft:chainmail_helmet", + "minecraft:chainmail_chestplate", + "minecraft:chainmail_boots", + "minecraft:iron_helmet", + "minecraft:iron_chestplate", + "minecraft:iron_leggings", + "minecraft:iron_boots", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots", + "minecraft:golden_helmet", + "minecraft:golden_chestplate", + "minecraft:golden_leggings", + "minecraft:golden_boots", + "minecraft:turtle_helmet", + "minecraft:netherite_helmet", + "minecraft:netherite_chestplate", + "minecraft:netherite_leggings", + "minecraft:netherite_boots" + ], + "minecraft:vibration_damper": [ + "minecraft:pink_wool", + "minecraft:lime_wool", + "minecraft:white_wool", + "minecraft:magenta_wool", + "minecraft:red_wool", + "minecraft:orange_wool", + "minecraft:yellow_carpet", + "minecraft:light_blue_wool", + "minecraft:yellow_wool", + "minecraft:gray_wool", + "minecraft:light_gray_wool", + "minecraft:cyan_wool", + "minecraft:purple_wool", + "minecraft:purple_carpet", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:green_wool", + "minecraft:black_wool", + "minecraft:white_carpet", + "minecraft:orange_carpet", + "minecraft:magenta_carpet", + "minecraft:light_blue_carpet", + "minecraft:lime_carpet", + "minecraft:pink_carpet", + "minecraft:gray_carpet", + "minecraft:light_gray_carpet", + "minecraft:cyan_carpet", + "minecraft:blue_carpet", + "minecraft:brown_carpet", + "minecraft:green_carpet", + "minecraft:red_carpet", + "minecraft:black_carpet" + ], + "minecraft:warped_stems": [ + "minecraft:stripped_warped_hyphae", + "minecraft:warped_hyphae", + "minecraft:stripped_warped_stem", + "minecraft:warped_stem" + ], + "minecraft:wooden_slabs": [ + "minecraft:mangrove_slab", + "minecraft:birch_slab", + "minecraft:cherry_slab", + "minecraft:jungle_slab", + "minecraft:spruce_slab", + "minecraft:bamboo_slab", + "minecraft:oak_slab", + "minecraft:acacia_slab", + "minecraft:dark_oak_slab", + "minecraft:crimson_slab", + "minecraft:warped_slab" + ], + "minecraft:wooden_tier": [ + "minecraft:wooden_sword", + "minecraft:wooden_shovel", + "minecraft:wooden_pickaxe", + "minecraft:wooden_axe", + "minecraft:wooden_hoe" + ], + "minecraft:wool": [ + "minecraft:pink_wool", + "minecraft:lime_wool", + "minecraft:white_wool", + "minecraft:magenta_wool", + "minecraft:red_wool", + "minecraft:orange_wool", + "minecraft:light_blue_wool", + "minecraft:yellow_wool", + "minecraft:gray_wool", + "minecraft:light_gray_wool", + "minecraft:cyan_wool", + "minecraft:purple_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:green_wool", + "minecraft:black_wool" + ] +} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/item_tags.1_21_0.json b/core/src/main/resources/bedrock/item_tags.1_21_0.json new file mode 100644 index 000000000..5fac99114 --- /dev/null +++ b/core/src/main/resources/bedrock/item_tags.1_21_0.json @@ -0,0 +1,802 @@ +{ + "minecraft:arrow": [ + "minecraft:arrow" + ], + "minecraft:banner": [ + "minecraft:banner" + ], + "minecraft:boat": [ + "minecraft:cherry_chest_boat", + "minecraft:oak_chest_boat", + "minecraft:mangrove_boat", + "minecraft:oak_boat", + "minecraft:birch_boat", + "minecraft:jungle_boat", + "minecraft:spruce_boat", + "minecraft:acacia_boat", + "minecraft:dark_oak_boat", + "minecraft:birch_chest_boat", + "minecraft:jungle_chest_boat", + "minecraft:spruce_chest_boat", + "minecraft:acacia_chest_boat", + "minecraft:dark_oak_chest_boat", + "minecraft:mangrove_chest_boat", + "minecraft:cherry_boat", + "minecraft:bamboo_raft", + "minecraft:bamboo_chest_raft" + ], + "minecraft:boats": [ + "minecraft:cherry_chest_boat", + "minecraft:oak_chest_boat", + "minecraft:mangrove_boat", + "minecraft:oak_boat", + "minecraft:birch_boat", + "minecraft:jungle_boat", + "minecraft:spruce_boat", + "minecraft:acacia_boat", + "minecraft:dark_oak_boat", + "minecraft:birch_chest_boat", + "minecraft:jungle_chest_boat", + "minecraft:spruce_chest_boat", + "minecraft:acacia_chest_boat", + "minecraft:dark_oak_chest_boat", + "minecraft:mangrove_chest_boat", + "minecraft:cherry_boat", + "minecraft:bamboo_raft", + "minecraft:bamboo_chest_raft" + ], + "minecraft:bookshelf_books": [ + "minecraft:written_book", + "minecraft:book", + "minecraft:writable_book", + "minecraft:enchanted_book" + ], + "minecraft:chainmail_tier": [ + "minecraft:chainmail_helmet", + "minecraft:chainmail_chestplate", + "minecraft:chainmail_leggings", + "minecraft:chainmail_boots" + ], + "minecraft:coals": [ + "minecraft:coal", + "minecraft:charcoal" + ], + "minecraft:crimson_stems": [ + "minecraft:stripped_crimson_stem", + "minecraft:crimson_hyphae", + "minecraft:crimson_stem", + "minecraft:stripped_crimson_hyphae" + ], + "minecraft:decorated_pot_sherds": [ + "minecraft:skull_pottery_sherd", + "minecraft:angler_pottery_sherd", + "minecraft:prize_pottery_sherd", + "minecraft:mourner_pottery_sherd", + "minecraft:arms_up_pottery_sherd", + "minecraft:burn_pottery_sherd", + "minecraft:snort_pottery_sherd", + "minecraft:brick", + "minecraft:heartbreak_pottery_sherd", + "minecraft:miner_pottery_sherd", + "minecraft:brewer_pottery_sherd", + "minecraft:plenty_pottery_sherd", + "minecraft:scrape_pottery_sherd", + "minecraft:howl_pottery_sherd", + "minecraft:explorer_pottery_sherd", + "minecraft:archer_pottery_sherd", + "minecraft:blade_pottery_sherd", + "minecraft:danger_pottery_sherd", + "minecraft:flow_pottery_sherd", + "minecraft:friend_pottery_sherd", + "minecraft:guster_pottery_sherd", + "minecraft:heart_pottery_sherd", + "minecraft:sheaf_pottery_sherd", + "minecraft:shelter_pottery_sherd" + ], + "minecraft:diamond_tier": [ + "minecraft:diamond_sword", + "minecraft:diamond_shovel", + "minecraft:diamond_pickaxe", + "minecraft:diamond_axe", + "minecraft:mace", + "minecraft:diamond_hoe", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots" + ], + "minecraft:digger": [ + "minecraft:iron_pickaxe", + "minecraft:wooden_pickaxe", + "minecraft:wooden_shovel", + "minecraft:iron_axe", + "minecraft:iron_shovel", + "minecraft:stone_shovel", + "minecraft:wooden_axe", + "minecraft:stone_pickaxe", + "minecraft:stone_axe", + "minecraft:diamond_shovel", + "minecraft:diamond_pickaxe", + "minecraft:diamond_axe", + "minecraft:golden_shovel", + "minecraft:golden_pickaxe", + "minecraft:golden_axe", + "minecraft:wooden_hoe", + "minecraft:stone_hoe", + "minecraft:iron_hoe", + "minecraft:diamond_hoe", + "minecraft:golden_hoe", + "minecraft:netherite_pickaxe", + "minecraft:netherite_shovel", + "minecraft:netherite_axe", + "minecraft:netherite_hoe" + ], + "minecraft:door": [ + "minecraft:warped_door", + "minecraft:waxed_weathered_copper_door", + "minecraft:wooden_door", + "minecraft:iron_door", + "minecraft:mangrove_door", + "minecraft:exposed_copper_door", + "minecraft:bamboo_door", + "minecraft:weathered_copper_door", + "minecraft:jungle_door", + "minecraft:spruce_door", + "minecraft:birch_door", + "minecraft:acacia_door", + "minecraft:dark_oak_door", + "minecraft:crimson_door", + "minecraft:cherry_door", + "minecraft:copper_door", + "minecraft:oxidized_copper_door", + "minecraft:waxed_copper_door", + "minecraft:waxed_exposed_copper_door", + "minecraft:waxed_oxidized_copper_door" + ], + "minecraft:golden_tier": [ + "minecraft:golden_sword", + "minecraft:golden_shovel", + "minecraft:golden_pickaxe", + "minecraft:golden_axe", + "minecraft:golden_hoe", + "minecraft:golden_helmet", + "minecraft:golden_chestplate", + "minecraft:golden_leggings", + "minecraft:golden_boots" + ], + "minecraft:hanging_actor": [ + "minecraft:painting" + ], + "minecraft:hanging_sign": [ + "minecraft:mangrove_hanging_sign", + "minecraft:bamboo_hanging_sign", + "minecraft:spruce_hanging_sign", + "minecraft:birch_hanging_sign", + "minecraft:cherry_hanging_sign", + "minecraft:oak_hanging_sign", + "minecraft:jungle_hanging_sign", + "minecraft:acacia_hanging_sign", + "minecraft:dark_oak_hanging_sign", + "minecraft:crimson_hanging_sign", + "minecraft:warped_hanging_sign" + ], + "minecraft:horse_armor": [ + "minecraft:golden_horse_armor", + "minecraft:leather_horse_armor", + "minecraft:iron_horse_armor", + "minecraft:diamond_horse_armor" + ], + "minecraft:iron_tier": [ + "minecraft:iron_sword", + "minecraft:iron_pickaxe", + "minecraft:iron_axe", + "minecraft:iron_shovel", + "minecraft:iron_hoe", + "minecraft:iron_helmet", + "minecraft:iron_chestplate", + "minecraft:iron_leggings", + "minecraft:iron_boots" + ], + "minecraft:is_armor": [ + "minecraft:netherite_boots", + "minecraft:chainmail_helmet", + "minecraft:elytra", + "minecraft:leather_helmet", + "minecraft:leather_chestplate", + "minecraft:leather_leggings", + "minecraft:leather_boots", + "minecraft:chainmail_chestplate", + "minecraft:chainmail_leggings", + "minecraft:chainmail_boots", + "minecraft:iron_helmet", + "minecraft:iron_chestplate", + "minecraft:iron_leggings", + "minecraft:iron_boots", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots", + "minecraft:golden_helmet", + "minecraft:golden_chestplate", + "minecraft:golden_leggings", + "minecraft:golden_boots", + "minecraft:turtle_helmet", + "minecraft:netherite_chestplate", + "minecraft:netherite_leggings", + "minecraft:netherite_helmet" + ], + "minecraft:is_axe": [ + "minecraft:iron_axe", + "minecraft:wooden_axe", + "minecraft:stone_axe", + "minecraft:diamond_axe", + "minecraft:golden_axe", + "minecraft:netherite_axe" + ], + "minecraft:is_cooked": [ + "minecraft:cooked_cod", + "minecraft:cooked_porkchop", + "minecraft:cooked_rabbit", + "minecraft:cooked_salmon", + "minecraft:cooked_beef", + "minecraft:cooked_chicken", + "minecraft:rabbit_stew", + "minecraft:cooked_mutton" + ], + "minecraft:is_fish": [ + "minecraft:cooked_cod", + "minecraft:cod", + "minecraft:salmon", + "minecraft:tropical_fish", + "minecraft:pufferfish", + "minecraft:cooked_salmon" + ], + "minecraft:is_food": [ + "minecraft:rabbit", + "minecraft:cooked_porkchop", + "minecraft:mushroom_stew", + "minecraft:beetroot", + "minecraft:apple", + "minecraft:carrot", + "minecraft:chicken", + "minecraft:potato", + "minecraft:enchanted_golden_apple", + "minecraft:sweet_berries", + "minecraft:golden_apple", + "minecraft:bread", + "minecraft:porkchop", + "minecraft:cookie", + "minecraft:cooked_rabbit", + "minecraft:beef", + "minecraft:dried_kelp", + "minecraft:beetroot_soup", + "minecraft:melon_slice", + "minecraft:cooked_beef", + "minecraft:rotten_flesh", + "minecraft:cooked_chicken", + "minecraft:baked_potato", + "minecraft:golden_carrot", + "minecraft:pumpkin_pie", + "minecraft:rabbit_stew", + "minecraft:cooked_mutton", + "minecraft:mutton" + ], + "minecraft:is_hoe": [ + "minecraft:wooden_hoe", + "minecraft:stone_hoe", + "minecraft:iron_hoe", + "minecraft:diamond_hoe", + "minecraft:golden_hoe", + "minecraft:netherite_hoe" + ], + "minecraft:is_meat": [ + "minecraft:rabbit", + "minecraft:cooked_porkchop", + "minecraft:chicken", + "minecraft:porkchop", + "minecraft:cooked_rabbit", + "minecraft:beef", + "minecraft:cooked_beef", + "minecraft:rotten_flesh", + "minecraft:cooked_chicken", + "minecraft:rabbit_stew", + "minecraft:cooked_mutton", + "minecraft:mutton" + ], + "minecraft:is_minecart": [ + "minecraft:command_block_minecart", + "minecraft:minecart", + "minecraft:chest_minecart", + "minecraft:tnt_minecart", + "minecraft:hopper_minecart" + ], + "minecraft:is_pickaxe": [ + "minecraft:iron_pickaxe", + "minecraft:wooden_pickaxe", + "minecraft:stone_pickaxe", + "minecraft:diamond_pickaxe", + "minecraft:golden_pickaxe", + "minecraft:netherite_pickaxe" + ], + "minecraft:is_shovel": [ + "minecraft:wooden_shovel", + "minecraft:iron_shovel", + "minecraft:stone_shovel", + "minecraft:diamond_shovel", + "minecraft:golden_shovel", + "minecraft:netherite_shovel" + ], + "minecraft:is_sword": [ + "minecraft:iron_sword", + "minecraft:stone_sword", + "minecraft:wooden_sword", + "minecraft:diamond_sword", + "minecraft:mace", + "minecraft:golden_sword", + "minecraft:netherite_sword" + ], + "minecraft:is_tool": [ + "minecraft:iron_sword", + "minecraft:iron_pickaxe", + "minecraft:wooden_pickaxe", + "minecraft:wooden_shovel", + "minecraft:stone_sword", + "minecraft:iron_axe", + "minecraft:iron_shovel", + "minecraft:stone_shovel", + "minecraft:wooden_sword", + "minecraft:wooden_axe", + "minecraft:stone_pickaxe", + "minecraft:stone_axe", + "minecraft:diamond_sword", + "minecraft:diamond_shovel", + "minecraft:diamond_pickaxe", + "minecraft:diamond_axe", + "minecraft:mace", + "minecraft:golden_sword", + "minecraft:golden_shovel", + "minecraft:golden_pickaxe", + "minecraft:golden_axe", + "minecraft:wooden_hoe", + "minecraft:stone_hoe", + "minecraft:iron_hoe", + "minecraft:diamond_hoe", + "minecraft:golden_hoe", + "minecraft:netherite_sword", + "minecraft:netherite_pickaxe", + "minecraft:netherite_shovel", + "minecraft:netherite_axe", + "minecraft:netherite_hoe" + ], + "minecraft:is_trident": [ + "minecraft:trident" + ], + "minecraft:leather_tier": [ + "minecraft:leather_helmet", + "minecraft:leather_chestplate", + "minecraft:leather_leggings", + "minecraft:leather_boots" + ], + "minecraft:lectern_books": [ + "minecraft:written_book", + "minecraft:writable_book" + ], + "minecraft:logs": [ + "minecraft:stripped_oak_log", + "minecraft:mangrove_wood", + "minecraft:spruce_wood", + "minecraft:stripped_cherry_wood", + "minecraft:stripped_crimson_stem", + "minecraft:stripped_spruce_wood", + "minecraft:spruce_log", + "minecraft:acacia_wood", + "minecraft:stripped_acacia_wood", + "minecraft:stripped_warped_hyphae", + "minecraft:acacia_log", + "minecraft:oak_log", + "minecraft:birch_log", + "minecraft:jungle_log", + "minecraft:dark_oak_log", + "minecraft:jungle_wood", + "minecraft:stripped_jungle_wood", + "minecraft:oak_wood", + "minecraft:stripped_oak_wood", + "minecraft:birch_wood", + "minecraft:stripped_birch_wood", + "minecraft:dark_oak_wood", + "minecraft:stripped_dark_oak_wood", + "minecraft:stripped_dark_oak_log", + "minecraft:mangrove_log", + "minecraft:stripped_jungle_log", + "minecraft:stripped_mangrove_wood", + "minecraft:crimson_hyphae", + "minecraft:stripped_cherry_log", + "minecraft:stripped_birch_log", + "minecraft:stripped_acacia_log", + "minecraft:crimson_stem", + "minecraft:warped_hyphae", + "minecraft:stripped_spruce_log", + "minecraft:warped_stem", + "minecraft:stripped_crimson_hyphae", + "minecraft:cherry_wood", + "minecraft:cherry_log", + "minecraft:stripped_warped_stem", + "minecraft:stripped_mangrove_log" + ], + "minecraft:logs_that_burn": [ + "minecraft:stripped_oak_log", + "minecraft:mangrove_wood", + "minecraft:spruce_wood", + "minecraft:stripped_cherry_wood", + "minecraft:stripped_spruce_wood", + "minecraft:spruce_log", + "minecraft:acacia_wood", + "minecraft:stripped_acacia_wood", + "minecraft:acacia_log", + "minecraft:oak_log", + "minecraft:birch_log", + "minecraft:jungle_log", + "minecraft:dark_oak_log", + "minecraft:jungle_wood", + "minecraft:stripped_jungle_wood", + "minecraft:oak_wood", + "minecraft:stripped_oak_wood", + "minecraft:birch_wood", + "minecraft:stripped_birch_wood", + "minecraft:dark_oak_wood", + "minecraft:stripped_dark_oak_wood", + "minecraft:stripped_dark_oak_log", + "minecraft:mangrove_log", + "minecraft:stripped_jungle_log", + "minecraft:stripped_mangrove_wood", + "minecraft:stripped_cherry_log", + "minecraft:stripped_birch_log", + "minecraft:stripped_acacia_log", + "minecraft:stripped_spruce_log", + "minecraft:cherry_wood", + "minecraft:cherry_log", + "minecraft:stripped_mangrove_log" + ], + "minecraft:mangrove_logs": [ + "minecraft:mangrove_wood", + "minecraft:mangrove_log", + "minecraft:stripped_mangrove_wood", + "minecraft:stripped_mangrove_log" + ], + "minecraft:music_disc": [ + "minecraft:music_disc_ward", + "minecraft:music_disc_strad", + "minecraft:music_disc_chirp", + "minecraft:music_disc_creator_music_box", + "minecraft:music_disc_mall", + "minecraft:music_disc_pigstep", + "minecraft:music_disc_wait", + "minecraft:music_disc_11", + "minecraft:music_disc_stal", + "minecraft:music_disc_13", + "minecraft:music_disc_cat", + "minecraft:music_disc_blocks", + "minecraft:music_disc_far", + "minecraft:music_disc_mellohi", + "minecraft:music_disc_otherside", + "minecraft:music_disc_5", + "minecraft:music_disc_relic", + "minecraft:music_disc_creator", + "minecraft:music_disc_precipice" + ], + "minecraft:netherite_tier": [ + "minecraft:netherite_boots", + "minecraft:netherite_sword", + "minecraft:netherite_chestplate", + "minecraft:netherite_pickaxe", + "minecraft:netherite_leggings", + "minecraft:netherite_shovel", + "minecraft:netherite_axe", + "minecraft:netherite_hoe", + "minecraft:netherite_helmet" + ], + "minecraft:planks": [ + "minecraft:spruce_planks", + "minecraft:oak_planks", + "minecraft:mangrove_planks", + "minecraft:birch_planks", + "minecraft:jungle_planks", + "minecraft:acacia_planks", + "minecraft:dark_oak_planks", + "minecraft:bamboo_planks", + "minecraft:warped_planks", + "minecraft:crimson_planks", + "minecraft:cherry_planks" + ], + "minecraft:sand": [ + "minecraft:sand" + ], + "minecraft:sign": [ + "minecraft:bamboo_sign", + "minecraft:mangrove_hanging_sign", + "minecraft:cherry_sign", + "minecraft:oak_sign", + "minecraft:bamboo_hanging_sign", + "minecraft:warped_sign", + "minecraft:spruce_sign", + "minecraft:spruce_hanging_sign", + "minecraft:acacia_sign", + "minecraft:birch_hanging_sign", + "minecraft:birch_sign", + "minecraft:jungle_sign", + "minecraft:dark_oak_sign", + "minecraft:mangrove_sign", + "minecraft:crimson_sign", + "minecraft:cherry_hanging_sign", + "minecraft:oak_hanging_sign", + "minecraft:jungle_hanging_sign", + "minecraft:acacia_hanging_sign", + "minecraft:dark_oak_hanging_sign", + "minecraft:crimson_hanging_sign", + "minecraft:warped_hanging_sign" + ], + "minecraft:soul_fire_base_blocks": [ + "minecraft:soul_sand", + "minecraft:soul_soil" + ], + "minecraft:spawn_egg": [ + "minecraft:enderman_spawn_egg", + "minecraft:ravager_spawn_egg", + "minecraft:strider_spawn_egg", + "minecraft:slime_spawn_egg", + "minecraft:glow_squid_spawn_egg", + "minecraft:pillager_spawn_egg", + "minecraft:blaze_spawn_egg", + "minecraft:witch_spawn_egg", + "minecraft:horse_spawn_egg", + "minecraft:polar_bear_spawn_egg", + "minecraft:zoglin_spawn_egg", + "minecraft:stray_spawn_egg", + "minecraft:zombie_pigman_spawn_egg", + "minecraft:snow_golem_spawn_egg", + "minecraft:panda_spawn_egg", + "minecraft:axolotl_spawn_egg", + "minecraft:agent_spawn_egg", + "minecraft:shulker_spawn_egg", + "minecraft:vindicator_spawn_egg", + "minecraft:evoker_spawn_egg", + "minecraft:parrot_spawn_egg", + "minecraft:wolf_spawn_egg", + "minecraft:elder_guardian_spawn_egg", + "minecraft:silverfish_spawn_egg", + "minecraft:tadpole_spawn_egg", + "minecraft:cow_spawn_egg", + "minecraft:bogged_spawn_egg", + "minecraft:ocelot_spawn_egg", + "minecraft:bee_spawn_egg", + "minecraft:piglin_brute_spawn_egg", + "minecraft:rabbit_spawn_egg", + "minecraft:camel_spawn_egg", + "minecraft:creeper_spawn_egg", + "minecraft:drowned_spawn_egg", + "minecraft:chicken_spawn_egg", + "minecraft:pig_spawn_egg", + "minecraft:sheep_spawn_egg", + "minecraft:mooshroom_spawn_egg", + "minecraft:skeleton_spawn_egg", + "minecraft:spider_spawn_egg", + "minecraft:zombie_spawn_egg", + "minecraft:villager_spawn_egg", + "minecraft:squid_spawn_egg", + "minecraft:bat_spawn_egg", + "minecraft:ghast_spawn_egg", + "minecraft:magma_cube_spawn_egg", + "minecraft:cave_spider_spawn_egg", + "minecraft:endermite_spawn_egg", + "minecraft:guardian_spawn_egg", + "minecraft:husk_spawn_egg", + "minecraft:piglin_spawn_egg", + "minecraft:wither_skeleton_spawn_egg", + "minecraft:donkey_spawn_egg", + "minecraft:mule_spawn_egg", + "minecraft:skeleton_horse_spawn_egg", + "minecraft:zombie_horse_spawn_egg", + "minecraft:npc_spawn_egg", + "minecraft:breeze_spawn_egg", + "minecraft:llama_spawn_egg", + "minecraft:vex_spawn_egg", + "minecraft:warden_spawn_egg", + "minecraft:zombie_villager_spawn_egg", + "minecraft:tropical_fish_spawn_egg", + "minecraft:cod_spawn_egg", + "minecraft:pufferfish_spawn_egg", + "minecraft:salmon_spawn_egg", + "minecraft:dolphin_spawn_egg", + "minecraft:turtle_spawn_egg", + "minecraft:phantom_spawn_egg", + "minecraft:cat_spawn_egg", + "minecraft:fox_spawn_egg", + "minecraft:wandering_trader_spawn_egg", + "minecraft:hoglin_spawn_egg", + "minecraft:sniffer_spawn_egg", + "minecraft:goat_spawn_egg", + "minecraft:iron_golem_spawn_egg", + "minecraft:ender_dragon_spawn_egg", + "minecraft:wither_spawn_egg", + "minecraft:frog_spawn_egg", + "minecraft:allay_spawn_egg", + "minecraft:trader_llama_spawn_egg", + "minecraft:armadillo_spawn_egg", + "minecraft:spawn_egg" + ], + "minecraft:stone_bricks": [ + "minecraft:stonebrick" + ], + "minecraft:stone_crafting_materials": [ + "minecraft:cobblestone", + "minecraft:cobbled_deepslate", + "minecraft:blackstone" + ], + "minecraft:stone_tier": [ + "minecraft:stone_sword", + "minecraft:stone_shovel", + "minecraft:stone_pickaxe", + "minecraft:stone_axe", + "minecraft:stone_hoe" + ], + "minecraft:stone_tool_materials": [ + "minecraft:cobblestone", + "minecraft:cobbled_deepslate", + "minecraft:blackstone" + ], + "minecraft:transform_materials": [ + "minecraft:netherite_ingot" + ], + "minecraft:transform_templates": [ + "minecraft:netherite_upgrade_smithing_template" + ], + "minecraft:transformable_items": [ + "minecraft:diamond_sword", + "minecraft:diamond_shovel", + "minecraft:diamond_pickaxe", + "minecraft:diamond_axe", + "minecraft:diamond_hoe", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots", + "minecraft:golden_boots" + ], + "minecraft:trim_materials": [ + "minecraft:gold_ingot", + "minecraft:iron_ingot", + "minecraft:diamond", + "minecraft:redstone", + "minecraft:netherite_ingot", + "minecraft:lapis_lazuli", + "minecraft:quartz", + "minecraft:copper_ingot", + "minecraft:emerald", + "minecraft:amethyst_shard" + ], + "minecraft:trim_templates": [ + "minecraft:vex_armor_trim_smithing_template", + "minecraft:wild_armor_trim_smithing_template", + "minecraft:flow_armor_trim_smithing_template", + "minecraft:raiser_armor_trim_smithing_template", + "minecraft:silence_armor_trim_smithing_template", + "minecraft:coast_armor_trim_smithing_template", + "minecraft:snout_armor_trim_smithing_template", + "minecraft:dune_armor_trim_smithing_template", + "minecraft:rib_armor_trim_smithing_template", + "minecraft:host_armor_trim_smithing_template", + "minecraft:bolt_armor_trim_smithing_template", + "minecraft:shaper_armor_trim_smithing_template", + "minecraft:eye_armor_trim_smithing_template", + "minecraft:spire_armor_trim_smithing_template", + "minecraft:sentry_armor_trim_smithing_template", + "minecraft:ward_armor_trim_smithing_template", + "minecraft:tide_armor_trim_smithing_template", + "minecraft:wayfinder_armor_trim_smithing_template" + ], + "minecraft:trimmable_armors": [ + "minecraft:netherite_boots", + "minecraft:chainmail_helmet", + "minecraft:leather_helmet", + "minecraft:leather_chestplate", + "minecraft:leather_leggings", + "minecraft:leather_boots", + "minecraft:chainmail_chestplate", + "minecraft:chainmail_leggings", + "minecraft:chainmail_boots", + "minecraft:iron_helmet", + "minecraft:iron_chestplate", + "minecraft:iron_leggings", + "minecraft:iron_boots", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots", + "minecraft:golden_helmet", + "minecraft:golden_chestplate", + "minecraft:golden_leggings", + "minecraft:golden_boots", + "minecraft:turtle_helmet", + "minecraft:netherite_chestplate", + "minecraft:netherite_leggings", + "minecraft:netherite_helmet" + ], + "minecraft:vibration_damper": [ + "minecraft:black_carpet", + "minecraft:blue_carpet", + "minecraft:pink_carpet", + "minecraft:lime_carpet", + "minecraft:green_wool", + "minecraft:cyan_carpet", + "minecraft:orange_wool", + "minecraft:white_carpet", + "minecraft:purple_carpet", + "minecraft:yellow_carpet", + "minecraft:light_gray_wool", + "minecraft:magenta_carpet", + "minecraft:purple_wool", + "minecraft:gray_wool", + "minecraft:red_carpet", + "minecraft:brown_carpet", + "minecraft:light_blue_wool", + "minecraft:white_wool", + "minecraft:magenta_wool", + "minecraft:yellow_wool", + "minecraft:lime_wool", + "minecraft:pink_wool", + "minecraft:cyan_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:red_wool", + "minecraft:black_wool", + "minecraft:orange_carpet", + "minecraft:light_blue_carpet", + "minecraft:gray_carpet", + "minecraft:light_gray_carpet", + "minecraft:green_carpet" + ], + "minecraft:warped_stems": [ + "minecraft:stripped_warped_hyphae", + "minecraft:warped_hyphae", + "minecraft:warped_stem", + "minecraft:stripped_warped_stem" + ], + "minecraft:wooden_slabs": [ + "minecraft:birch_slab", + "minecraft:oak_slab", + "minecraft:spruce_slab", + "minecraft:bamboo_slab", + "minecraft:warped_slab", + "minecraft:mangrove_slab", + "minecraft:cherry_slab", + "minecraft:jungle_slab", + "minecraft:acacia_slab", + "minecraft:dark_oak_slab", + "minecraft:crimson_slab" + ], + "minecraft:wooden_tier": [ + "minecraft:wooden_pickaxe", + "minecraft:wooden_shovel", + "minecraft:wooden_sword", + "minecraft:wooden_axe", + "minecraft:wooden_hoe" + ], + "minecraft:wool": [ + "minecraft:green_wool", + "minecraft:orange_wool", + "minecraft:light_gray_wool", + "minecraft:purple_wool", + "minecraft:gray_wool", + "minecraft:light_blue_wool", + "minecraft:white_wool", + "minecraft:magenta_wool", + "minecraft:yellow_wool", + "minecraft:lime_wool", + "minecraft:pink_wool", + "minecraft:cyan_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:red_wool", + "minecraft:black_wool" + ] +} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/item_tags.1_21_20.json b/core/src/main/resources/bedrock/item_tags.1_21_20.json new file mode 100644 index 000000000..faad0ed0c --- /dev/null +++ b/core/src/main/resources/bedrock/item_tags.1_21_20.json @@ -0,0 +1,806 @@ +{ + "minecraft:arrow": [ + "minecraft:arrow" + ], + "minecraft:banner": [ + "minecraft:banner" + ], + "minecraft:boat": [ + "minecraft:cherry_chest_boat", + "minecraft:oak_chest_boat", + "minecraft:mangrove_boat", + "minecraft:oak_boat", + "minecraft:birch_boat", + "minecraft:jungle_boat", + "minecraft:spruce_boat", + "minecraft:acacia_boat", + "minecraft:dark_oak_boat", + "minecraft:birch_chest_boat", + "minecraft:jungle_chest_boat", + "minecraft:spruce_chest_boat", + "minecraft:acacia_chest_boat", + "minecraft:dark_oak_chest_boat", + "minecraft:mangrove_chest_boat", + "minecraft:cherry_boat", + "minecraft:bamboo_raft", + "minecraft:bamboo_chest_raft" + ], + "minecraft:boats": [ + "minecraft:cherry_chest_boat", + "minecraft:oak_chest_boat", + "minecraft:mangrove_boat", + "minecraft:oak_boat", + "minecraft:birch_boat", + "minecraft:jungle_boat", + "minecraft:spruce_boat", + "minecraft:acacia_boat", + "minecraft:dark_oak_boat", + "minecraft:birch_chest_boat", + "minecraft:jungle_chest_boat", + "minecraft:spruce_chest_boat", + "minecraft:acacia_chest_boat", + "minecraft:dark_oak_chest_boat", + "minecraft:mangrove_chest_boat", + "minecraft:cherry_boat", + "minecraft:bamboo_raft", + "minecraft:bamboo_chest_raft" + ], + "minecraft:bookshelf_books": [ + "minecraft:written_book", + "minecraft:book", + "minecraft:writable_book", + "minecraft:enchanted_book" + ], + "minecraft:chainmail_tier": [ + "minecraft:chainmail_helmet", + "minecraft:chainmail_chestplate", + "minecraft:chainmail_leggings", + "minecraft:chainmail_boots" + ], + "minecraft:coals": [ + "minecraft:coal", + "minecraft:charcoal" + ], + "minecraft:crimson_stems": [ + "minecraft:stripped_crimson_stem", + "minecraft:crimson_hyphae", + "minecraft:crimson_stem", + "minecraft:stripped_crimson_hyphae" + ], + "minecraft:decorated_pot_sherds": [ + "minecraft:angler_pottery_sherd", + "minecraft:skull_pottery_sherd", + "minecraft:prize_pottery_sherd", + "minecraft:mourner_pottery_sherd", + "minecraft:arms_up_pottery_sherd", + "minecraft:burn_pottery_sherd", + "minecraft:snort_pottery_sherd", + "minecraft:brick", + "minecraft:heartbreak_pottery_sherd", + "minecraft:miner_pottery_sherd", + "minecraft:brewer_pottery_sherd", + "minecraft:plenty_pottery_sherd", + "minecraft:scrape_pottery_sherd", + "minecraft:howl_pottery_sherd", + "minecraft:explorer_pottery_sherd", + "minecraft:archer_pottery_sherd", + "minecraft:blade_pottery_sherd", + "minecraft:danger_pottery_sherd", + "minecraft:flow_pottery_sherd", + "minecraft:friend_pottery_sherd", + "minecraft:guster_pottery_sherd", + "minecraft:heart_pottery_sherd", + "minecraft:sheaf_pottery_sherd", + "minecraft:shelter_pottery_sherd" + ], + "minecraft:diamond_tier": [ + "minecraft:diamond_sword", + "minecraft:diamond_shovel", + "minecraft:diamond_pickaxe", + "minecraft:diamond_axe", + "minecraft:mace", + "minecraft:diamond_hoe", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots" + ], + "minecraft:digger": [ + "minecraft:iron_pickaxe", + "minecraft:wooden_pickaxe", + "minecraft:wooden_shovel", + "minecraft:iron_axe", + "minecraft:iron_shovel", + "minecraft:stone_shovel", + "minecraft:wooden_axe", + "minecraft:stone_pickaxe", + "minecraft:stone_axe", + "minecraft:diamond_shovel", + "minecraft:diamond_pickaxe", + "minecraft:diamond_axe", + "minecraft:golden_shovel", + "minecraft:golden_pickaxe", + "minecraft:golden_axe", + "minecraft:wooden_hoe", + "minecraft:stone_hoe", + "minecraft:iron_hoe", + "minecraft:diamond_hoe", + "minecraft:golden_hoe", + "minecraft:netherite_pickaxe", + "minecraft:netherite_shovel", + "minecraft:netherite_axe", + "minecraft:netherite_hoe" + ], + "minecraft:door": [ + "minecraft:warped_door", + "minecraft:waxed_weathered_copper_door", + "minecraft:wooden_door", + "minecraft:iron_door", + "minecraft:mangrove_door", + "minecraft:exposed_copper_door", + "minecraft:bamboo_door", + "minecraft:weathered_copper_door", + "minecraft:jungle_door", + "minecraft:spruce_door", + "minecraft:birch_door", + "minecraft:acacia_door", + "minecraft:dark_oak_door", + "minecraft:crimson_door", + "minecraft:cherry_door", + "minecraft:copper_door", + "minecraft:oxidized_copper_door", + "minecraft:waxed_copper_door", + "minecraft:waxed_exposed_copper_door", + "minecraft:waxed_oxidized_copper_door" + ], + "minecraft:golden_tier": [ + "minecraft:golden_sword", + "minecraft:golden_shovel", + "minecraft:golden_pickaxe", + "minecraft:golden_axe", + "minecraft:golden_hoe", + "minecraft:golden_helmet", + "minecraft:golden_chestplate", + "minecraft:golden_leggings", + "minecraft:golden_boots" + ], + "minecraft:hanging_actor": [ + "minecraft:painting" + ], + "minecraft:hanging_sign": [ + "minecraft:mangrove_hanging_sign", + "minecraft:bamboo_hanging_sign", + "minecraft:spruce_hanging_sign", + "minecraft:birch_hanging_sign", + "minecraft:cherry_hanging_sign", + "minecraft:oak_hanging_sign", + "minecraft:jungle_hanging_sign", + "minecraft:acacia_hanging_sign", + "minecraft:dark_oak_hanging_sign", + "minecraft:crimson_hanging_sign", + "minecraft:warped_hanging_sign" + ], + "minecraft:horse_armor": [ + "minecraft:golden_horse_armor", + "minecraft:leather_horse_armor", + "minecraft:iron_horse_armor", + "minecraft:diamond_horse_armor" + ], + "minecraft:iron_tier": [ + "minecraft:iron_sword", + "minecraft:iron_pickaxe", + "minecraft:iron_axe", + "minecraft:iron_shovel", + "minecraft:iron_hoe", + "minecraft:iron_helmet", + "minecraft:iron_chestplate", + "minecraft:iron_leggings", + "minecraft:iron_boots" + ], + "minecraft:is_armor": [ + "minecraft:netherite_boots", + "minecraft:chainmail_helmet", + "minecraft:elytra", + "minecraft:leather_helmet", + "minecraft:leather_chestplate", + "minecraft:leather_leggings", + "minecraft:leather_boots", + "minecraft:chainmail_chestplate", + "minecraft:chainmail_leggings", + "minecraft:chainmail_boots", + "minecraft:iron_helmet", + "minecraft:iron_chestplate", + "minecraft:iron_leggings", + "minecraft:iron_boots", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots", + "minecraft:golden_helmet", + "minecraft:golden_chestplate", + "minecraft:golden_leggings", + "minecraft:golden_boots", + "minecraft:turtle_helmet", + "minecraft:netherite_chestplate", + "minecraft:netherite_leggings", + "minecraft:netherite_helmet" + ], + "minecraft:is_axe": [ + "minecraft:iron_axe", + "minecraft:wooden_axe", + "minecraft:stone_axe", + "minecraft:diamond_axe", + "minecraft:golden_axe", + "minecraft:netherite_axe" + ], + "minecraft:is_cooked": [ + "minecraft:cooked_cod", + "minecraft:cooked_porkchop", + "minecraft:cooked_rabbit", + "minecraft:cooked_salmon", + "minecraft:cooked_beef", + "minecraft:cooked_chicken", + "minecraft:rabbit_stew", + "minecraft:cooked_mutton" + ], + "minecraft:is_fish": [ + "minecraft:cooked_cod", + "minecraft:cod", + "minecraft:salmon", + "minecraft:tropical_fish", + "minecraft:pufferfish", + "minecraft:cooked_salmon" + ], + "minecraft:is_food": [ + "minecraft:beetroot", + "minecraft:apple", + "minecraft:carrot", + "minecraft:chicken", + "minecraft:potato", + "minecraft:enchanted_golden_apple", + "minecraft:sweet_berries", + "minecraft:golden_carrot", + "minecraft:golden_apple", + "minecraft:rabbit", + "minecraft:cooked_porkchop", + "minecraft:mushroom_stew", + "minecraft:bread", + "minecraft:porkchop", + "minecraft:cookie", + "minecraft:cooked_rabbit", + "minecraft:beef", + "minecraft:dried_kelp", + "minecraft:beetroot_soup", + "minecraft:melon_slice", + "minecraft:cooked_beef", + "minecraft:rotten_flesh", + "minecraft:cooked_chicken", + "minecraft:baked_potato", + "minecraft:pumpkin_pie", + "minecraft:rabbit_stew", + "minecraft:cooked_mutton", + "minecraft:mutton" + ], + "minecraft:is_hoe": [ + "minecraft:wooden_hoe", + "minecraft:stone_hoe", + "minecraft:iron_hoe", + "minecraft:diamond_hoe", + "minecraft:golden_hoe", + "minecraft:netherite_hoe" + ], + "minecraft:is_meat": [ + "minecraft:chicken", + "minecraft:rabbit", + "minecraft:cooked_porkchop", + "minecraft:porkchop", + "minecraft:cooked_rabbit", + "minecraft:beef", + "minecraft:cooked_beef", + "minecraft:rotten_flesh", + "minecraft:cooked_chicken", + "minecraft:rabbit_stew", + "minecraft:cooked_mutton", + "minecraft:mutton" + ], + "minecraft:is_minecart": [ + "minecraft:command_block_minecart", + "minecraft:minecart", + "minecraft:chest_minecart", + "minecraft:tnt_minecart", + "minecraft:hopper_minecart" + ], + "minecraft:is_pickaxe": [ + "minecraft:iron_pickaxe", + "minecraft:wooden_pickaxe", + "minecraft:stone_pickaxe", + "minecraft:diamond_pickaxe", + "minecraft:golden_pickaxe", + "minecraft:netherite_pickaxe" + ], + "minecraft:is_shovel": [ + "minecraft:wooden_shovel", + "minecraft:iron_shovel", + "minecraft:stone_shovel", + "minecraft:diamond_shovel", + "minecraft:golden_shovel", + "minecraft:netherite_shovel" + ], + "minecraft:is_sword": [ + "minecraft:iron_sword", + "minecraft:stone_sword", + "minecraft:wooden_sword", + "minecraft:diamond_sword", + "minecraft:mace", + "minecraft:golden_sword", + "minecraft:netherite_sword" + ], + "minecraft:is_tool": [ + "minecraft:iron_sword", + "minecraft:iron_pickaxe", + "minecraft:wooden_pickaxe", + "minecraft:wooden_shovel", + "minecraft:stone_sword", + "minecraft:iron_axe", + "minecraft:iron_shovel", + "minecraft:stone_shovel", + "minecraft:wooden_sword", + "minecraft:wooden_axe", + "minecraft:stone_pickaxe", + "minecraft:stone_axe", + "minecraft:diamond_sword", + "minecraft:diamond_shovel", + "minecraft:diamond_pickaxe", + "minecraft:diamond_axe", + "minecraft:mace", + "minecraft:golden_sword", + "minecraft:golden_shovel", + "minecraft:golden_pickaxe", + "minecraft:golden_axe", + "minecraft:wooden_hoe", + "minecraft:stone_hoe", + "minecraft:iron_hoe", + "minecraft:diamond_hoe", + "minecraft:golden_hoe", + "minecraft:netherite_sword", + "minecraft:netherite_pickaxe", + "minecraft:netherite_shovel", + "minecraft:netherite_axe", + "minecraft:netherite_hoe" + ], + "minecraft:is_trident": [ + "minecraft:trident" + ], + "minecraft:leather_tier": [ + "minecraft:leather_helmet", + "minecraft:leather_chestplate", + "minecraft:leather_leggings", + "minecraft:leather_boots" + ], + "minecraft:lectern_books": [ + "minecraft:written_book", + "minecraft:writable_book" + ], + "minecraft:logs": [ + "minecraft:mangrove_wood", + "minecraft:spruce_wood", + "minecraft:stripped_cherry_wood", + "minecraft:stripped_crimson_stem", + "minecraft:stripped_spruce_wood", + "minecraft:spruce_log", + "minecraft:acacia_wood", + "minecraft:stripped_acacia_wood", + "minecraft:stripped_warped_hyphae", + "minecraft:acacia_log", + "minecraft:stripped_warped_stem", + "minecraft:oak_log", + "minecraft:birch_log", + "minecraft:jungle_log", + "minecraft:dark_oak_log", + "minecraft:jungle_wood", + "minecraft:stripped_jungle_wood", + "minecraft:oak_wood", + "minecraft:birch_wood", + "minecraft:dark_oak_wood", + "minecraft:stripped_oak_wood", + "minecraft:stripped_birch_wood", + "minecraft:stripped_dark_oak_wood", + "minecraft:stripped_oak_log", + "minecraft:stripped_dark_oak_log", + "minecraft:mangrove_log", + "minecraft:stripped_jungle_log", + "minecraft:stripped_mangrove_wood", + "minecraft:crimson_hyphae", + "minecraft:stripped_cherry_log", + "minecraft:stripped_birch_log", + "minecraft:stripped_acacia_log", + "minecraft:crimson_stem", + "minecraft:warped_hyphae", + "minecraft:stripped_spruce_log", + "minecraft:warped_stem", + "minecraft:stripped_crimson_hyphae", + "minecraft:cherry_wood", + "minecraft:cherry_log", + "minecraft:stripped_mangrove_log" + ], + "minecraft:logs_that_burn": [ + "minecraft:mangrove_wood", + "minecraft:spruce_wood", + "minecraft:stripped_cherry_wood", + "minecraft:stripped_spruce_wood", + "minecraft:spruce_log", + "minecraft:acacia_wood", + "minecraft:stripped_acacia_wood", + "minecraft:acacia_log", + "minecraft:oak_log", + "minecraft:birch_log", + "minecraft:jungle_log", + "minecraft:dark_oak_log", + "minecraft:jungle_wood", + "minecraft:stripped_jungle_wood", + "minecraft:oak_wood", + "minecraft:birch_wood", + "minecraft:dark_oak_wood", + "minecraft:stripped_oak_wood", + "minecraft:stripped_birch_wood", + "minecraft:stripped_dark_oak_wood", + "minecraft:stripped_oak_log", + "minecraft:stripped_dark_oak_log", + "minecraft:mangrove_log", + "minecraft:stripped_jungle_log", + "minecraft:stripped_mangrove_wood", + "minecraft:stripped_cherry_log", + "minecraft:stripped_birch_log", + "minecraft:stripped_acacia_log", + "minecraft:stripped_spruce_log", + "minecraft:cherry_wood", + "minecraft:cherry_log", + "minecraft:stripped_mangrove_log" + ], + "minecraft:mangrove_logs": [ + "minecraft:mangrove_wood", + "minecraft:mangrove_log", + "minecraft:stripped_mangrove_wood", + "minecraft:stripped_mangrove_log" + ], + "minecraft:music_disc": [ + "minecraft:music_disc_ward", + "minecraft:music_disc_strad", + "minecraft:music_disc_chirp", + "minecraft:music_disc_creator_music_box", + "minecraft:music_disc_mall", + "minecraft:music_disc_pigstep", + "minecraft:music_disc_wait", + "minecraft:music_disc_11", + "minecraft:music_disc_stal", + "minecraft:music_disc_13", + "minecraft:music_disc_cat", + "minecraft:music_disc_blocks", + "minecraft:music_disc_far", + "minecraft:music_disc_mellohi", + "minecraft:music_disc_otherside", + "minecraft:music_disc_5", + "minecraft:music_disc_relic", + "minecraft:music_disc_creator", + "minecraft:music_disc_precipice" + ], + "minecraft:netherite_tier": [ + "minecraft:netherite_boots", + "minecraft:netherite_sword", + "minecraft:netherite_chestplate", + "minecraft:netherite_pickaxe", + "minecraft:netherite_leggings", + "minecraft:netherite_shovel", + "minecraft:netherite_axe", + "minecraft:netherite_hoe", + "minecraft:netherite_helmet" + ], + "minecraft:planks": [ + "minecraft:spruce_planks", + "minecraft:oak_planks", + "minecraft:mangrove_planks", + "minecraft:dark_oak_planks", + "minecraft:birch_planks", + "minecraft:jungle_planks", + "minecraft:acacia_planks", + "minecraft:bamboo_planks", + "minecraft:warped_planks", + "minecraft:crimson_planks", + "minecraft:cherry_planks" + ], + "minecraft:sand": [ + "minecraft:sand", + "minecraft:red_sand" + ], + "minecraft:sign": [ + "minecraft:bamboo_sign", + "minecraft:mangrove_hanging_sign", + "minecraft:cherry_sign", + "minecraft:oak_sign", + "minecraft:bamboo_hanging_sign", + "minecraft:warped_sign", + "minecraft:spruce_sign", + "minecraft:spruce_hanging_sign", + "minecraft:acacia_sign", + "minecraft:birch_hanging_sign", + "minecraft:birch_sign", + "minecraft:jungle_sign", + "minecraft:dark_oak_sign", + "minecraft:mangrove_sign", + "minecraft:crimson_sign", + "minecraft:cherry_hanging_sign", + "minecraft:oak_hanging_sign", + "minecraft:jungle_hanging_sign", + "minecraft:acacia_hanging_sign", + "minecraft:dark_oak_hanging_sign", + "minecraft:crimson_hanging_sign", + "minecraft:warped_hanging_sign" + ], + "minecraft:soul_fire_base_blocks": [ + "minecraft:soul_soil", + "minecraft:soul_sand" + ], + "minecraft:spawn_egg": [ + "minecraft:enderman_spawn_egg", + "minecraft:strider_spawn_egg", + "minecraft:ravager_spawn_egg", + "minecraft:slime_spawn_egg", + "minecraft:glow_squid_spawn_egg", + "minecraft:pillager_spawn_egg", + "minecraft:blaze_spawn_egg", + "minecraft:witch_spawn_egg", + "minecraft:horse_spawn_egg", + "minecraft:polar_bear_spawn_egg", + "minecraft:zoglin_spawn_egg", + "minecraft:stray_spawn_egg", + "minecraft:zombie_pigman_spawn_egg", + "minecraft:snow_golem_spawn_egg", + "minecraft:panda_spawn_egg", + "minecraft:axolotl_spawn_egg", + "minecraft:agent_spawn_egg", + "minecraft:shulker_spawn_egg", + "minecraft:vindicator_spawn_egg", + "minecraft:evoker_spawn_egg", + "minecraft:parrot_spawn_egg", + "minecraft:wolf_spawn_egg", + "minecraft:elder_guardian_spawn_egg", + "minecraft:silverfish_spawn_egg", + "minecraft:tadpole_spawn_egg", + "minecraft:cow_spawn_egg", + "minecraft:bogged_spawn_egg", + "minecraft:ocelot_spawn_egg", + "minecraft:bee_spawn_egg", + "minecraft:piglin_brute_spawn_egg", + "minecraft:rabbit_spawn_egg", + "minecraft:camel_spawn_egg", + "minecraft:creeper_spawn_egg", + "minecraft:drowned_spawn_egg", + "minecraft:chicken_spawn_egg", + "minecraft:pig_spawn_egg", + "minecraft:sheep_spawn_egg", + "minecraft:mooshroom_spawn_egg", + "minecraft:skeleton_spawn_egg", + "minecraft:spider_spawn_egg", + "minecraft:zombie_spawn_egg", + "minecraft:villager_spawn_egg", + "minecraft:squid_spawn_egg", + "minecraft:bat_spawn_egg", + "minecraft:ghast_spawn_egg", + "minecraft:magma_cube_spawn_egg", + "minecraft:cave_spider_spawn_egg", + "minecraft:endermite_spawn_egg", + "minecraft:guardian_spawn_egg", + "minecraft:husk_spawn_egg", + "minecraft:piglin_spawn_egg", + "minecraft:wither_skeleton_spawn_egg", + "minecraft:donkey_spawn_egg", + "minecraft:mule_spawn_egg", + "minecraft:skeleton_horse_spawn_egg", + "minecraft:zombie_horse_spawn_egg", + "minecraft:npc_spawn_egg", + "minecraft:breeze_spawn_egg", + "minecraft:llama_spawn_egg", + "minecraft:vex_spawn_egg", + "minecraft:warden_spawn_egg", + "minecraft:zombie_villager_spawn_egg", + "minecraft:tropical_fish_spawn_egg", + "minecraft:cod_spawn_egg", + "minecraft:pufferfish_spawn_egg", + "minecraft:salmon_spawn_egg", + "minecraft:dolphin_spawn_egg", + "minecraft:turtle_spawn_egg", + "minecraft:phantom_spawn_egg", + "minecraft:cat_spawn_egg", + "minecraft:fox_spawn_egg", + "minecraft:wandering_trader_spawn_egg", + "minecraft:hoglin_spawn_egg", + "minecraft:sniffer_spawn_egg", + "minecraft:goat_spawn_egg", + "minecraft:iron_golem_spawn_egg", + "minecraft:ender_dragon_spawn_egg", + "minecraft:wither_spawn_egg", + "minecraft:frog_spawn_egg", + "minecraft:allay_spawn_egg", + "minecraft:trader_llama_spawn_egg", + "minecraft:armadillo_spawn_egg", + "minecraft:spawn_egg" + ], + "minecraft:stone_bricks": [ + "minecraft:mossy_stone_bricks", + "minecraft:stone_bricks", + "minecraft:cracked_stone_bricks", + "minecraft:chiseled_stone_bricks" + ], + "minecraft:stone_crafting_materials": [ + "minecraft:cobblestone", + "minecraft:cobbled_deepslate", + "minecraft:blackstone" + ], + "minecraft:stone_tier": [ + "minecraft:stone_sword", + "minecraft:stone_shovel", + "minecraft:stone_pickaxe", + "minecraft:stone_axe", + "minecraft:stone_hoe" + ], + "minecraft:stone_tool_materials": [ + "minecraft:cobblestone", + "minecraft:cobbled_deepslate", + "minecraft:blackstone" + ], + "minecraft:transform_materials": [ + "minecraft:netherite_ingot" + ], + "minecraft:transform_templates": [ + "minecraft:netherite_upgrade_smithing_template" + ], + "minecraft:transformable_items": [ + "minecraft:diamond_sword", + "minecraft:diamond_shovel", + "minecraft:diamond_pickaxe", + "minecraft:diamond_axe", + "minecraft:diamond_hoe", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots", + "minecraft:golden_boots" + ], + "minecraft:trim_materials": [ + "minecraft:gold_ingot", + "minecraft:iron_ingot", + "minecraft:diamond", + "minecraft:redstone", + "minecraft:netherite_ingot", + "minecraft:lapis_lazuli", + "minecraft:quartz", + "minecraft:copper_ingot", + "minecraft:emerald", + "minecraft:amethyst_shard" + ], + "minecraft:trim_templates": [ + "minecraft:vex_armor_trim_smithing_template", + "minecraft:wild_armor_trim_smithing_template", + "minecraft:flow_armor_trim_smithing_template", + "minecraft:raiser_armor_trim_smithing_template", + "minecraft:silence_armor_trim_smithing_template", + "minecraft:coast_armor_trim_smithing_template", + "minecraft:snout_armor_trim_smithing_template", + "minecraft:dune_armor_trim_smithing_template", + "minecraft:rib_armor_trim_smithing_template", + "minecraft:host_armor_trim_smithing_template", + "minecraft:bolt_armor_trim_smithing_template", + "minecraft:shaper_armor_trim_smithing_template", + "minecraft:eye_armor_trim_smithing_template", + "minecraft:spire_armor_trim_smithing_template", + "minecraft:sentry_armor_trim_smithing_template", + "minecraft:ward_armor_trim_smithing_template", + "minecraft:tide_armor_trim_smithing_template", + "minecraft:wayfinder_armor_trim_smithing_template" + ], + "minecraft:trimmable_armors": [ + "minecraft:netherite_boots", + "minecraft:chainmail_helmet", + "minecraft:leather_helmet", + "minecraft:leather_chestplate", + "minecraft:leather_leggings", + "minecraft:leather_boots", + "minecraft:chainmail_chestplate", + "minecraft:chainmail_leggings", + "minecraft:chainmail_boots", + "minecraft:iron_helmet", + "minecraft:iron_chestplate", + "minecraft:iron_leggings", + "minecraft:iron_boots", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots", + "minecraft:golden_helmet", + "minecraft:golden_chestplate", + "minecraft:golden_leggings", + "minecraft:golden_boots", + "minecraft:turtle_helmet", + "minecraft:netherite_chestplate", + "minecraft:netherite_leggings", + "minecraft:netherite_helmet" + ], + "minecraft:vibration_damper": [ + "minecraft:black_carpet", + "minecraft:blue_carpet", + "minecraft:pink_carpet", + "minecraft:lime_carpet", + "minecraft:green_wool", + "minecraft:cyan_carpet", + "minecraft:orange_wool", + "minecraft:white_carpet", + "minecraft:purple_carpet", + "minecraft:yellow_carpet", + "minecraft:light_gray_wool", + "minecraft:magenta_carpet", + "minecraft:purple_wool", + "minecraft:gray_wool", + "minecraft:red_carpet", + "minecraft:brown_carpet", + "minecraft:light_blue_wool", + "minecraft:white_wool", + "minecraft:magenta_wool", + "minecraft:yellow_wool", + "minecraft:lime_wool", + "minecraft:pink_wool", + "minecraft:cyan_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:red_wool", + "minecraft:black_wool", + "minecraft:orange_carpet", + "minecraft:light_blue_carpet", + "minecraft:gray_carpet", + "minecraft:light_gray_carpet", + "minecraft:green_carpet" + ], + "minecraft:warped_stems": [ + "minecraft:stripped_warped_hyphae", + "minecraft:stripped_warped_stem", + "minecraft:warped_hyphae", + "minecraft:warped_stem" + ], + "minecraft:wooden_slabs": [ + "minecraft:birch_slab", + "minecraft:oak_slab", + "minecraft:spruce_slab", + "minecraft:bamboo_slab", + "minecraft:warped_slab", + "minecraft:mangrove_slab", + "minecraft:cherry_slab", + "minecraft:jungle_slab", + "minecraft:acacia_slab", + "minecraft:dark_oak_slab", + "minecraft:crimson_slab" + ], + "minecraft:wooden_tier": [ + "minecraft:wooden_pickaxe", + "minecraft:wooden_shovel", + "minecraft:wooden_sword", + "minecraft:wooden_axe", + "minecraft:wooden_hoe" + ], + "minecraft:wool": [ + "minecraft:green_wool", + "minecraft:orange_wool", + "minecraft:light_gray_wool", + "minecraft:purple_wool", + "minecraft:gray_wool", + "minecraft:light_blue_wool", + "minecraft:white_wool", + "minecraft:magenta_wool", + "minecraft:yellow_wool", + "minecraft:lime_wool", + "minecraft:pink_wool", + "minecraft:cyan_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:red_wool", + "minecraft:black_wool" + ] +} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/item_tags.1_21_30.json b/core/src/main/resources/bedrock/item_tags.1_21_30.json new file mode 100644 index 000000000..cff3f2556 --- /dev/null +++ b/core/src/main/resources/bedrock/item_tags.1_21_30.json @@ -0,0 +1,806 @@ +{ + "minecraft:arrow": [ + "minecraft:arrow" + ], + "minecraft:banner": [ + "minecraft:banner" + ], + "minecraft:boat": [ + "minecraft:cherry_chest_boat", + "minecraft:oak_chest_boat", + "minecraft:mangrove_boat", + "minecraft:oak_boat", + "minecraft:birch_boat", + "minecraft:jungle_boat", + "minecraft:spruce_boat", + "minecraft:acacia_boat", + "minecraft:dark_oak_boat", + "minecraft:birch_chest_boat", + "minecraft:jungle_chest_boat", + "minecraft:spruce_chest_boat", + "minecraft:acacia_chest_boat", + "minecraft:dark_oak_chest_boat", + "minecraft:mangrove_chest_boat", + "minecraft:cherry_boat", + "minecraft:bamboo_raft", + "minecraft:bamboo_chest_raft" + ], + "minecraft:boats": [ + "minecraft:cherry_chest_boat", + "minecraft:oak_chest_boat", + "minecraft:mangrove_boat", + "minecraft:oak_boat", + "minecraft:birch_boat", + "minecraft:jungle_boat", + "minecraft:spruce_boat", + "minecraft:acacia_boat", + "minecraft:dark_oak_boat", + "minecraft:birch_chest_boat", + "minecraft:jungle_chest_boat", + "minecraft:spruce_chest_boat", + "minecraft:acacia_chest_boat", + "minecraft:dark_oak_chest_boat", + "minecraft:mangrove_chest_boat", + "minecraft:cherry_boat", + "minecraft:bamboo_raft", + "minecraft:bamboo_chest_raft" + ], + "minecraft:bookshelf_books": [ + "minecraft:written_book", + "minecraft:book", + "minecraft:writable_book", + "minecraft:enchanted_book" + ], + "minecraft:chainmail_tier": [ + "minecraft:chainmail_helmet", + "minecraft:chainmail_chestplate", + "minecraft:chainmail_leggings", + "minecraft:chainmail_boots" + ], + "minecraft:coals": [ + "minecraft:coal", + "minecraft:charcoal" + ], + "minecraft:crimson_stems": [ + "minecraft:stripped_crimson_stem", + "minecraft:crimson_hyphae", + "minecraft:crimson_stem", + "minecraft:stripped_crimson_hyphae" + ], + "minecraft:decorated_pot_sherds": [ + "minecraft:angler_pottery_sherd", + "minecraft:skull_pottery_sherd", + "minecraft:prize_pottery_sherd", + "minecraft:mourner_pottery_sherd", + "minecraft:arms_up_pottery_sherd", + "minecraft:burn_pottery_sherd", + "minecraft:snort_pottery_sherd", + "minecraft:brick", + "minecraft:heartbreak_pottery_sherd", + "minecraft:miner_pottery_sherd", + "minecraft:brewer_pottery_sherd", + "minecraft:plenty_pottery_sherd", + "minecraft:scrape_pottery_sherd", + "minecraft:howl_pottery_sherd", + "minecraft:explorer_pottery_sherd", + "minecraft:archer_pottery_sherd", + "minecraft:blade_pottery_sherd", + "minecraft:danger_pottery_sherd", + "minecraft:flow_pottery_sherd", + "minecraft:friend_pottery_sherd", + "minecraft:guster_pottery_sherd", + "minecraft:heart_pottery_sherd", + "minecraft:sheaf_pottery_sherd", + "minecraft:shelter_pottery_sherd" + ], + "minecraft:diamond_tier": [ + "minecraft:diamond_sword", + "minecraft:diamond_shovel", + "minecraft:diamond_pickaxe", + "minecraft:diamond_axe", + "minecraft:mace", + "minecraft:diamond_hoe", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots" + ], + "minecraft:digger": [ + "minecraft:iron_pickaxe", + "minecraft:wooden_pickaxe", + "minecraft:wooden_shovel", + "minecraft:iron_axe", + "minecraft:iron_shovel", + "minecraft:stone_shovel", + "minecraft:wooden_axe", + "minecraft:stone_pickaxe", + "minecraft:stone_axe", + "minecraft:diamond_shovel", + "minecraft:diamond_pickaxe", + "minecraft:diamond_axe", + "minecraft:golden_shovel", + "minecraft:golden_pickaxe", + "minecraft:golden_axe", + "minecraft:wooden_hoe", + "minecraft:stone_hoe", + "minecraft:iron_hoe", + "minecraft:diamond_hoe", + "minecraft:golden_hoe", + "minecraft:netherite_pickaxe", + "minecraft:netherite_shovel", + "minecraft:netherite_axe", + "minecraft:netherite_hoe" + ], + "minecraft:door": [ + "minecraft:warped_door", + "minecraft:waxed_weathered_copper_door", + "minecraft:wooden_door", + "minecraft:iron_door", + "minecraft:mangrove_door", + "minecraft:exposed_copper_door", + "minecraft:bamboo_door", + "minecraft:weathered_copper_door", + "minecraft:jungle_door", + "minecraft:spruce_door", + "minecraft:birch_door", + "minecraft:acacia_door", + "minecraft:dark_oak_door", + "minecraft:crimson_door", + "minecraft:cherry_door", + "minecraft:copper_door", + "minecraft:oxidized_copper_door", + "minecraft:waxed_copper_door", + "minecraft:waxed_exposed_copper_door", + "minecraft:waxed_oxidized_copper_door" + ], + "minecraft:golden_tier": [ + "minecraft:golden_sword", + "minecraft:golden_shovel", + "minecraft:golden_pickaxe", + "minecraft:golden_axe", + "minecraft:golden_hoe", + "minecraft:golden_helmet", + "minecraft:golden_chestplate", + "minecraft:golden_leggings", + "minecraft:golden_boots" + ], + "minecraft:hanging_actor": [ + "minecraft:painting" + ], + "minecraft:hanging_sign": [ + "minecraft:mangrove_hanging_sign", + "minecraft:bamboo_hanging_sign", + "minecraft:spruce_hanging_sign", + "minecraft:birch_hanging_sign", + "minecraft:cherry_hanging_sign", + "minecraft:oak_hanging_sign", + "minecraft:jungle_hanging_sign", + "minecraft:acacia_hanging_sign", + "minecraft:dark_oak_hanging_sign", + "minecraft:crimson_hanging_sign", + "minecraft:warped_hanging_sign" + ], + "minecraft:horse_armor": [ + "minecraft:golden_horse_armor", + "minecraft:leather_horse_armor", + "minecraft:iron_horse_armor", + "minecraft:diamond_horse_armor" + ], + "minecraft:iron_tier": [ + "minecraft:iron_sword", + "minecraft:iron_pickaxe", + "minecraft:iron_axe", + "minecraft:iron_shovel", + "minecraft:iron_hoe", + "minecraft:iron_helmet", + "minecraft:iron_chestplate", + "minecraft:iron_leggings", + "minecraft:iron_boots" + ], + "minecraft:is_armor": [ + "minecraft:netherite_boots", + "minecraft:chainmail_helmet", + "minecraft:elytra", + "minecraft:leather_helmet", + "minecraft:leather_chestplate", + "minecraft:leather_leggings", + "minecraft:leather_boots", + "minecraft:chainmail_chestplate", + "minecraft:chainmail_leggings", + "minecraft:chainmail_boots", + "minecraft:iron_helmet", + "minecraft:iron_chestplate", + "minecraft:iron_leggings", + "minecraft:iron_boots", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots", + "minecraft:golden_helmet", + "minecraft:golden_chestplate", + "minecraft:golden_leggings", + "minecraft:golden_boots", + "minecraft:turtle_helmet", + "minecraft:netherite_chestplate", + "minecraft:netherite_leggings", + "minecraft:netherite_helmet" + ], + "minecraft:is_axe": [ + "minecraft:iron_axe", + "minecraft:wooden_axe", + "minecraft:stone_axe", + "minecraft:diamond_axe", + "minecraft:golden_axe", + "minecraft:netherite_axe" + ], + "minecraft:is_cooked": [ + "minecraft:cooked_cod", + "minecraft:cooked_porkchop", + "minecraft:cooked_rabbit", + "minecraft:cooked_salmon", + "minecraft:cooked_beef", + "minecraft:cooked_chicken", + "minecraft:rabbit_stew", + "minecraft:cooked_mutton" + ], + "minecraft:is_fish": [ + "minecraft:cooked_cod", + "minecraft:cod", + "minecraft:salmon", + "minecraft:tropical_fish", + "minecraft:pufferfish", + "minecraft:cooked_salmon" + ], + "minecraft:is_food": [ + "minecraft:golden_carrot", + "minecraft:carrot", + "minecraft:chicken", + "minecraft:apple", + "minecraft:beetroot", + "minecraft:potato", + "minecraft:enchanted_golden_apple", + "minecraft:sweet_berries", + "minecraft:golden_apple", + "minecraft:rabbit", + "minecraft:cooked_porkchop", + "minecraft:mushroom_stew", + "minecraft:bread", + "minecraft:porkchop", + "minecraft:cookie", + "minecraft:cooked_rabbit", + "minecraft:beef", + "minecraft:dried_kelp", + "minecraft:beetroot_soup", + "minecraft:melon_slice", + "minecraft:cooked_beef", + "minecraft:rotten_flesh", + "minecraft:cooked_chicken", + "minecraft:baked_potato", + "minecraft:pumpkin_pie", + "minecraft:rabbit_stew", + "minecraft:cooked_mutton", + "minecraft:mutton" + ], + "minecraft:is_hoe": [ + "minecraft:wooden_hoe", + "minecraft:stone_hoe", + "minecraft:iron_hoe", + "minecraft:diamond_hoe", + "minecraft:golden_hoe", + "minecraft:netherite_hoe" + ], + "minecraft:is_meat": [ + "minecraft:chicken", + "minecraft:rabbit", + "minecraft:cooked_porkchop", + "minecraft:porkchop", + "minecraft:cooked_rabbit", + "minecraft:beef", + "minecraft:cooked_beef", + "minecraft:rotten_flesh", + "minecraft:cooked_chicken", + "minecraft:rabbit_stew", + "minecraft:cooked_mutton", + "minecraft:mutton" + ], + "minecraft:is_minecart": [ + "minecraft:command_block_minecart", + "minecraft:minecart", + "minecraft:chest_minecart", + "minecraft:tnt_minecart", + "minecraft:hopper_minecart" + ], + "minecraft:is_pickaxe": [ + "minecraft:iron_pickaxe", + "minecraft:wooden_pickaxe", + "minecraft:stone_pickaxe", + "minecraft:diamond_pickaxe", + "minecraft:golden_pickaxe", + "minecraft:netherite_pickaxe" + ], + "minecraft:is_shovel": [ + "minecraft:wooden_shovel", + "minecraft:iron_shovel", + "minecraft:stone_shovel", + "minecraft:diamond_shovel", + "minecraft:golden_shovel", + "minecraft:netherite_shovel" + ], + "minecraft:is_sword": [ + "minecraft:iron_sword", + "minecraft:stone_sword", + "minecraft:wooden_sword", + "minecraft:diamond_sword", + "minecraft:mace", + "minecraft:golden_sword", + "minecraft:netherite_sword" + ], + "minecraft:is_tool": [ + "minecraft:iron_sword", + "minecraft:iron_pickaxe", + "minecraft:wooden_pickaxe", + "minecraft:wooden_shovel", + "minecraft:stone_sword", + "minecraft:iron_axe", + "minecraft:iron_shovel", + "minecraft:stone_shovel", + "minecraft:wooden_sword", + "minecraft:wooden_axe", + "minecraft:stone_pickaxe", + "minecraft:stone_axe", + "minecraft:diamond_sword", + "minecraft:diamond_shovel", + "minecraft:diamond_pickaxe", + "minecraft:diamond_axe", + "minecraft:mace", + "minecraft:golden_sword", + "minecraft:golden_shovel", + "minecraft:golden_pickaxe", + "minecraft:golden_axe", + "minecraft:wooden_hoe", + "minecraft:stone_hoe", + "minecraft:iron_hoe", + "minecraft:diamond_hoe", + "minecraft:golden_hoe", + "minecraft:netherite_sword", + "minecraft:netherite_pickaxe", + "minecraft:netherite_shovel", + "minecraft:netherite_axe", + "minecraft:netherite_hoe" + ], + "minecraft:is_trident": [ + "minecraft:trident" + ], + "minecraft:leather_tier": [ + "minecraft:leather_helmet", + "minecraft:leather_chestplate", + "minecraft:leather_leggings", + "minecraft:leather_boots" + ], + "minecraft:lectern_books": [ + "minecraft:written_book", + "minecraft:writable_book" + ], + "minecraft:logs": [ + "minecraft:mangrove_wood", + "minecraft:spruce_wood", + "minecraft:stripped_cherry_wood", + "minecraft:stripped_crimson_stem", + "minecraft:stripped_spruce_wood", + "minecraft:spruce_log", + "minecraft:acacia_wood", + "minecraft:stripped_acacia_wood", + "minecraft:stripped_warped_hyphae", + "minecraft:acacia_log", + "minecraft:stripped_warped_stem", + "minecraft:oak_log", + "minecraft:birch_log", + "minecraft:jungle_log", + "minecraft:dark_oak_log", + "minecraft:jungle_wood", + "minecraft:stripped_jungle_wood", + "minecraft:oak_wood", + "minecraft:birch_wood", + "minecraft:dark_oak_wood", + "minecraft:stripped_oak_wood", + "minecraft:stripped_birch_wood", + "minecraft:stripped_dark_oak_wood", + "minecraft:stripped_oak_log", + "minecraft:stripped_dark_oak_log", + "minecraft:mangrove_log", + "minecraft:stripped_jungle_log", + "minecraft:stripped_mangrove_wood", + "minecraft:crimson_hyphae", + "minecraft:stripped_cherry_log", + "minecraft:stripped_birch_log", + "minecraft:stripped_acacia_log", + "minecraft:crimson_stem", + "minecraft:warped_hyphae", + "minecraft:stripped_spruce_log", + "minecraft:warped_stem", + "minecraft:stripped_crimson_hyphae", + "minecraft:cherry_wood", + "minecraft:cherry_log", + "minecraft:stripped_mangrove_log" + ], + "minecraft:logs_that_burn": [ + "minecraft:mangrove_wood", + "minecraft:spruce_wood", + "minecraft:stripped_cherry_wood", + "minecraft:stripped_spruce_wood", + "minecraft:spruce_log", + "minecraft:acacia_wood", + "minecraft:stripped_acacia_wood", + "minecraft:acacia_log", + "minecraft:oak_log", + "minecraft:birch_log", + "minecraft:jungle_log", + "minecraft:dark_oak_log", + "minecraft:jungle_wood", + "minecraft:stripped_jungle_wood", + "minecraft:oak_wood", + "minecraft:birch_wood", + "minecraft:dark_oak_wood", + "minecraft:stripped_oak_wood", + "minecraft:stripped_birch_wood", + "minecraft:stripped_dark_oak_wood", + "minecraft:stripped_oak_log", + "minecraft:stripped_dark_oak_log", + "minecraft:mangrove_log", + "minecraft:stripped_jungle_log", + "minecraft:stripped_mangrove_wood", + "minecraft:stripped_cherry_log", + "minecraft:stripped_birch_log", + "minecraft:stripped_acacia_log", + "minecraft:stripped_spruce_log", + "minecraft:cherry_wood", + "minecraft:cherry_log", + "minecraft:stripped_mangrove_log" + ], + "minecraft:mangrove_logs": [ + "minecraft:mangrove_wood", + "minecraft:mangrove_log", + "minecraft:stripped_mangrove_wood", + "minecraft:stripped_mangrove_log" + ], + "minecraft:music_disc": [ + "minecraft:music_disc_ward", + "minecraft:music_disc_strad", + "minecraft:music_disc_chirp", + "minecraft:music_disc_creator_music_box", + "minecraft:music_disc_mall", + "minecraft:music_disc_pigstep", + "minecraft:music_disc_wait", + "minecraft:music_disc_11", + "minecraft:music_disc_stal", + "minecraft:music_disc_13", + "minecraft:music_disc_cat", + "minecraft:music_disc_blocks", + "minecraft:music_disc_far", + "minecraft:music_disc_mellohi", + "minecraft:music_disc_otherside", + "minecraft:music_disc_5", + "minecraft:music_disc_relic", + "minecraft:music_disc_creator", + "minecraft:music_disc_precipice" + ], + "minecraft:netherite_tier": [ + "minecraft:netherite_boots", + "minecraft:netherite_sword", + "minecraft:netherite_chestplate", + "minecraft:netherite_pickaxe", + "minecraft:netherite_leggings", + "minecraft:netherite_shovel", + "minecraft:netherite_axe", + "minecraft:netherite_hoe", + "minecraft:netherite_helmet" + ], + "minecraft:planks": [ + "minecraft:spruce_planks", + "minecraft:oak_planks", + "minecraft:mangrove_planks", + "minecraft:dark_oak_planks", + "minecraft:birch_planks", + "minecraft:jungle_planks", + "minecraft:acacia_planks", + "minecraft:bamboo_planks", + "minecraft:warped_planks", + "minecraft:crimson_planks", + "minecraft:cherry_planks" + ], + "minecraft:sand": [ + "minecraft:sand", + "minecraft:red_sand" + ], + "minecraft:sign": [ + "minecraft:bamboo_sign", + "minecraft:mangrove_hanging_sign", + "minecraft:cherry_sign", + "minecraft:oak_sign", + "minecraft:bamboo_hanging_sign", + "minecraft:warped_sign", + "minecraft:spruce_sign", + "minecraft:spruce_hanging_sign", + "minecraft:acacia_sign", + "minecraft:birch_hanging_sign", + "minecraft:birch_sign", + "minecraft:jungle_sign", + "minecraft:dark_oak_sign", + "minecraft:mangrove_sign", + "minecraft:crimson_sign", + "minecraft:cherry_hanging_sign", + "minecraft:oak_hanging_sign", + "minecraft:jungle_hanging_sign", + "minecraft:acacia_hanging_sign", + "minecraft:dark_oak_hanging_sign", + "minecraft:crimson_hanging_sign", + "minecraft:warped_hanging_sign" + ], + "minecraft:soul_fire_base_blocks": [ + "minecraft:soul_soil", + "minecraft:soul_sand" + ], + "minecraft:spawn_egg": [ + "minecraft:enderman_spawn_egg", + "minecraft:strider_spawn_egg", + "minecraft:ravager_spawn_egg", + "minecraft:slime_spawn_egg", + "minecraft:glow_squid_spawn_egg", + "minecraft:pillager_spawn_egg", + "minecraft:blaze_spawn_egg", + "minecraft:witch_spawn_egg", + "minecraft:horse_spawn_egg", + "minecraft:polar_bear_spawn_egg", + "minecraft:zoglin_spawn_egg", + "minecraft:stray_spawn_egg", + "minecraft:zombie_pigman_spawn_egg", + "minecraft:snow_golem_spawn_egg", + "minecraft:panda_spawn_egg", + "minecraft:axolotl_spawn_egg", + "minecraft:agent_spawn_egg", + "minecraft:shulker_spawn_egg", + "minecraft:vindicator_spawn_egg", + "minecraft:evoker_spawn_egg", + "minecraft:parrot_spawn_egg", + "minecraft:wolf_spawn_egg", + "minecraft:sheep_spawn_egg", + "minecraft:elder_guardian_spawn_egg", + "minecraft:silverfish_spawn_egg", + "minecraft:tadpole_spawn_egg", + "minecraft:cow_spawn_egg", + "minecraft:bogged_spawn_egg", + "minecraft:ocelot_spawn_egg", + "minecraft:bee_spawn_egg", + "minecraft:piglin_brute_spawn_egg", + "minecraft:rabbit_spawn_egg", + "minecraft:camel_spawn_egg", + "minecraft:creeper_spawn_egg", + "minecraft:drowned_spawn_egg", + "minecraft:chicken_spawn_egg", + "minecraft:pig_spawn_egg", + "minecraft:mooshroom_spawn_egg", + "minecraft:skeleton_spawn_egg", + "minecraft:spider_spawn_egg", + "minecraft:zombie_spawn_egg", + "minecraft:villager_spawn_egg", + "minecraft:squid_spawn_egg", + "minecraft:bat_spawn_egg", + "minecraft:ghast_spawn_egg", + "minecraft:magma_cube_spawn_egg", + "minecraft:cave_spider_spawn_egg", + "minecraft:endermite_spawn_egg", + "minecraft:guardian_spawn_egg", + "minecraft:husk_spawn_egg", + "minecraft:piglin_spawn_egg", + "minecraft:wither_skeleton_spawn_egg", + "minecraft:donkey_spawn_egg", + "minecraft:mule_spawn_egg", + "minecraft:skeleton_horse_spawn_egg", + "minecraft:zombie_horse_spawn_egg", + "minecraft:npc_spawn_egg", + "minecraft:breeze_spawn_egg", + "minecraft:llama_spawn_egg", + "minecraft:vex_spawn_egg", + "minecraft:warden_spawn_egg", + "minecraft:zombie_villager_spawn_egg", + "minecraft:tropical_fish_spawn_egg", + "minecraft:cod_spawn_egg", + "minecraft:pufferfish_spawn_egg", + "minecraft:salmon_spawn_egg", + "minecraft:dolphin_spawn_egg", + "minecraft:turtle_spawn_egg", + "minecraft:phantom_spawn_egg", + "minecraft:cat_spawn_egg", + "minecraft:fox_spawn_egg", + "minecraft:wandering_trader_spawn_egg", + "minecraft:hoglin_spawn_egg", + "minecraft:sniffer_spawn_egg", + "minecraft:goat_spawn_egg", + "minecraft:iron_golem_spawn_egg", + "minecraft:ender_dragon_spawn_egg", + "minecraft:wither_spawn_egg", + "minecraft:frog_spawn_egg", + "minecraft:allay_spawn_egg", + "minecraft:trader_llama_spawn_egg", + "minecraft:armadillo_spawn_egg", + "minecraft:spawn_egg" + ], + "minecraft:stone_bricks": [ + "minecraft:mossy_stone_bricks", + "minecraft:stone_bricks", + "minecraft:cracked_stone_bricks", + "minecraft:chiseled_stone_bricks" + ], + "minecraft:stone_crafting_materials": [ + "minecraft:cobblestone", + "minecraft:cobbled_deepslate", + "minecraft:blackstone" + ], + "minecraft:stone_tier": [ + "minecraft:stone_sword", + "minecraft:stone_shovel", + "minecraft:stone_pickaxe", + "minecraft:stone_axe", + "minecraft:stone_hoe" + ], + "minecraft:stone_tool_materials": [ + "minecraft:cobblestone", + "minecraft:cobbled_deepslate", + "minecraft:blackstone" + ], + "minecraft:transform_materials": [ + "minecraft:netherite_ingot" + ], + "minecraft:transform_templates": [ + "minecraft:netherite_upgrade_smithing_template" + ], + "minecraft:transformable_items": [ + "minecraft:diamond_sword", + "minecraft:diamond_shovel", + "minecraft:diamond_pickaxe", + "minecraft:diamond_axe", + "minecraft:diamond_hoe", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots", + "minecraft:golden_boots" + ], + "minecraft:trim_materials": [ + "minecraft:gold_ingot", + "minecraft:iron_ingot", + "minecraft:diamond", + "minecraft:redstone", + "minecraft:netherite_ingot", + "minecraft:lapis_lazuli", + "minecraft:quartz", + "minecraft:copper_ingot", + "minecraft:emerald", + "minecraft:amethyst_shard" + ], + "minecraft:trim_templates": [ + "minecraft:vex_armor_trim_smithing_template", + "minecraft:wild_armor_trim_smithing_template", + "minecraft:flow_armor_trim_smithing_template", + "minecraft:raiser_armor_trim_smithing_template", + "minecraft:silence_armor_trim_smithing_template", + "minecraft:coast_armor_trim_smithing_template", + "minecraft:snout_armor_trim_smithing_template", + "minecraft:dune_armor_trim_smithing_template", + "minecraft:rib_armor_trim_smithing_template", + "minecraft:host_armor_trim_smithing_template", + "minecraft:bolt_armor_trim_smithing_template", + "minecraft:shaper_armor_trim_smithing_template", + "minecraft:eye_armor_trim_smithing_template", + "minecraft:spire_armor_trim_smithing_template", + "minecraft:sentry_armor_trim_smithing_template", + "minecraft:ward_armor_trim_smithing_template", + "minecraft:tide_armor_trim_smithing_template", + "minecraft:wayfinder_armor_trim_smithing_template" + ], + "minecraft:trimmable_armors": [ + "minecraft:netherite_boots", + "minecraft:chainmail_helmet", + "minecraft:leather_helmet", + "minecraft:leather_chestplate", + "minecraft:leather_leggings", + "minecraft:leather_boots", + "minecraft:chainmail_chestplate", + "minecraft:chainmail_leggings", + "minecraft:chainmail_boots", + "minecraft:iron_helmet", + "minecraft:iron_chestplate", + "minecraft:iron_leggings", + "minecraft:iron_boots", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots", + "minecraft:golden_helmet", + "minecraft:golden_chestplate", + "minecraft:golden_leggings", + "minecraft:golden_boots", + "minecraft:turtle_helmet", + "minecraft:netherite_chestplate", + "minecraft:netherite_leggings", + "minecraft:netherite_helmet" + ], + "minecraft:vibration_damper": [ + "minecraft:black_carpet", + "minecraft:blue_carpet", + "minecraft:pink_carpet", + "minecraft:lime_carpet", + "minecraft:green_wool", + "minecraft:cyan_carpet", + "minecraft:orange_wool", + "minecraft:white_carpet", + "minecraft:purple_carpet", + "minecraft:yellow_carpet", + "minecraft:light_gray_wool", + "minecraft:magenta_carpet", + "minecraft:purple_wool", + "minecraft:gray_wool", + "minecraft:red_carpet", + "minecraft:brown_carpet", + "minecraft:light_blue_wool", + "minecraft:white_wool", + "minecraft:magenta_wool", + "minecraft:yellow_wool", + "minecraft:lime_wool", + "minecraft:pink_wool", + "minecraft:cyan_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:red_wool", + "minecraft:black_wool", + "minecraft:orange_carpet", + "minecraft:light_blue_carpet", + "minecraft:gray_carpet", + "minecraft:light_gray_carpet", + "minecraft:green_carpet" + ], + "minecraft:warped_stems": [ + "minecraft:stripped_warped_hyphae", + "minecraft:stripped_warped_stem", + "minecraft:warped_hyphae", + "minecraft:warped_stem" + ], + "minecraft:wooden_slabs": [ + "minecraft:birch_slab", + "minecraft:oak_slab", + "minecraft:spruce_slab", + "minecraft:bamboo_slab", + "minecraft:warped_slab", + "minecraft:mangrove_slab", + "minecraft:cherry_slab", + "minecraft:jungle_slab", + "minecraft:acacia_slab", + "minecraft:dark_oak_slab", + "minecraft:crimson_slab" + ], + "minecraft:wooden_tier": [ + "minecraft:wooden_pickaxe", + "minecraft:wooden_shovel", + "minecraft:wooden_sword", + "minecraft:wooden_axe", + "minecraft:wooden_hoe" + ], + "minecraft:wool": [ + "minecraft:green_wool", + "minecraft:orange_wool", + "minecraft:light_gray_wool", + "minecraft:purple_wool", + "minecraft:gray_wool", + "minecraft:light_blue_wool", + "minecraft:white_wool", + "minecraft:magenta_wool", + "minecraft:yellow_wool", + "minecraft:lime_wool", + "minecraft:pink_wool", + "minecraft:cyan_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:red_wool", + "minecraft:black_wool" + ] +} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/item_tags.1_21_40.json b/core/src/main/resources/bedrock/item_tags.1_21_40.json new file mode 100644 index 000000000..d9e63ed26 --- /dev/null +++ b/core/src/main/resources/bedrock/item_tags.1_21_40.json @@ -0,0 +1,806 @@ +{ + "minecraft:arrow": [ + "minecraft:arrow" + ], + "minecraft:banner": [ + "minecraft:banner" + ], + "minecraft:boat": [ + "minecraft:cherry_chest_boat", + "minecraft:oak_chest_boat", + "minecraft:mangrove_boat", + "minecraft:oak_boat", + "minecraft:birch_boat", + "minecraft:jungle_boat", + "minecraft:spruce_boat", + "minecraft:acacia_boat", + "minecraft:dark_oak_boat", + "minecraft:birch_chest_boat", + "minecraft:jungle_chest_boat", + "minecraft:spruce_chest_boat", + "minecraft:acacia_chest_boat", + "minecraft:dark_oak_chest_boat", + "minecraft:mangrove_chest_boat", + "minecraft:cherry_boat", + "minecraft:bamboo_raft", + "minecraft:bamboo_chest_raft" + ], + "minecraft:boats": [ + "minecraft:cherry_chest_boat", + "minecraft:oak_chest_boat", + "minecraft:mangrove_boat", + "minecraft:oak_boat", + "minecraft:birch_boat", + "minecraft:jungle_boat", + "minecraft:spruce_boat", + "minecraft:acacia_boat", + "minecraft:dark_oak_boat", + "minecraft:birch_chest_boat", + "minecraft:jungle_chest_boat", + "minecraft:spruce_chest_boat", + "minecraft:acacia_chest_boat", + "minecraft:dark_oak_chest_boat", + "minecraft:mangrove_chest_boat", + "minecraft:cherry_boat", + "minecraft:bamboo_raft", + "minecraft:bamboo_chest_raft" + ], + "minecraft:bookshelf_books": [ + "minecraft:written_book", + "minecraft:book", + "minecraft:writable_book", + "minecraft:enchanted_book" + ], + "minecraft:chainmail_tier": [ + "minecraft:chainmail_helmet", + "minecraft:chainmail_chestplate", + "minecraft:chainmail_leggings", + "minecraft:chainmail_boots" + ], + "minecraft:coals": [ + "minecraft:coal", + "minecraft:charcoal" + ], + "minecraft:crimson_stems": [ + "minecraft:stripped_crimson_stem", + "minecraft:crimson_hyphae", + "minecraft:crimson_stem", + "minecraft:stripped_crimson_hyphae" + ], + "minecraft:decorated_pot_sherds": [ + "minecraft:skull_pottery_sherd", + "minecraft:mourner_pottery_sherd", + "minecraft:angler_pottery_sherd", + "minecraft:prize_pottery_sherd", + "minecraft:arms_up_pottery_sherd", + "minecraft:burn_pottery_sherd", + "minecraft:snort_pottery_sherd", + "minecraft:brick", + "minecraft:heartbreak_pottery_sherd", + "minecraft:miner_pottery_sherd", + "minecraft:brewer_pottery_sherd", + "minecraft:plenty_pottery_sherd", + "minecraft:scrape_pottery_sherd", + "minecraft:howl_pottery_sherd", + "minecraft:explorer_pottery_sherd", + "minecraft:archer_pottery_sherd", + "minecraft:blade_pottery_sherd", + "minecraft:danger_pottery_sherd", + "minecraft:flow_pottery_sherd", + "minecraft:friend_pottery_sherd", + "minecraft:guster_pottery_sherd", + "minecraft:heart_pottery_sherd", + "minecraft:sheaf_pottery_sherd", + "minecraft:shelter_pottery_sherd" + ], + "minecraft:diamond_tier": [ + "minecraft:diamond_sword", + "minecraft:diamond_shovel", + "minecraft:diamond_pickaxe", + "minecraft:diamond_axe", + "minecraft:mace", + "minecraft:diamond_hoe", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots" + ], + "minecraft:digger": [ + "minecraft:iron_shovel", + "minecraft:wooden_pickaxe", + "minecraft:iron_pickaxe", + "minecraft:iron_axe", + "minecraft:wooden_shovel", + "minecraft:wooden_axe", + "minecraft:stone_shovel", + "minecraft:stone_pickaxe", + "minecraft:stone_axe", + "minecraft:diamond_shovel", + "minecraft:diamond_pickaxe", + "minecraft:diamond_axe", + "minecraft:golden_shovel", + "minecraft:golden_pickaxe", + "minecraft:golden_axe", + "minecraft:wooden_hoe", + "minecraft:stone_hoe", + "minecraft:iron_hoe", + "minecraft:diamond_hoe", + "minecraft:golden_hoe", + "minecraft:netherite_pickaxe", + "minecraft:netherite_shovel", + "minecraft:netherite_axe", + "minecraft:netherite_hoe" + ], + "minecraft:door": [ + "minecraft:weathered_copper_door", + "minecraft:warped_door", + "minecraft:wooden_door", + "minecraft:jungle_door", + "minecraft:waxed_weathered_copper_door", + "minecraft:iron_door", + "minecraft:mangrove_door", + "minecraft:exposed_copper_door", + "minecraft:bamboo_door", + "minecraft:spruce_door", + "minecraft:birch_door", + "minecraft:acacia_door", + "minecraft:dark_oak_door", + "minecraft:crimson_door", + "minecraft:cherry_door", + "minecraft:copper_door", + "minecraft:oxidized_copper_door", + "minecraft:waxed_copper_door", + "minecraft:waxed_exposed_copper_door", + "minecraft:waxed_oxidized_copper_door" + ], + "minecraft:golden_tier": [ + "minecraft:golden_sword", + "minecraft:golden_shovel", + "minecraft:golden_pickaxe", + "minecraft:golden_axe", + "minecraft:golden_hoe", + "minecraft:golden_helmet", + "minecraft:golden_chestplate", + "minecraft:golden_leggings", + "minecraft:golden_boots" + ], + "minecraft:hanging_actor": [ + "minecraft:painting" + ], + "minecraft:hanging_sign": [ + "minecraft:mangrove_hanging_sign", + "minecraft:bamboo_hanging_sign", + "minecraft:spruce_hanging_sign", + "minecraft:birch_hanging_sign", + "minecraft:cherry_hanging_sign", + "minecraft:oak_hanging_sign", + "minecraft:jungle_hanging_sign", + "minecraft:acacia_hanging_sign", + "minecraft:dark_oak_hanging_sign", + "minecraft:crimson_hanging_sign", + "minecraft:warped_hanging_sign" + ], + "minecraft:horse_armor": [ + "minecraft:iron_horse_armor", + "minecraft:golden_horse_armor", + "minecraft:leather_horse_armor", + "minecraft:diamond_horse_armor" + ], + "minecraft:iron_tier": [ + "minecraft:iron_chestplate", + "minecraft:iron_shovel", + "minecraft:iron_sword", + "minecraft:iron_pickaxe", + "minecraft:iron_axe", + "minecraft:iron_hoe", + "minecraft:iron_helmet", + "minecraft:iron_leggings", + "minecraft:iron_boots" + ], + "minecraft:is_armor": [ + "minecraft:iron_chestplate", + "minecraft:netherite_boots", + "minecraft:chainmail_helmet", + "minecraft:elytra", + "minecraft:leather_helmet", + "minecraft:leather_chestplate", + "minecraft:leather_leggings", + "minecraft:leather_boots", + "minecraft:chainmail_chestplate", + "minecraft:chainmail_leggings", + "minecraft:chainmail_boots", + "minecraft:iron_helmet", + "minecraft:iron_leggings", + "minecraft:iron_boots", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots", + "minecraft:golden_helmet", + "minecraft:golden_chestplate", + "minecraft:golden_leggings", + "minecraft:golden_boots", + "minecraft:turtle_helmet", + "minecraft:netherite_chestplate", + "minecraft:netherite_leggings", + "minecraft:netherite_helmet" + ], + "minecraft:is_axe": [ + "minecraft:iron_axe", + "minecraft:wooden_axe", + "minecraft:stone_axe", + "minecraft:diamond_axe", + "minecraft:golden_axe", + "minecraft:netherite_axe" + ], + "minecraft:is_cooked": [ + "minecraft:cooked_cod", + "minecraft:cooked_porkchop", + "minecraft:cooked_salmon", + "minecraft:cooked_rabbit", + "minecraft:cooked_beef", + "minecraft:cooked_chicken", + "minecraft:rabbit_stew", + "minecraft:cooked_mutton" + ], + "minecraft:is_fish": [ + "minecraft:cooked_cod", + "minecraft:cooked_salmon", + "minecraft:cod", + "minecraft:salmon", + "minecraft:tropical_fish", + "minecraft:pufferfish" + ], + "minecraft:is_food": [ + "minecraft:rabbit", + "minecraft:cooked_porkchop", + "minecraft:mushroom_stew", + "minecraft:potato", + "minecraft:enchanted_golden_apple", + "minecraft:golden_carrot", + "minecraft:carrot", + "minecraft:chicken", + "minecraft:beetroot", + "minecraft:sweet_berries", + "minecraft:apple", + "minecraft:golden_apple", + "minecraft:bread", + "minecraft:porkchop", + "minecraft:cookie", + "minecraft:cooked_rabbit", + "minecraft:beef", + "minecraft:dried_kelp", + "minecraft:beetroot_soup", + "minecraft:melon_slice", + "minecraft:cooked_beef", + "minecraft:rotten_flesh", + "minecraft:cooked_chicken", + "minecraft:baked_potato", + "minecraft:pumpkin_pie", + "minecraft:rabbit_stew", + "minecraft:cooked_mutton", + "minecraft:mutton" + ], + "minecraft:is_hoe": [ + "minecraft:wooden_hoe", + "minecraft:stone_hoe", + "minecraft:iron_hoe", + "minecraft:diamond_hoe", + "minecraft:golden_hoe", + "minecraft:netherite_hoe" + ], + "minecraft:is_meat": [ + "minecraft:rabbit", + "minecraft:cooked_porkchop", + "minecraft:chicken", + "minecraft:porkchop", + "minecraft:cooked_rabbit", + "minecraft:beef", + "minecraft:cooked_beef", + "minecraft:rotten_flesh", + "minecraft:cooked_chicken", + "minecraft:rabbit_stew", + "minecraft:cooked_mutton", + "minecraft:mutton" + ], + "minecraft:is_minecart": [ + "minecraft:command_block_minecart", + "minecraft:minecart", + "minecraft:chest_minecart", + "minecraft:tnt_minecart", + "minecraft:hopper_minecart" + ], + "minecraft:is_pickaxe": [ + "minecraft:wooden_pickaxe", + "minecraft:iron_pickaxe", + "minecraft:stone_pickaxe", + "minecraft:diamond_pickaxe", + "minecraft:golden_pickaxe", + "minecraft:netherite_pickaxe" + ], + "minecraft:is_shovel": [ + "minecraft:iron_shovel", + "minecraft:wooden_shovel", + "minecraft:stone_shovel", + "minecraft:diamond_shovel", + "minecraft:golden_shovel", + "minecraft:netherite_shovel" + ], + "minecraft:is_sword": [ + "minecraft:netherite_sword", + "minecraft:iron_sword", + "minecraft:wooden_sword", + "minecraft:stone_sword", + "minecraft:diamond_sword", + "minecraft:mace", + "minecraft:golden_sword" + ], + "minecraft:is_tool": [ + "minecraft:netherite_sword", + "minecraft:iron_shovel", + "minecraft:iron_sword", + "minecraft:wooden_pickaxe", + "minecraft:iron_pickaxe", + "minecraft:iron_axe", + "minecraft:wooden_sword", + "minecraft:wooden_shovel", + "minecraft:wooden_axe", + "minecraft:stone_sword", + "minecraft:stone_shovel", + "minecraft:stone_pickaxe", + "minecraft:stone_axe", + "minecraft:diamond_sword", + "minecraft:diamond_shovel", + "minecraft:diamond_pickaxe", + "minecraft:diamond_axe", + "minecraft:mace", + "minecraft:golden_sword", + "minecraft:golden_shovel", + "minecraft:golden_pickaxe", + "minecraft:golden_axe", + "minecraft:wooden_hoe", + "minecraft:stone_hoe", + "minecraft:iron_hoe", + "minecraft:diamond_hoe", + "minecraft:golden_hoe", + "minecraft:netherite_pickaxe", + "minecraft:netherite_shovel", + "minecraft:netherite_axe", + "minecraft:netherite_hoe" + ], + "minecraft:is_trident": [ + "minecraft:trident" + ], + "minecraft:leather_tier": [ + "minecraft:leather_helmet", + "minecraft:leather_chestplate", + "minecraft:leather_leggings", + "minecraft:leather_boots" + ], + "minecraft:lectern_books": [ + "minecraft:written_book", + "minecraft:writable_book" + ], + "minecraft:logs": [ + "minecraft:mangrove_wood", + "minecraft:spruce_wood", + "minecraft:stripped_cherry_wood", + "minecraft:stripped_crimson_stem", + "minecraft:stripped_spruce_wood", + "minecraft:spruce_log", + "minecraft:acacia_wood", + "minecraft:stripped_acacia_wood", + "minecraft:stripped_warped_hyphae", + "minecraft:acacia_log", + "minecraft:stripped_warped_stem", + "minecraft:oak_log", + "minecraft:birch_log", + "minecraft:jungle_log", + "minecraft:dark_oak_log", + "minecraft:jungle_wood", + "minecraft:stripped_jungle_wood", + "minecraft:oak_wood", + "minecraft:birch_wood", + "minecraft:dark_oak_wood", + "minecraft:stripped_oak_wood", + "minecraft:stripped_birch_wood", + "minecraft:stripped_dark_oak_wood", + "minecraft:stripped_oak_log", + "minecraft:stripped_dark_oak_log", + "minecraft:mangrove_log", + "minecraft:stripped_jungle_log", + "minecraft:stripped_mangrove_wood", + "minecraft:crimson_hyphae", + "minecraft:stripped_cherry_log", + "minecraft:stripped_birch_log", + "minecraft:stripped_acacia_log", + "minecraft:crimson_stem", + "minecraft:warped_hyphae", + "minecraft:stripped_spruce_log", + "minecraft:warped_stem", + "minecraft:stripped_crimson_hyphae", + "minecraft:cherry_wood", + "minecraft:cherry_log", + "minecraft:stripped_mangrove_log" + ], + "minecraft:logs_that_burn": [ + "minecraft:mangrove_wood", + "minecraft:spruce_wood", + "minecraft:stripped_cherry_wood", + "minecraft:stripped_spruce_wood", + "minecraft:spruce_log", + "minecraft:acacia_wood", + "minecraft:stripped_acacia_wood", + "minecraft:acacia_log", + "minecraft:oak_log", + "minecraft:birch_log", + "minecraft:jungle_log", + "minecraft:dark_oak_log", + "minecraft:jungle_wood", + "minecraft:stripped_jungle_wood", + "minecraft:oak_wood", + "minecraft:birch_wood", + "minecraft:dark_oak_wood", + "minecraft:stripped_oak_wood", + "minecraft:stripped_birch_wood", + "minecraft:stripped_dark_oak_wood", + "minecraft:stripped_oak_log", + "minecraft:stripped_dark_oak_log", + "minecraft:mangrove_log", + "minecraft:stripped_jungle_log", + "minecraft:stripped_mangrove_wood", + "minecraft:stripped_cherry_log", + "minecraft:stripped_birch_log", + "minecraft:stripped_acacia_log", + "minecraft:stripped_spruce_log", + "minecraft:cherry_wood", + "minecraft:cherry_log", + "minecraft:stripped_mangrove_log" + ], + "minecraft:mangrove_logs": [ + "minecraft:mangrove_wood", + "minecraft:mangrove_log", + "minecraft:stripped_mangrove_wood", + "minecraft:stripped_mangrove_log" + ], + "minecraft:music_disc": [ + "minecraft:music_disc_ward", + "minecraft:music_disc_stal", + "minecraft:music_disc_wait", + "minecraft:music_disc_cat", + "minecraft:music_disc_strad", + "minecraft:music_disc_chirp", + "minecraft:music_disc_mall", + "minecraft:music_disc_creator_music_box", + "minecraft:music_disc_pigstep", + "minecraft:music_disc_11", + "minecraft:music_disc_13", + "minecraft:music_disc_blocks", + "minecraft:music_disc_far", + "minecraft:music_disc_mellohi", + "minecraft:music_disc_otherside", + "minecraft:music_disc_5", + "minecraft:music_disc_relic", + "minecraft:music_disc_creator", + "minecraft:music_disc_precipice" + ], + "minecraft:netherite_tier": [ + "minecraft:netherite_sword", + "minecraft:netherite_boots", + "minecraft:netherite_chestplate", + "minecraft:netherite_pickaxe", + "minecraft:netherite_leggings", + "minecraft:netherite_shovel", + "minecraft:netherite_axe", + "minecraft:netherite_hoe", + "minecraft:netherite_helmet" + ], + "minecraft:planks": [ + "minecraft:spruce_planks", + "minecraft:oak_planks", + "minecraft:mangrove_planks", + "minecraft:dark_oak_planks", + "minecraft:birch_planks", + "minecraft:jungle_planks", + "minecraft:acacia_planks", + "minecraft:bamboo_planks", + "minecraft:warped_planks", + "minecraft:crimson_planks", + "minecraft:cherry_planks" + ], + "minecraft:sand": [ + "minecraft:sand", + "minecraft:red_sand" + ], + "minecraft:sign": [ + "minecraft:jungle_sign", + "minecraft:bamboo_sign", + "minecraft:mangrove_hanging_sign", + "minecraft:cherry_sign", + "minecraft:oak_sign", + "minecraft:bamboo_hanging_sign", + "minecraft:warped_sign", + "minecraft:spruce_sign", + "minecraft:spruce_hanging_sign", + "minecraft:acacia_sign", + "minecraft:birch_hanging_sign", + "minecraft:birch_sign", + "minecraft:dark_oak_sign", + "minecraft:mangrove_sign", + "minecraft:crimson_sign", + "minecraft:cherry_hanging_sign", + "minecraft:oak_hanging_sign", + "minecraft:jungle_hanging_sign", + "minecraft:acacia_hanging_sign", + "minecraft:dark_oak_hanging_sign", + "minecraft:crimson_hanging_sign", + "minecraft:warped_hanging_sign" + ], + "minecraft:soul_fire_base_blocks": [ + "minecraft:soul_soil", + "minecraft:soul_sand" + ], + "minecraft:spawn_egg": [ + "minecraft:enderman_spawn_egg", + "minecraft:endermite_spawn_egg", + "minecraft:tropical_fish_spawn_egg", + "minecraft:ravager_spawn_egg", + "minecraft:pufferfish_spawn_egg", + "minecraft:zoglin_spawn_egg", + "minecraft:strider_spawn_egg", + "minecraft:slime_spawn_egg", + "minecraft:glow_squid_spawn_egg", + "minecraft:blaze_spawn_egg", + "minecraft:witch_spawn_egg", + "minecraft:horse_spawn_egg", + "minecraft:polar_bear_spawn_egg", + "minecraft:pillager_spawn_egg", + "minecraft:stray_spawn_egg", + "minecraft:zombie_pigman_spawn_egg", + "minecraft:snow_golem_spawn_egg", + "minecraft:panda_spawn_egg", + "minecraft:axolotl_spawn_egg", + "minecraft:agent_spawn_egg", + "minecraft:shulker_spawn_egg", + "minecraft:vindicator_spawn_egg", + "minecraft:evoker_spawn_egg", + "minecraft:parrot_spawn_egg", + "minecraft:wolf_spawn_egg", + "minecraft:sheep_spawn_egg", + "minecraft:elder_guardian_spawn_egg", + "minecraft:silverfish_spawn_egg", + "minecraft:tadpole_spawn_egg", + "minecraft:cow_spawn_egg", + "minecraft:bogged_spawn_egg", + "minecraft:ocelot_spawn_egg", + "minecraft:bee_spawn_egg", + "minecraft:piglin_brute_spawn_egg", + "minecraft:rabbit_spawn_egg", + "minecraft:camel_spawn_egg", + "minecraft:creeper_spawn_egg", + "minecraft:drowned_spawn_egg", + "minecraft:chicken_spawn_egg", + "minecraft:pig_spawn_egg", + "minecraft:mooshroom_spawn_egg", + "minecraft:skeleton_spawn_egg", + "minecraft:spider_spawn_egg", + "minecraft:zombie_spawn_egg", + "minecraft:villager_spawn_egg", + "minecraft:squid_spawn_egg", + "minecraft:bat_spawn_egg", + "minecraft:ghast_spawn_egg", + "minecraft:magma_cube_spawn_egg", + "minecraft:cave_spider_spawn_egg", + "minecraft:guardian_spawn_egg", + "minecraft:husk_spawn_egg", + "minecraft:piglin_spawn_egg", + "minecraft:wither_skeleton_spawn_egg", + "minecraft:donkey_spawn_egg", + "minecraft:mule_spawn_egg", + "minecraft:skeleton_horse_spawn_egg", + "minecraft:zombie_horse_spawn_egg", + "minecraft:npc_spawn_egg", + "minecraft:breeze_spawn_egg", + "minecraft:llama_spawn_egg", + "minecraft:vex_spawn_egg", + "minecraft:warden_spawn_egg", + "minecraft:zombie_villager_spawn_egg", + "minecraft:cod_spawn_egg", + "minecraft:salmon_spawn_egg", + "minecraft:dolphin_spawn_egg", + "minecraft:turtle_spawn_egg", + "minecraft:phantom_spawn_egg", + "minecraft:cat_spawn_egg", + "minecraft:fox_spawn_egg", + "minecraft:wandering_trader_spawn_egg", + "minecraft:hoglin_spawn_egg", + "minecraft:sniffer_spawn_egg", + "minecraft:goat_spawn_egg", + "minecraft:iron_golem_spawn_egg", + "minecraft:ender_dragon_spawn_egg", + "minecraft:wither_spawn_egg", + "minecraft:frog_spawn_egg", + "minecraft:allay_spawn_egg", + "minecraft:trader_llama_spawn_egg", + "minecraft:armadillo_spawn_egg", + "minecraft:spawn_egg" + ], + "minecraft:stone_bricks": [ + "minecraft:mossy_stone_bricks", + "minecraft:stone_bricks", + "minecraft:cracked_stone_bricks", + "minecraft:chiseled_stone_bricks" + ], + "minecraft:stone_crafting_materials": [ + "minecraft:cobblestone", + "minecraft:cobbled_deepslate", + "minecraft:blackstone" + ], + "minecraft:stone_tier": [ + "minecraft:stone_sword", + "minecraft:stone_shovel", + "minecraft:stone_pickaxe", + "minecraft:stone_axe", + "minecraft:stone_hoe" + ], + "minecraft:stone_tool_materials": [ + "minecraft:cobblestone", + "minecraft:cobbled_deepslate", + "minecraft:blackstone" + ], + "minecraft:transform_materials": [ + "minecraft:netherite_ingot" + ], + "minecraft:transform_templates": [ + "minecraft:netherite_upgrade_smithing_template" + ], + "minecraft:transformable_items": [ + "minecraft:diamond_sword", + "minecraft:diamond_shovel", + "minecraft:diamond_pickaxe", + "minecraft:diamond_axe", + "minecraft:diamond_hoe", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots", + "minecraft:golden_boots" + ], + "minecraft:trim_materials": [ + "minecraft:diamond", + "minecraft:iron_ingot", + "minecraft:gold_ingot", + "minecraft:redstone", + "minecraft:netherite_ingot", + "minecraft:lapis_lazuli", + "minecraft:quartz", + "minecraft:copper_ingot", + "minecraft:emerald", + "minecraft:amethyst_shard" + ], + "minecraft:trim_templates": [ + "minecraft:coast_armor_trim_smithing_template", + "minecraft:vex_armor_trim_smithing_template", + "minecraft:wild_armor_trim_smithing_template", + "minecraft:flow_armor_trim_smithing_template", + "minecraft:silence_armor_trim_smithing_template", + "minecraft:snout_armor_trim_smithing_template", + "minecraft:dune_armor_trim_smithing_template", + "minecraft:rib_armor_trim_smithing_template", + "minecraft:host_armor_trim_smithing_template", + "minecraft:eye_armor_trim_smithing_template", + "minecraft:spire_armor_trim_smithing_template", + "minecraft:sentry_armor_trim_smithing_template", + "minecraft:ward_armor_trim_smithing_template", + "minecraft:tide_armor_trim_smithing_template", + "minecraft:wayfinder_armor_trim_smithing_template", + "minecraft:raiser_armor_trim_smithing_template", + "minecraft:shaper_armor_trim_smithing_template", + "minecraft:bolt_armor_trim_smithing_template" + ], + "minecraft:trimmable_armors": [ + "minecraft:iron_chestplate", + "minecraft:netherite_boots", + "minecraft:chainmail_helmet", + "minecraft:leather_helmet", + "minecraft:leather_chestplate", + "minecraft:leather_leggings", + "minecraft:leather_boots", + "minecraft:chainmail_chestplate", + "minecraft:chainmail_leggings", + "minecraft:chainmail_boots", + "minecraft:iron_helmet", + "minecraft:iron_leggings", + "minecraft:iron_boots", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots", + "minecraft:golden_helmet", + "minecraft:golden_chestplate", + "minecraft:golden_leggings", + "minecraft:golden_boots", + "minecraft:turtle_helmet", + "minecraft:netherite_chestplate", + "minecraft:netherite_leggings", + "minecraft:netherite_helmet" + ], + "minecraft:vibration_damper": [ + "minecraft:black_carpet", + "minecraft:pink_carpet", + "minecraft:lime_carpet", + "minecraft:blue_carpet", + "minecraft:green_wool", + "minecraft:cyan_carpet", + "minecraft:orange_wool", + "minecraft:white_carpet", + "minecraft:purple_carpet", + "minecraft:yellow_carpet", + "minecraft:light_gray_wool", + "minecraft:magenta_carpet", + "minecraft:purple_wool", + "minecraft:gray_wool", + "minecraft:red_carpet", + "minecraft:brown_carpet", + "minecraft:light_blue_wool", + "minecraft:white_wool", + "minecraft:magenta_wool", + "minecraft:yellow_wool", + "minecraft:lime_wool", + "minecraft:pink_wool", + "minecraft:cyan_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:red_wool", + "minecraft:black_wool", + "minecraft:orange_carpet", + "minecraft:light_blue_carpet", + "minecraft:gray_carpet", + "minecraft:light_gray_carpet", + "minecraft:green_carpet" + ], + "minecraft:warped_stems": [ + "minecraft:stripped_warped_hyphae", + "minecraft:stripped_warped_stem", + "minecraft:warped_hyphae", + "minecraft:warped_stem" + ], + "minecraft:wooden_slabs": [ + "minecraft:birch_slab", + "minecraft:oak_slab", + "minecraft:spruce_slab", + "minecraft:bamboo_slab", + "minecraft:warped_slab", + "minecraft:mangrove_slab", + "minecraft:cherry_slab", + "minecraft:jungle_slab", + "minecraft:acacia_slab", + "minecraft:dark_oak_slab", + "minecraft:crimson_slab" + ], + "minecraft:wooden_tier": [ + "minecraft:wooden_pickaxe", + "minecraft:wooden_sword", + "minecraft:wooden_shovel", + "minecraft:wooden_axe", + "minecraft:wooden_hoe" + ], + "minecraft:wool": [ + "minecraft:green_wool", + "minecraft:orange_wool", + "minecraft:light_gray_wool", + "minecraft:purple_wool", + "minecraft:gray_wool", + "minecraft:light_blue_wool", + "minecraft:white_wool", + "minecraft:magenta_wool", + "minecraft:yellow_wool", + "minecraft:lime_wool", + "minecraft:pink_wool", + "minecraft:cyan_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:red_wool", + "minecraft:black_wool" + ] +} From e9cee51be2bbd3b6f9fc8c6dbc998627a6bdbb2e Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Sat, 2 Nov 2024 17:06:55 +0800 Subject: [PATCH 051/165] Water creatures are now ageable --- .../geyser/entity/EntityDefinitions.java | 37 ++++++++++--------- .../entity/type/living/WaterEntity.java | 2 +- .../org/geysermc/geyser/util/Ordered.java | 33 ----------------- 3 files changed, 21 insertions(+), 51 deletions(-) delete mode 100644 core/src/main/java/org/geysermc/geyser/util/Ordered.java 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 7a92a5fe3..a25861813 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java @@ -678,14 +678,6 @@ public final class EntityDefinitions { .addTranslator(MetadataType.BOOLEAN, (entity, entityMetadata) -> entity.setFlag(EntityFlag.POWERED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue())) .addTranslator(MetadataType.BOOLEAN, CreeperEntity::setIgnited) .build(); - DOLPHIN = EntityDefinition.inherited(DolphinEntity::new, mobEntityBase) - .type(EntityType.DOLPHIN) - .height(0.6f).width(0.9f) - //TODO check - .addTranslator(null) // treasure position - .addTranslator(null) // "got fish" - .addTranslator(null) // "moistness level" - .build(); ENDERMAN = EntityDefinition.inherited(EndermanEntity::new, mobEntityBase) .type(EntityType.ENDERMAN) .height(2.9f).width(0.6f) @@ -755,10 +747,6 @@ public final class EntityDefinitions { .type(EntityType.CAVE_SPIDER) .height(0.5f).width(0.7f) .build(); - SQUID = EntityDefinition.inherited(SquidEntity::new, mobEntityBase) - .type(EntityType.SQUID) - .heightAndWidth(0.8f) - .build(); STRAY = EntityDefinition.inherited(AbstractSkeletonEntity::new, mobEntityBase) .type(EntityType.STRAY) .height(1.8f).width(0.6f) @@ -885,11 +873,6 @@ public final class EntityDefinitions { .height(1.95f).width(0.6f) .build(); - GLOW_SQUID = EntityDefinition.inherited(GlowSquidEntity::new, SQUID) - .type(EntityType.GLOW_SQUID) - .addTranslator(null) // Set dark ticks remaining, possible TODO - .build(); - EntityDefinition<RaidParticipantEntity> raidParticipantEntityBase = EntityDefinition.inherited(RaidParticipantEntity::new, mobEntityBase) .addTranslator(null) // Celebrating //TODO .build(); @@ -1081,6 +1064,26 @@ public final class EntityDefinitions { .build(); } + // Water creatures (AgeableWaterCreature) + { + DOLPHIN = EntityDefinition.inherited(DolphinEntity::new, ageableEntityBase) + .type(EntityType.DOLPHIN) + .height(0.6f).width(0.9f) + //TODO check + .addTranslator(null) // treasure position + .addTranslator(null) // "got fish" + .addTranslator(null) // "moistness level" + .build(); + SQUID = EntityDefinition.inherited(SquidEntity::new, ageableEntityBase) + .type(EntityType.SQUID) + .heightAndWidth(0.8f) + .build(); + GLOW_SQUID = EntityDefinition.inherited(GlowSquidEntity::new, SQUID) + .type(EntityType.GLOW_SQUID) + .addTranslator(null) // Set dark ticks remaining, possible TODO + .build(); + } + // Horses { EntityDefinition<AbstractHorseEntity> abstractHorseEntityBase = EntityDefinition.inherited(AbstractHorseEntity::new, ageableEntityBase) diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/WaterEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/WaterEntity.java index ae9d0d659..b8fd864b6 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/WaterEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/WaterEntity.java @@ -31,7 +31,7 @@ import org.geysermc.geyser.session.GeyserSession; import java.util.UUID; -public class WaterEntity extends CreatureEntity { +public class WaterEntity extends AgeableEntity { public WaterEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) { super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); diff --git a/core/src/main/java/org/geysermc/geyser/util/Ordered.java b/core/src/main/java/org/geysermc/geyser/util/Ordered.java deleted file mode 100644 index 08ff5df72..000000000 --- a/core/src/main/java/org/geysermc/geyser/util/Ordered.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 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.util; - -/** - * Represents anything that could be tracked like a enum, without also creating a name and enum-wide array. - */ -public interface Ordered { - int ordinal(); -} From 47ac22aecf584706cdc781d1e451cd7c5cd4df62 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Sat, 2 Nov 2024 17:38:41 +0800 Subject: [PATCH 052/165] Not all water entities are ageable; only some are; oops --- .../type/living/AgeableWaterEntity.java | 43 +++++++++++++++++++ .../entity/type/living/DolphinEntity.java | 2 +- .../entity/type/living/SquidEntity.java | 2 +- .../entity/type/living/WaterEntity.java | 2 +- 4 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/entity/type/living/AgeableWaterEntity.java diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/AgeableWaterEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/AgeableWaterEntity.java new file mode 100644 index 000000000..843215674 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/AgeableWaterEntity.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 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.entity.type.living; + +import org.cloudburstmc.math.vector.Vector3f; +import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.session.GeyserSession; + +import java.util.UUID; + +public abstract class AgeableWaterEntity extends AgeableEntity { + public AgeableWaterEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) { + super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); + } + + @Override + public boolean canBeLeashed() { + return false; + } +} 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 a0ea79d67..8c404be97 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 @@ -37,7 +37,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; import java.util.UUID; -public class DolphinEntity extends WaterEntity { +public class DolphinEntity extends AgeableWaterEntity { public DolphinEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) { super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/SquidEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/SquidEntity.java index 6285bd9a4..ac3456829 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/SquidEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/SquidEntity.java @@ -36,7 +36,7 @@ import org.geysermc.geyser.session.GeyserSession; import java.util.UUID; import java.util.concurrent.CompletableFuture; -public class SquidEntity extends WaterEntity implements Tickable { +public class SquidEntity extends AgeableWaterEntity implements Tickable { private float targetPitch; private float targetYaw; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/WaterEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/WaterEntity.java index b8fd864b6..ae9d0d659 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/WaterEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/WaterEntity.java @@ -31,7 +31,7 @@ import org.geysermc.geyser.session.GeyserSession; import java.util.UUID; -public class WaterEntity extends AgeableEntity { +public class WaterEntity extends CreatureEntity { public WaterEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) { super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); From d61ad7baeffb1f3d35d05783a8e89ce9c6e35e30 Mon Sep 17 00:00:00 2001 From: Tim203 <mctim203@gmail.com> Date: Sat, 2 Nov 2024 11:48:58 +0100 Subject: [PATCH 053/165] Reset the scoreboard in the configuration stage --- .../java/org/geysermc/geyser/session/cache/WorldCache.java | 2 +- .../java/JavaFinishConfigurationPacketTranslator.java | 6 ++++++ .../translator/protocol/java/JavaLoginTranslator.java | 2 -- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java index 5927963c0..f2198c7dc 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java @@ -81,7 +81,7 @@ public final class WorldCache { resetTitleTimes(false); } - public void removeScoreboard() { + public void resetScoreboard() { scoreboard.removeScoreboard(); scoreboard = new Scoreboard(session); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationPacketTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationPacketTranslator.java index 8ade4a1f0..f6ed79fd5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationPacketTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationPacketTranslator.java @@ -45,5 +45,11 @@ public class JavaFinishConfigurationPacketTranslator extends PacketTranslator<Cl } session.sendUpstreamPacket(playerListPacket); session.getEntityCache().removeAllPlayerEntities(); + + // while ClientboundLoginPacket holds the level, it doesn't hold the scoreboard. + // The ClientboundStartConfigurationPacket indirectly removes the old scoreboard, + // and this packet indirectly creates the new one. + // This makes this packet a good place to reset the scoreboard. + session.getWorldCache().resetScoreboard(); } } 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 fb9159c47..93a7d9a14 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 @@ -71,8 +71,6 @@ public class JavaLoginTranslator extends PacketTranslator<ClientboundLoginPacket DimensionUtils.fastSwitchDimension(session, fakeDim); } - session.getWorldCache().removeScoreboard(); - // Remove all bossbars session.getEntityCache().removeAllBossBars(); // Remove extra hearts, hunger, etc. From 4d15c7fbcc3915943526fe37cefb2e43608584e7 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Sun, 3 Nov 2024 00:01:39 +0800 Subject: [PATCH 054/165] Fix different ResourcePackPushPacket handling, cache current input mode --- .../java/org/geysermc/geyser/session/GeyserSession.java | 9 +++++++-- .../org/geysermc/geyser/session/cache/InputCache.java | 6 +++++- .../java/JavaClientboundResourcePackPushPacket.java | 2 ++ 3 files changed, 14 insertions(+), 3 deletions(-) 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 d965f05bf..36ed3f02e 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -255,7 +255,6 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { private final EventLoop eventLoop; @Setter private AuthData authData; - @Setter private BedrockClientData clientData; /** * Used for Floodgate skin uploading @@ -1411,6 +1410,12 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { this.cameraData.handleGameModeChange(currentlySpectator, newGamemode); } + public void setClientData(BedrockClientData data) { + this.clientData = data; + this.inputCache.setInputMode( + org.cloudburstmc.protocol.bedrock.data.InputMode.values()[data.getCurrentInputMode().ordinal()]); + } + /** * Convenience method to reduce amount of duplicate code. Sends ServerboundUseItemPacket. */ @@ -2124,7 +2129,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { @Override public @NonNull InputMode inputMode() { - return InputMode.values()[clientData.getCurrentInputMode().ordinal()]; //todo + return InputMode.values()[inputCache.getInputMode().ordinal()]; //todo } @Override diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/InputCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/InputCache.java index 79c37a5a8..f12c4d3c8 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/InputCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/InputCache.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.session.cache; import lombok.Getter; import lombok.Setter; +import org.checkerframework.checker.nullness.qual.MonotonicNonNull; import org.cloudburstmc.math.vector.Vector2f; import org.cloudburstmc.protocol.bedrock.data.InputMode; import org.cloudburstmc.protocol.bedrock.data.PlayerAuthInputData; @@ -45,6 +46,8 @@ public final class InputCache { private int jumpingTicks; @Getter @Setter private float jumpScale; + @Getter @Setter + private @MonotonicNonNull InputMode inputMode; public InputCache(GeyserSession session) { this.session = session; @@ -54,9 +57,10 @@ public final class InputCache { // Input is sent to the server before packet positions, as of 1.21.2 Set<PlayerAuthInputData> bedrockInput = packet.getInputData(); var oldInputPacket = this.inputPacket; + this.inputMode = packet.getInputMode(); boolean up, down, left, right; - if (packet.getInputMode() == InputMode.MOUSE) { + if (this.inputMode == InputMode.MOUSE) { up = bedrockInput.contains(PlayerAuthInputData.UP); down = bedrockInput.contains(PlayerAuthInputData.DOWN); left = bedrockInput.contains(PlayerAuthInputData.LEFT); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaClientboundResourcePackPushPacket.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaClientboundResourcePackPushPacket.java index 9e7306ab1..4091405e4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaClientboundResourcePackPushPacket.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaClientboundResourcePackPushPacket.java @@ -40,6 +40,8 @@ public class JavaClientboundResourcePackPushPacket extends PacketTranslator<Clie // 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(packet.getId(), ResourcePackStatus.ACCEPTED)); + session.sendDownstreamPacket(new ServerboundResourcePackPacket(packet.getId(), ResourcePackStatus.DOWNLOADED)); session.sendDownstreamPacket(new ServerboundResourcePackPacket(packet.getId(), ResourcePackStatus.SUCCESSFULLY_LOADED)); } else { session.sendDownstreamPacket(new ServerboundResourcePackPacket(packet.getId(), ResourcePackStatus.DECLINED)); From 3298cdbc3cb444e3f505361316e0d45feedcd924 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Sun, 3 Nov 2024 03:23:00 +0800 Subject: [PATCH 055/165] Small fixes; start on new rotation packet why is bedrock weird with player rotation --- .../type/player/SessionPlayerEntity.java | 14 ++++++- .../JavaFinishConfigurationTranslator.java | 4 +- .../player/JavaCookieRequestTranslator.java | 2 +- .../player/JavaPlayerPositionTranslator.java | 14 +++++-- .../player/JavaPlayerRotationTranslator.java | 42 +++++++++++++++++++ 5 files changed, 69 insertions(+), 7 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerRotationTranslator.java 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 a8b0765f3..5db47a34a 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 @@ -34,12 +34,13 @@ import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.AttributeData; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; +import org.cloudburstmc.protocol.bedrock.packet.MoveEntityAbsolutePacket; import org.cloudburstmc.protocol.bedrock.packet.MovePlayerPacket; import org.cloudburstmc.protocol.bedrock.packet.UpdateAttributesPacket; import org.geysermc.geyser.entity.attribute.GeyserAttributeType; import org.geysermc.geyser.item.Items; -import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.level.BedrockDimension; +import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.AttributeUtils; import org.geysermc.geyser.util.DimensionUtils; @@ -338,6 +339,17 @@ public class SessionPlayerEntity extends PlayerEntity { this.vehicleJumpStrength = MathUtils.constrain(vehicleJumpStrength, 0, 100); } + public void forceRotationUpdate() { + MoveEntityAbsolutePacket absolutePacket = new MoveEntityAbsolutePacket(); + absolutePacket.setPosition(this.getPosition()); + absolutePacket.setRotation(this.getBedrockRotation()); + absolutePacket.setRuntimeEntityId(this.getGeyserId()); + absolutePacket.setForceMove(true); + absolutePacket.setOnGround(this.isOnGround()); + + session.sendUpstreamPacket(absolutePacket); + } + private boolean isBelowVoidFloor() { return position.getY() < voidFloorPosition(); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationTranslator.java index d73c2e2ed..0c5dcf31b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationTranslator.java @@ -70,7 +70,9 @@ public class JavaFinishConfigurationTranslator extends PacketTranslator<Clientbo craftingDataPacket.setCleanRecipes(true); craftingDataPacket.getCraftingData().addAll(CARTOGRAPHY_RECIPES); craftingDataPacket.getPotionMixData().addAll(Registries.POTION_MIXES.forVersion(session.getUpstream().getProtocolVersion())); - if (session.isSentSpawnPacket()) { + // TODO proper fix to check if we've been online - in online mode (with auth screen), + // recipes are not yet known + if (session.isSentSpawnPacket() && session.getStonecutterRecipes() != null) { session.getUpstream().sendPacket(craftingDataPacket); session.getCraftingRecipes().clear(); session.getJavaToBedrockRecipeIds().clear(); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaCookieRequestTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaCookieRequestTranslator.java index 33bfa7be8..a44faed29 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaCookieRequestTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaCookieRequestTranslator.java @@ -38,7 +38,7 @@ public class JavaCookieRequestTranslator extends PacketTranslator<ClientboundCoo public void translate(GeyserSession session, ClientboundCookieRequestPacket packet) { ServerboundCookieResponsePacket responsePacket = new ServerboundCookieResponsePacket( packet.getKey(), - session.getCookies().get(packet.getKey()) + session.getCookies().get(packet.getKey().asString()) ); session.sendDownstreamPacket(responsePacket); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java index ca1b95997..cdbc16f39 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java @@ -26,10 +26,6 @@ package org.geysermc.geyser.translator.protocol.java.entity.player; import org.cloudburstmc.math.vector.Vector3d; -import org.geysermc.mcprotocollib.protocol.data.game.entity.player.PositionElement; -import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.player.ClientboundPlayerPositionPacket; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.level.ServerboundAcceptTeleportationPacket; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerPosRotPacket; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.packet.ChunkRadiusUpdatedPacket; import org.cloudburstmc.protocol.bedrock.packet.MovePlayerPacket; @@ -41,6 +37,10 @@ import org.geysermc.geyser.session.cache.TeleportCache; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.util.ChunkUtils; +import org.geysermc.mcprotocollib.protocol.data.game.entity.player.PositionElement; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.player.ClientboundPlayerPositionPacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.level.ServerboundAcceptTeleportationPacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerPosRotPacket; @Translator(packet = ClientboundPlayerPositionPacket.class) public class JavaPlayerPositionTranslator extends PacketTranslator<ClientboundPlayerPositionPacket> { @@ -76,6 +76,12 @@ public class JavaPlayerPositionTranslator extends PacketTranslator<ClientboundPl movePlayerPacket.setMode(MovePlayerPacket.Mode.RESPAWN); session.sendUpstreamPacket(movePlayerPacket); + + // Fixes incorrect rotation upon login + // Yes, even that's not respected by Bedrock. Try it out in singleplayer! + // Log out and back in - and you're looking elsewhere :) + entity.forceRotationUpdate(); + session.setSpawned(true); // Make sure the player moves away from (0, 32767, 0) before accepting movement packets session.setUnconfirmedTeleport(new TeleportCache(packet.getPosition().getX(), packet.getPosition().getY(), packet.getPosition().getZ(), packet.getXRot(), packet.getYRot(), packet.getId())); // TODO diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerRotationTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerRotationTranslator.java new file mode 100644 index 000000000..2d1a4bbe5 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerRotationTranslator.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 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.translator.protocol.java.entity.player; + +import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.protocol.PacketTranslator; +import org.geysermc.geyser.translator.protocol.Translator; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.player.ClientboundPlayerRotationPacket; + +@Translator(packet = ClientboundPlayerRotationPacket.class) +public class JavaPlayerRotationTranslator extends PacketTranslator<ClientboundPlayerRotationPacket> { + + @Override + public void translate(GeyserSession session, ClientboundPlayerRotationPacket packet) { + GeyserImpl.getInstance().getLogger().info(packet.toString()); + // TODO + } +} From 5b5ac3024fcbea1d56132eae160db6203c705bc9 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Sun, 3 Nov 2024 01:04:56 -0500 Subject: [PATCH 056/165] Use non-Jitpack MCPL --- .../geyser/inventory/GeyserItemStack.java | 2 +- .../populator/TagRegistryPopulator.java | 26 ++++++++++--------- .../geyser/session/GeyserSession.java | 1 + gradle/libs.versions.toml | 5 ++-- 4 files changed, 18 insertions(+), 16 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 a2797e6dd..256de7799 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java @@ -184,7 +184,7 @@ public class GeyserItemStack { public SlotDisplay asSlotDisplay() { if (isEmpty()) { - return new EmptySlotDisplay(); + return EmptySlotDisplay.INSTANCE; } return new ItemStackSlotDisplay(this.getItemStack()); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java index 455145217..4e249d483 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java @@ -56,6 +56,19 @@ public final class TagRegistryPopulator { private static final Gson GSON = new GsonBuilder().create(); // temporary public static void populate() { + Hash.Strategy<int[]> hashStrategy = new Hash.Strategy<>() { + // Necessary so arrays can actually be compared + @Override + public int hashCode(int[] o) { + return Arrays.hashCode(o); + } + + @Override + public boolean equals(int[] a, int[] b) { + return Arrays.equals(a, b); + } + }; + List<ObjectIntPair<String>> paletteVersions = List.of( ObjectIntPair.of("1_20_80", Bedrock_v671.CODEC.getProtocolVersion()), ObjectIntPair.of("1_21_0", Bedrock_v685.CODEC.getProtocolVersion()), @@ -77,18 +90,7 @@ public final class TagRegistryPopulator { throw new AssertionError("Unable to load Bedrock runtime item IDs", e); } - Object2ObjectMap<int[], String> javaItemsToBedrockTag = new Object2ObjectOpenCustomHashMap<>(new Hash.Strategy<>() { - // Necessary so arrays can actually be compared - @Override - public int hashCode(int[] o) { - return Arrays.hashCode(o); - } - - @Override - public boolean equals(int[] a, int[] b) { - return Arrays.equals(a, b); - } - }); + Object2ObjectMap<int[], String> javaItemsToBedrockTag = new Object2ObjectOpenCustomHashMap<>(hashStrategy); for (var entry : bedrockTags.entrySet()) { List<String> value = entry.getValue(); 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 36ed3f02e..2036f2941 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -214,6 +214,7 @@ import org.geysermc.mcprotocollib.protocol.packet.common.serverbound.Serverbound import org.geysermc.mcprotocollib.protocol.packet.handshake.serverbound.ClientIntentionPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundChatCommandSignedPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundChatPacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundClientTickEndPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundPlayerAbilitiesPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundPlayerActionPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundUseItemPacket; diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 60fe78448..b8908f518 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,7 @@ protocol-common = "3.0.0.Beta5-20241022.154658-14" protocol-codec = "3.0.0.Beta5-20241022.154658-14" raknet = "1.0.0.CR3-20240416.144209-1" minecraftauth = "4.1.1" -mcprotocollib = "1.21.2-SNAPSHOT" +mcprotocollib = "1.21.2-20241103.011758-1" adventure = "4.14.0" adventure-platform = "4.3.0" junit = "5.9.2" @@ -121,8 +121,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" } minecraftauth = { group = "net.raphimc", name = "MinecraftAuth", version.ref = "minecraftauth" } -#mcprotocollib = { group = "org.geysermc.mcprotocollib", name = "protocol", version.ref = "mcprotocollib" } -mcprotocollib = { group = "com.github.geysermc", name = "mcprotocollib", version = "feature~1.21.2-SNAPSHOT"} +mcprotocollib = { group = "org.geysermc.mcprotocollib", name = "protocol", 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 9a41f59a339e46e2e742a0304159765027da45b6 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Sun, 3 Nov 2024 23:54:45 +0800 Subject: [PATCH 057/165] Fix: Ignored rotation players to session player (self) --- .../geysermc/geyser/entity/type/Entity.java | 1 - .../entity/type/player/PlayerEntity.java | 17 ++++++-------- .../type/player/SessionPlayerEntity.java | 23 +++++++++++++++++++ .../player/JavaPlayerLookAtTranslator.java | 2 +- .../player/JavaPlayerPositionTranslator.java | 2 +- .../player/JavaPlayerRotationTranslator.java | 4 +--- 6 files changed, 33 insertions(+), 16 deletions(-) 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 2ad89dd2f..0d3214709 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 @@ -45,7 +45,6 @@ import org.geysermc.geyser.api.entity.type.GeyserEntity; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.entity.GeyserDirtyMetadata; import org.geysermc.geyser.entity.properties.GeyserEntityPropertyManager; -import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.scoreboard.Team; import org.geysermc.geyser.session.GeyserSession; 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 2abc34d2b..7e747e33d 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 @@ -25,12 +25,6 @@ package org.geysermc.geyser.entity.type.player; -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.UUID; -import java.util.concurrent.TimeUnit; import lombok.Getter; import lombok.Setter; import net.kyori.adventure.text.Component; @@ -65,6 +59,13 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.Boolea import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ByteEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.FloatEntityMetadata; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + @Getter @Setter public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { public static final float SNEAKING_POSE_HEIGHT = 1.5f; @@ -250,10 +251,6 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { } } - public void updateRotation(float yaw, float pitch, float headYaw, boolean isOnGround) { - moveRelative(0, 0, 0, yaw, pitch, headYaw, isOnGround); - } - @Override public void setPosition(Vector3f position) { if (this.bedPosition != null) { 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 5db47a34a..ee56e25a7 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 @@ -144,6 +144,29 @@ public class SessionPlayerEntity extends PlayerEntity { this.position = position.add(0, definition.offset(), 0); } + /** + * Special method used only when updating the session player's rotation. + * For some reason, Mode#NORMAL ignored rotation. Yay. + * @param yaw the new yaw + * @param pitch the new pitch + * @param headYaw the head yaw + */ + public void updateOwnRotation(float yaw, float pitch, float headYaw) { + setYaw(yaw); + setPitch(pitch); + setHeadYaw(headYaw); + + MovePlayerPacket movePlayerPacket = new MovePlayerPacket(); + movePlayerPacket.setRuntimeEntityId(geyserId); + movePlayerPacket.setPosition(position); + movePlayerPacket.setRotation(getBedrockRotation()); + movePlayerPacket.setOnGround(isOnGround()); + movePlayerPacket.setMode(MovePlayerPacket.Mode.TELEPORT); + movePlayerPacket.setTeleportationCause(MovePlayerPacket.TeleportationCause.BEHAVIOR); + + session.sendUpstreamPacket(movePlayerPacket); + } + /** * Set the player's position without applying an offset or moving the bounding box * This is used in BedrockMovePlayerTranslator which receives the player's position diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerLookAtTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerLookAtTranslator.java index b1413542b..22786e918 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerLookAtTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerLookAtTranslator.java @@ -49,7 +49,7 @@ public class JavaPlayerLookAtTranslator extends PacketTranslator<ClientboundPlay var self = session.getPlayerEntity(); // headYaw is also set to yaw in this packet - self.updateRotation(yaw, pitch, yaw, self.isOnGround()); + self.updateOwnRotation(yaw, pitch, yaw); } public Vector3f targetPosition(GeyserSession session, ClientboundPlayerLookAtPacket packet) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java index cdbc16f39..d56c5d2d3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java @@ -80,7 +80,7 @@ public class JavaPlayerPositionTranslator extends PacketTranslator<ClientboundPl // Fixes incorrect rotation upon login // Yes, even that's not respected by Bedrock. Try it out in singleplayer! // Log out and back in - and you're looking elsewhere :) - entity.forceRotationUpdate(); + entity.updateOwnRotation(entity.getYaw(), entity.getPitch(), entity.getHeadYaw()); session.setSpawned(true); // Make sure the player moves away from (0, 32767, 0) before accepting movement packets diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerRotationTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerRotationTranslator.java index 2d1a4bbe5..204ee2481 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerRotationTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerRotationTranslator.java @@ -25,7 +25,6 @@ package org.geysermc.geyser.translator.protocol.java.entity.player; -import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; @@ -36,7 +35,6 @@ public class JavaPlayerRotationTranslator extends PacketTranslator<ClientboundPl @Override public void translate(GeyserSession session, ClientboundPlayerRotationPacket packet) { - GeyserImpl.getInstance().getLogger().info(packet.toString()); - // TODO + session.getPlayerEntity().updateOwnRotation(packet.getYRot(), packet.getXRot(), packet.getYRot()); } } From ecc5e8c1753bedeb1daa0a79957e97673121fc7d Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Sun, 3 Nov 2024 11:38:15 -0500 Subject: [PATCH 058/165] Clear old recipe code from UpdateRecipesTranslator --- .../java/JavaUpdateRecipesTranslator.java | 418 +----------------- 1 file changed, 1 insertion(+), 417 deletions(-) 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 ad67da81e..7ea66e0a3 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 @@ -60,7 +60,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; -import java.util.Map; import java.util.Objects; import java.util.UUID; @@ -84,15 +83,6 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator<ClientboundUpd "minecraft:netherite_boots" ); - /** - * Fixes https://github.com/GeyserMC/Geyser/issues/3784 by using item tags where applicable instead of group IDs - * Item Tags allow mixing ingredients, and theoretically, adding item tags to custom items should also include them. - */ - private static final Map<String, String> RECIPE_TAGS = Map.of( - "minecraft:wood", "minecraft:logs", - "minecraft:wooden_slab", "minecraft:wooden_slabs", - "minecraft:planks", "minecraft:planks"); - private static final Key SMITHING_BASE = MinecraftKey.key("smithing_base"); private static final Key SMITHING_TEMPLATE = MinecraftKey.key("smithing_template"); private static final Key SMITHING_ADDITION = MinecraftKey.key("smithing_addition"); @@ -190,282 +180,7 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator<ClientboundUpd session.setStonecutterRecipes(stonecutterRecipeMap); session.getLastRecipeNetId().set(netId); } -// boolean sendTrimRecipes = false; -// Map<String, List<String>> recipeIDs = session.getJavaToBedrockRecipeIds(); -// recipeIDs.clear(); -// Int2ObjectMap<GeyserRecipe> recipeMap = new Int2ObjectOpenHashMap<>(); -// Int2ObjectMap<List<StoneCuttingRecipeData>> unsortedStonecutterData = new Int2ObjectOpenHashMap<>(); -// CraftingDataPacket craftingDataPacket = new CraftingDataPacket(); -// craftingDataPacket.setCleanRecipes(true); -// -// RecipeContext context = new RecipeContext(session, craftingDataPacket, recipeMap); -// -// for (Recipe recipe : packet.getRecipes()) { -// switch (recipe.getType()) { -// case CRAFTING_SHAPELESS -> { -// ShapelessRecipeData shapelessRecipeData = (ShapelessRecipeData) recipe.getData(); -// List<String> bedrockRecipeIDs = context.translateShapelessRecipe(new GeyserShapelessRecipe(shapelessRecipeData)); -// if (bedrockRecipeIDs != null) { -// context.addRecipeIdentifier(session, recipe.getIdentifier().asString(), bedrockRecipeIDs); -// } -// } -// case CRAFTING_SHAPED -> { -// ShapedRecipeData shapedRecipeData = (ShapedRecipeData) recipe.getData(); -// List<String> bedrockRecipeIDs = context.translateShapedRecipe(new GeyserShapedRecipe(shapedRecipeData)); -// if (bedrockRecipeIDs != null) { -// context.addRecipeIdentifier(session, recipe.getIdentifier().asString(), bedrockRecipeIDs); -// } -// } -// case STONECUTTING -> { -// 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<StoneCuttingRecipeData> data = unsortedStonecutterData.get(ingredient.getId()); -// if (data == null) { -// data = new ArrayList<>(); -// unsortedStonecutterData.put(ingredient.getId(), data); -// } -// // Save for processing after all recipes have been received -// data.add(stoneCuttingData); -// } -// case SMITHING_TRANSFORM -> { -// SmithingTransformRecipeData data = (SmithingTransformRecipeData) recipe.getData(); -// ItemData output = ItemTranslator.translateToBedrock(session, data.getResult()); -// -// for (ItemStack template : data.getTemplate().getOptions()) { -// ItemDescriptorWithCount bedrockTemplate = ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, template)); -// -// for (ItemStack base : data.getBase().getOptions()) { -// ItemDescriptorWithCount bedrockBase = ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, base)); -// -// for (ItemStack addition : data.getAddition().getOptions()) { -// ItemDescriptorWithCount bedrockAddition = ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, addition)); -// -// String id = recipe.getIdentifier().asString(); -// // Note: vanilla inputs use aux value of Short.MAX_VALUE -// craftingDataPacket.getCraftingData().add(org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.SmithingTransformRecipeData.of(id, -// bedrockTemplate, bedrockBase, bedrockAddition, output, "smithing_table", context.getAndIncrementNetId())); -// -// recipeIDs.put(id, new ArrayList<>(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"), context.getAndIncrementNetId())); -// } -// case CRAFTING_SPECIAL_BOOKCLONING -> { -// craftingDataPacket.getCraftingData().add(MultiRecipeData.of(UUID.fromString("d1ca6b84-338e-4f2f-9c6b-76cc8b4bd98d"), context.getAndIncrementNetId())); -// } -// case CRAFTING_SPECIAL_REPAIRITEM -> { -// craftingDataPacket.getCraftingData().add(MultiRecipeData.of(UUID.fromString("00000000-0000-0000-0000-000000000001"), context.getAndIncrementNetId())); -// } -// case CRAFTING_SPECIAL_MAPEXTENDING -> { -// craftingDataPacket.getCraftingData().add(MultiRecipeData.of(UUID.fromString("d392b075-4ba1-40ae-8789-af868d56f6ce"), context.getAndIncrementNetId())); -// } -// case CRAFTING_SPECIAL_MAPCLONING -> { -// craftingDataPacket.getCraftingData().add(MultiRecipeData.of(UUID.fromString("85939755-ba10-4d9d-a4cc-efb7a8e943c4"), context.getAndIncrementNetId())); -// } -// case CRAFTING_SPECIAL_FIREWORK_ROCKET -> { -// craftingDataPacket.getCraftingData().add(MultiRecipeData.of(UUID.fromString("00000000-0000-0000-0000-000000000002"), context.getAndIncrementNetId())); -// } -// default -> { -// List<GeyserRecipe> recipes = Registries.RECIPES.get(recipe.getType()); -// if (recipes != null) { -// List<String> bedrockRecipeIds = new ArrayList<>(); -// if (recipe.getType() == RecipeType.CRAFTING_SPECIAL_TIPPEDARROW) { -// // Only shaped recipe at this moment -// for (GeyserRecipe builtInRecipe : recipes) { -// var recipeIds = context.translateShapedRecipe((GeyserShapedRecipe) builtInRecipe); -// if (recipeIds != null) { -// bedrockRecipeIds.addAll(recipeIds); -// } -// } -// } else if (recipe.getType() == RecipeType.CRAFTING_SPECIAL_SHULKERBOXCOLORING) { -// for (GeyserRecipe builtInRecipe : recipes) { -// var recipeIds = context.translateShulkerBoxRecipe((GeyserShapelessRecipe) builtInRecipe); -// if (recipeIds != null) { -// bedrockRecipeIds.addAll(recipeIds); -// } -// } -// } else { -// for (GeyserRecipe builtInRecipe : recipes) { -// var recipeIds = context.translateShapelessRecipe((GeyserShapelessRecipe) builtInRecipe); -// if (recipeIds != null) { -// bedrockRecipeIds.addAll(recipeIds); -// } -// } -// } -// context.addSpecialRecipesIdentifiers(recipe, bedrockRecipeIds); -// } -// } -// } -// } -// craftingDataPacket.getCraftingData().addAll(CARTOGRAPHY_RECIPES); -// craftingDataPacket.getPotionMixData().addAll(Registries.POTION_MIXES.forVersion(session.getUpstream().getProtocolVersion())); -// -// Int2ObjectMap<GeyserStonecutterData> stonecutterRecipeMap = new Int2ObjectOpenHashMap<>(); -// for (Int2ObjectMap.Entry<List<StoneCuttingRecipeData>> data : unsortedStonecutterData.int2ObjectEntrySet()) { -// // Sort the list by each output item's Java identifier - this is how it's sorted on Java, and therefore -// // We can get the correct order for button pressing -// data.getValue().sort(Comparator.comparing((stoneCuttingRecipeData -> -// Registries.JAVA_ITEMS.get().get(stoneCuttingRecipeData.getResult().getId()) -// // See RecipeManager#getRecipesFor as of 1.21 -// .translationKey()))); -// -// // Now that it's sorted, let's translate these recipes -// int buttonId = 0; -// for (StoneCuttingRecipeData stoneCuttingData : data.getValue()) { -// // As of 1.16.4, all stonecutter recipes have one ingredient option -// ItemStack ingredient = stoneCuttingData.getIngredient().getOptions()[0]; -// ItemData input = ItemTranslator.translateToBedrock(session, ingredient); -// ItemDescriptorWithCount descriptor = ItemDescriptorWithCount.fromItem(input); -// ItemStack javaOutput = stoneCuttingData.getResult(); -// ItemData output = ItemTranslator.translateToBedrock(session, javaOutput); -// if (!input.isValid() || !output.isValid()) { -// // Probably modded items -// continue; -// } -// UUID uuid = UUID.randomUUID(); -// // We need to register stonecutting recipes, so they show up on Bedrock -// craftingDataPacket.getCraftingData().add(org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapelessRecipeData.shapeless(uuid.toString(), -// Collections.singletonList(descriptor), Collections.singletonList(output), uuid, "stonecutter", 0, context.netId, RecipeUnlockingRequirement.INVALID)); -// -// // Save the recipe list for reference when crafting -// // Add the net ID as the key and the button required + output for the value -// stonecutterRecipeMap.put(context.getAndIncrementNetId(), new GeyserStonecutterData(buttonId++, javaOutput)); -// -// // Currently, stone cutter recipes are not locked/unlocked on Bedrock; so no need to cache their identifiers. -// } -// } -// -// session.getLastRecipeNetId().set(context.netId); // No increment -// -// // Only send smithing trim recipes if Java/ViaVersion sends them. -// if (sendTrimRecipes) { -// // BDS sends armor trim templates and materials before the CraftingDataPacket -// TrimDataPacket trimDataPacket = new TrimDataPacket(); -// trimDataPacket.getPatterns().addAll(session.getRegistryCache().trimPatterns().values()); -// trimDataPacket.getMaterials().addAll(session.getRegistryCache().trimMaterials().values()); -// session.sendUpstreamPacket(trimDataPacket); -// -// // Identical smithing_trim recipe sent by BDS that uses tag-descriptors, as the client seems to ignore the -// // approach of using many default-descriptors (which we do for smithing_transform) -// craftingDataPacket.getCraftingData().add(SmithingTrimRecipeData.of(TrimRecipe.ID, -// TrimRecipe.BASE, TrimRecipe.ADDITION, TrimRecipe.TEMPLATE, "smithing_table", session.getLastRecipeNetId().getAndIncrement())); -// } else { -// // manually add recipes for the upgrade template (workaround), since Java pre-1.20 doesn't -// craftingDataPacket.getCraftingData().addAll(getSmithingTransformRecipes(session)); -// } -// session.setOldSmithingTable(!sendTrimRecipes); -// session.sendUpstreamPacket(craftingDataPacket); -// session.setCraftingRecipes(recipeMap); -// session.setStonecutterRecipes(stonecutterRecipeMap); -// } -// -// //TODO: rewrite -// /** -// * The Java server sends an array of items for each ingredient you can use per slot in the crafting grid. -// * Bedrock recipes take only one ingredient per crafting grid slot. -// * -// * @return the Java ingredient list as an array that Bedrock can understand -// */ -// private static ItemDescriptorWithCount[][] combinations(GeyserSession session, Ingredient[] ingredients) { -// boolean empty = true; -// Map<Set<ItemDescriptorWithCount>, IntSet> squashedOptions = new HashMap<>(); -// for (int i = 0; i < ingredients.length; i++) { -// if (ingredients[i].getOptions().length == 0) { -// squashedOptions.computeIfAbsent(Collections.singleton(ItemDescriptorWithCount.EMPTY), k -> new IntOpenHashSet()).add(i); -// continue; -// } -// empty = false; -// Ingredient ingredient = ingredients[i]; -// Map<GroupedItem, List<ItemDescriptorWithCount>> groupedByIds = Arrays.stream(ingredient.getOptions()) -// .map(item -> ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, item))) -// .collect(Collectors.groupingBy(item -> item == ItemDescriptorWithCount.EMPTY ? new GroupedItem(ItemDefinition.AIR, 0) : new GroupedItem(((DefaultDescriptor) item.getDescriptor()).getItemId(), item.getCount()))); -// Set<ItemDescriptorWithCount> optionSet = new HashSet<>(groupedByIds.size()); -// for (Map.Entry<GroupedItem, List<ItemDescriptorWithCount>> entry : groupedByIds.entrySet()) { -// if (entry.getValue().size() > 1) { -// GroupedItem groupedItem = entry.getKey(); -// -// String recipeTag = RECIPE_TAGS.get(groupedItem.id.getIdentifier()); -// if (recipeTag != null && ingredients.length > 1) { -// optionSet.add(new ItemDescriptorWithCount(new ItemTagDescriptor(recipeTag), groupedItem.count)); -// continue; -// } -// -// int idCount = 0; -// //not optimal -// for (ItemMapping mapping : session.getItemMappings().getItems()) { -// if (mapping.getBedrockDefinition() == groupedItem.id) { -// idCount++; -// } -// } -// if (entry.getValue().size() < idCount) { -// optionSet.addAll(entry.getValue()); -// } else { -// optionSet.add(groupedItem.id == ItemDefinition.AIR ? ItemDescriptorWithCount.EMPTY : new ItemDescriptorWithCount(new DefaultDescriptor(groupedItem.id, Short.MAX_VALUE), groupedItem.count)); -// } -// } else { -// ItemDescriptorWithCount item = entry.getValue().get(0); -// optionSet.add(item); -// } -// } -// squashedOptions.computeIfAbsent(optionSet, k -> new IntOpenHashSet()).add(i); -// } -// if (empty) { -// // Crashes Bedrock 1.19.70 otherwise -// // Fixes https://github.com/GeyserMC/Geyser/issues/3549 -// return null; -// } -// int totalCombinations = 1; -// for (Set<ItemDescriptorWithCount> optionSet : squashedOptions.keySet()) { -// totalCombinations *= optionSet.size(); -// } -// if (totalCombinations > 500) { -// ItemDescriptorWithCount[] translatedItems = new ItemDescriptorWithCount[ingredients.length]; -// for (int i = 0; i < ingredients.length; i++) { -// if (ingredients[i].getOptions().length > 0) { -// translatedItems[i] = ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, ingredients[i].getOptions()[0])); -// } else { -// translatedItems[i] = ItemDescriptorWithCount.EMPTY; -// } -// } -// return new ItemDescriptorWithCount[][]{translatedItems}; -// } -// List<Set<ItemDescriptorWithCount>> sortedSets = new ArrayList<>(squashedOptions.keySet()); -// sortedSets.sort(Comparator.comparing(Set::size, Comparator.reverseOrder())); -// ItemDescriptorWithCount[][] combinations = new ItemDescriptorWithCount[totalCombinations][ingredients.length]; -// int x = 1; -// for (Set<ItemDescriptorWithCount> set : sortedSets) { -// IntSet slotSet = squashedOptions.get(set); -// int i = 0; -// for (ItemDescriptorWithCount item : set) { -// for (int j = 0; j < totalCombinations / set.size(); j++) { -// final int comboIndex = (i * x) + (j % x) + ((j / x) * set.size() * x); -// for (IntIterator it = slotSet.iterator(); it.hasNext(); ) { -// combinations[comboIndex][it.nextInt()] = item; -// } -// } -// i++; -// } -// x *= set.size(); -// } -// return combinations; -// } -// + private void addSmithingTransformRecipes(GeyserSession session, List<RecipeData> recipes) { ItemMapping template = session.getItemMappings().getStoredItems().upgradeTemplate(); @@ -488,135 +203,4 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator<ClientboundUpd GeyserImpl.getInstance().getLogger().debug("Unable to find item with identifier " + bedrockId); return ItemDescriptorWithCount.EMPTY; } -// -// @EqualsAndHashCode -// @AllArgsConstructor -// private static class GroupedItem { -// ItemDefinition id; -// int count; -// } -// -// private static final class RecipeContext { -// private final GeyserSession session; -// private final CraftingDataPacket packet; -// private final Int2ObjectMap<GeyserRecipe> recipeMap; -// // Get the last known network ID (first used for some pregenerated recipes) and increment from there. -// private int netId = InventoryUtils.LAST_RECIPE_NET_ID + 1; -// -// private RecipeContext(GeyserSession session, CraftingDataPacket packet, Int2ObjectMap<GeyserRecipe> recipeMap) { -// this.session = session; -// this.packet = packet; -// this.recipeMap = recipeMap; -// } -// -// List<String> translateShulkerBoxRecipe(GeyserShapelessRecipe recipe) { -// ItemStack result = recipe.result(); -// ItemData output = ItemTranslator.translateToBedrock(session, result); -// if (!output.isValid()) { -// // Likely modded item that Bedrock will complain about if it persists -// return null; -// } -// -// Item javaItem = Registries.JAVA_ITEMS.get(result.getId()); -// if (!(javaItem instanceof BedrockRequiresTagItem)) { -// // Strip NBT - tools won't appear in the recipe book otherwise -// output = output.toBuilder().tag(null).build(); -// } -// ItemDescriptorWithCount[][] inputCombinations = combinations(session, recipe.ingredients()); -// if (inputCombinations == null) { -// return null; -// } -// -// List<String> bedrockRecipeIDs = new ArrayList<>(); -// for (ItemDescriptorWithCount[] inputs : inputCombinations) { -// UUID uuid = UUID.randomUUID(); -// bedrockRecipeIDs.add(uuid.toString()); -// packet.getCraftingData().add(org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapelessRecipeData.shulkerBox(uuid.toString(), -// Arrays.asList(inputs), Collections.singletonList(output), uuid, "crafting_table", 0, netId)); -// recipeMap.put(netId++, recipe); -// } -// return bedrockRecipeIDs; -// } -// -// List<String> translateShapelessRecipe(GeyserShapelessRecipe recipe) { -// ItemStack result = recipe.result(); -// ItemData output = ItemTranslator.translateToBedrock(session, result); -// if (!output.isValid()) { -// // Likely modded item that Bedrock will complain about if it persists -// return null; -// } -// -// Item javaItem = Registries.JAVA_ITEMS.get(result.getId()); -// if (!(javaItem instanceof BedrockRequiresTagItem)) { -// // Strip NBT - tools won't appear in the recipe book otherwise -// output = output.toBuilder().tag(null).build(); -// } -// ItemDescriptorWithCount[][] inputCombinations = combinations(session, recipe.ingredients()); -// if (inputCombinations == null) { -// return null; -// } -// -// List<String> bedrockRecipeIDs = new ArrayList<>(); -// for (ItemDescriptorWithCount[] inputs : inputCombinations) { -// UUID uuid = UUID.randomUUID(); -// bedrockRecipeIDs.add(uuid.toString()); -// packet.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, RecipeUnlockingRequirement.INVALID)); -// recipeMap.put(netId++, recipe); -// } -// return bedrockRecipeIDs; -// } -// -// List<String> translateShapedRecipe(GeyserShapedRecipe recipe) { -// ItemStack result = recipe.result(); -// ItemData output = ItemTranslator.translateToBedrock(session, result); -// if (!output.isValid()) { -// // Likely modded item that Bedrock will complain about if it persists -// return null; -// } -// -// Item javaItem = Registries.JAVA_ITEMS.get(result.getId()); -// if (!(javaItem instanceof BedrockRequiresTagItem)) { -// // Strip NBT - tools won't appear in the recipe book otherwise -// output = output.toBuilder().tag(null).build(); -// } -// ItemDescriptorWithCount[][] inputCombinations = combinations(session, recipe.ingredients()); -// if (inputCombinations == null) { -// return null; -// } -// -// List<String> bedrockRecipeIDs = new ArrayList<>(); -// for (ItemDescriptorWithCount[] inputs : inputCombinations) { -// UUID uuid = UUID.randomUUID(); -// bedrockRecipeIDs.add(uuid.toString()); -// packet.getCraftingData().add(org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapedRecipeData.shaped(uuid.toString(), -// recipe.width(), recipe.height(), Arrays.asList(inputs), -// Collections.singletonList(output), uuid, "crafting_table", 0, netId, false, RecipeUnlockingRequirement.INVALID)); -// recipeMap.put(netId++, recipe); -// } -// return bedrockRecipeIDs; -// } -// -// void addSpecialRecipesIdentifiers(Recipe recipe, List<String> identifiers) { -// String javaRecipeID = switch (recipe.getType()) { -// case CRAFTING_SPECIAL_SHULKERBOXCOLORING -> -// // BDS (un)locks the dyeing with the shulker box recipe, Java never - we want BDS behavior for ease of use -// "minecraft:shulker_box"; -// case CRAFTING_SPECIAL_TIPPEDARROW -> -// // similar as above -// "minecraft:arrow"; -// default -> recipe.getIdentifier().asString(); -// }; -// -// addRecipeIdentifier(session, javaRecipeID, identifiers); -// } -// -// void addRecipeIdentifier(GeyserSession session, String javaIdentifier, List<String> bedrockIdentifiers) { -// session.getJavaToBedrockRecipeIds().computeIfAbsent(javaIdentifier, k -> new ArrayList<>()).addAll(bedrockIdentifiers); -// } -// -// int getAndIncrementNetId() { -// return this.netId++; -// } -// } } From ee4047b52919080aa9407a76fe838475f33bc0dd Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Sun, 3 Nov 2024 13:17:59 -0500 Subject: [PATCH 059/165] Send end tick packet --- .../java/org/geysermc/geyser/session/GeyserSession.java | 6 ++++++ 1 file changed, 6 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 2036f2941..ea0dc58de 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -1312,6 +1312,12 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { armAnimationTicks = -1; } } + + if (spawned) { + // Could move this to the PlayerAuthInput translator, in the event the player lags + // but this will work once we implement matching Java custom tick cycles + sendDownstreamGamePacket(ServerboundClientTickEndPacket.INSTANCE); + } } catch (Throwable throwable) { throwable.printStackTrace(); } From 1958c41e4dccb2fc79fe06fde444ba16269a2482 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Sun, 3 Nov 2024 13:23:28 -0500 Subject: [PATCH 060/165] Fixed dyed horse armor --- core/src/main/java/org/geysermc/geyser/item/Items.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 ba4b37ff5..302fdf99c 100644 --- a/core/src/main/java/org/geysermc/geyser/item/Items.java +++ b/core/src/main/java/org/geysermc/geyser/item/Items.java @@ -1237,7 +1237,7 @@ public final class Items { public static final Item IRON_HORSE_ARMOR = register(new Item("iron_horse_armor", builder().stackSize(1))); public static final Item GOLDEN_HORSE_ARMOR = register(new Item("golden_horse_armor", builder().stackSize(1))); public static final Item DIAMOND_HORSE_ARMOR = register(new Item("diamond_horse_armor", builder().stackSize(1))); - public static final Item LEATHER_HORSE_ARMOR = register(new Item("leather_horse_armor", builder().stackSize(1))); + public static final Item LEATHER_HORSE_ARMOR = register(new DyeableArmorItem("leather_horse_armor", ArmorMaterial.LEATHER, builder().stackSize(1))); public static final Item LEAD = register(new Item("lead", builder())); public static final Item NAME_TAG = register(new Item("name_tag", builder())); public static final Item COMMAND_BLOCK_MINECART = register(new Item("command_block_minecart", builder().stackSize(1))); From 521b9f3dce39b6aaac47547dd81b47fb2bea8944 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Mon, 4 Nov 2024 00:42:01 -0500 Subject: [PATCH 061/165] Add tab completion to Geyser standalone --- .../standalone/GeyserStandaloneLogger.java | 14 ++++++++++++++ .../geysermc/geyser/command/CommandRegistry.java | 6 ++++++ 2 files changed, 20 insertions(+) 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 21e6a5e82..b614a7b23 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 @@ -33,10 +33,24 @@ import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.command.GeyserCommandSource; import org.geysermc.geyser.text.ChatColor; +import org.jline.reader.Candidate; +import org.jline.reader.LineReader; +import org.jline.reader.LineReaderBuilder; @Slf4j public class GeyserStandaloneLogger extends SimpleTerminalConsole implements GeyserLogger, GeyserCommandSource { + @Override + protected LineReader buildReader(LineReaderBuilder builder) { + builder.completer((reader, line, candidates) -> { + var suggestions = GeyserImpl.getInstance().commandRegistry().suggestionsFor(this, line.line()); + for (var suggestion : suggestions.list()) { + candidates.add(new Candidate(suggestion.suggestion())); + } + }); + return super.buildReader(builder); + } + @Override protected boolean isRunning() { return !GeyserImpl.getInstance().isShuttingDown(); diff --git a/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java b/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java index 9de7582a5..5d44016c9 100644 --- a/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java @@ -68,6 +68,8 @@ import org.incendo.cloud.parser.standard.EnumParser; import org.incendo.cloud.parser.standard.IntegerParser; import org.incendo.cloud.parser.standard.LiteralParser; import org.incendo.cloud.parser.standard.StringArrayParser; +import org.incendo.cloud.suggestion.Suggestion; +import org.incendo.cloud.suggestion.Suggestions; import java.util.ArrayList; import java.util.Collection; @@ -320,6 +322,10 @@ public class CommandRegistry implements EventRegistrar { cloud.commandExecutor().executeCommand(source, command); } + public Suggestions<GeyserCommandSource, ? extends Suggestion> suggestionsFor(GeyserCommandSource source, String input) { + return cloud.suggestionFactory().suggestImmediately(source, input); + } + public void export(GeyserSession session, List<CommandData> bedrockCommands, Set<String> knownAliases) { cloud.commandTree().rootNodes().forEach(commandTree -> { var command = commandTree.command(); From cfaa219f192b017163ea0c44b683ca9edac215dd Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Mon, 4 Nov 2024 17:59:56 +0800 Subject: [PATCH 062/165] Remove unused method --- .../entity/type/player/SessionPlayerEntity.java | 12 ------------ 1 file changed, 12 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 ee56e25a7..bfa30fed4 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 @@ -34,7 +34,6 @@ import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.AttributeData; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; -import org.cloudburstmc.protocol.bedrock.packet.MoveEntityAbsolutePacket; import org.cloudburstmc.protocol.bedrock.packet.MovePlayerPacket; import org.cloudburstmc.protocol.bedrock.packet.UpdateAttributesPacket; import org.geysermc.geyser.entity.attribute.GeyserAttributeType; @@ -362,17 +361,6 @@ public class SessionPlayerEntity extends PlayerEntity { this.vehicleJumpStrength = MathUtils.constrain(vehicleJumpStrength, 0, 100); } - public void forceRotationUpdate() { - MoveEntityAbsolutePacket absolutePacket = new MoveEntityAbsolutePacket(); - absolutePacket.setPosition(this.getPosition()); - absolutePacket.setRotation(this.getBedrockRotation()); - absolutePacket.setRuntimeEntityId(this.getGeyserId()); - absolutePacket.setForceMove(true); - absolutePacket.setOnGround(this.isOnGround()); - - session.sendUpstreamPacket(absolutePacket); - } - private boolean isBelowVoidFloor() { return position.getY() < voidFloorPosition(); } From 5162d4516d429025aeee539e8d97dd7807909a5b Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Mon, 4 Nov 2024 17:56:24 -0500 Subject: [PATCH 063/165] Cleanup and fixes --- .../org/geysermc/geyser/command/CommandRegistry.java | 12 +++++++++--- .../geyser/inventory/recipe/GeyserRecipe.java | 2 -- .../geyser/inventory/recipe/GeyserShapedRecipe.java | 3 +-- .../inventory/recipe/GeyserShapelessRecipe.java | 3 +-- .../registry/populator/BlockRegistryPopulator.java | 5 ++--- .../player/BedrockPlayerAuthInputTranslator.java | 10 ++++++---- 6 files changed, 19 insertions(+), 16 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java b/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java index 5d44016c9..838ab71b1 100644 --- a/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/command/CommandRegistry.java @@ -346,7 +346,7 @@ public class CommandRegistry implements EventRegistrar { List<CommandOverloadData> data = new ArrayList<>(); for (var node : commandTree.children()) { - List<List<CommandParamData>> params = createParamData(node); + List<List<CommandParamData>> params = createParamData(session, node); params.forEach(param -> data.add(new CommandOverloadData(false, param.toArray(CommandParamData[]::new)))); } @@ -358,7 +358,13 @@ public class CommandRegistry implements EventRegistrar { }); } - private List<List<CommandParamData>> createParamData(CommandNode<GeyserCommandSource> node) { + private List<List<CommandParamData>> createParamData(GeyserSession session, CommandNode<GeyserCommandSource> node) { + var command = node.command(); + if (command != null && !session.hasPermission(command.commandPermission().permissionString())) { + // Triggers with subcommands like Geyser dump, stop, etc. + return Collections.emptyList(); + } + CommandParamData data = new CommandParamData(); var component = node.component(); data.setName(component.name()); @@ -396,7 +402,7 @@ public class CommandRegistry implements EventRegistrar { // If a node has multiple children, this will need to be represented // by creating a new list/branch for each and cloning this node down each line. for (var child : children) { - collectiveData.addAll(createParamData(child)); + collectiveData.addAll(createParamData(session, child)); } collectiveData.forEach(list -> list.add(0, data)); return collectiveData; diff --git a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java index b0f5a1b44..7d25c5803 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java @@ -25,7 +25,6 @@ package org.geysermc.geyser.inventory.recipe; -import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; /** @@ -37,6 +36,5 @@ public interface GeyserRecipe { */ boolean isShaped(); - @Nullable SlotDisplay result(); } 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 70b71cf4d..7fc1d52aa 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 @@ -25,13 +25,12 @@ package org.geysermc.geyser.inventory.recipe; -import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.ShapedCraftingRecipeDisplay; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; import java.util.List; -public record GeyserShapedRecipe(int width, int height, List<SlotDisplay> ingredients, @Nullable SlotDisplay result) implements GeyserRecipe { +public record GeyserShapedRecipe(int width, int height, List<SlotDisplay> ingredients, SlotDisplay result) implements GeyserRecipe { public GeyserShapedRecipe(ShapedCraftingRecipeDisplay data) { this(data.width(), data.height(), data.ingredients(), data.result()); 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 90eeb01c9..ed513a804 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 @@ -25,13 +25,12 @@ package org.geysermc.geyser.inventory.recipe; -import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.ShapelessCraftingRecipeDisplay; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; import java.util.List; -public record GeyserShapelessRecipe(List<SlotDisplay> ingredients, @Nullable SlotDisplay result) implements GeyserRecipe { +public record GeyserShapelessRecipe(List<SlotDisplay> ingredients, SlotDisplay result) implements GeyserRecipe { public GeyserShapelessRecipe(ShapelessCraftingRecipeDisplay data) { this(data.ingredients(), data.result()); 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 b95da4f8f..5b7213bee 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 @@ -196,11 +196,10 @@ public final class BlockRegistryPopulator { GeyserBedrockBlock[] bedrockRuntimeMap = new GeyserBedrockBlock[blockStates.size()]; for (int i = 0; i < blockStates.size(); i++) { NbtMap tag = blockStates.get(i); - if (blockStateOrderedMap.containsKey(tag)) { + GeyserBedrockBlock block = new GeyserBedrockBlock(i, tag); + if (blockStateOrderedMap.put(tag, block) != null) { throw new AssertionError("Duplicate block states in Bedrock palette: " + tag); } - GeyserBedrockBlock block = new GeyserBedrockBlock(i, tag); - blockStateOrderedMap.put(tag, block); bedrockRuntimeMap[i] = block; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java index a07ebe04a..3c9b41488 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java @@ -229,12 +229,12 @@ public final class BedrockPlayerAuthInputTranslator extends PacketTranslator<Pla return; } if (vehicle instanceof ClientVehicle) { - session.getPlayerEntity().setVehicleInput(packet.getAnalogMoveVector()); + session.getPlayerEntity().setVehicleInput(packet.getMotion()); } boolean sendMovement = false; if (vehicle instanceof AbstractHorseEntity && !(vehicle instanceof LlamaEntity)) { - sendMovement = true; + sendMovement = !(vehicle instanceof ClientVehicle); } else if (vehicle instanceof BoatEntity) { if (vehicle.getPassengers().size() == 1) { // The player is the only rider @@ -261,16 +261,18 @@ public final class BedrockPlayerAuthInputTranslator extends PacketTranslator<Pla if (wasJumping && !holdingJump) { // Jump released // Yes, I'm fairly certain that entity ID is correct. + int finalVehicleJumpStrength = GenericMath.floor(session.getInputCache().getJumpScale() * 100f); session.sendDownstreamGamePacket(new ServerboundPlayerCommandPacket(session.getPlayerEntity().getEntityId(), - PlayerState.START_HORSE_JUMP, GenericMath.floor(session.getInputCache().getJumpScale() * 100f))); + PlayerState.START_HORSE_JUMP, finalVehicleJumpStrength)); session.getInputCache().setJumpingTicks(-10); + session.getPlayerEntity().setVehicleJumpStrength(finalVehicleJumpStrength); } else if (!wasJumping && holdingJump) { session.getInputCache().setJumpingTicks(0); session.getInputCache().setJumpScale(0); } else if (holdingJump) { session.getInputCache().setJumpingTicks(++currentJumpingTicks); if (currentJumpingTicks < 10) { - session.getInputCache().setJumpScale(session.getInputCache().getJumpScale() * 0.1F); + session.getInputCache().setJumpScale(session.getInputCache().getJumpingTicks() * 0.1F); } else { session.getInputCache().setJumpScale(0.8f + 2.0f / (currentJumpingTicks - 9) * 0.1f); } From f5d9db4ff692ca10675a70a93a117b0099e6fe66 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Mon, 4 Nov 2024 21:13:14 -0500 Subject: [PATCH 064/165] Some final touches --- .../entity/type/player/SessionPlayerEntity.java | 2 +- .../geyser/network/UpstreamPacketHandler.java | 8 +++++--- .../registry/populator/TagRegistryPopulator.java | 4 ++-- .../geysermc/geyser/session/GeyserSession.java | 5 +++++ .../player/{ => input}/BedrockBlockActions.java | 4 ++-- .../BedrockMovePlayer.java} | 10 ++++++---- .../BedrockPlayerAuthInputTranslator.java | 7 +++++-- .../java/JavaFinishConfigurationTranslator.java | 16 +++++++++------- .../org/geysermc/geyser/util/InventoryUtils.java | 6 +++++- 9 files changed, 40 insertions(+), 22 deletions(-) rename core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/{ => input}/BedrockBlockActions.java (99%) rename core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/{BedrockMovePlayerTranslator.java => input/BedrockMovePlayer.java} (98%) rename core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/{ => input}/BedrockPlayerAuthInputTranslator.java (98%) 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 bfa30fed4..9d5bc011c 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 @@ -168,7 +168,7 @@ public class SessionPlayerEntity extends PlayerEntity { /** * Set the player's position without applying an offset or moving the bounding box - * This is used in BedrockMovePlayerTranslator which receives the player's position + * This is used in BedrockMovePlayer which receives the player's position * with the offset pre-applied * * @param position the new position of the Bedrock player 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 19e56c8a8..1ac38aa35 100644 --- a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.network; import io.netty.buffer.Unpooled; +import org.cloudburstmc.math.vector.Vector2f; import org.cloudburstmc.protocol.bedrock.BedrockDisconnectReasons; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; import org.cloudburstmc.protocol.bedrock.codec.compat.BedrockCompat; @@ -38,9 +39,9 @@ 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; -import org.cloudburstmc.protocol.bedrock.packet.MovePlayerPacket; import org.cloudburstmc.protocol.bedrock.packet.NetworkSettingsPacket; import org.cloudburstmc.protocol.bedrock.packet.PlayStatusPacket; +import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket; import org.cloudburstmc.protocol.bedrock.packet.RequestNetworkSettingsPacket; import org.cloudburstmc.protocol.bedrock.packet.ResourcePackChunkDataPacket; import org.cloudburstmc.protocol.bedrock.packet.ResourcePackChunkRequestPacket; @@ -290,8 +291,9 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { } @Override - public PacketSignal handle(MovePlayerPacket packet) { // TODO - if (session.isLoggingIn()) { + public PacketSignal handle(PlayerAuthInputPacket packet) { + // This doesn't catch rotation, but for a niche case I don't exactly want to cache rotation... + if (session.isLoggingIn() && !packet.getMotion().equals(Vector2f.ZERO)) { SetTitlePacket titlePacket = new SetTitlePacket(); titlePacket.setType(SetTitlePacket.Type.ACTIONBAR); titlePacket.setText(GeyserLocale.getPlayerLocaleString("geyser.auth.login.wait", session.locale())); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java index 4e249d483..bee207a00 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java @@ -31,7 +31,6 @@ import com.google.gson.reflect.TypeToken; import it.unimi.dsi.fastutil.Hash; import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntList; -import it.unimi.dsi.fastutil.objects.Object2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap; import it.unimi.dsi.fastutil.objects.ObjectIntPair; import org.cloudburstmc.protocol.bedrock.codec.v671.Bedrock_v671; @@ -90,7 +89,7 @@ public final class TagRegistryPopulator { throw new AssertionError("Unable to load Bedrock runtime item IDs", e); } - Object2ObjectMap<int[], String> javaItemsToBedrockTag = new Object2ObjectOpenCustomHashMap<>(hashStrategy); + var javaItemsToBedrockTag = new Object2ObjectOpenCustomHashMap<int[], String>(hashStrategy); for (var entry : bedrockTags.entrySet()) { List<String> value = entry.getValue(); @@ -129,6 +128,7 @@ public final class TagRegistryPopulator { javaItemsToBedrockTag.put(javaNetworkIdArray, entry.getKey()); } + javaItemsToBedrockTag.trim(); Registries.TAGS.register(palette.rightInt(), javaItemsToBedrockTag); } } 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 ea0dc58de..ef6261ead 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -1077,6 +1077,11 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { // Download and load the language for the player MinecraftLocale.downloadAndLoadLocale(locale); + +// if (sentSpawnPacket && !GameProtocol.isPre1_21_2(GeyserSession.this)) { +// // Possible form to close. +// upstream.sendPacket(new ClientboundCloseFormPacket()); +// } } @Override diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockBlockActions.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockBlockActions.java similarity index 99% rename from core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockBlockActions.java rename to core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockBlockActions.java index f1b91a0a5..061a04b77 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockBlockActions.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockBlockActions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * 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 @@ -23,7 +23,7 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.translator.protocol.bedrock.entity.player; +package org.geysermc.geyser.translator.protocol.bedrock.entity.player.input; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.math.vector.Vector3i; diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockMovePlayer.java similarity index 98% rename from core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java rename to core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockMovePlayer.java index 1940258e4..6220b6623 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockMovePlayer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * 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 @@ -23,7 +23,7 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.translator.protocol.bedrock.entity.player; +package org.geysermc.geyser.translator.protocol.bedrock.entity.player.input; import org.cloudburstmc.math.vector.Vector3d; import org.cloudburstmc.math.vector.Vector3f; @@ -40,8 +40,10 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.Serv import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerRotPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerStatusOnlyPacket; - -public final class BedrockMovePlayerTranslator { +/** + * Holds processing input coming in from the {@link PlayerAuthInputPacket} packet. + */ +final class BedrockMovePlayer { static void translate(GeyserSession session, PlayerAuthInputPacket packet) { SessionPlayerEntity entity = session.getPlayerEntity(); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java similarity index 98% rename from core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java rename to core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java index 3c9b41488..02ea02232 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockPlayerAuthInputTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java @@ -23,7 +23,7 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.translator.protocol.bedrock.entity.player; +package org.geysermc.geyser.translator.protocol.bedrock.entity.player.input; import org.cloudburstmc.math.GenericMath; import org.cloudburstmc.math.vector.Vector2f; @@ -74,7 +74,7 @@ public final class BedrockPlayerAuthInputTranslator extends PacketTranslator<Pla boolean wasJumping = session.getInputCache().wasJumping(); session.getInputCache().processInputs(packet); - BedrockMovePlayerTranslator.translate(session, packet); + BedrockMovePlayer.translate(session, packet); processVehicleInput(session, packet, wasJumping); @@ -220,6 +220,9 @@ public final class BedrockPlayerAuthInputTranslator extends PacketTranslator<Pla session.sendDownstreamGamePacket(breakPacket); } else { session.getGeyser().getLogger().error("Unhandled item use transaction type!"); + if (session.getGeyser().getLogger().isDebug()) { + session.getGeyser().getLogger().debug(transaction); + } } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationTranslator.java index f8bfb86c0..91fe6c9c5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaFinishConfigurationTranslator.java @@ -70,14 +70,16 @@ public class JavaFinishConfigurationTranslator extends PacketTranslator<Clientbo craftingDataPacket.setCleanRecipes(true); craftingDataPacket.getCraftingData().addAll(CARTOGRAPHY_RECIPES); craftingDataPacket.getPotionMixData().addAll(Registries.POTION_MIXES.forVersion(session.getUpstream().getProtocolVersion())); - // TODO proper fix to check if we've been online - in online mode (with auth screen), - // recipes are not yet known - if (session.isSentSpawnPacket() && session.getStonecutterRecipes() != null) { + if (session.isSentSpawnPacket()) { session.getUpstream().sendPacket(craftingDataPacket); - session.getCraftingRecipes().clear(); - session.getJavaToBedrockRecipeIds().clear(); - session.getSmithingRecipes().clear(); - session.getStonecutterRecipes().clear(); + // TODO proper fix to check if we've been online - in online mode (with auth screen), + // recipes are not yet known + if (session.getStonecutterRecipes() != null) { + session.getCraftingRecipes().clear(); + session.getJavaToBedrockRecipeIds().clear(); + session.getSmithingRecipes().clear(); + session.getStonecutterRecipes().clear(); + } } else { session.getUpstream().queuePostStartGamePacket(craftingDataPacket); } 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 be357cebd..9862eb730 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java @@ -515,7 +515,11 @@ public class InventoryUtils { List<SlotDisplay> mirroredIngredients = new ArrayList<>(ingredients.size()); for (int row = 0; row < height; row++) { for (int col = 0; col < width; col++) { - mirroredIngredients.add(ingredients.get((width - 1 - col) + (row * width))); + int index = col + (row * width); + while (mirroredIngredients.size() <= index) { + mirroredIngredients.add(null); + } + mirroredIngredients.set(index, ingredients.get((width - 1 - col) + (row * width))); } } From 6e8a955ee0386595248c83bd1e81f78e5e277847 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Mon, 4 Nov 2024 21:26:17 -0500 Subject: [PATCH 065/165] Dust particle color verified working --- .../protocol/java/level/JavaLevelParticlesTranslator.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) 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 3c73b1886..336fedc65 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 @@ -132,11 +132,7 @@ public class JavaLevelParticlesTranslator extends PacketTranslator<ClientboundLe } case DUST, DUST_COLOR_TRANSITION -> { //TODO DustParticleData data = (DustParticleData) particle.getData(); -// int r = (int) (data.getRed() * 255); -// int g = (int) (data.getGreen() * 255); -// int b = (int) (data.getBlue() * 255); -// int rgbData = ((0xff) << 24) | ((r & 0xff) << 16) | ((g & 0xff) << 8) | (b & 0xff); - int rgbData = data.getColor(); // TEST + int rgbData = data.getColor(); return (position) -> { LevelEventPacket packet = new LevelEventPacket(); packet.setType(ParticleType.FALLING_DUST); From 881b8e9b905e99145d6be28f9b0144fbc18aa82a Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Wed, 6 Nov 2024 18:37:31 -0500 Subject: [PATCH 066/165] Better multi-item recipe support for 1.21.1 --- .../java/JavaRecipeBookAddTranslator.java | 77 ++++++++++++++++--- 1 file changed, 66 insertions(+), 11 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java index 05be7db3d..71fd4a200 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java @@ -30,6 +30,7 @@ import it.unimi.dsi.fastutil.Pair; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import net.kyori.adventure.key.Key; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.RecipeUnlockingRequirement; import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapedRecipeData; @@ -72,6 +73,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.WithRem import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundRecipeBookAddPacket; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; @@ -202,11 +204,39 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec if (composite.contents().size() == 1) { return translateToInput(session, composite.contents().get(0)); } - return composite.contents().stream() - .map(subDisplay -> translateToInput(session, subDisplay)) - .filter(Objects::nonNull) - .flatMap(List::stream) - .toList(); + + // Try and see if the contents match a tag. + // ViaVersion maps pre-1.21.2 ingredient lists to CompositeSlotDisplays. + int[] items = new int[composite.contents().size()]; + List<SlotDisplay> contents = composite.contents(); + for (int i = 0; i < contents.size(); i++) { + SlotDisplay subDisplay = contents.get(i); + int id; + if (subDisplay instanceof ItemSlotDisplay item) { + id = item.item(); + } else if (!(subDisplay instanceof ItemStackSlotDisplay itemStackSlotDisplay)) { + id = -1; + } else if (itemStackSlotDisplay.itemStack().getAmount() == 1 + && itemStackSlotDisplay.itemStack().getDataComponents() == null) { + id = itemStackSlotDisplay.itemStack().getId(); + } else { + id = -1; + } + if (id == -1) { + // We couldn't guarantee a "normal" item from this stack. + return fallbackCompositeMapping(session, composite); + } + items[i] = id; + } + // For searching in the tag map. + Arrays.sort(items); + + List<ItemDescriptorWithCount> tagDescriptor = lookupBedrockTag(session, items); + if (tagDescriptor != null) { + return tagDescriptor; + } + + return fallbackCompositeMapping(session, composite); } if (slotDisplay instanceof WithRemainderSlotDisplay remainder) { // Don't need to worry about what will stay in the crafting table after crafting for the purposes of sending recipes to Bedrock @@ -230,12 +260,9 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec // Cache is implemented as, presumably, an item tag will be used multiple times in succession // (E.G. a chest with planks tags) return TAG_TO_ITEM_DESCRIPTOR_CACHE.get().computeIfAbsent(items, key -> { - var bedrockTags = Registries.TAGS.forVersion(session.getUpstream().getProtocolVersion()); - String bedrockTag = bedrockTags.get(key); - if (bedrockTag != null) { - return Collections.singletonList( - new ItemDescriptorWithCount(new ItemTagDescriptor(bedrockTag), 1) - ); + List<ItemDescriptorWithCount> tagDescriptor = lookupBedrockTag(session, key); + if (tagDescriptor != null) { + return tagDescriptor; } // In the future, we can probably search through and use subsets of tags as well. @@ -278,6 +305,33 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec return new ItemDescriptorWithCount(new DefaultDescriptor(mapping.getBedrockDefinition(), mapping.getBedrockData()), 1); // Need to check count } + /** + * Checks to see if this list of items matches with one of this Bedrock version's tags. + */ + @Nullable + private List<ItemDescriptorWithCount> lookupBedrockTag(GeyserSession session, int[] items) { + var bedrockTags = Registries.TAGS.forVersion(session.getUpstream().getProtocolVersion()); + String bedrockTag = bedrockTags.get(items); + if (bedrockTag != null) { + return Collections.singletonList( + new ItemDescriptorWithCount(new ItemTagDescriptor(bedrockTag), 1) + ); + } else { + return null; + } + } + + /** + * Converts CompositeSlotDisplay contents to a list of basic ItemDescriptorWithCounts. + */ + private List<ItemDescriptorWithCount> fallbackCompositeMapping(GeyserSession session, CompositeSlotDisplay composite) { + return composite.contents().stream() + .map(subDisplay -> translateToInput(session, subDisplay)) + .filter(Objects::nonNull) + .flatMap(List::stream) + .toList(); + } + private Pair<List<List<ItemDescriptorWithCount>>, ItemData> combinations(GeyserSession session, RecipeDisplay display, List<SlotDisplay> ingredients) { Pair<Item, ItemData> pair = translateToOutput(session, display.result()); if (pair == null || !pair.right().isValid()) { @@ -327,6 +381,7 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec return Pair.of(Lists.cartesianProduct(inputs), output); } } + // TODO: return Pair.of( Collections.singletonList(inputs.stream().map(descriptors -> descriptors.get(0)).toList()), output From 2bc3773cb0e70dcae0c2537d0767e05914f81c17 Mon Sep 17 00:00:00 2001 From: Matthias Ahouansou <matthias@ahouansou.cz> Date: Thu, 7 Nov 2024 17:23:23 +0000 Subject: [PATCH 067/165] Set Minecraft & protocol version in Velocity ping (#5130) this fixes issues caused by plugins which use the version in the ping --- .../platform/velocity/GeyserVelocityPingPassthrough.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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 b2258d3a3..f20076597 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 @@ -31,8 +31,10 @@ import com.velocitypowered.api.network.ProtocolVersion; import com.velocitypowered.api.proxy.InboundConnection; import com.velocitypowered.api.proxy.ProxyServer; import com.velocitypowered.api.proxy.server.ServerPing; +import com.velocitypowered.api.proxy.server.ServerPing.Version; import lombok.AllArgsConstructor; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; +import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.ping.GeyserPingInfo; import org.geysermc.geyser.ping.IGeyserPingPassthrough; @@ -51,7 +53,9 @@ public class GeyserVelocityPingPassthrough implements IGeyserPingPassthrough { try { event = server.getEventManager().fire(new ProxyPingEvent(new GeyserInboundConnection(inetSocketAddress), ServerPing.builder() .description(server.getConfiguration().getMotd()).onlinePlayers(server.getPlayerCount()) - .maximumPlayers(server.getConfiguration().getShowMaxPlayers()).build())).get(); + .maximumPlayers(server.getConfiguration().getShowMaxPlayers()) + .version(new Version(GameProtocol.getJavaProtocolVersion(), GameProtocol.getJavaMinecraftVersion())) + .build())).get(); } catch (ExecutionException | InterruptedException e) { throw new RuntimeException(e); } From aebf9d399b1fe60d7254d7d94e6746b5e37adb94 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Thu, 7 Nov 2024 12:43:37 -0500 Subject: [PATCH 068/165] Fix TagRegistryPopulator on older Gson versions Fixes #5132 --- .../geyser/registry/populator/TagRegistryPopulator.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java index bee207a00..24cc270c9 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java @@ -47,6 +47,7 @@ import org.geysermc.geyser.registry.type.ItemMappings; import java.io.InputStream; import java.io.InputStreamReader; +import java.lang.reflect.Type; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -75,7 +76,7 @@ public final class TagRegistryPopulator { ObjectIntPair.of("1_21_30", Bedrock_v729.CODEC.getProtocolVersion()), ObjectIntPair.of("1_21_40", Bedrock_v748.CODEC.getProtocolVersion()) ); - TypeToken<Map<String, List<String>>> type = new TypeToken<>() {}; + Type type = new TypeToken<Map<String, List<String>>>() {}.getType(); GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); From 1b4d257e3571ef321e0778e33e6d98727012d0ac Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Thu, 7 Nov 2024 16:09:31 -0500 Subject: [PATCH 069/165] Better onGround check Thanks to @AJ-Ferguson for the suggestion. Includes hacks to still maintain pre-1.21.30, but that will likely lose support very soon, anyway. --- .../level/physics/CollisionManager.java | 13 ++++++----- .../geysermc/geyser/network/GameProtocol.java | 4 ++++ .../player/input/BedrockMovePlayer.java | 22 ++++++++++++++----- 3 files changed, 27 insertions(+), 12 deletions(-) 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 c5f986499..69f88e2a1 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 @@ -154,10 +154,11 @@ public class CollisionManager { * the two versions. Will also send corrected movement packets back to Bedrock if they collide with pistons. * * @param bedrockPosition the current Bedrock position of the client + * @param onGround whether the Bedrock player is on the ground * @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 @Nullable CollisionResult adjustBedrockPosition(Vector3f bedrockPosition, boolean teleported) { + public @Nullable CollisionResult 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()) { @@ -198,9 +199,9 @@ public class CollisionManager { position = playerBoundingBox.getBottomCenter(); - boolean onGround = (adjustedMovement.getY() != movement.getY() && movement.getY() < 0) || isOnGround(); + boolean newOnGround = adjustedMovement.getY() != movement.getY() && movement.getY() < 0 || onGround; // Send corrected position to Bedrock if they differ by too much to prevent de-syncs - if (movement.distanceSquared(adjustedMovement) > INCORRECT_MOVEMENT_THRESHOLD) { + if (onGround != newOnGround || movement.distanceSquared(adjustedMovement) > INCORRECT_MOVEMENT_THRESHOLD) { PlayerEntity playerEntity = session.getPlayerEntity(); // Client will dismount if on a vehicle if (playerEntity.getVehicle() == null && pistonCache.getPlayerMotion().equals(Vector3f.ZERO) && !pistonCache.isPlayerSlimeCollision()) { @@ -208,7 +209,7 @@ public class CollisionManager { } } - if (!onGround) { + if (!newOnGround) { // Trim the position to prevent rounding errors that make Java think we are clipping into a block position = Vector3d.from(position.getX(), Double.parseDouble(DECIMAL_FORMAT.format(position.getY())), position.getZ()); } @@ -415,8 +416,8 @@ public class CollisionManager { return BlockUtils.getCollision(blockId); } - private boolean isOnGround() { - // Someone smarter than me at collisions plz check this. + public boolean isOnGround() { + // Temporary until pre-1.21.30 support is dropped. Vector3d bottomCenter = playerBoundingBox.getBottomCenter(); Vector3i groundPos = Vector3i.from(bottomCenter.getX(), bottomCenter.getY() - 1, bottomCenter.getZ()); BlockCollision collision = BlockUtils.getCollisionAt(session, groundPos); 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 873fa413a..463cc54fd 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -111,6 +111,10 @@ public final class GameProtocol { return session.getUpstream().getProtocolVersion() < Bedrock_v686.CODEC.getProtocolVersion(); } + public static boolean isPre1_21_30(GeyserSession session) { + return session.getUpstream().getProtocolVersion() < Bedrock_v729.CODEC.getProtocolVersion(); + } + public static boolean isPre1_21_40(GeyserSession session) { return session.getUpstream().getProtocolVersion() < Bedrock_v748.CODEC.getProtocolVersion(); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockMovePlayer.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockMovePlayer.java index 6220b6623..6abb3899a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockMovePlayer.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockMovePlayer.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.translator.protocol.bedrock.entity.player.input; +import net.kyori.adventure.util.TriState; import org.cloudburstmc.math.vector.Vector3d; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.PlayerAuthInputData; @@ -32,6 +33,7 @@ import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; import org.geysermc.geyser.level.physics.CollisionResult; +import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.ChatColor; import org.geysermc.mcprotocollib.network.packet.Packet; @@ -86,6 +88,14 @@ final class BedrockMovePlayer { session.setLookBackScheduledFuture(null); } + TriState maybeOnGround; + if (GameProtocol.isPre1_21_30(session)) { + // VERTICAL_COLLISION input data does not exist. + maybeOnGround = TriState.NOT_SET; + } else { + // Client is telling us it wants to move down, but something is blocking it from doing so. + maybeOnGround = TriState.byBoolean(packet.getInputData().contains(PlayerAuthInputData.VERTICAL_COLLISION) && packet.getDelta().getY() < 0); + } // This takes into account no movement sent from the client, but the player is trying to move anyway. // (Press into a wall in a corner - you're trying to move but nothing actually happens) boolean horizontalCollision = packet.getInputData().contains(PlayerAuthInputData.HORIZONTAL_COLLISION); @@ -94,7 +104,7 @@ final class BedrockMovePlayer { // This isn't needed, but it makes the packets closer to vanilla // It also means you can't "lag back" while only looking, in theory if (!positionChanged && rotationChanged) { - ServerboundMovePlayerRotPacket playerRotationPacket = new ServerboundMovePlayerRotPacket(entity.isOnGround(), horizontalCollision, yaw, pitch); + ServerboundMovePlayerRotPacket playerRotationPacket = new ServerboundMovePlayerRotPacket(maybeOnGround.toBooleanOrElse(entity.isOnGround()), horizontalCollision, yaw, pitch); entity.setYaw(yaw); entity.setPitch(pitch); @@ -103,10 +113,10 @@ final class BedrockMovePlayer { session.sendDownstreamGamePacket(playerRotationPacket); } else if (positionChanged) { if (isValidMove(session, entity.getPosition(), packet.getPosition())) { - CollisionResult result = session.getCollisionManager().adjustBedrockPosition(packet.getPosition(), packet.getInputData().contains(PlayerAuthInputData.HANDLE_TELEPORT)); + CollisionResult result = session.getCollisionManager().adjustBedrockPosition(packet.getPosition(), maybeOnGround.toBooleanOrElse(false), packet.getInputData().contains(PlayerAuthInputData.HANDLE_TELEPORT)); if (result != null) { // A null return value cancels the packet Vector3d position = result.correctedMovement(); - boolean onGround = result.onGround().toBooleanOrElse(entity.isOnGround()); + boolean onGround = maybeOnGround.toBooleanOrElseGet(() -> session.getCollisionManager().isOnGround()); boolean isBelowVoid = entity.isVoidPositionDesynched(); boolean teleportThroughVoidFloor, mustResyncPosition; @@ -155,7 +165,6 @@ final class BedrockMovePlayer { } entity.setPositionManual(packet.getPosition()); - entity.setOnGround(onGround); // Send final movement changes session.sendDownstreamGamePacket(movePacket); @@ -174,11 +183,12 @@ final class BedrockMovePlayer { session.getGeyser().getLogger().debug("Recalculating position..."); session.getCollisionManager().recalculatePosition(); } - } else if (horizontalCollision != session.getInputCache().lastHorizontalCollision()) { - session.sendDownstreamGamePacket(new ServerboundMovePlayerStatusOnlyPacket(entity.isOnGround(), horizontalCollision)); + } else if (horizontalCollision != session.getInputCache().lastHorizontalCollision() || maybeOnGround.toBooleanOrElse(entity.isOnGround()) != entity.isOnGround()) { + session.sendDownstreamGamePacket(new ServerboundMovePlayerStatusOnlyPacket(maybeOnGround.toBooleanOrElse(false), horizontalCollision)); } session.getInputCache().setLastHorizontalCollision(horizontalCollision); + entity.setOnGround(maybeOnGround.toBooleanOrElse(entity.isOnGround())); // Move parrots to match if applicable if (entity.getLeftParrot() != null) { From 4598ffec0515c5f992cf8daf1e66e56000ed2d1b Mon Sep 17 00:00:00 2001 From: AJ Ferguson <AJ-Ferguson@users.noreply.github.com> Date: Thu, 7 Nov 2024 20:35:41 -0500 Subject: [PATCH 070/165] Update MCPL and adapters (#5135) * Update MCPL * Update adapters --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b8908f518..f95574ee1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,7 @@ protocol-common = "3.0.0.Beta5-20241022.154658-14" protocol-codec = "3.0.0.Beta5-20241022.154658-14" raknet = "1.0.0.CR3-20240416.144209-1" minecraftauth = "4.1.1" -mcprotocollib = "1.21.2-20241103.011758-1" +mcprotocollib = "1.21.2-20241107.110329-3" adventure = "4.14.0" adventure-platform = "4.3.0" junit = "5.9.2" @@ -25,7 +25,7 @@ jline = "3.21.0" terminalconsoleappender = "1.2.0" folia = "1.19.4-R0.1-SNAPSHOT" viaversion = "4.9.2" -adapters = "1.14-SNAPSHOT" +adapters = "1.15-SNAPSHOT" cloud = "2.0.0-rc.2" cloud-minecraft = "2.0.0-beta.9" cloud-minecraft-modded = "2.0.0-beta.7" From e645935533e87f0318c9acc392dc817f84d44803 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=92=9F=E8=92=BB?= <41978811+patyhank@users.noreply.github.com> Date: Tue, 12 Nov 2024 02:44:22 +0800 Subject: [PATCH 071/165] Fix #5070 light block placement (#5104) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 蒟蒻 <mlpmmy@gmail.com> --- .../java/org/geysermc/geyser/item/Items.java | 3 +- .../geysermc/geyser/item/type/LightItem.java | 79 +++++++++++++++++++ .../populator/ItemRegistryPopulator.java | 22 ++++++ .../geyser/registry/type/ItemMappings.java | 6 ++ 4 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 core/src/main/java/org/geysermc/geyser/item/type/LightItem.java 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 302fdf99c..f123583f3 100644 --- a/core/src/main/java/org/geysermc/geyser/item/Items.java +++ b/core/src/main/java/org/geysermc/geyser/item/Items.java @@ -45,6 +45,7 @@ import org.geysermc.geyser.item.type.FireworkStarItem; import org.geysermc.geyser.item.type.FishingRodItem; import org.geysermc.geyser.item.type.GoatHornItem; import org.geysermc.geyser.item.type.Item; +import org.geysermc.geyser.item.type.LightItem; import org.geysermc.geyser.item.type.MaceItem; import org.geysermc.geyser.item.type.MapItem; import org.geysermc.geyser.item.type.PlayerHeadItem; @@ -526,7 +527,7 @@ public final class Items { public static final Item RED_TERRACOTTA = register(new BlockItem(builder(), Blocks.RED_TERRACOTTA)); public static final Item BLACK_TERRACOTTA = register(new BlockItem(builder(), Blocks.BLACK_TERRACOTTA)); public static final Item BARRIER = register(new BlockItem(builder(), Blocks.BARRIER)); - public static final Item LIGHT = register(new BlockItem(builder(), Blocks.LIGHT)); + public static final Item LIGHT = register(new LightItem(builder(), Blocks.LIGHT)); public static final Item HAY_BLOCK = register(new BlockItem(builder(), Blocks.HAY_BLOCK)); public static final Item WHITE_CARPET = register(new BlockItem(builder(), Blocks.WHITE_CARPET)); public static final Item ORANGE_CARPET = register(new BlockItem(builder(), Blocks.ORANGE_CARPET)); diff --git a/core/src/main/java/org/geysermc/geyser/item/type/LightItem.java b/core/src/main/java/org/geysermc/geyser/item/type/LightItem.java new file mode 100644 index 000000000..fa10b08b1 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/item/type/LightItem.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 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.item.type; + +import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; +import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; +import org.geysermc.geyser.level.block.property.Properties; +import org.geysermc.geyser.level.block.type.Block; +import org.geysermc.geyser.registry.type.ItemMapping; +import org.geysermc.geyser.registry.type.ItemMappings; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.BlockStateProperties; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; + +public class LightItem extends BlockItem { + + public LightItem(Builder builder, Block block, Block... otherBlocks) { + super(builder, block, otherBlocks); + } + + @Override + public ItemData.Builder translateToBedrock(GeyserSession session, int count, DataComponents components, ItemMapping mapping, ItemMappings mappings) { + ItemMapping lightLevelMapping = getLightLevelMapping(components, mappings); + if (lightLevelMapping != null) { + return super.translateToBedrock(session, count, components, lightLevelMapping, mappings); + } + return super.translateToBedrock(session, count, components, mapping, mappings); + } + + @Override + public ItemMapping toBedrockDefinition(DataComponents components, ItemMappings mappings) { + ItemMapping lightLevelMapping = getLightLevelMapping(components, mappings); + if (lightLevelMapping != null) { + return lightLevelMapping; + } + return super.toBedrockDefinition(components, mappings); + } + + + private static ItemMapping getLightLevelMapping(DataComponents components, ItemMappings mappings) { + String lightLevel = "15"; + if (components != null) { + BlockStateProperties blockStateProperties = components.get(DataComponentType.BLOCK_STATE); + + if (blockStateProperties != null) { + lightLevel = blockStateProperties.getProperties().get(Properties.LEVEL.name()); + } + } + ItemDefinition definition = mappings.getDefinition("minecraft:light_block_" + lightLevel); + if (definition != null) { + return mappings.getLightBlocks().get(definition.getRuntimeId()); + } + return null; + } +} 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 18a34f088..1da3b0e66 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 @@ -70,6 +70,7 @@ import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.components.Rarity; import org.geysermc.geyser.item.type.BlockItem; import org.geysermc.geyser.item.type.Item; +import org.geysermc.geyser.level.block.property.Properties; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.type.BlockMappings; @@ -508,6 +509,26 @@ public class ItemRegistryPopulator { javaItemToMapping.put(javaItem, mapping); } + // Add the light block level since it doesn't exist on java but we need it for item conversion + Int2ObjectMap<ItemMapping> lightBlocks = new Int2ObjectOpenHashMap<>(); + + for (int i = 0; i <= Properties.LEVEL.high(); i++) { + ItemDefinition lightBlock = definitions.get("minecraft:light_block_" + i); + if (lightBlock == null) { + break; + } + + ItemMapping lightBlockEntry = ItemMapping.builder() + .javaItem(Items.LIGHT) + .bedrockIdentifier("minecraft:light_block_" + i) + .bedrockDefinition(lightBlock) + .bedrockData(0) + .bedrockBlockDefinition(null) + .customItemOptions(Collections.emptyList()) + .build(); + lightBlocks.put(lightBlock.getRuntimeId(), lightBlockEntry); + } + ItemDefinition lodestoneCompass = definitions.get("minecraft:lodestone_compass"); if (lodestoneCompass == null) { throw new RuntimeException("Lodestone compass not found in item palette!"); @@ -641,6 +662,7 @@ public class ItemRegistryPopulator { .javaOnlyItems(javaOnlyItems) .buckets(buckets) .componentItemData(componentItemData) + .lightBlocks(lightBlocks) .lodestoneCompass(lodestoneEntry) .customIdMappings(customIdMappings) .customBlockItemDefinitions(customBlockItemDefinitions) 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 189474238..8aae05fdc 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 @@ -59,6 +59,7 @@ public class ItemMappings implements DefinitionRegistry<ItemDefinition> { * A unique exception as this is an item in Bedrock, but not in Java. */ ItemMapping lodestoneCompass; + Int2ObjectMap<ItemMapping> lightBlocks; ItemData[] creativeItems; Int2ObjectMap<ItemDefinition> itemDefinitions; @@ -136,6 +137,11 @@ public class ItemMappings implements DefinitionRegistry<ItemDefinition> { return lodestoneCompass; } + ItemMapping lightBlock = lightBlocks.get(definition.getRuntimeId()); + if (lightBlock != null) { + return lightBlock; + } + boolean isBlock = data.getBlockDefinition() != null; boolean hasDamage = data.getDamage() != 0; From fd58c729d839073c193d7c2af663a1968dad52ab Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Mon, 11 Nov 2024 20:11:03 -0500 Subject: [PATCH 072/165] Fix smithing recipes on 1.21.1 --- .../inventory/JavaContainerSetContentTranslator.java | 12 ++++++++++++ .../inventory/JavaContainerSetSlotTranslator.java | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetContentTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetContentTranslator.java index 36d382d69..f2445856d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetContentTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetContentTranslator.java @@ -31,6 +31,7 @@ import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.inventory.InventoryTranslator; import org.geysermc.geyser.translator.inventory.PlayerInventoryTranslator; +import org.geysermc.geyser.translator.inventory.SmithingInventoryTranslator; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.util.InventoryUtils; @@ -74,6 +75,17 @@ public class JavaContainerSetContentTranslator extends PacketTranslator<Clientbo session.getPlayerInventory().setCursor(GeyserItemStack.from(packet.getCarriedItem()), session); InventoryUtils.updateCursor(session); + + if (session.getInventoryTranslator() instanceof SmithingInventoryTranslator) { + // On 1.21.1, the recipe output is sometimes only updated here. + // This can be replicated with shift-clicking the last item into the smithing table. + // It seems that something in Via 5.1.1 causes 1.21.3 clients - even Java ones - + // to make the server send a slot update. + // That plus shift-clicking means that the state ID becomes outdated and forces + // a complete inventory update. + JavaContainerSetSlotTranslator.updateSmithingTableOutput(session, SmithingInventoryTranslator.OUTPUT, + packet.getItems()[SmithingInventoryTranslator.OUTPUT], inventory); + } } private void updateInventory(GeyserSession session, Inventory inventory, int containerId) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java index fa2e3a544..fe61c8579 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java @@ -224,7 +224,7 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound }, 150, TimeUnit.MILLISECONDS)); } - private static void updateSmithingTableOutput(GeyserSession session, int slot, ItemStack output, Inventory inventory) { + static void updateSmithingTableOutput(GeyserSession session, int slot, ItemStack output, Inventory inventory) { if (slot != SmithingInventoryTranslator.OUTPUT) { return; } From 0750990e4f8c7c0e0542ec37643e99b8c3badac9 Mon Sep 17 00:00:00 2001 From: Eclipse <eclipse@eclipseisoffline.xyz> Date: Wed, 13 Nov 2024 15:47:39 +0000 Subject: [PATCH 073/165] Fix abstract arrow entity metadata (#5149) --- .../main/java/org/geysermc/geyser/entity/EntityDefinitions.java | 1 + 1 file changed, 1 insertion(+) 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 a25861813..47b97c934 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java @@ -492,6 +492,7 @@ public final class EntityDefinitions { EntityDefinition<AbstractArrowEntity> abstractArrowBase = EntityDefinition.inherited(AbstractArrowEntity::new, entityBase) .addTranslator(MetadataType.BYTE, AbstractArrowEntity::setArrowFlags) .addTranslator(null) // "Piercing level" + .addTranslator(null) // If the arrow is in the ground .build(); ARROW = EntityDefinition.inherited(ArrowEntity::new, abstractArrowBase) .type(EntityType.ARROW) From abf68604beb3b8d3a1ee16e70f1f8ecfd86d5996 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Sat, 16 Nov 2024 13:31:17 -0500 Subject: [PATCH 074/165] Fix missing ominous potion levels Fixes #5153 --- core/src/main/java/org/geysermc/geyser/item/Items.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 f123583f3..7af5aadce 100644 --- a/core/src/main/java/org/geysermc/geyser/item/Items.java +++ b/core/src/main/java/org/geysermc/geyser/item/Items.java @@ -48,6 +48,7 @@ import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.item.type.LightItem; import org.geysermc.geyser.item.type.MaceItem; import org.geysermc.geyser.item.type.MapItem; +import org.geysermc.geyser.item.type.OminousBottleItem; import org.geysermc.geyser.item.type.PlayerHeadItem; import org.geysermc.geyser.item.type.PotionItem; import org.geysermc.geyser.item.type.ShieldItem; @@ -1443,7 +1444,7 @@ public final class Items { public static final Item TRIAL_KEY = register(new Item("trial_key", builder())); public static final Item OMINOUS_TRIAL_KEY = register(new Item("ominous_trial_key", builder())); public static final Item VAULT = register(new BlockItem(builder(), Blocks.VAULT)); - public static final Item OMINOUS_BOTTLE = register(new Item("ominous_bottle", builder())); + public static final Item OMINOUS_BOTTLE = register(new OminousBottleItem("ominous_bottle", builder())); public static final int AIR_ID = AIR.javaId(); From 2ebce9c5c93e37847c690a5ee41e477e08485344 Mon Sep 17 00:00:00 2001 From: AJ Ferguson <AJ-Ferguson@users.noreply.github.com> Date: Fri, 22 Nov 2024 07:33:32 -0500 Subject: [PATCH 075/165] Fix camel jump cooldown (#5161) --- .../entity/player/input/BedrockPlayerAuthInputTranslator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java index 02ea02232..8e2781a98 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java @@ -250,7 +250,7 @@ public final class BedrockPlayerAuthInputTranslator extends PacketTranslator<Pla } } - if (vehicle instanceof AbstractHorseEntity) { + if (vehicle instanceof AbstractHorseEntity && !vehicle.getFlag(EntityFlag.HAS_DASH_COOLDOWN)) { // Behavior verified as of Java Edition 1.21.3 int currentJumpingTicks = session.getInputCache().getJumpingTicks(); if (currentJumpingTicks < 0) { From b962918ac5f583841752ccd80b76ff2652bd2474 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Mon, 25 Nov 2024 10:18:10 -0500 Subject: [PATCH 076/165] Fix #5162 (#5163) --- .../protocol/java/JavaRecipeBookAddTranslator.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java index 71fd4a200..96c5951d5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java @@ -185,8 +185,13 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec } } - session.sendUpstreamPacket(craftingDataPacket); - session.sendUpstreamPacket(recipesPacket); + if (!recipesPacket.getUnlockedRecipes().isEmpty()) { + // Sending an empty list here will crash the client as of 1.20.60 + // This was definitely in the codebase the entire time and did not + // accidentally get refactored out during Java 1.21.3. :) + session.sendUpstreamPacket(craftingDataPacket); + session.sendUpstreamPacket(recipesPacket); + } session.getLastRecipeNetId().set(netId); // Multi-version can mean different Bedrock item IDs From 47b68f8140d1f7816f28a23baadb078a48cf344a Mon Sep 17 00:00:00 2001 From: chris <github@onechris.mozmail.com> Date: Wed, 27 Nov 2024 13:22:09 +0800 Subject: [PATCH 077/165] Fix: Fabric permissions api conflict --- bootstrap/mod/fabric/build.gradle.kts | 1 + gradle/libs.versions.toml | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/bootstrap/mod/fabric/build.gradle.kts b/bootstrap/mod/fabric/build.gradle.kts index 2599a47b5..d48e184a2 100644 --- a/bootstrap/mod/fabric/build.gradle.kts +++ b/bootstrap/mod/fabric/build.gradle.kts @@ -38,6 +38,7 @@ dependencies { modImplementation(libs.cloud.fabric) include(libs.cloud.fabric) + include(libs.fabric.permissions.api) } tasks.withType<Jar> { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f95574ee1..1e942df77 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,13 +28,14 @@ viaversion = "4.9.2" adapters = "1.15-SNAPSHOT" cloud = "2.0.0-rc.2" cloud-minecraft = "2.0.0-beta.9" -cloud-minecraft-modded = "2.0.0-beta.7" +cloud-minecraft-modded = "2.0.0-beta.9" commodore = "2.2" bungeecord = "a7c6ede" velocity = "3.3.0-SNAPSHOT" viaproxy = "3.3.2-SNAPSHOT" fabric-loader = "0.16.7" fabric-api = "0.106.1+1.21.3" +fabric-permissions-api = "0.3.3" neoforge-minecraft = "21.3.0-beta" mixin = "0.8.5" mixinextras = "0.3.5" @@ -109,6 +110,7 @@ minecraft = { group = "com.mojang", name = "minecraft", version.ref = "minecraft # Check these on https://fabricmc.net/develop/ fabric-loader = { group = "net.fabricmc", name = "fabric-loader", version.ref = "fabric-loader" } fabric-api = { group = "net.fabricmc.fabric-api", name = "fabric-api", version.ref = "fabric-api" } +fabric-permissions-api = { group = "me.lucko", name = "fabric-permissions-api", version.ref = "fabric-permissions-api" } neoforge-minecraft = { group = "net.neoforged", name = "neoforge", version.ref = "neoforge-minecraft" } From c145c3f495b1e9f05e15b65da8c813b2e9a5f11f Mon Sep 17 00:00:00 2001 From: chris <github@onechris.mozmail.com> Date: Wed, 27 Nov 2024 22:51:59 +0800 Subject: [PATCH 078/165] Fix: Don't include player offset when querying player position in the api (#5168) --- .../geyser/api/entity/type/player/GeyserPlayerEntity.java | 4 ++-- .../geysermc/geyser/entity/type/player/PlayerEntity.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) 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 bba4dbf3e..d31def996 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 @@ -31,9 +31,9 @@ import org.geysermc.geyser.api.entity.type.GeyserEntity; public interface GeyserPlayerEntity extends GeyserEntity { /** - * Gets the position of the player. + * Gets the position of the player, as it is known to the Java server. * - * @return the position of the player. + * @return the player's position */ Vector3f position(); } 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 7e747e33d..7a443d6e8 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 @@ -97,11 +97,11 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { /** * Saves the parrot currently on the player's left shoulder; otherwise null */ - private ParrotEntity leftParrot; + private @Nullable ParrotEntity leftParrot; /** * Saves the parrot currently on the player's right shoulder; otherwise null */ - private ParrotEntity rightParrot; + private @Nullable ParrotEntity rightParrot; public PlayerEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw, String username, @Nullable String texturesProperty) { @@ -450,6 +450,6 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { @Override public Vector3f position() { - return this.position.clone(); + return this.position.down(definition.offset()); } } From c240c1cfb540b79145a4bf758621dbcfe6f06551 Mon Sep 17 00:00:00 2001 From: chris <github@onechris.mozmail.com> Date: Fri, 29 Nov 2024 11:43:58 +0800 Subject: [PATCH 079/165] Fix: Virtual lecterns not displaying book contents (#5169) --- .../geyser/inventory/LecternContainer.java | 14 ++++++-------- .../holder/BlockInventoryHolder.java | 2 +- .../inventory/LecternInventoryTranslator.java | 19 +++++++++---------- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/inventory/LecternContainer.java b/core/src/main/java/org/geysermc/geyser/inventory/LecternContainer.java index 389611c67..ff21f561e 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/LecternContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/LecternContainer.java @@ -34,17 +34,15 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.java.inventory.JavaOpenBookTranslator; import org.geysermc.mcprotocollib.protocol.data.game.inventory.ContainerType; +@Getter public class LecternContainer extends Container { - @Getter @Setter + @Setter private int currentBedrockPage = 0; - @Getter @Setter + @Setter private NbtMap blockEntityTag; - @Getter @Setter + @Setter private Vector3i position; - // Sigh. When the lectern container is created, we don't know (yet) if it's fake or not. - // So... time for a manual check :/ - @Getter private boolean isFakeLectern = false; public LecternContainer(String title, int id, int size, ContainerType containerType, PlayerInventory playerInventory) { @@ -52,8 +50,8 @@ public class LecternContainer extends Container { } /** - * When we are using a fake lectern, the Java server expects us to still be in a player inventory. - * We can't use {@link #isUsingRealBlock()} as that may not be determined yet. + * When the Java server asks the client to open a book in their hotbar, we create a fake lectern to show it to the client. + * We can't use the {@link #isUsingRealBlock()} check as we may also be dealing with a real virtual lectern (with its own inventory). */ @Override public void setItem(int slot, @NonNull GeyserItemStack newItem, GeyserSession session) { diff --git a/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java b/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java index cdda4fe4c..385a1e2bd 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java @@ -157,7 +157,7 @@ public class BlockInventoryHolder extends InventoryHolder { @Override public void closeInventory(InventoryTranslator translator, GeyserSession session, Inventory inventory) { if (inventory instanceof Container container) { - if (container.isUsingRealBlock() && !(inventory instanceof LecternContainer)) { + if (container.isUsingRealBlock() && !(container instanceof LecternContainer)) { // No need to reset a block since we didn't change any blocks // But send a container close packet because we aren't destroying the original. ContainerClosePacket packet = new ContainerClosePacket(); diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java index 3b33f5909..007811999 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java @@ -30,8 +30,6 @@ import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.erosion.util.LecternUtils; -import org.geysermc.geyser.GeyserImpl; -import org.geysermc.geyser.inventory.Container; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.LecternContainer; @@ -55,7 +53,7 @@ public class LecternInventoryTranslator extends AbstractBlockInventoryTranslator * Hack: Java opens a lectern first, and then follows it up with a ClientboundContainerSetContentPacket * to actually send the book's contents. We delay opening the inventory until the book was sent. */ - private boolean initialized = false; + private boolean receivedBook = false; public LecternInventoryTranslator() { super(1, Blocks.LECTERN, org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType.LECTERN , ContainerInventoryUpdater.INSTANCE); @@ -64,11 +62,12 @@ public class LecternInventoryTranslator extends AbstractBlockInventoryTranslator @Override public boolean prepareInventory(GeyserSession session, Inventory inventory) { super.prepareInventory(session, inventory); - if (((Container) inventory).isUsingRealBlock()) { - initialized = false; // We have to wait until we get the book to show to the client + if (((LecternContainer) inventory).isFakeLectern()) { + // See JavaOpenBookTranslator; this isn't a lectern but a book in the player inventory + updateBook(session, inventory, inventory.getItem(0)); + receivedBook = true; } else { - updateBook(session, inventory, inventory.getItem(0)); // See JavaOpenBookTranslator; placed here manually - initialized = true; + receivedBook = false; // We have to wait until we get the book } return true; } @@ -79,7 +78,7 @@ public class LecternInventoryTranslator extends AbstractBlockInventoryTranslator // "initialized" indicates whether we've received the book from the Java server yet. // dropping lectern book is the fun workaround when we have to enter the gui to drop the book. // Since we leave it immediately... don't open it! - if (initialized && !session.isDroppingLecternBook()) { + if (receivedBook && !session.isDroppingLecternBook()) { super.openInventory(session, inventory); } } @@ -122,8 +121,8 @@ public class LecternInventoryTranslator extends AbstractBlockInventoryTranslator boolean isDropping = session.isDroppingLecternBook(); updateBook(session, inventory, itemStack); - if (!initialized && !isDropping) { - initialized = true; + if (!receivedBook && !isDropping) { + receivedBook = true; openInventory(session, inventory); } } From d53a1a5cc44a3f838c35fed3a0df8e134858736a Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Thu, 28 Nov 2024 02:17:11 +0800 Subject: [PATCH 080/165] Start on 1.21.4 support --- .../entity/vehicle/VehicleComponent.java | 6 +++++- .../java/org/geysermc/geyser/item/Items.java | 5 +++++ .../org/geysermc/geyser/item/type/Item.java | 18 ++++++------------ .../translator/item/CustomItemTranslator.java | 13 +++++++++++-- .../BedrockPlayerAuthInputTranslator.java | 5 +++-- .../java/entity/JavaMoveVehicleTranslator.java | 7 +++---- .../geysermc/geyser/util/InventoryUtils.java | 11 ++++++----- .../network/ScoreboardIssueTests.java | 2 +- gradle.properties | 2 +- gradle/libs.versions.toml | 6 +++--- settings.gradle.kts | 4 ++-- 11 files changed, 46 insertions(+), 33 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/entity/vehicle/VehicleComponent.java b/core/src/main/java/org/geysermc/geyser/entity/vehicle/VehicleComponent.java index 91f54162b..61875ec90 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/vehicle/VehicleComponent.java +++ b/core/src/main/java/org/geysermc/geyser/entity/vehicle/VehicleComponent.java @@ -105,6 +105,10 @@ public class VehicleComponent<T extends LivingEntity & ClientVehicle> { boundingBox.setMiddleZ(z); } + public void moveAbsolute(Vector3d vec) { + moveAbsolute(vec.getX(), vec.getY(), vec.getZ()); + } + public void moveRelative(double x, double y, double z) { boundingBox.translate(x, y, z); } @@ -756,7 +760,7 @@ public class VehicleComponent<T extends LivingEntity & ClientVehicle> { vehicle.getSession().sendUpstreamPacket(moveEntityDeltaPacket); } - ServerboundMoveVehiclePacket moveVehiclePacket = new ServerboundMoveVehiclePacket(javaPos.getX(), javaPos.getY(), javaPos.getZ(), rotation.getX(), rotation.getY()); + ServerboundMoveVehiclePacket moveVehiclePacket = new ServerboundMoveVehiclePacket(javaPos, rotation.getX(), rotation.getY(), vehicle.isOnGround()); vehicle.getSession().sendDownstreamPacket(moveVehiclePacket); } 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 7af5aadce..c7ab076b4 100644 --- a/core/src/main/java/org/geysermc/geyser/item/Items.java +++ b/core/src/main/java/org/geysermc/geyser/item/Items.java @@ -70,6 +70,11 @@ import static org.geysermc.geyser.item.type.Item.builder; */ @SuppressWarnings("unused") public final class Items { + + static { + // Load data components here + } + public static final Item AIR = register(new Item("air", builder())); public static final Item STONE = register(new BlockItem(builder(), Blocks.STONE)); public static final Item GRANITE = register(new BlockItem(builder(), Blocks.GRANITE)); 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 249936e5a..0155c4e35 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 @@ -62,12 +62,16 @@ public class Item { private static final Map<Block, Item> BLOCK_TO_ITEM = new HashMap<>(); protected final Key javaIdentifier; private int javaId = -1; + + // TODO remove these private final int stackSize; private final int attackDamage; private final int maxDamage; private final Rarity rarity; private final boolean glint; + private DataComponents dataComponents; + public Item(String javaIdentifier, Builder builder) { this.javaIdentifier = MinecraftKey.key(javaIdentifier); this.stackSize = builder.stackSize; @@ -86,7 +90,7 @@ public class Item { } public int maxDamage() { - return maxDamage; + return dataComponents.getOrDefault(DataComponentType.MAX_DAMAGE, 0); } public int attackDamage() { @@ -94,7 +98,7 @@ public class Item { } public int maxStackSize() { - return stackSize; + return dataComponents.getOrDefault(DataComponentType.MAX_STACK_SIZE, 1); } public Rarity rarity() { @@ -317,16 +321,6 @@ public class Item { return this; } - public Builder rarity(Rarity rarity) { - this.rarity = rarity; - return this; - } - - public Builder glint(boolean glintOverride) { - this.glint = glintOverride; - return this; - } - private Builder() { } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/item/CustomItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/item/CustomItemTranslator.java index 91eee3895..b65b06431 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/item/CustomItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/item/CustomItemTranslator.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.translator.item; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.CustomModelData; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import it.unimi.dsi.fastutil.Pair; @@ -52,7 +53,15 @@ public final class CustomItemTranslator { return null; } - int customModelData = components.getOrDefault(DataComponentType.CUSTOM_MODEL_DATA, 0); + // TODO 1.21.4 + float customModelDataInt = 0; + CustomModelData customModelData = components.get(DataComponentType.CUSTOM_MODEL_DATA); + if (customModelData != null) { + if (!customModelData.floats().isEmpty()) { + customModelDataInt = customModelData.floats().get(0); + } + } + boolean checkDamage = mapping.getJavaItem().maxDamage() > 0; int damage = !checkDamage ? 0 : components.getOrDefault(DataComponentType.DAMAGE, 0); boolean unbreakable = checkDamage && !isDamaged(components, damage); @@ -88,7 +97,7 @@ public final class CustomItemTranslator { } OptionalInt customModelDataOption = options.customModelData(); - if (customModelDataOption.isPresent() && customModelData < customModelDataOption.getAsInt()) { + if (customModelDataOption.isPresent() && customModelDataInt < customModelDataOption.getAsInt()) { continue; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java index 8e2781a98..b57187018 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockPlayerAuthInputTranslator.java @@ -312,8 +312,9 @@ public final class BedrockPlayerAuthInputTranslator extends PacketTranslator<Pla vehicle.setPosition(vehiclePosition); ServerboundMoveVehiclePacket moveVehiclePacket = new ServerboundMoveVehiclePacket( - vehiclePosition.getX(), vehiclePosition.getY(), vehiclePosition.getZ(), - vehicleRotation.getY() - 90, vehiclePosition.getX() // TODO I wonder if this is related to the horse spinning bugs... + vehiclePosition.toDouble(), + vehicleRotation.getY() - 90, vehiclePosition.getX(), // TODO I wonder if this is related to the horse spinning bugs... + vehicle.isOnGround() ); session.sendDownstreamGamePacket(moveVehiclePacket); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveVehicleTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveVehicleTranslator.java index 1f18d4d2f..18fd1ec4c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveVehicleTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveVehicleTranslator.java @@ -25,13 +25,12 @@ package org.geysermc.geyser.translator.protocol.java.entity; -import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.ClientboundMoveVehiclePacket; -import org.cloudburstmc.math.vector.Vector3f; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.vehicle.ClientVehicle; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.ClientboundMoveVehiclePacket; @Translator(packet = ClientboundMoveVehiclePacket.class) public class JavaMoveVehicleTranslator extends PacketTranslator<ClientboundMoveVehiclePacket> { @@ -42,9 +41,9 @@ public class JavaMoveVehicleTranslator extends PacketTranslator<ClientboundMoveV if (entity == null) return; if (entity instanceof ClientVehicle clientVehicle) { - clientVehicle.getVehicleComponent().moveAbsolute(packet.getX(), packet.getY(), packet.getZ()); + clientVehicle.getVehicleComponent().moveAbsolute(packet.getPosition()); } - entity.moveAbsolute(Vector3f.from(packet.getX(), packet.getY(), packet.getZ()), packet.getYaw(), packet.getPitch(), false, true); + entity.moveAbsolute(packet.getPosition().toFloat(), packet.getYRot(), packet.getXRot(), false, true); } } 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 9862eb730..df0450ce6 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java @@ -69,7 +69,6 @@ import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDis import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.TagSlotDisplay; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.WithRemainderSlotDisplay; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundContainerClosePacket; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundPickItemPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundSetCreativeModeSlotPacket; import org.jetbrains.annotations.Contract; @@ -305,8 +304,9 @@ public class InventoryUtils { } // If this is the item we're looking for if (geyserItem.getJavaId() == itemStack.getId() && Objects.equals(geyserItem.getComponents(), itemStack.getDataComponents())) { //TODO verify - ServerboundPickItemPacket packetToSend = new ServerboundPickItemPacket(i); // https://wiki.vg/Protocol#Pick_Item - session.sendDownstreamGamePacket(packetToSend); + //ServerboundPickItemFromBlockPacket packetToSend = new ServerboundPickItemFromBlockPacket(i); // https://wiki.vg/Protocol#Pick_Item + //session.sendDownstreamGamePacket(packetToSend); + // TODO 1.21.4 return; } } @@ -368,8 +368,9 @@ public class InventoryUtils { continue; } - ServerboundPickItemPacket packetToSend = new ServerboundPickItemPacket(i); // https://wiki.vg/Protocol#Pick_Item - session.sendDownstreamGamePacket(packetToSend); + // TODO 1.21.4 + //ServerboundPickItemPacket packetToSend = new ServerboundPickItemPacket(i); // https://wiki.vg/Protocol#Pick_Item + //session.sendDownstreamGamePacket(packetToSend); return; } diff --git a/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java b/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java index 7ab518f1d..0b3d2c5e7 100644 --- a/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java +++ b/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java @@ -154,7 +154,7 @@ public class ScoreboardIssueTests { new ClientboundPlayerInfoUpdatePacket( EnumSet.of(PlayerListEntryAction.ADD_PLAYER, PlayerListEntryAction.UPDATE_LISTED), new PlayerListEntry[] { - new PlayerListEntry(npcUuid, new GameProfile(npcUuid, "1297"), false, 0, GameMode.SURVIVAL, null, 0, null, 0, null, null) + new PlayerListEntry(npcUuid, new GameProfile(npcUuid, "1297"), false, 0, GameMode.SURVIVAL, null, false, 0, null, 0, null, null) })); //todo we don't have to remove an entry that was never in the playerlist in the first place diff --git a/gradle.properties b/gradle.properties index 09943725b..473c104f4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,5 +11,5 @@ loom.ignoreDependencyLoomVersionValidation=true group=org.geysermc id=geyser -version=2.5.0-SNAPSHOT +version=2.6.0-SNAPSHOT description=Allows for players from Minecraft: Bedrock Edition to join Minecraft: Java Edition servers. diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1e942df77..3054d9e33 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,7 @@ protocol-common = "3.0.0.Beta5-20241022.154658-14" protocol-codec = "3.0.0.Beta5-20241022.154658-14" raknet = "1.0.0.CR3-20240416.144209-1" minecraftauth = "4.1.1" -mcprotocollib = "1.21.2-20241107.110329-3" +mcprotocollib = "1.21.4-SNAPSHOT" adventure = "4.14.0" adventure-platform = "4.3.0" junit = "5.9.2" @@ -34,12 +34,12 @@ bungeecord = "a7c6ede" velocity = "3.3.0-SNAPSHOT" viaproxy = "3.3.2-SNAPSHOT" fabric-loader = "0.16.7" -fabric-api = "0.106.1+1.21.3" +fabric-api = "0.109.1+1.21.4" fabric-permissions-api = "0.3.3" neoforge-minecraft = "21.3.0-beta" mixin = "0.8.5" mixinextras = "0.3.5" -minecraft = "1.21.3" +minecraft = "1.21.4-pre3" mockito = "5.+" # plugin versions diff --git a/settings.gradle.kts b/settings.gradle.kts index 9aaf6ba59..e820f59bd 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -20,7 +20,7 @@ include(":ap") include(":api") include(":bungeecord") include(":fabric") -include(":neoforge") +//include(":neoforge") include(":mod") include(":spigot") include(":standalone") @@ -32,7 +32,7 @@ include(":core") // Specify project dirs project(":bungeecord").projectDir = file("bootstrap/bungeecord") project(":fabric").projectDir = file("bootstrap/mod/fabric") -project(":neoforge").projectDir = file("bootstrap/mod/neoforge") +//project(":neoforge").projectDir = file("bootstrap/mod/neoforge") project(":mod").projectDir = file("bootstrap/mod") project(":spigot").projectDir = file("bootstrap/spigot") project(":standalone").projectDir = file("bootstrap/standalone") From feecc47092e79a5e5a69b009b528c25d0242f003 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Sun, 1 Dec 2024 03:22:34 +0800 Subject: [PATCH 081/165] More work on 1.21.4 changes --- .../updater/AnvilInventoryUpdater.java | 9 +- .../java/org/geysermc/geyser/item/Items.java | 516 +++++++++--------- .../item/type/BedrockRequiresTagItem.java | 8 +- .../geyser/item/type/FireworkRocketItem.java | 17 - .../org/geysermc/geyser/item/type/Item.java | 59 +- .../CustomItemRegistryPopulator.java | 15 +- .../populator/ItemRegistryPopulator.java | 2 +- .../translator/item/CustomItemTranslator.java | 2 +- .../translator/item/ItemTranslator.java | 67 +-- .../BedrockBlockPickRequestTranslator.java | 42 +- .../BedrockEntityPickRequestTranslator.java | 37 +- .../JavaMerchantOffersTranslator.java | 2 +- .../geysermc/geyser/util/InventoryUtils.java | 170 ------ 13 files changed, 337 insertions(+), 609 deletions(-) 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 0ffb74082..00270e47a 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 @@ -52,7 +52,6 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.S import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.stream.IntStream; public class AnvilInventoryUpdater extends InventoryUpdater { public static final AnvilInventoryUpdater INSTANCE = new AnvilInventoryUpdater(); @@ -266,14 +265,14 @@ public class AnvilInventoryUpdater extends InventoryUpdater { */ private int calcRepairLevelCost(GeyserItemStack input, GeyserItemStack material) { int newDamage = getDamage(input); - int unitRepair = Math.min(newDamage, input.asItem().maxDamage() / 4); + int unitRepair = Math.min(newDamage, input.asItem().defaultMaxDamage() / 4); if (unitRepair <= 0) { // No damage to repair return -1; } for (int i = 0; i < material.getAmount(); i++) { newDamage -= unitRepair; - unitRepair = Math.min(newDamage, input.asItem().maxDamage() / 4); + unitRepair = Math.min(newDamage, input.asItem().defaultMaxDamage() / 4); if (unitRepair <= 0) { return i + 1; } @@ -290,7 +289,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater { */ private int calcMergeRepairCost(GeyserItemStack input, GeyserItemStack material) { // If the material item is damaged 112% or more, then the input item will not be repaired - if (getDamage(input) > 0 && getDamage(material) < (material.asItem().maxDamage() * 112 / 100)) { + if (getDamage(input) > 0 && getDamage(material) < (material.asItem().defaultMaxDamage() * 112 / 100)) { return 2; } return 0; @@ -419,7 +418,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater { } private boolean hasDurability(GeyserItemStack itemStack) { - if (itemStack.asItem().maxDamage() > 0) { + if (itemStack.asItem().defaultMaxDamage() > 0) { return itemStack.getComponent(DataComponentType.UNBREAKABLE, false); } return false; 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 c7ab076b4..d2ae08ec4 100644 --- a/core/src/main/java/org/geysermc/geyser/item/Items.java +++ b/core/src/main/java/org/geysermc/geyser/item/Items.java @@ -301,6 +301,8 @@ public final class Items { public static final Item RED_WOOL = register(new BlockItem(builder(), Blocks.RED_WOOL)); public static final Item BLACK_WOOL = register(new BlockItem(builder(), Blocks.BLACK_WOOL)); public static final Item DANDELION = register(new BlockItem(builder(), Blocks.DANDELION)); +// TODO public static final Item OPEN_EYEBLOSSOM = register(new BlockItem(builder(), Blocks.OPEN_EYEBLOSSOM)); +// TODO public static final Item CLOSED_EYEBLOSSOM = register(new BlockItem(builder(), Blocks.CLOSED_EYEBLOSSOM)); public static final Item POPPY = register(new BlockItem(builder(), Blocks.POPPY)); public static final Item BLUE_ORCHID = register(new BlockItem(builder(), Blocks.BLUE_ORCHID)); public static final Item ALLIUM = register(new BlockItem(builder(), Blocks.ALLIUM)); @@ -449,6 +451,13 @@ public final class Items { public static final Item MELON = register(new BlockItem(builder(), Blocks.MELON)); public static final Item VINE = register(new BlockItem(builder(), Blocks.VINE)); public static final Item GLOW_LICHEN = register(new BlockItem(builder(), Blocks.GLOW_LICHEN)); + //TODO public static final Item RESIN_CLUMP = register(new BlockItem(builder(), Blocks.RESIN_CLUMP)); + //TODO public static final Item RESIN_BLOCK = register(new BlockItem(builder(), Blocks.RESIN_BLOCK)); + //TODO public static final Item RESIN_BRICKS = register(new BlockItem(builder(), Blocks.RESIN_BRICKS)); + //TODO public static final Item RESIN_BRICK_STAIRS = register(new BlockItem(builder(), Blocks.RESIN_BRICK_STAIRS)); + //TODO public static final Item RESIN_BRICK_SLAB = register(new BlockItem(builder(), Blocks.RESIN_BRICK_SLAB)); + //TODO public static final Item RESIN_BRICK_WALL = register(new BlockItem(builder(), Blocks.RESIN_BRICK_WALL)); + //TODO public static final Item CHISELED_RESIN_BRICKS = register(new BlockItem(builder(), Blocks.CHISELED_RESIN_BRICKS)); public static final Item BRICK_STAIRS = register(new BlockItem(builder(), Blocks.BRICK_STAIRS)); public static final Item STONE_BRICK_STAIRS = register(new BlockItem(builder(), Blocks.STONE_BRICK_STAIRS)); public static final Item MUD_BRICK_STAIRS = register(new BlockItem(builder(), Blocks.MUD_BRICK_STAIRS)); @@ -533,7 +542,7 @@ public final class Items { public static final Item RED_TERRACOTTA = register(new BlockItem(builder(), Blocks.RED_TERRACOTTA)); public static final Item BLACK_TERRACOTTA = register(new BlockItem(builder(), Blocks.BLACK_TERRACOTTA)); public static final Item BARRIER = register(new BlockItem(builder(), Blocks.BARRIER)); - public static final Item LIGHT = register(new LightItem(builder(), Blocks.LIGHT)); + public static final Item LIGHT = register(new BlockItem(builder(), Blocks.LIGHT)); public static final Item HAY_BLOCK = register(new BlockItem(builder(), Blocks.HAY_BLOCK)); public static final Item WHITE_CARPET = register(new BlockItem(builder(), Blocks.WHITE_CARPET)); public static final Item ORANGE_CARPET = register(new BlockItem(builder(), Blocks.ORANGE_CARPET)); @@ -611,23 +620,23 @@ public final class Items { public static final Item RED_NETHER_BRICKS = register(new BlockItem(builder(), Blocks.RED_NETHER_BRICKS)); public static final Item BONE_BLOCK = register(new BlockItem(builder(), Blocks.BONE_BLOCK)); public static final Item STRUCTURE_VOID = register(new BlockItem(builder(), Blocks.STRUCTURE_VOID)); - public static final Item SHULKER_BOX = register(new ShulkerBoxItem(builder().stackSize(1), Blocks.SHULKER_BOX)); - public static final Item WHITE_SHULKER_BOX = register(new ShulkerBoxItem(builder().stackSize(1), Blocks.WHITE_SHULKER_BOX)); - public static final Item ORANGE_SHULKER_BOX = register(new ShulkerBoxItem(builder().stackSize(1), Blocks.ORANGE_SHULKER_BOX)); - public static final Item MAGENTA_SHULKER_BOX = register(new ShulkerBoxItem(builder().stackSize(1), Blocks.MAGENTA_SHULKER_BOX)); - public static final Item LIGHT_BLUE_SHULKER_BOX = register(new ShulkerBoxItem(builder().stackSize(1), Blocks.LIGHT_BLUE_SHULKER_BOX)); - public static final Item YELLOW_SHULKER_BOX = register(new ShulkerBoxItem(builder().stackSize(1), Blocks.YELLOW_SHULKER_BOX)); - public static final Item LIME_SHULKER_BOX = register(new ShulkerBoxItem(builder().stackSize(1), Blocks.LIME_SHULKER_BOX)); - public static final Item PINK_SHULKER_BOX = register(new ShulkerBoxItem(builder().stackSize(1), Blocks.PINK_SHULKER_BOX)); - public static final Item GRAY_SHULKER_BOX = register(new ShulkerBoxItem(builder().stackSize(1), Blocks.GRAY_SHULKER_BOX)); - public static final Item LIGHT_GRAY_SHULKER_BOX = register(new ShulkerBoxItem(builder().stackSize(1), Blocks.LIGHT_GRAY_SHULKER_BOX)); - public static final Item CYAN_SHULKER_BOX = register(new ShulkerBoxItem(builder().stackSize(1), Blocks.CYAN_SHULKER_BOX)); - public static final Item PURPLE_SHULKER_BOX = register(new ShulkerBoxItem(builder().stackSize(1), Blocks.PURPLE_SHULKER_BOX)); - public static final Item BLUE_SHULKER_BOX = register(new ShulkerBoxItem(builder().stackSize(1), Blocks.BLUE_SHULKER_BOX)); - public static final Item BROWN_SHULKER_BOX = register(new ShulkerBoxItem(builder().stackSize(1), Blocks.BROWN_SHULKER_BOX)); - public static final Item GREEN_SHULKER_BOX = register(new ShulkerBoxItem(builder().stackSize(1), Blocks.GREEN_SHULKER_BOX)); - public static final Item RED_SHULKER_BOX = register(new ShulkerBoxItem(builder().stackSize(1), Blocks.RED_SHULKER_BOX)); - public static final Item BLACK_SHULKER_BOX = register(new ShulkerBoxItem(builder().stackSize(1), Blocks.BLACK_SHULKER_BOX)); + public static final Item SHULKER_BOX = register(new ShulkerBoxItem(builder(), Blocks.SHULKER_BOX)); + public static final Item WHITE_SHULKER_BOX = register(new ShulkerBoxItem(builder(), Blocks.WHITE_SHULKER_BOX)); + public static final Item ORANGE_SHULKER_BOX = register(new ShulkerBoxItem(builder(), Blocks.ORANGE_SHULKER_BOX)); + public static final Item MAGENTA_SHULKER_BOX = register(new ShulkerBoxItem(builder(), Blocks.MAGENTA_SHULKER_BOX)); + public static final Item LIGHT_BLUE_SHULKER_BOX = register(new ShulkerBoxItem(builder(), Blocks.LIGHT_BLUE_SHULKER_BOX)); + public static final Item YELLOW_SHULKER_BOX = register(new ShulkerBoxItem(builder(), Blocks.YELLOW_SHULKER_BOX)); + public static final Item LIME_SHULKER_BOX = register(new ShulkerBoxItem(builder(), Blocks.LIME_SHULKER_BOX)); + public static final Item PINK_SHULKER_BOX = register(new ShulkerBoxItem(builder(), Blocks.PINK_SHULKER_BOX)); + public static final Item GRAY_SHULKER_BOX = register(new ShulkerBoxItem(builder(), Blocks.GRAY_SHULKER_BOX)); + public static final Item LIGHT_GRAY_SHULKER_BOX = register(new ShulkerBoxItem(builder(), Blocks.LIGHT_GRAY_SHULKER_BOX)); + public static final Item CYAN_SHULKER_BOX = register(new ShulkerBoxItem(builder(), Blocks.CYAN_SHULKER_BOX)); + public static final Item PURPLE_SHULKER_BOX = register(new ShulkerBoxItem(builder(), Blocks.PURPLE_SHULKER_BOX)); + public static final Item BLUE_SHULKER_BOX = register(new ShulkerBoxItem(builder(), Blocks.BLUE_SHULKER_BOX)); + public static final Item BROWN_SHULKER_BOX = register(new ShulkerBoxItem(builder(), Blocks.BROWN_SHULKER_BOX)); + public static final Item GREEN_SHULKER_BOX = register(new ShulkerBoxItem(builder(), Blocks.GREEN_SHULKER_BOX)); + public static final Item RED_SHULKER_BOX = register(new ShulkerBoxItem(builder(), Blocks.RED_SHULKER_BOX)); + public static final Item BLACK_SHULKER_BOX = register(new ShulkerBoxItem(builder(), Blocks.BLACK_SHULKER_BOX)); public static final Item WHITE_GLAZED_TERRACOTTA = register(new BlockItem(builder(), Blocks.WHITE_GLAZED_TERRACOTTA)); public static final Item ORANGE_GLAZED_TERRACOTTA = register(new BlockItem(builder(), Blocks.ORANGE_GLAZED_TERRACOTTA)); public static final Item MAGENTA_GLAZED_TERRACOTTA = register(new BlockItem(builder(), Blocks.MAGENTA_GLAZED_TERRACOTTA)); @@ -859,46 +868,46 @@ public final class Items { public static final Item DETECTOR_RAIL = register(new BlockItem(builder(), Blocks.DETECTOR_RAIL)); public static final Item RAIL = register(new BlockItem(builder(), Blocks.RAIL)); public static final Item ACTIVATOR_RAIL = register(new BlockItem(builder(), Blocks.ACTIVATOR_RAIL)); - public static final Item SADDLE = register(new Item("saddle", builder().stackSize(1))); - public static final Item MINECART = register(new Item("minecart", builder().stackSize(1))); - public static final Item CHEST_MINECART = register(new Item("chest_minecart", builder().stackSize(1))); - public static final Item FURNACE_MINECART = register(new Item("furnace_minecart", builder().stackSize(1))); - public static final Item TNT_MINECART = register(new Item("tnt_minecart", builder().stackSize(1))); - public static final Item HOPPER_MINECART = register(new Item("hopper_minecart", builder().stackSize(1))); - public static final Item CARROT_ON_A_STICK = register(new Item("carrot_on_a_stick", builder().stackSize(1).maxDamage(25))); - public static final Item WARPED_FUNGUS_ON_A_STICK = register(new Item("warped_fungus_on_a_stick", builder().stackSize(1).maxDamage(100))); + public static final Item SADDLE = register(new Item("saddle", builder())); + public static final Item MINECART = register(new Item("minecart", builder())); + public static final Item CHEST_MINECART = register(new Item("chest_minecart", builder())); + public static final Item FURNACE_MINECART = register(new Item("furnace_minecart", builder())); + public static final Item TNT_MINECART = register(new Item("tnt_minecart", builder())); + public static final Item HOPPER_MINECART = register(new Item("hopper_minecart", builder())); + public static final Item CARROT_ON_A_STICK = register(new Item("carrot_on_a_stick", builder())); + public static final Item WARPED_FUNGUS_ON_A_STICK = register(new Item("warped_fungus_on_a_stick", builder())); public static final Item PHANTOM_MEMBRANE = register(new Item("phantom_membrane", builder())); - public static final Item ELYTRA = register(new ElytraItem("elytra", builder().stackSize(1).maxDamage(432))); - public static final Item OAK_BOAT = register(new BoatItem("oak_boat", builder().stackSize(1))); - public static final Item OAK_CHEST_BOAT = register(new BoatItem("oak_chest_boat", builder().stackSize(1))); - public static final Item SPRUCE_BOAT = register(new BoatItem("spruce_boat", builder().stackSize(1))); - public static final Item SPRUCE_CHEST_BOAT = register(new BoatItem("spruce_chest_boat", builder().stackSize(1))); - public static final Item BIRCH_BOAT = register(new BoatItem("birch_boat", builder().stackSize(1))); - public static final Item BIRCH_CHEST_BOAT = register(new BoatItem("birch_chest_boat", builder().stackSize(1))); - public static final Item JUNGLE_BOAT = register(new BoatItem("jungle_boat", builder().stackSize(1))); - public static final Item JUNGLE_CHEST_BOAT = register(new BoatItem("jungle_chest_boat", builder().stackSize(1))); - public static final Item ACACIA_BOAT = register(new BoatItem("acacia_boat", builder().stackSize(1))); - public static final Item ACACIA_CHEST_BOAT = register(new BoatItem("acacia_chest_boat", builder().stackSize(1))); - public static final Item CHERRY_BOAT = register(new BoatItem("cherry_boat", builder().stackSize(1))); - public static final Item CHERRY_CHEST_BOAT = register(new BoatItem("cherry_chest_boat", builder().stackSize(1))); - public static final Item DARK_OAK_BOAT = register(new BoatItem("dark_oak_boat", builder().stackSize(1))); - public static final Item DARK_OAK_CHEST_BOAT = register(new BoatItem("dark_oak_chest_boat", builder().stackSize(1))); - public static final Item PALE_OAK_BOAT = register(new BoatItem("pale_oak_boat", builder().stackSize(1))); - public static final Item PALE_OAK_CHEST_BOAT = register(new BoatItem("pale_oak_chest_boat", builder().stackSize(1))); - public static final Item MANGROVE_BOAT = register(new BoatItem("mangrove_boat", builder().stackSize(1))); - public static final Item MANGROVE_CHEST_BOAT = register(new BoatItem("mangrove_chest_boat", builder().stackSize(1))); - public static final Item BAMBOO_RAFT = register(new BoatItem("bamboo_raft", builder().stackSize(1))); - public static final Item BAMBOO_CHEST_RAFT = register(new BoatItem("bamboo_chest_raft", builder().stackSize(1))); + public static final Item ELYTRA = register(new ElytraItem("elytra", builder())); + public static final Item OAK_BOAT = register(new BoatItem("oak_boat", builder())); + public static final Item OAK_CHEST_BOAT = register(new BoatItem("oak_chest_boat", builder())); + public static final Item SPRUCE_BOAT = register(new BoatItem("spruce_boat", builder())); + public static final Item SPRUCE_CHEST_BOAT = register(new BoatItem("spruce_chest_boat", builder())); + public static final Item BIRCH_BOAT = register(new BoatItem("birch_boat", builder())); + public static final Item BIRCH_CHEST_BOAT = register(new BoatItem("birch_chest_boat", builder())); + public static final Item JUNGLE_BOAT = register(new BoatItem("jungle_boat", builder())); + public static final Item JUNGLE_CHEST_BOAT = register(new BoatItem("jungle_chest_boat", builder())); + public static final Item ACACIA_BOAT = register(new BoatItem("acacia_boat", builder())); + public static final Item ACACIA_CHEST_BOAT = register(new BoatItem("acacia_chest_boat", builder())); + public static final Item CHERRY_BOAT = register(new BoatItem("cherry_boat", builder())); + public static final Item CHERRY_CHEST_BOAT = register(new BoatItem("cherry_chest_boat", builder())); + public static final Item DARK_OAK_BOAT = register(new BoatItem("dark_oak_boat", builder())); + public static final Item DARK_OAK_CHEST_BOAT = register(new BoatItem("dark_oak_chest_boat", builder())); + public static final Item PALE_OAK_BOAT = register(new BoatItem("pale_oak_boat", builder())); + public static final Item PALE_OAK_CHEST_BOAT = register(new BoatItem("pale_oak_chest_boat", builder())); + public static final Item MANGROVE_BOAT = register(new BoatItem("mangrove_boat", builder())); + public static final Item MANGROVE_CHEST_BOAT = register(new BoatItem("mangrove_chest_boat", builder())); + public static final Item BAMBOO_RAFT = register(new BoatItem("bamboo_raft", builder())); + public static final Item BAMBOO_CHEST_RAFT = register(new BoatItem("bamboo_chest_raft", builder())); public static final Item STRUCTURE_BLOCK = register(new BlockItem(builder(), Blocks.STRUCTURE_BLOCK)); public static final Item JIGSAW = register(new BlockItem(builder(), Blocks.JIGSAW)); - public static final Item TURTLE_HELMET = register(new ArmorItem("turtle_helmet", ArmorMaterial.TURTLE, builder().stackSize(1).maxDamage(275))); + public static final Item TURTLE_HELMET = register(new ArmorItem("turtle_helmet", ArmorMaterial.TURTLE, builder())); public static final Item TURTLE_SCUTE = register(new Item("turtle_scute", builder())); public static final Item ARMADILLO_SCUTE = register(new Item("armadillo_scute", builder())); - public static final Item WOLF_ARMOR = register(new WolfArmorItem("wolf_armor", ArmorMaterial.ARMADILLO, builder().stackSize(1).maxDamage(64))); - public static final Item FLINT_AND_STEEL = register(new Item("flint_and_steel", builder().stackSize(1).maxDamage(64))); + public static final Item WOLF_ARMOR = register(new WolfArmorItem("wolf_armor", ArmorMaterial.ARMADILLO, builder())); + public static final Item FLINT_AND_STEEL = register(new Item("flint_and_steel", builder())); public static final Item BOWL = register(new Item("bowl", builder())); public static final Item APPLE = register(new Item("apple", builder())); - public static final Item BOW = register(new Item("bow", builder().stackSize(1).maxDamage(384))); + public static final Item BOW = register(new Item("bow", builder())); public static final Item ARROW = register(new ArrowItem("arrow", builder())); public static final Item COAL = register(new Item("coal", builder())); public static final Item CHARCOAL = register(new Item("charcoal", builder())); @@ -915,140 +924,140 @@ public final class Items { public static final Item GOLD_INGOT = register(new Item("gold_ingot", builder())); public static final Item NETHERITE_INGOT = register(new Item("netherite_ingot", builder())); public static final Item NETHERITE_SCRAP = register(new Item("netherite_scrap", builder())); - public static final Item WOODEN_SWORD = register(new TieredItem("wooden_sword", ToolTier.WOODEN, builder().stackSize(1).maxDamage(59).attackDamage(4.0))); - public static final Item WOODEN_SHOVEL = register(new TieredItem("wooden_shovel", ToolTier.WOODEN, builder().stackSize(1).maxDamage(59).attackDamage(2.5))); - public static final Item WOODEN_PICKAXE = register(new TieredItem("wooden_pickaxe", ToolTier.WOODEN, builder().stackSize(1).maxDamage(59).attackDamage(2.0))); - public static final Item WOODEN_AXE = register(new TieredItem("wooden_axe", ToolTier.WOODEN, builder().stackSize(1).maxDamage(59).attackDamage(7.0))); - public static final Item WOODEN_HOE = register(new TieredItem("wooden_hoe", ToolTier.WOODEN, builder().stackSize(1).maxDamage(59).attackDamage(1.0))); - public static final Item STONE_SWORD = register(new TieredItem("stone_sword", ToolTier.STONE, builder().stackSize(1).maxDamage(131).attackDamage(5.0))); - public static final Item STONE_SHOVEL = register(new TieredItem("stone_shovel", ToolTier.STONE, builder().stackSize(1).maxDamage(131).attackDamage(3.5))); - public static final Item STONE_PICKAXE = register(new TieredItem("stone_pickaxe", ToolTier.STONE, builder().stackSize(1).maxDamage(131).attackDamage(3.0))); - public static final Item STONE_AXE = register(new TieredItem("stone_axe", ToolTier.STONE, builder().stackSize(1).maxDamage(131).attackDamage(9.0))); - public static final Item STONE_HOE = register(new TieredItem("stone_hoe", ToolTier.STONE, builder().stackSize(1).maxDamage(131).attackDamage(1.0))); - public static final Item GOLDEN_SWORD = register(new TieredItem("golden_sword", ToolTier.GOLDEN, builder().stackSize(1).maxDamage(32).attackDamage(4.0))); - public static final Item GOLDEN_SHOVEL = register(new TieredItem("golden_shovel", ToolTier.GOLDEN, builder().stackSize(1).maxDamage(32).attackDamage(2.5))); - public static final Item GOLDEN_PICKAXE = register(new TieredItem("golden_pickaxe", ToolTier.GOLDEN, builder().stackSize(1).maxDamage(32).attackDamage(2.0))); - public static final Item GOLDEN_AXE = register(new TieredItem("golden_axe", ToolTier.GOLDEN, builder().stackSize(1).maxDamage(32).attackDamage(7.0))); - public static final Item GOLDEN_HOE = register(new TieredItem("golden_hoe", ToolTier.GOLDEN, builder().stackSize(1).maxDamage(32).attackDamage(1.0))); - public static final Item IRON_SWORD = register(new TieredItem("iron_sword", ToolTier.IRON, builder().stackSize(1).maxDamage(250).attackDamage(6.0))); - public static final Item IRON_SHOVEL = register(new TieredItem("iron_shovel", ToolTier.IRON, builder().stackSize(1).maxDamage(250).attackDamage(4.5))); - public static final Item IRON_PICKAXE = register(new TieredItem("iron_pickaxe", ToolTier.IRON, builder().stackSize(1).maxDamage(250).attackDamage(4.0))); - public static final Item IRON_AXE = register(new TieredItem("iron_axe", ToolTier.IRON, builder().stackSize(1).maxDamage(250).attackDamage(9.0))); - public static final Item IRON_HOE = register(new TieredItem("iron_hoe", ToolTier.IRON, builder().stackSize(1).maxDamage(250).attackDamage(1.0))); - public static final Item DIAMOND_SWORD = register(new TieredItem("diamond_sword", ToolTier.DIAMOND, builder().stackSize(1).maxDamage(1561).attackDamage(7.0))); - public static final Item DIAMOND_SHOVEL = register(new TieredItem("diamond_shovel", ToolTier.DIAMOND, builder().stackSize(1).maxDamage(1561).attackDamage(5.5))); - public static final Item DIAMOND_PICKAXE = register(new TieredItem("diamond_pickaxe", ToolTier.DIAMOND, builder().stackSize(1).maxDamage(1561).attackDamage(5.0))); - public static final Item DIAMOND_AXE = register(new TieredItem("diamond_axe", ToolTier.DIAMOND, builder().stackSize(1).maxDamage(1561).attackDamage(9.0))); - public static final Item DIAMOND_HOE = register(new TieredItem("diamond_hoe", ToolTier.DIAMOND, builder().stackSize(1).maxDamage(1561).attackDamage(1.0))); - public static final Item NETHERITE_SWORD = register(new TieredItem("netherite_sword", ToolTier.NETHERITE, builder().stackSize(1).maxDamage(2031).attackDamage(8.0))); - public static final Item NETHERITE_SHOVEL = register(new TieredItem("netherite_shovel", ToolTier.NETHERITE, builder().stackSize(1).maxDamage(2031).attackDamage(6.5))); - public static final Item NETHERITE_PICKAXE = register(new TieredItem("netherite_pickaxe", ToolTier.NETHERITE, builder().stackSize(1).maxDamage(2031).attackDamage(6.0))); - public static final Item NETHERITE_AXE = register(new TieredItem("netherite_axe", ToolTier.NETHERITE, builder().stackSize(1).maxDamage(2031).attackDamage(10.0))); - public static final Item NETHERITE_HOE = register(new TieredItem("netherite_hoe", ToolTier.NETHERITE, builder().stackSize(1).maxDamage(2031).attackDamage(1.0))); + public static final Item WOODEN_SWORD = register(new Item("wooden_sword", builder().attackDamage(4.0))); + public static final Item WOODEN_SHOVEL = register(new Item("wooden_shovel", builder().attackDamage(2.5))); + public static final Item WOODEN_PICKAXE = register(new Item("wooden_pickaxe", builder().attackDamage(2.0))); + public static final Item WOODEN_AXE = register(new Item("wooden_axe", builder().attackDamage(7.0))); + public static final Item WOODEN_HOE = register(new Item("wooden_hoe", builder().attackDamage(1.0))); + public static final Item STONE_SWORD = register(new Item("stone_sword", builder().attackDamage(5.0))); + public static final Item STONE_SHOVEL = register(new Item("stone_shovel", builder().attackDamage(3.5))); + public static final Item STONE_PICKAXE = register(new Item("stone_pickaxe", builder().attackDamage(3.0))); + public static final Item STONE_AXE = register(new Item("stone_axe", builder().attackDamage(9.0))); + public static final Item STONE_HOE = register(new Item("stone_hoe", builder().attackDamage(1.0))); + public static final Item GOLDEN_SWORD = register(new Item("golden_sword", builder().attackDamage(4.0))); + public static final Item GOLDEN_SHOVEL = register(new Item("golden_shovel", builder().attackDamage(2.5))); + public static final Item GOLDEN_PICKAXE = register(new Item("golden_pickaxe", builder().attackDamage(2.0))); + public static final Item GOLDEN_AXE = register(new Item("golden_axe", builder().attackDamage(7.0))); + public static final Item GOLDEN_HOE = register(new Item("golden_hoe", builder().attackDamage(1.0))); + public static final Item IRON_SWORD = register(new Item("iron_sword", builder().attackDamage(6.0))); + public static final Item IRON_SHOVEL = register(new Item("iron_shovel", builder().attackDamage(4.5))); + public static final Item IRON_PICKAXE = register(new Item("iron_pickaxe", builder().attackDamage(4.0))); + public static final Item IRON_AXE = register(new Item("iron_axe", builder().attackDamage(9.0))); + public static final Item IRON_HOE = register(new Item("iron_hoe", builder().attackDamage(1.0))); + public static final Item DIAMOND_SWORD = register(new Item("diamond_sword", builder().attackDamage(7.0))); + public static final Item DIAMOND_SHOVEL = register(new Item("diamond_shovel", builder().attackDamage(5.5))); + public static final Item DIAMOND_PICKAXE = register(new Item("diamond_pickaxe", builder().attackDamage(5.0))); + public static final Item DIAMOND_AXE = register(new Item("diamond_axe", builder().attackDamage(9.0))); + public static final Item DIAMOND_HOE = register(new Item("diamond_hoe", builder().attackDamage(1.0))); + public static final Item NETHERITE_SWORD = register(new Item("netherite_sword", builder().attackDamage(8.0))); + public static final Item NETHERITE_SHOVEL = register(new Item("netherite_shovel", builder().attackDamage(6.5))); + public static final Item NETHERITE_PICKAXE = register(new Item("netherite_pickaxe", builder().attackDamage(6.0))); + public static final Item NETHERITE_AXE = register(new Item("netherite_axe", builder().attackDamage(10.0))); + public static final Item NETHERITE_HOE = register(new Item("netherite_hoe", builder().attackDamage(1.0))); public static final Item STICK = register(new Item("stick", builder())); - public static final Item MUSHROOM_STEW = register(new Item("mushroom_stew", builder().stackSize(1))); + public static final Item MUSHROOM_STEW = register(new Item("mushroom_stew", builder())); public static final Item STRING = register(new BlockItem("string", builder(), Blocks.TRIPWIRE)); public static final Item FEATHER = register(new Item("feather", builder())); public static final Item GUNPOWDER = register(new Item("gunpowder", builder())); public static final Item WHEAT_SEEDS = register(new BlockItem("wheat_seeds", builder(), Blocks.WHEAT)); public static final Item WHEAT = register(new Item("wheat", builder())); public static final Item BREAD = register(new Item("bread", builder())); - public static final Item LEATHER_HELMET = register(new DyeableArmorItem("leather_helmet", ArmorMaterial.LEATHER, builder().stackSize(1).maxDamage(55))); - public static final Item LEATHER_CHESTPLATE = register(new DyeableArmorItem("leather_chestplate", ArmorMaterial.LEATHER, builder().stackSize(1).maxDamage(80))); - public static final Item LEATHER_LEGGINGS = register(new DyeableArmorItem("leather_leggings", ArmorMaterial.LEATHER, builder().stackSize(1).maxDamage(75))); - public static final Item LEATHER_BOOTS = register(new DyeableArmorItem("leather_boots", ArmorMaterial.LEATHER, builder().stackSize(1).maxDamage(65))); - public static final Item CHAINMAIL_HELMET = register(new ArmorItem("chainmail_helmet", ArmorMaterial.CHAINMAIL, builder().stackSize(1).maxDamage(165))); - public static final Item CHAINMAIL_CHESTPLATE = register(new ArmorItem("chainmail_chestplate", ArmorMaterial.CHAINMAIL, builder().stackSize(1).maxDamage(240))); - public static final Item CHAINMAIL_LEGGINGS = register(new ArmorItem("chainmail_leggings", ArmorMaterial.CHAINMAIL, builder().stackSize(1).maxDamage(225))); - public static final Item CHAINMAIL_BOOTS = register(new ArmorItem("chainmail_boots", ArmorMaterial.CHAINMAIL, builder().stackSize(1).maxDamage(195))); - public static final Item IRON_HELMET = register(new ArmorItem("iron_helmet", ArmorMaterial.IRON, builder().stackSize(1).maxDamage(165))); - public static final Item IRON_CHESTPLATE = register(new ArmorItem("iron_chestplate", ArmorMaterial.IRON, builder().stackSize(1).maxDamage(240))); - public static final Item IRON_LEGGINGS = register(new ArmorItem("iron_leggings", ArmorMaterial.IRON, builder().stackSize(1).maxDamage(225))); - public static final Item IRON_BOOTS = register(new ArmorItem("iron_boots", ArmorMaterial.IRON, builder().stackSize(1).maxDamage(195))); - public static final Item DIAMOND_HELMET = register(new ArmorItem("diamond_helmet", ArmorMaterial.DIAMOND, builder().stackSize(1).maxDamage(363))); - public static final Item DIAMOND_CHESTPLATE = register(new ArmorItem("diamond_chestplate", ArmorMaterial.DIAMOND, builder().stackSize(1).maxDamage(528))); - public static final Item DIAMOND_LEGGINGS = register(new ArmorItem("diamond_leggings", ArmorMaterial.DIAMOND, builder().stackSize(1).maxDamage(495))); - public static final Item DIAMOND_BOOTS = register(new ArmorItem("diamond_boots", ArmorMaterial.DIAMOND, builder().stackSize(1).maxDamage(429))); - public static final Item GOLDEN_HELMET = register(new ArmorItem("golden_helmet", ArmorMaterial.GOLD, builder().stackSize(1).maxDamage(77))); - public static final Item GOLDEN_CHESTPLATE = register(new ArmorItem("golden_chestplate", ArmorMaterial.GOLD, builder().stackSize(1).maxDamage(112))); - public static final Item GOLDEN_LEGGINGS = register(new ArmorItem("golden_leggings", ArmorMaterial.GOLD, builder().stackSize(1).maxDamage(105))); - public static final Item GOLDEN_BOOTS = register(new ArmorItem("golden_boots", ArmorMaterial.GOLD, builder().stackSize(1).maxDamage(91))); - public static final Item NETHERITE_HELMET = register(new ArmorItem("netherite_helmet", ArmorMaterial.NETHERITE, builder().stackSize(1).maxDamage(407))); - public static final Item NETHERITE_CHESTPLATE = register(new ArmorItem("netherite_chestplate", ArmorMaterial.NETHERITE, builder().stackSize(1).maxDamage(592))); - public static final Item NETHERITE_LEGGINGS = register(new ArmorItem("netherite_leggings", ArmorMaterial.NETHERITE, builder().stackSize(1).maxDamage(555))); - public static final Item NETHERITE_BOOTS = register(new ArmorItem("netherite_boots", ArmorMaterial.NETHERITE, builder().stackSize(1).maxDamage(481))); + public static final Item LEATHER_HELMET = register(new DyeableArmorItem("leather_helmet", ArmorMaterial.LEATHER, builder())); + public static final Item LEATHER_CHESTPLATE = register(new DyeableArmorItem("leather_chestplate", ArmorMaterial.LEATHER, builder())); + public static final Item LEATHER_LEGGINGS = register(new DyeableArmorItem("leather_leggings", ArmorMaterial.LEATHER, builder())); + public static final Item LEATHER_BOOTS = register(new DyeableArmorItem("leather_boots", ArmorMaterial.LEATHER, builder())); + public static final Item CHAINMAIL_HELMET = register(new ArmorItem("chainmail_helmet", ArmorMaterial.CHAINMAIL, builder())); + public static final Item CHAINMAIL_CHESTPLATE = register(new ArmorItem("chainmail_chestplate", ArmorMaterial.CHAINMAIL, builder())); + public static final Item CHAINMAIL_LEGGINGS = register(new ArmorItem("chainmail_leggings", ArmorMaterial.CHAINMAIL, builder())); + public static final Item CHAINMAIL_BOOTS = register(new ArmorItem("chainmail_boots", ArmorMaterial.CHAINMAIL, builder())); + public static final Item IRON_HELMET = register(new ArmorItem("iron_helmet", ArmorMaterial.IRON, builder())); + public static final Item IRON_CHESTPLATE = register(new ArmorItem("iron_chestplate", ArmorMaterial.IRON, builder())); + public static final Item IRON_LEGGINGS = register(new ArmorItem("iron_leggings", ArmorMaterial.IRON, builder())); + public static final Item IRON_BOOTS = register(new ArmorItem("iron_boots", ArmorMaterial.IRON, builder())); + public static final Item DIAMOND_HELMET = register(new ArmorItem("diamond_helmet", ArmorMaterial.DIAMOND, builder())); + public static final Item DIAMOND_CHESTPLATE = register(new ArmorItem("diamond_chestplate", ArmorMaterial.DIAMOND, builder())); + public static final Item DIAMOND_LEGGINGS = register(new ArmorItem("diamond_leggings", ArmorMaterial.DIAMOND, builder())); + public static final Item DIAMOND_BOOTS = register(new ArmorItem("diamond_boots", ArmorMaterial.DIAMOND, builder())); + public static final Item GOLDEN_HELMET = register(new ArmorItem("golden_helmet", ArmorMaterial.GOLD, builder())); + public static final Item GOLDEN_CHESTPLATE = register(new ArmorItem("golden_chestplate", ArmorMaterial.GOLD, builder())); + public static final Item GOLDEN_LEGGINGS = register(new ArmorItem("golden_leggings", ArmorMaterial.GOLD, builder())); + public static final Item GOLDEN_BOOTS = register(new ArmorItem("golden_boots", ArmorMaterial.GOLD, builder())); + public static final Item NETHERITE_HELMET = register(new ArmorItem("netherite_helmet", ArmorMaterial.NETHERITE, builder())); + public static final Item NETHERITE_CHESTPLATE = register(new ArmorItem("netherite_chestplate", ArmorMaterial.NETHERITE, builder())); + public static final Item NETHERITE_LEGGINGS = register(new ArmorItem("netherite_leggings", ArmorMaterial.NETHERITE, builder())); + public static final Item NETHERITE_BOOTS = register(new ArmorItem("netherite_boots", ArmorMaterial.NETHERITE, builder())); public static final Item FLINT = register(new Item("flint", builder())); public static final Item PORKCHOP = register(new Item("porkchop", builder())); public static final Item COOKED_PORKCHOP = register(new Item("cooked_porkchop", builder())); public static final Item PAINTING = register(new Item("painting", builder())); public static final Item GOLDEN_APPLE = register(new Item("golden_apple", builder())); public static final Item ENCHANTED_GOLDEN_APPLE = register(new Item("enchanted_golden_apple", builder())); - public static final Item OAK_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.OAK_SIGN, Blocks.OAK_WALL_SIGN)); - public static final Item SPRUCE_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.SPRUCE_SIGN, Blocks.SPRUCE_WALL_SIGN)); - public static final Item BIRCH_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.BIRCH_SIGN, Blocks.BIRCH_WALL_SIGN)); - public static final Item JUNGLE_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.JUNGLE_SIGN, Blocks.JUNGLE_WALL_SIGN)); - public static final Item ACACIA_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.ACACIA_SIGN, Blocks.ACACIA_WALL_SIGN)); - public static final Item CHERRY_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.CHERRY_SIGN, Blocks.CHERRY_WALL_SIGN)); - public static final Item DARK_OAK_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.DARK_OAK_SIGN, Blocks.DARK_OAK_WALL_SIGN)); - public static final Item PALE_OAK_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.PALE_OAK_SIGN, Blocks.PALE_OAK_WALL_SIGN)); - public static final Item MANGROVE_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.MANGROVE_SIGN, Blocks.MANGROVE_WALL_SIGN)); - public static final Item BAMBOO_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.BAMBOO_SIGN, Blocks.BAMBOO_WALL_SIGN)); - public static final Item CRIMSON_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.CRIMSON_SIGN, Blocks.CRIMSON_WALL_SIGN)); - public static final Item WARPED_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.WARPED_SIGN, Blocks.WARPED_WALL_SIGN)); - public static final Item OAK_HANGING_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.OAK_HANGING_SIGN, Blocks.OAK_WALL_HANGING_SIGN)); - public static final Item SPRUCE_HANGING_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.SPRUCE_HANGING_SIGN, Blocks.SPRUCE_WALL_HANGING_SIGN)); - public static final Item BIRCH_HANGING_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.BIRCH_HANGING_SIGN, Blocks.BIRCH_WALL_HANGING_SIGN)); - public static final Item JUNGLE_HANGING_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.JUNGLE_HANGING_SIGN, Blocks.JUNGLE_WALL_HANGING_SIGN)); - public static final Item ACACIA_HANGING_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.ACACIA_HANGING_SIGN, Blocks.ACACIA_WALL_HANGING_SIGN)); - public static final Item CHERRY_HANGING_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.CHERRY_HANGING_SIGN, Blocks.CHERRY_WALL_HANGING_SIGN)); - public static final Item DARK_OAK_HANGING_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.DARK_OAK_HANGING_SIGN, Blocks.DARK_OAK_WALL_HANGING_SIGN)); - public static final Item PALE_OAK_HANGING_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.PALE_OAK_HANGING_SIGN, Blocks.PALE_OAK_WALL_HANGING_SIGN)); - public static final Item MANGROVE_HANGING_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.MANGROVE_HANGING_SIGN, Blocks.MANGROVE_WALL_HANGING_SIGN)); - public static final Item BAMBOO_HANGING_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.BAMBOO_HANGING_SIGN, Blocks.BAMBOO_WALL_HANGING_SIGN)); - public static final Item CRIMSON_HANGING_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.CRIMSON_HANGING_SIGN, Blocks.CRIMSON_WALL_HANGING_SIGN)); - public static final Item WARPED_HANGING_SIGN = register(new BlockItem(builder().stackSize(16), Blocks.WARPED_HANGING_SIGN, Blocks.WARPED_WALL_HANGING_SIGN)); - public static final Item BUCKET = register(new Item("bucket", builder().stackSize(16))); - public static final Item WATER_BUCKET = register(new Item("water_bucket", builder().stackSize(1))); - public static final Item LAVA_BUCKET = register(new Item("lava_bucket", builder().stackSize(1))); - public static final Item POWDER_SNOW_BUCKET = register(new BlockItem("powder_snow_bucket", builder().stackSize(1), Blocks.POWDER_SNOW)); - public static final Item SNOWBALL = register(new Item("snowball", builder().stackSize(16))); + public static final Item OAK_SIGN = register(new BlockItem(builder(), Blocks.OAK_SIGN, Blocks.OAK_WALL_SIGN)); + public static final Item SPRUCE_SIGN = register(new BlockItem(builder(), Blocks.SPRUCE_SIGN, Blocks.SPRUCE_WALL_SIGN)); + public static final Item BIRCH_SIGN = register(new BlockItem(builder(), Blocks.BIRCH_SIGN, Blocks.BIRCH_WALL_SIGN)); + public static final Item JUNGLE_SIGN = register(new BlockItem(builder(), Blocks.JUNGLE_SIGN, Blocks.JUNGLE_WALL_SIGN)); + public static final Item ACACIA_SIGN = register(new BlockItem(builder(), Blocks.ACACIA_SIGN, Blocks.ACACIA_WALL_SIGN)); + public static final Item CHERRY_SIGN = register(new BlockItem(builder(), Blocks.CHERRY_SIGN, Blocks.CHERRY_WALL_SIGN)); + public static final Item DARK_OAK_SIGN = register(new BlockItem(builder(), Blocks.DARK_OAK_SIGN, Blocks.DARK_OAK_WALL_SIGN)); + public static final Item PALE_OAK_SIGN = register(new BlockItem(builder(), Blocks.PALE_OAK_SIGN, Blocks.PALE_OAK_WALL_SIGN)); + public static final Item MANGROVE_SIGN = register(new BlockItem(builder(), Blocks.MANGROVE_SIGN, Blocks.MANGROVE_WALL_SIGN)); + public static final Item BAMBOO_SIGN = register(new BlockItem(builder(), Blocks.BAMBOO_SIGN, Blocks.BAMBOO_WALL_SIGN)); + public static final Item CRIMSON_SIGN = register(new BlockItem(builder(), Blocks.CRIMSON_SIGN, Blocks.CRIMSON_WALL_SIGN)); + public static final Item WARPED_SIGN = register(new BlockItem(builder(), Blocks.WARPED_SIGN, Blocks.WARPED_WALL_SIGN)); + public static final Item OAK_HANGING_SIGN = register(new BlockItem(builder(), Blocks.OAK_HANGING_SIGN, Blocks.OAK_WALL_HANGING_SIGN)); + public static final Item SPRUCE_HANGING_SIGN = register(new BlockItem(builder(), Blocks.SPRUCE_HANGING_SIGN, Blocks.SPRUCE_WALL_HANGING_SIGN)); + public static final Item BIRCH_HANGING_SIGN = register(new BlockItem(builder(), Blocks.BIRCH_HANGING_SIGN, Blocks.BIRCH_WALL_HANGING_SIGN)); + public static final Item JUNGLE_HANGING_SIGN = register(new BlockItem(builder(), Blocks.JUNGLE_HANGING_SIGN, Blocks.JUNGLE_WALL_HANGING_SIGN)); + public static final Item ACACIA_HANGING_SIGN = register(new BlockItem(builder(), Blocks.ACACIA_HANGING_SIGN, Blocks.ACACIA_WALL_HANGING_SIGN)); + public static final Item CHERRY_HANGING_SIGN = register(new BlockItem(builder(), Blocks.CHERRY_HANGING_SIGN, Blocks.CHERRY_WALL_HANGING_SIGN)); + public static final Item DARK_OAK_HANGING_SIGN = register(new BlockItem(builder(), Blocks.DARK_OAK_HANGING_SIGN, Blocks.DARK_OAK_WALL_HANGING_SIGN)); + public static final Item PALE_OAK_HANGING_SIGN = register(new BlockItem(builder(), Blocks.PALE_OAK_HANGING_SIGN, Blocks.PALE_OAK_WALL_HANGING_SIGN)); + public static final Item MANGROVE_HANGING_SIGN = register(new BlockItem(builder(), Blocks.MANGROVE_HANGING_SIGN, Blocks.MANGROVE_WALL_HANGING_SIGN)); + public static final Item BAMBOO_HANGING_SIGN = register(new BlockItem(builder(), Blocks.BAMBOO_HANGING_SIGN, Blocks.BAMBOO_WALL_HANGING_SIGN)); + public static final Item CRIMSON_HANGING_SIGN = register(new BlockItem(builder(), Blocks.CRIMSON_HANGING_SIGN, Blocks.CRIMSON_WALL_HANGING_SIGN)); + public static final Item WARPED_HANGING_SIGN = register(new BlockItem(builder(), Blocks.WARPED_HANGING_SIGN, Blocks.WARPED_WALL_HANGING_SIGN)); + public static final Item BUCKET = register(new Item("bucket", builder())); + public static final Item WATER_BUCKET = register(new Item("water_bucket", builder())); + public static final Item LAVA_BUCKET = register(new Item("lava_bucket", builder())); + public static final Item POWDER_SNOW_BUCKET = register(new BlockItem("powder_snow_bucket", builder(), Blocks.POWDER_SNOW)); + public static final Item SNOWBALL = register(new Item("snowball", builder())); public static final Item LEATHER = register(new Item("leather", builder())); - public static final Item MILK_BUCKET = register(new Item("milk_bucket", builder().stackSize(1))); - public static final Item PUFFERFISH_BUCKET = register(new Item("pufferfish_bucket", builder().stackSize(1))); - public static final Item SALMON_BUCKET = register(new Item("salmon_bucket", builder().stackSize(1))); - public static final Item COD_BUCKET = register(new Item("cod_bucket", builder().stackSize(1))); - public static final Item TROPICAL_FISH_BUCKET = register(new TropicalFishBucketItem("tropical_fish_bucket", builder().stackSize(1))); - public static final Item AXOLOTL_BUCKET = register(new AxolotlBucketItem("axolotl_bucket", builder().stackSize(1))); - public static final Item TADPOLE_BUCKET = register(new Item("tadpole_bucket", builder().stackSize(1))); + public static final Item MILK_BUCKET = register(new Item("milk_bucket", builder())); + public static final Item PUFFERFISH_BUCKET = register(new Item("pufferfish_bucket", builder())); + public static final Item SALMON_BUCKET = register(new Item("salmon_bucket", builder())); + public static final Item COD_BUCKET = register(new Item("cod_bucket", builder())); + public static final Item TROPICAL_FISH_BUCKET = register(new TropicalFishBucketItem("tropical_fish_bucket", builder())); + public static final Item AXOLOTL_BUCKET = register(new AxolotlBucketItem("axolotl_bucket", builder())); + public static final Item TADPOLE_BUCKET = register(new Item("tadpole_bucket", builder())); public static final Item BRICK = register(new Item("brick", builder())); public static final Item CLAY_BALL = register(new Item("clay_ball", builder())); public static final Item DRIED_KELP_BLOCK = register(new BlockItem(builder(), Blocks.DRIED_KELP_BLOCK)); public static final Item PAPER = register(new Item("paper", builder())); public static final Item BOOK = register(new Item("book", builder())); public static final Item SLIME_BALL = register(new Item("slime_ball", builder())); - public static final Item EGG = register(new Item("egg", builder().stackSize(16))); + public static final Item EGG = register(new Item("egg", builder())); public static final Item COMPASS = register(new CompassItem("compass", builder())); public static final Item RECOVERY_COMPASS = register(new Item("recovery_compass", builder())); - public static final Item BUNDLE = register(new Item("bundle", builder().stackSize(1))); - public static final Item WHITE_BUNDLE = register(new Item("white_bundle", builder().stackSize(1))); - public static final Item ORANGE_BUNDLE = register(new Item("orange_bundle", builder().stackSize(1))); - public static final Item MAGENTA_BUNDLE = register(new Item("magenta_bundle", builder().stackSize(1))); - public static final Item LIGHT_BLUE_BUNDLE = register(new Item("light_blue_bundle", builder().stackSize(1))); - public static final Item YELLOW_BUNDLE = register(new Item("yellow_bundle", builder().stackSize(1))); - public static final Item LIME_BUNDLE = register(new Item("lime_bundle", builder().stackSize(1))); - public static final Item PINK_BUNDLE = register(new Item("pink_bundle", builder().stackSize(1))); - public static final Item GRAY_BUNDLE = register(new Item("gray_bundle", builder().stackSize(1))); - public static final Item LIGHT_GRAY_BUNDLE = register(new Item("light_gray_bundle", builder().stackSize(1))); - public static final Item CYAN_BUNDLE = register(new Item("cyan_bundle", builder().stackSize(1))); - public static final Item PURPLE_BUNDLE = register(new Item("purple_bundle", builder().stackSize(1))); - public static final Item BLUE_BUNDLE = register(new Item("blue_bundle", builder().stackSize(1))); - public static final Item BROWN_BUNDLE = register(new Item("brown_bundle", builder().stackSize(1))); - public static final Item GREEN_BUNDLE = register(new Item("green_bundle", builder().stackSize(1))); - public static final Item RED_BUNDLE = register(new Item("red_bundle", builder().stackSize(1))); - public static final Item BLACK_BUNDLE = register(new Item("black_bundle", builder().stackSize(1))); - public static final Item FISHING_ROD = register(new FishingRodItem("fishing_rod", builder().stackSize(1).maxDamage(64))); + public static final Item BUNDLE = register(new Item("bundle", builder())); + public static final Item WHITE_BUNDLE = register(new Item("white_bundle", builder())); + public static final Item ORANGE_BUNDLE = register(new Item("orange_bundle", builder())); + public static final Item MAGENTA_BUNDLE = register(new Item("magenta_bundle", builder())); + public static final Item LIGHT_BLUE_BUNDLE = register(new Item("light_blue_bundle", builder())); + public static final Item YELLOW_BUNDLE = register(new Item("yellow_bundle", builder())); + public static final Item LIME_BUNDLE = register(new Item("lime_bundle", builder())); + public static final Item PINK_BUNDLE = register(new Item("pink_bundle", builder())); + public static final Item GRAY_BUNDLE = register(new Item("gray_bundle", builder())); + public static final Item LIGHT_GRAY_BUNDLE = register(new Item("light_gray_bundle", builder())); + public static final Item CYAN_BUNDLE = register(new Item("cyan_bundle", builder())); + public static final Item PURPLE_BUNDLE = register(new Item("purple_bundle", builder())); + public static final Item BLUE_BUNDLE = register(new Item("blue_bundle", builder())); + public static final Item BROWN_BUNDLE = register(new Item("brown_bundle", builder())); + public static final Item GREEN_BUNDLE = register(new Item("green_bundle", builder())); + public static final Item RED_BUNDLE = register(new Item("red_bundle", builder())); + public static final Item BLACK_BUNDLE = register(new Item("black_bundle", builder())); + public static final Item FISHING_ROD = register(new FishingRodItem("fishing_rod", builder())); public static final Item CLOCK = register(new Item("clock", builder())); - public static final Item SPYGLASS = register(new Item("spyglass", builder().stackSize(1))); + public static final Item SPYGLASS = register(new Item("spyglass", builder())); public static final Item GLOWSTONE_DUST = register(new Item("glowstone_dust", builder())); public static final Item COD = register(new Item("cod", builder())); public static final Item SALMON = register(new Item("salmon", builder())); @@ -1078,27 +1087,27 @@ public final class Items { public static final Item BONE_MEAL = register(new Item("bone_meal", builder())); public static final Item BONE = register(new Item("bone", builder())); public static final Item SUGAR = register(new Item("sugar", builder())); - public static final Item CAKE = register(new BlockItem(builder().stackSize(1), Blocks.CAKE)); - public static final Item WHITE_BED = register(new BlockItem(builder().stackSize(1), Blocks.WHITE_BED)); - public static final Item ORANGE_BED = register(new BlockItem(builder().stackSize(1), Blocks.ORANGE_BED)); - public static final Item MAGENTA_BED = register(new BlockItem(builder().stackSize(1), Blocks.MAGENTA_BED)); - public static final Item LIGHT_BLUE_BED = register(new BlockItem(builder().stackSize(1), Blocks.LIGHT_BLUE_BED)); - public static final Item YELLOW_BED = register(new BlockItem(builder().stackSize(1), Blocks.YELLOW_BED)); - public static final Item LIME_BED = register(new BlockItem(builder().stackSize(1), Blocks.LIME_BED)); - public static final Item PINK_BED = register(new BlockItem(builder().stackSize(1), Blocks.PINK_BED)); - public static final Item GRAY_BED = register(new BlockItem(builder().stackSize(1), Blocks.GRAY_BED)); - public static final Item LIGHT_GRAY_BED = register(new BlockItem(builder().stackSize(1), Blocks.LIGHT_GRAY_BED)); - public static final Item CYAN_BED = register(new BlockItem(builder().stackSize(1), Blocks.CYAN_BED)); - public static final Item PURPLE_BED = register(new BlockItem(builder().stackSize(1), Blocks.PURPLE_BED)); - public static final Item BLUE_BED = register(new BlockItem(builder().stackSize(1), Blocks.BLUE_BED)); - public static final Item BROWN_BED = register(new BlockItem(builder().stackSize(1), Blocks.BROWN_BED)); - public static final Item GREEN_BED = register(new BlockItem(builder().stackSize(1), Blocks.GREEN_BED)); - public static final Item RED_BED = register(new BlockItem(builder().stackSize(1), Blocks.RED_BED)); - public static final Item BLACK_BED = register(new BlockItem(builder().stackSize(1), Blocks.BLACK_BED)); + public static final Item CAKE = register(new BlockItem(builder(), Blocks.CAKE)); + public static final Item WHITE_BED = register(new BlockItem(builder(), Blocks.WHITE_BED)); + public static final Item ORANGE_BED = register(new BlockItem(builder(), Blocks.ORANGE_BED)); + public static final Item MAGENTA_BED = register(new BlockItem(builder(), Blocks.MAGENTA_BED)); + public static final Item LIGHT_BLUE_BED = register(new BlockItem(builder(), Blocks.LIGHT_BLUE_BED)); + public static final Item YELLOW_BED = register(new BlockItem(builder(), Blocks.YELLOW_BED)); + public static final Item LIME_BED = register(new BlockItem(builder(), Blocks.LIME_BED)); + public static final Item PINK_BED = register(new BlockItem(builder(), Blocks.PINK_BED)); + public static final Item GRAY_BED = register(new BlockItem(builder(), Blocks.GRAY_BED)); + public static final Item LIGHT_GRAY_BED = register(new BlockItem(builder(), Blocks.LIGHT_GRAY_BED)); + public static final Item CYAN_BED = register(new BlockItem(builder(), Blocks.CYAN_BED)); + public static final Item PURPLE_BED = register(new BlockItem(builder(), Blocks.PURPLE_BED)); + public static final Item BLUE_BED = register(new BlockItem(builder(), Blocks.BLUE_BED)); + public static final Item BROWN_BED = register(new BlockItem(builder(), Blocks.BROWN_BED)); + public static final Item GREEN_BED = register(new BlockItem(builder(), Blocks.GREEN_BED)); + public static final Item RED_BED = register(new BlockItem(builder(), Blocks.RED_BED)); + public static final Item BLACK_BED = register(new BlockItem(builder(), Blocks.BLACK_BED)); public static final Item COOKIE = register(new Item("cookie", builder())); public static final Item CRAFTER = register(new BlockItem(builder(), Blocks.CRAFTER)); 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 SHEARS = register(new Item("shears", builder())); public static final Item MELON_SLICE = register(new Item("melon_slice", builder())); public static final Item DRIED_KELP = register(new Item("dried_kelp", builder())); public static final Item PUMPKIN_SEEDS = register(new BlockItem("pumpkin_seeds", builder(), Blocks.PUMPKIN_STEM)); @@ -1108,19 +1117,19 @@ public final class Items { public static final Item CHICKEN = register(new Item("chicken", builder())); public static final Item COOKED_CHICKEN = register(new Item("cooked_chicken", builder())); public static final Item ROTTEN_FLESH = register(new Item("rotten_flesh", builder())); - public static final Item ENDER_PEARL = register(new Item("ender_pearl", builder().stackSize(16))); + public static final Item ENDER_PEARL = register(new Item("ender_pearl", builder())); public static final Item BLAZE_ROD = register(new Item("blaze_rod", builder())); public static final Item GHAST_TEAR = register(new Item("ghast_tear", builder())); public static final Item GOLD_NUGGET = register(new Item("gold_nugget", builder())); public static final Item NETHER_WART = register(new BlockItem(builder(), Blocks.NETHER_WART)); public static final Item GLASS_BOTTLE = register(new Item("glass_bottle", builder())); - public static final Item POTION = register(new PotionItem("potion", builder().stackSize(1))); + public static final Item POTION = register(new PotionItem("potion", builder())); public static final Item SPIDER_EYE = register(new Item("spider_eye", builder())); public static final Item FERMENTED_SPIDER_EYE = register(new Item("fermented_spider_eye", builder())); public static final Item BLAZE_POWDER = register(new Item("blaze_powder", builder())); public static final Item MAGMA_CREAM = register(new Item("magma_cream", builder())); public static final Item BREWING_STAND = register(new BlockItem(builder(), Blocks.BREWING_STAND)); - public static final Item CAULDRON = register(new BlockItem(builder(), Blocks.CAULDRON, Blocks.LAVA_CAULDRON, Blocks.WATER_CAULDRON, Blocks.POWDER_SNOW_CAULDRON)); + public static final Item CAULDRON = register(new BlockItem(builder(), Blocks.CAULDRON, Blocks.POWDER_SNOW_CAULDRON, Blocks.LAVA_CAULDRON, Blocks.WATER_CAULDRON)); public static final Item ENDER_EYE = register(new Item("ender_eye", builder())); public static final Item GLISTERING_MELON_SLICE = register(new Item("glistering_melon_slice", builder())); public static final Item ARMADILLO_SPAWN_EGG = register(new SpawnEggItem("armadillo_spawn_egg", builder())); @@ -1207,10 +1216,10 @@ public final class Items { public static final Item EXPERIENCE_BOTTLE = register(new Item("experience_bottle", builder())); public static final Item FIRE_CHARGE = register(new Item("fire_charge", builder())); public static final Item WIND_CHARGE = register(new Item("wind_charge", builder())); - public static final Item WRITABLE_BOOK = register(new WritableBookItem("writable_book", builder().stackSize(1))); - public static final Item WRITTEN_BOOK = register(new WrittenBookItem("written_book", builder().stackSize(16))); + public static final Item WRITABLE_BOOK = register(new WritableBookItem("writable_book", builder())); + public static final Item WRITTEN_BOOK = register(new WrittenBookItem("written_book", builder())); public static final Item BREEZE_ROD = register(new Item("breeze_rod", builder())); - public static final Item MACE = register(new MaceItem("mace", builder().stackSize(1).maxDamage(500))); + public static final Item MACE = register(new MaceItem("mace", builder())); public static final Item ITEM_FRAME = register(new Item("item_frame", builder())); public static final Item GLOW_ITEM_FRAME = register(new Item("glow_item_frame", builder())); public static final Item FLOWER_POT = register(new BlockItem(builder(), Blocks.FLOWER_POT)); @@ -1231,41 +1240,42 @@ public final class Items { public static final Item PUMPKIN_PIE = register(new Item("pumpkin_pie", builder())); public static final Item FIREWORK_ROCKET = register(new FireworkRocketItem("firework_rocket", builder())); public static final Item FIREWORK_STAR = register(new FireworkStarItem("firework_star", builder())); - public static final Item ENCHANTED_BOOK = register(new EnchantedBookItem("enchanted_book", builder().stackSize(1))); + public static final Item ENCHANTED_BOOK = register(new EnchantedBookItem("enchanted_book", builder())); public static final Item NETHER_BRICK = register(new Item("nether_brick", builder())); + public static final Item RESIN_BRICK = register(new Item("resin_brick", builder())); public static final Item PRISMARINE_SHARD = register(new Item("prismarine_shard", builder())); public static final Item PRISMARINE_CRYSTALS = register(new Item("prismarine_crystals", builder())); public static final Item RABBIT = register(new Item("rabbit", builder())); public static final Item COOKED_RABBIT = register(new Item("cooked_rabbit", builder())); - public static final Item RABBIT_STEW = register(new Item("rabbit_stew", builder().stackSize(1))); + public static final Item RABBIT_STEW = register(new Item("rabbit_stew", builder())); public static final Item RABBIT_FOOT = register(new Item("rabbit_foot", builder())); public static final Item RABBIT_HIDE = register(new Item("rabbit_hide", builder())); - public static final Item ARMOR_STAND = register(new Item("armor_stand", builder().stackSize(16))); - public static final Item IRON_HORSE_ARMOR = register(new Item("iron_horse_armor", builder().stackSize(1))); - public static final Item GOLDEN_HORSE_ARMOR = register(new Item("golden_horse_armor", builder().stackSize(1))); - public static final Item DIAMOND_HORSE_ARMOR = register(new Item("diamond_horse_armor", builder().stackSize(1))); - public static final Item LEATHER_HORSE_ARMOR = register(new DyeableArmorItem("leather_horse_armor", ArmorMaterial.LEATHER, builder().stackSize(1))); + public static final Item ARMOR_STAND = register(new Item("armor_stand", builder())); + public static final Item IRON_HORSE_ARMOR = register(new Item("iron_horse_armor", builder())); + public static final Item GOLDEN_HORSE_ARMOR = register(new Item("golden_horse_armor", builder())); + public static final Item DIAMOND_HORSE_ARMOR = register(new Item("diamond_horse_armor", builder())); + public static final Item LEATHER_HORSE_ARMOR = register(new Item("leather_horse_armor", builder())); public static final Item LEAD = register(new Item("lead", builder())); public static final Item NAME_TAG = register(new Item("name_tag", builder())); - public static final Item COMMAND_BLOCK_MINECART = register(new Item("command_block_minecart", builder().stackSize(1))); + public static final Item COMMAND_BLOCK_MINECART = register(new Item("command_block_minecart", builder())); public static final Item MUTTON = register(new Item("mutton", builder())); public static final Item COOKED_MUTTON = register(new Item("cooked_mutton", builder())); - public static final Item WHITE_BANNER = register(new BannerItem(builder().stackSize(16), Blocks.WHITE_BANNER, Blocks.WHITE_WALL_BANNER)); - public static final Item ORANGE_BANNER = register(new BannerItem(builder().stackSize(16), Blocks.ORANGE_BANNER, Blocks.ORANGE_WALL_BANNER)); - public static final Item MAGENTA_BANNER = register(new BannerItem(builder().stackSize(16), Blocks.MAGENTA_BANNER, Blocks.MAGENTA_WALL_BANNER)); - public static final Item LIGHT_BLUE_BANNER = register(new BannerItem(builder().stackSize(16), Blocks.LIGHT_BLUE_BANNER, Blocks.LIGHT_BLUE_WALL_BANNER)); - public static final Item YELLOW_BANNER = register(new BannerItem(builder().stackSize(16), Blocks.YELLOW_BANNER, Blocks.YELLOW_WALL_BANNER)); - public static final Item LIME_BANNER = register(new BannerItem(builder().stackSize(16), Blocks.LIME_BANNER, Blocks.LIME_WALL_BANNER)); - public static final Item PINK_BANNER = register(new BannerItem(builder().stackSize(16), Blocks.PINK_BANNER, Blocks.PINK_WALL_BANNER)); - public static final Item GRAY_BANNER = register(new BannerItem(builder().stackSize(16), Blocks.GRAY_BANNER, Blocks.GRAY_WALL_BANNER)); - public static final Item LIGHT_GRAY_BANNER = register(new BannerItem(builder().stackSize(16), Blocks.LIGHT_GRAY_BANNER, Blocks.LIGHT_GRAY_WALL_BANNER)); - public static final Item CYAN_BANNER = register(new BannerItem(builder().stackSize(16), Blocks.CYAN_BANNER, Blocks.CYAN_WALL_BANNER)); - public static final Item PURPLE_BANNER = register(new BannerItem(builder().stackSize(16), Blocks.PURPLE_BANNER, Blocks.PURPLE_WALL_BANNER)); - public static final Item BLUE_BANNER = register(new BannerItem(builder().stackSize(16), Blocks.BLUE_BANNER, Blocks.BLUE_WALL_BANNER)); - public static final Item BROWN_BANNER = register(new BannerItem(builder().stackSize(16), Blocks.BROWN_BANNER, Blocks.BROWN_WALL_BANNER)); - public static final Item GREEN_BANNER = register(new BannerItem(builder().stackSize(16), Blocks.GREEN_BANNER, Blocks.GREEN_WALL_BANNER)); - public static final Item RED_BANNER = register(new BannerItem(builder().stackSize(16), Blocks.RED_BANNER, Blocks.RED_WALL_BANNER)); - public static final Item BLACK_BANNER = register(new BannerItem(builder().stackSize(16), Blocks.BLACK_BANNER, Blocks.BLACK_WALL_BANNER)); + public static final Item WHITE_BANNER = register(new BannerItem(builder(), Blocks.WHITE_BANNER, Blocks.WHITE_WALL_BANNER)); + public static final Item ORANGE_BANNER = register(new BannerItem(builder(), Blocks.ORANGE_BANNER, Blocks.ORANGE_WALL_BANNER)); + public static final Item MAGENTA_BANNER = register(new BannerItem(builder(), Blocks.MAGENTA_BANNER, Blocks.MAGENTA_WALL_BANNER)); + public static final Item LIGHT_BLUE_BANNER = register(new BannerItem(builder(), Blocks.LIGHT_BLUE_BANNER, Blocks.LIGHT_BLUE_WALL_BANNER)); + public static final Item YELLOW_BANNER = register(new BannerItem(builder(), Blocks.YELLOW_BANNER, Blocks.YELLOW_WALL_BANNER)); + public static final Item LIME_BANNER = register(new BannerItem(builder(), Blocks.LIME_BANNER, Blocks.LIME_WALL_BANNER)); + public static final Item PINK_BANNER = register(new BannerItem(builder(), Blocks.PINK_BANNER, Blocks.PINK_WALL_BANNER)); + public static final Item GRAY_BANNER = register(new BannerItem(builder(), Blocks.GRAY_BANNER, Blocks.GRAY_WALL_BANNER)); + public static final Item LIGHT_GRAY_BANNER = register(new BannerItem(builder(), Blocks.LIGHT_GRAY_BANNER, Blocks.LIGHT_GRAY_WALL_BANNER)); + public static final Item CYAN_BANNER = register(new BannerItem(builder(), Blocks.CYAN_BANNER, Blocks.CYAN_WALL_BANNER)); + public static final Item PURPLE_BANNER = register(new BannerItem(builder(), Blocks.PURPLE_BANNER, Blocks.PURPLE_WALL_BANNER)); + public static final Item BLUE_BANNER = register(new BannerItem(builder(), Blocks.BLUE_BANNER, Blocks.BLUE_WALL_BANNER)); + public static final Item BROWN_BANNER = register(new BannerItem(builder(), Blocks.BROWN_BANNER, Blocks.BROWN_WALL_BANNER)); + public static final Item GREEN_BANNER = register(new BannerItem(builder(), Blocks.GREEN_BANNER, Blocks.GREEN_WALL_BANNER)); + public static final Item RED_BANNER = register(new BannerItem(builder(), Blocks.RED_BANNER, Blocks.RED_WALL_BANNER)); + public static final Item BLACK_BANNER = register(new BannerItem(builder(), Blocks.BLACK_BANNER, Blocks.BLACK_WALL_BANNER)); public static final Item END_CRYSTAL = register(new Item("end_crystal", builder())); public static final Item CHORUS_FRUIT = register(new Item("chorus_fruit", builder())); public static final Item POPPED_CHORUS_FRUIT = register(new Item("popped_chorus_fruit", builder())); @@ -1273,55 +1283,55 @@ public final class Items { public static final Item PITCHER_POD = register(new BlockItem("pitcher_pod", builder(), Blocks.PITCHER_CROP)); public static final Item BEETROOT = register(new Item("beetroot", builder())); public static final Item BEETROOT_SEEDS = register(new BlockItem("beetroot_seeds", builder(), Blocks.BEETROOTS)); - public static final Item BEETROOT_SOUP = register(new Item("beetroot_soup", builder().stackSize(1))); + public static final Item BEETROOT_SOUP = register(new Item("beetroot_soup", builder())); public static final Item DRAGON_BREATH = register(new Item("dragon_breath", builder())); - public static final Item SPLASH_POTION = register(new PotionItem("splash_potion", builder().stackSize(1))); + public static final Item SPLASH_POTION = register(new PotionItem("splash_potion", builder())); public static final Item SPECTRAL_ARROW = register(new Item("spectral_arrow", builder())); public static final Item TIPPED_ARROW = register(new TippedArrowItem("tipped_arrow", builder())); - public static final Item LINGERING_POTION = register(new PotionItem("lingering_potion", builder().stackSize(1))); - public static final Item SHIELD = register(new ShieldItem("shield", builder().stackSize(1).maxDamage(336))); - public static final Item TOTEM_OF_UNDYING = register(new Item("totem_of_undying", builder().stackSize(1))); + public static final Item LINGERING_POTION = register(new PotionItem("lingering_potion", builder())); + public static final Item SHIELD = register(new ShieldItem("shield", builder())); + public static final Item TOTEM_OF_UNDYING = register(new Item("totem_of_undying", builder())); public static final Item SHULKER_SHELL = register(new Item("shulker_shell", builder())); public static final Item IRON_NUGGET = register(new Item("iron_nugget", builder())); - public static final Item KNOWLEDGE_BOOK = register(new Item("knowledge_book", builder().stackSize(1))); - public static final Item DEBUG_STICK = register(new Item("debug_stick", builder().stackSize(1))); - public static final Item MUSIC_DISC_13 = register(new Item("music_disc_13", builder().stackSize(1))); - public static final Item MUSIC_DISC_CAT = register(new Item("music_disc_cat", builder().stackSize(1))); - public static final Item MUSIC_DISC_BLOCKS = register(new Item("music_disc_blocks", builder().stackSize(1))); - public static final Item MUSIC_DISC_CHIRP = register(new Item("music_disc_chirp", builder().stackSize(1))); - public static final Item MUSIC_DISC_CREATOR = register(new Item("music_disc_creator", builder().stackSize(1))); - public static final Item MUSIC_DISC_CREATOR_MUSIC_BOX = register(new Item("music_disc_creator_music_box", builder().stackSize(1))); - public static final Item MUSIC_DISC_FAR = register(new Item("music_disc_far", builder().stackSize(1))); - public static final Item MUSIC_DISC_MALL = register(new Item("music_disc_mall", builder().stackSize(1))); - public static final Item MUSIC_DISC_MELLOHI = register(new Item("music_disc_mellohi", builder().stackSize(1))); - public static final Item MUSIC_DISC_STAL = register(new Item("music_disc_stal", builder().stackSize(1))); - public static final Item MUSIC_DISC_STRAD = register(new Item("music_disc_strad", builder().stackSize(1))); - public static final Item MUSIC_DISC_WARD = register(new Item("music_disc_ward", builder().stackSize(1))); - public static final Item MUSIC_DISC_11 = register(new Item("music_disc_11", builder().stackSize(1))); - public static final Item MUSIC_DISC_WAIT = register(new Item("music_disc_wait", builder().stackSize(1))); - public static final Item MUSIC_DISC_OTHERSIDE = register(new Item("music_disc_otherside", builder().stackSize(1))); - public static final Item MUSIC_DISC_RELIC = register(new Item("music_disc_relic", builder().stackSize(1))); - public static final Item MUSIC_DISC_5 = register(new Item("music_disc_5", builder().stackSize(1))); - public static final Item MUSIC_DISC_PIGSTEP = register(new Item("music_disc_pigstep", builder().stackSize(1))); - public static final Item MUSIC_DISC_PRECIPICE = register(new Item("music_disc_precipice", builder().stackSize(1))); + public static final Item KNOWLEDGE_BOOK = register(new Item("knowledge_book", builder())); + public static final Item DEBUG_STICK = register(new Item("debug_stick", builder())); + public static final Item MUSIC_DISC_13 = register(new Item("music_disc_13", builder())); + public static final Item MUSIC_DISC_CAT = register(new Item("music_disc_cat", builder())); + public static final Item MUSIC_DISC_BLOCKS = register(new Item("music_disc_blocks", builder())); + public static final Item MUSIC_DISC_CHIRP = register(new Item("music_disc_chirp", builder())); + public static final Item MUSIC_DISC_CREATOR = register(new Item("music_disc_creator", builder())); + public static final Item MUSIC_DISC_CREATOR_MUSIC_BOX = register(new Item("music_disc_creator_music_box", builder())); + public static final Item MUSIC_DISC_FAR = register(new Item("music_disc_far", builder())); + public static final Item MUSIC_DISC_MALL = register(new Item("music_disc_mall", builder())); + public static final Item MUSIC_DISC_MELLOHI = register(new Item("music_disc_mellohi", builder())); + public static final Item MUSIC_DISC_STAL = register(new Item("music_disc_stal", builder())); + public static final Item MUSIC_DISC_STRAD = register(new Item("music_disc_strad", builder())); + public static final Item MUSIC_DISC_WARD = register(new Item("music_disc_ward", builder())); + public static final Item MUSIC_DISC_11 = register(new Item("music_disc_11", builder())); + public static final Item MUSIC_DISC_WAIT = register(new Item("music_disc_wait", builder())); + public static final Item MUSIC_DISC_OTHERSIDE = register(new Item("music_disc_otherside", builder())); + public static final Item MUSIC_DISC_RELIC = register(new Item("music_disc_relic", builder())); + public static final Item MUSIC_DISC_5 = register(new Item("music_disc_5", builder())); + public static final Item MUSIC_DISC_PIGSTEP = register(new Item("music_disc_pigstep", builder())); + public static final Item MUSIC_DISC_PRECIPICE = register(new Item("music_disc_precipice", builder())); public static final Item DISC_FRAGMENT_5 = register(new Item("disc_fragment_5", builder())); - public static final Item TRIDENT = register(new Item("trident", builder().stackSize(1).maxDamage(250).attackDamage(9.0))); + public static final Item TRIDENT = register(new Item("trident", builder().attackDamage(9.0))); public static final Item NAUTILUS_SHELL = register(new Item("nautilus_shell", builder())); public static final Item HEART_OF_THE_SEA = register(new Item("heart_of_the_sea", builder())); - public static final Item CROSSBOW = register(new CrossbowItem("crossbow", builder().stackSize(1).maxDamage(465))); - public static final Item SUSPICIOUS_STEW = register(new Item("suspicious_stew", builder().stackSize(1))); + public static final Item CROSSBOW = register(new CrossbowItem("crossbow", builder())); + public static final Item SUSPICIOUS_STEW = register(new Item("suspicious_stew", builder())); public static final Item LOOM = register(new BlockItem(builder(), Blocks.LOOM)); - public static final Item FLOWER_BANNER_PATTERN = register(new Item("flower_banner_pattern", builder().stackSize(1))); - public static final Item CREEPER_BANNER_PATTERN = register(new Item("creeper_banner_pattern", builder().stackSize(1))); - public static final Item SKULL_BANNER_PATTERN = register(new Item("skull_banner_pattern", builder().stackSize(1))); - public static final Item MOJANG_BANNER_PATTERN = register(new Item("mojang_banner_pattern", builder().stackSize(1))); - public static final Item GLOBE_BANNER_PATTERN = register(new Item("globe_banner_pattern", builder().stackSize(1))); - public static final Item PIGLIN_BANNER_PATTERN = register(new Item("piglin_banner_pattern", builder().stackSize(1))); - public static final Item FLOW_BANNER_PATTERN = register(new Item("flow_banner_pattern", builder().stackSize(1))); - public static final Item GUSTER_BANNER_PATTERN = register(new Item("guster_banner_pattern", builder().stackSize(1))); - public static final Item FIELD_MASONED_BANNER_PATTERN = register(new Item("field_masoned_banner_pattern", builder().stackSize(1))); - public static final Item BORDURE_INDENTED_BANNER_PATTERN = register(new Item("bordure_indented_banner_pattern", builder().stackSize(1))); - public static final Item GOAT_HORN = register(new GoatHornItem("goat_horn", builder().stackSize(1))); + public static final Item FLOWER_BANNER_PATTERN = register(new Item("flower_banner_pattern", builder())); + public static final Item CREEPER_BANNER_PATTERN = register(new Item("creeper_banner_pattern", builder())); + public static final Item SKULL_BANNER_PATTERN = register(new Item("skull_banner_pattern", builder())); + public static final Item MOJANG_BANNER_PATTERN = register(new Item("mojang_banner_pattern", builder())); + public static final Item GLOBE_BANNER_PATTERN = register(new Item("globe_banner_pattern", builder())); + public static final Item PIGLIN_BANNER_PATTERN = register(new Item("piglin_banner_pattern", builder())); + public static final Item FLOW_BANNER_PATTERN = register(new Item("flow_banner_pattern", builder())); + public static final Item GUSTER_BANNER_PATTERN = register(new Item("guster_banner_pattern", builder())); + public static final Item FIELD_MASONED_BANNER_PATTERN = register(new Item("field_masoned_banner_pattern", builder())); + public static final Item BORDURE_INDENTED_BANNER_PATTERN = register(new Item("bordure_indented_banner_pattern", builder())); + public static final Item GOAT_HORN = register(new GoatHornItem("goat_horn", builder())); public static final Item COMPOSTER = register(new BlockItem(builder(), Blocks.COMPOSTER)); public static final Item BARREL = register(new BlockItem(builder(), Blocks.BARREL)); public static final Item SMOKER = register(new BlockItem(builder(), Blocks.SMOKER)); @@ -1342,7 +1352,7 @@ public final class Items { public static final Item HONEYCOMB = register(new Item("honeycomb", builder())); public static final Item BEE_NEST = register(new BlockItem(builder(), Blocks.BEE_NEST)); public static final Item BEEHIVE = register(new BlockItem(builder(), Blocks.BEEHIVE)); - public static final Item HONEY_BOTTLE = register(new Item("honey_bottle", builder().stackSize(16))); + public static final Item HONEY_BOTTLE = register(new Item("honey_bottle", builder())); public static final Item HONEYCOMB_BLOCK = register(new BlockItem(builder(), Blocks.HONEYCOMB_BLOCK)); public static final Item LODESTONE = register(new BlockItem(builder(), Blocks.LODESTONE)); public static final Item CRYING_OBSIDIAN = register(new BlockItem(builder(), Blocks.CRYING_OBSIDIAN)); @@ -1386,7 +1396,7 @@ public final class Items { public static final Item PEARLESCENT_FROGLIGHT = register(new BlockItem(builder(), Blocks.PEARLESCENT_FROGLIGHT)); public static final Item FROGSPAWN = register(new BlockItem(builder(), Blocks.FROGSPAWN)); public static final Item ECHO_SHARD = register(new Item("echo_shard", builder())); - public static final Item BRUSH = register(new Item("brush", builder().stackSize(1).maxDamage(64))); + public static final Item BRUSH = register(new Item("brush", builder())); public static final Item NETHERITE_UPGRADE_SMITHING_TEMPLATE = register(new Item("netherite_upgrade_smithing_template", builder())); public static final Item SENTRY_ARMOR_TRIM_SMITHING_TEMPLATE = register(new Item("sentry_armor_trim_smithing_template", builder())); public static final Item DUNE_ARMOR_TRIM_SMITHING_TEMPLATE = register(new Item("dune_armor_trim_smithing_template", builder())); @@ -1449,7 +1459,7 @@ public final class Items { public static final Item TRIAL_KEY = register(new Item("trial_key", builder())); public static final Item OMINOUS_TRIAL_KEY = register(new Item("ominous_trial_key", builder())); public static final Item VAULT = register(new BlockItem(builder(), Blocks.VAULT)); - public static final Item OMINOUS_BOTTLE = register(new OminousBottleItem("ominous_bottle", builder())); + public static final Item OMINOUS_BOTTLE = register(new Item("ominous_bottle", builder())); public static final int AIR_ID = AIR.javaId(); diff --git a/core/src/main/java/org/geysermc/geyser/item/type/BedrockRequiresTagItem.java b/core/src/main/java/org/geysermc/geyser/item/type/BedrockRequiresTagItem.java index c41d14396..cd360f564 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/BedrockRequiresTagItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/BedrockRequiresTagItem.java @@ -25,12 +25,6 @@ package org.geysermc.geyser.item.type; -import org.checkerframework.checker.nullness.qual.Nullable; -import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.translator.item.BedrockItemBuilder; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; - +// Whether this item should have its NBT data kept in the recipe book. public interface BedrockRequiresTagItem { - - void addRequiredNbt(GeyserSession session, @Nullable DataComponents components, BedrockItemBuilder builder); } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/FireworkRocketItem.java b/core/src/main/java/org/geysermc/geyser/item/type/FireworkRocketItem.java index 2e7848318..862325a90 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/FireworkRocketItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/FireworkRocketItem.java @@ -27,7 +27,6 @@ package org.geysermc.geyser.item.type; import it.unimi.dsi.fastutil.ints.IntArrays; import org.checkerframework.checker.nullness.qual.NonNull; -import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.nbt.NbtList; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; @@ -142,20 +141,4 @@ public class FireworkRocketItem extends Item implements BedrockRequiresTagItem { return null; } } - - @Override - public void addRequiredNbt(GeyserSession session, @Nullable DataComponents components, BedrockItemBuilder builder) { - if (components != null) { - Fireworks fireworks = components.get(DataComponentType.FIREWORKS); - if (fireworks != null) { - // Already translated - return; - } - } - - NbtMapBuilder fireworksNbt = NbtMap.builder(); - fireworksNbt.putByte("Flight", (byte) 1); - fireworksNbt.put("Explosions", NbtList.EMPTY); - builder.putCompound("Fireworks", fireworksNbt.build()); - } } 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 0155c4e35..7f0d9099e 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 @@ -62,23 +62,16 @@ public class Item { private static final Map<Block, Item> BLOCK_TO_ITEM = new HashMap<>(); protected final Key javaIdentifier; private int javaId = -1; - - // TODO remove these - private final int stackSize; private final int attackDamage; - private final int maxDamage; - private final Rarity rarity; - private final boolean glint; + private final DataComponents baseComponents; - private DataComponents dataComponents; + private final List<Item> enchantmentGlintPresent = List.of(Items.ENCHANTED_GOLDEN_APPLE, Items.EXPERIENCE_BOTTLE, Items.WRITTEN_BOOK, + Items.NETHER_STAR, Items.ENCHANTED_BOOK, Items.END_CRYSTAL); public Item(String javaIdentifier, Builder builder) { this.javaIdentifier = MinecraftKey.key(javaIdentifier); - this.stackSize = builder.stackSize; - this.maxDamage = builder.maxDamage; + this.baseComponents = builder.components; this.attackDamage = builder.attackDamage; - this.rarity = builder.rarity; - this.glint = builder.glint; } public String javaIdentifier() { @@ -89,24 +82,28 @@ public class Item { return javaId; } - public int maxDamage() { - return dataComponents.getOrDefault(DataComponentType.MAX_DAMAGE, 0); + public int defaultMaxDamage() { + return baseComponents.getOrDefault(DataComponentType.MAX_DAMAGE, 0); } - public int attackDamage() { + public int defaultAttackDamage() { return attackDamage; } - public int maxStackSize() { - return dataComponents.getOrDefault(DataComponentType.MAX_STACK_SIZE, 1); + public int defaultMaxStackSize() { + return baseComponents.getOrDefault(DataComponentType.MAX_STACK_SIZE, 1); } - public Rarity rarity() { - return rarity; + public Rarity defaultRarity() { + return Rarity.fromId(baseComponents.getOrDefault(DataComponentType.RARITY, 0)); } - public boolean glint() { - return glint; + public DataComponents gatherComponents(DataComponents others) { + if (others == null) return baseComponents.clone(); + + DataComponents components = baseComponents.clone(); + components.getDataComponents().putAll(others.getDataComponents()); + return components; } public boolean isValidRepairItem(Item other) { @@ -295,32 +292,28 @@ public class Item { } public static Builder builder() { - return new Builder(); + return new Builder().components(new DataComponents(new HashMap<>())); // TODO actually set components here } public static final class Builder { - private int stackSize = 64; - private int maxDamage; + private DataComponents components; private int attackDamage; - private Rarity rarity = Rarity.COMMON; - private boolean glint = false; - - public Builder stackSize(int stackSize) { - this.stackSize = stackSize; - return this; - } public Builder attackDamage(double attackDamage) { - // TODO properly store/send a double value once Bedrock supports it.. pls + // Bedrock edition does not support attack damage being a double this.attackDamage = (int) attackDamage; return this; } - public Builder maxDamage(int maxDamage) { - this.maxDamage = maxDamage; + public Builder components(DataComponents components) { + this.components = components; return this; } + public DataComponents components() { + return this.components; + } + private Builder() { } } 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 0a9c93980..ec094ea31 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 @@ -48,6 +48,8 @@ import org.geysermc.geyser.registry.mappings.MappingsConfigReader; import org.geysermc.geyser.registry.type.GeyserMappingItem; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.NonVanillaItemRegistration; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import java.util.*; @@ -129,10 +131,11 @@ public class CustomItemRegistryPopulator { Set<String> repairMaterials = customItemData.repairMaterials(); - Item.Builder itemBuilder = Item.builder() - .stackSize(customItemData.stackSize()) - .maxDamage(customItemData.maxDamage()); - Item item = new Item(customIdentifier, itemBuilder) { + DataComponents components = new DataComponents(new HashMap<>()); + components.put(DataComponentType.MAX_STACK_SIZE, customItemData.stackSize()); + components.put(DataComponentType.MAX_DAMAGE, customItemData.maxDamage()); + + Item item = new Item(customIdentifier, Item.builder().components(components)) { @Override public boolean isValidRepairItem(Item other) { return repairMaterials != null && repairMaterials.contains(other.javaIdentifier()); @@ -167,11 +170,11 @@ public class CustomItemRegistryPopulator { NbtMapBuilder itemProperties = NbtMap.builder(); NbtMapBuilder componentBuilder = NbtMap.builder(); - setupBasicItemInfo(javaItem.maxDamage(), javaItem.maxStackSize(), mapping.getToolType() != null || customItemData.displayHandheld(), customItemData, itemProperties, componentBuilder, protocolVersion); + setupBasicItemInfo(javaItem.defaultMaxDamage(), javaItem.defaultMaxStackSize(), 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. - canDestroyInCreative = computeToolProperties(mapping.getToolType(), itemProperties, componentBuilder, javaItem.attackDamage()); + canDestroyInCreative = computeToolProperties(mapping.getToolType(), itemProperties, componentBuilder, javaItem.defaultAttackDamage()); } itemProperties.putBoolean("can_destroy_in_creative", canDestroyInCreative); 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 1da3b0e66..b4c963578 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 @@ -447,7 +447,7 @@ public class ItemRegistryPopulator { } } - if (javaOnlyItems.contains(javaItem) || javaItem.rarity() != Rarity.COMMON) { + if (javaOnlyItems.contains(javaItem) || javaItem.defaultRarity() != Rarity.COMMON) { // These items don't exist on Bedrock, so set up a variable that indicates they should have custom names // Or, ensure that we are translating these at all times to account for rarity colouring mappingBuilder = mappingBuilder.translationString((javaItem instanceof BlockItem ? "block." : "item.") + entry.getKey().replace(":", ".")); diff --git a/core/src/main/java/org/geysermc/geyser/translator/item/CustomItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/item/CustomItemTranslator.java index b65b06431..fdc90c215 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/item/CustomItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/item/CustomItemTranslator.java @@ -62,7 +62,7 @@ public final class CustomItemTranslator { } } - boolean checkDamage = mapping.getJavaItem().maxDamage() > 0; + boolean checkDamage = mapping.getJavaItem().defaultMaxDamage() > 0; int damage = !checkDamage ? 0 : components.getOrDefault(DataComponentType.DAMAGE, 0); boolean unbreakable = checkDamage && !isDamaged(components, damage); diff --git a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java index 3cfd00233..062666f84 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java @@ -40,7 +40,6 @@ import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.components.Rarity; -import org.geysermc.geyser.item.type.BedrockRequiresTagItem; import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.level.block.type.Block; import org.geysermc.geyser.registry.BlockRegistries; @@ -150,42 +149,24 @@ public final class ItemTranslator { public static ItemData.@NonNull Builder translateToBedrock(GeyserSession session, Item javaItem, ItemMapping bedrockItem, int count, @Nullable DataComponents components) { BedrockItemBuilder nbtBuilder = new BedrockItemBuilder(); - boolean hideTooltips = false; - if (components != null) { - javaItem.translateComponentsToBedrock(session, components, nbtBuilder); - if (components.get(DataComponentType.HIDE_TOOLTIP) != null) hideTooltips = true; - } + // Populates default components that aren't sent over the network + components = javaItem.gatherComponents(components); - // Fixes fireworks crafting recipe: they always contain a tag - // TODO remove once all items have their default components - if (javaItem instanceof BedrockRequiresTagItem requiresTagItem) { - requiresTagItem.addRequiredNbt(session, components, nbtBuilder); - } - - Rarity rarity = javaItem.rarity(); - boolean enchantmentGlint = javaItem.glint(); - if (components != null) { - Integer rarityIndex = components.get(DataComponentType.RARITY); - if (rarityIndex != null) { - rarity = Rarity.fromId(rarityIndex); - } - Boolean enchantmentGlintOverride = components.get(DataComponentType.ENCHANTMENT_GLINT_OVERRIDE); - if (enchantmentGlintOverride != null) { - enchantmentGlint = enchantmentGlintOverride; - } - } + // Translate item-specific components + javaItem.translateComponentsToBedrock(session, components, nbtBuilder); + Rarity rarity = Rarity.fromId(components.getOrDefault(DataComponentType.RARITY, 0)); String customName = getCustomName(session, components, bedrockItem, rarity.getColor()); if (customName != null) { nbtBuilder.setCustomName(customName); } - if (components != null) { - ItemAttributeModifiers attributeModifiers = components.get(DataComponentType.ATTRIBUTE_MODIFIERS); - if (attributeModifiers != null && attributeModifiers.isShowInTooltip() && !hideTooltips) { - // only add if attribute modifiers do not indicate to hide them - addAttributeLore(attributeModifiers, nbtBuilder, session.locale()); - } + boolean hideTooltips = components.get(DataComponentType.HIDE_TOOLTIP) != null; + + ItemAttributeModifiers attributeModifiers = components.get(DataComponentType.ATTRIBUTE_MODIFIERS); + if (attributeModifiers != null && attributeModifiers.isShowInTooltip() && !hideTooltips) { + // only add if attribute modifiers do not indicate to hide them + addAttributeLore(attributeModifiers, nbtBuilder, session.locale()); } if (session.isAdvancedTooltips() && !hideTooltips) { @@ -193,7 +174,7 @@ public final class ItemTranslator { } // Add enchantment override. We can't remove it - enchantments would stop showing - but we can add it. - if (enchantmentGlint) { + if (components.getOrDefault(DataComponentType.ENCHANTMENT_GLINT_OVERRIDE, false)) { NbtMapBuilder nbtMapBuilder = nbtBuilder.getOrCreateNbt(); nbtMapBuilder.putIfAbsent("ench", NbtList.EMPTY); } @@ -217,18 +198,16 @@ public final class ItemTranslator { translateCustomItem(components, builder, bedrockItem); - if (components != null) { - // Translate the canDestroy and canPlaceOn Java components - AdventureModePredicate canDestroy = components.get(DataComponentType.CAN_BREAK); - AdventureModePredicate canPlaceOn = components.get(DataComponentType.CAN_PLACE_ON); - String[] canBreak = getCanModify(session, canDestroy); - String[] canPlace = getCanModify(session, canPlaceOn); - if (canBreak != null) { - builder.canBreak(canBreak); - } - if (canPlace != null) { - builder.canPlace(canPlace); - } + // Translate the canDestroy and canPlaceOn Java components + AdventureModePredicate canDestroy = components.get(DataComponentType.CAN_BREAK); + AdventureModePredicate canPlaceOn = components.get(DataComponentType.CAN_PLACE_ON); + String[] canBreak = getCanModify(session, canDestroy); + String[] canPlace = getCanModify(session, canPlaceOn); + if (canBreak != null) { + builder.canBreak(canBreak); + } + if (canPlace != null) { + builder.canPlace(canPlace); } return builder; @@ -325,7 +304,7 @@ public final class ItemTranslator { } private static void addAdvancedTooltips(@Nullable DataComponents components, BedrockItemBuilder builder, Item item, String language) { - int maxDurability = item.maxDamage(); + int maxDurability = item.defaultMaxDamage(); if (maxDurability != 0 && components != null) { Integer durabilityComponent = components.get(DataComponentType.DAMAGE); 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 94368a6d4..ee4d7b3d5 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 @@ -27,18 +27,14 @@ package org.geysermc.geyser.translator.protocol.bedrock; import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.protocol.bedrock.packet.BlockPickRequestPacket; -import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.type.ItemFrameEntity; -import org.geysermc.geyser.item.Items; import org.geysermc.geyser.level.block.Blocks; -import org.geysermc.geyser.level.block.type.BannerBlock; import org.geysermc.geyser.level.block.type.BlockState; -import org.geysermc.geyser.level.block.type.SkullBlock; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; -import org.geysermc.geyser.util.InventoryUtils; -import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundPickItemFromBlockPacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundPickItemFromEntityPacket; @Translator(packet = BlockPickRequestPacket.class) public class BedrockBlockPickRequestTranslator extends PacketTranslator<BlockPickRequestPacket> { @@ -52,42 +48,14 @@ public class BedrockBlockPickRequestTranslator extends PacketTranslator<BlockPic if (blockToPick.is(Blocks.AIR)) { // Check for an item frame since the client thinks that's a block when it's an entity in Java ItemFrameEntity entity = ItemFrameEntity.getItemFrameEntity(session, packet.getBlockPosition()); + if (entity != null) { - // Check to see if the item frame has an item in it first - if (!InventoryUtils.isEmpty(entity.getHeldItem())) { - // Grab the item in the frame - InventoryUtils.findOrCreateItem(session, entity.getHeldItem()); - } else { - // Grab the frame as the item - InventoryUtils.findOrCreateItem(session, entity.getDefinition() == EntityDefinitions.GLOW_ITEM_FRAME ? Items.GLOW_ITEM_FRAME : Items.ITEM_FRAME); - } + session.sendDownstreamGamePacket(new ServerboundPickItemFromEntityPacket(entity.javaId(), packet.isAddUserData())); } return; } boolean addExtraData = packet.isAddUserData() && blockToPick.block().hasBlockEntity(); // Holding down CTRL - if (session.isInstabuild() && addExtraData && blockToPick.block() instanceof SkullBlock skull) { - InventoryUtils.findOrCreateItem(session, skull.pickItem(session, blockToPick, vector)); - return; - } - if (blockToPick.block() instanceof BannerBlock) { - session.getGeyser().getWorldManager().getPickItemComponents(session, vector.getX(), vector.getY(), vector.getZ(), addExtraData) - .whenComplete((components, ex) -> session.ensureInEventLoop(() -> { - if (components == null) { - pickItem(session, blockToPick); - return; - } - - ItemStack itemStack = new ItemStack(blockToPick.block().asItem().javaId(), 1, components); - InventoryUtils.findOrCreateItem(session, itemStack); - })); - return; - } - - pickItem(session, blockToPick); - } - - private void pickItem(GeyserSession session, BlockState state) { - InventoryUtils.findOrCreateItem(session, state.block().pickItem(state)); + session.sendDownstreamGamePacket(new ServerboundPickItemFromBlockPacket(vector, addExtraData)); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEntityPickRequestTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEntityPickRequestTranslator.java index acb8573fb..2368e1ad7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEntityPickRequestTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEntityPickRequestTranslator.java @@ -26,15 +26,11 @@ package org.geysermc.geyser.translator.protocol.bedrock; import org.cloudburstmc.protocol.bedrock.packet.EntityPickRequestPacket; -import org.geysermc.geyser.entity.type.BoatEntity; import org.geysermc.geyser.entity.type.Entity; -import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; -import org.geysermc.geyser.util.InventoryUtils; - -import java.util.Locale; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundPickItemFromEntityPacket; /** * Called when the Bedrock user uses the pick block button on an entity @@ -49,35 +45,8 @@ public class BedrockEntityPickRequestTranslator extends PacketTranslator<EntityP return; } Entity entity = session.getEntityCache().getEntityByGeyserId(packet.getRuntimeEntityId()); - if (entity == null) return; - - if (entity instanceof BoatEntity boat) { - InventoryUtils.findOrCreateItem(session, boat.getPickItem()); - return; + if (entity != null) { + session.sendDownstreamGamePacket(new ServerboundPickItemFromEntityPacket(entity.javaId(), false)); } - - // Get the corresponding item - String itemName; - switch (entity.getDefinition().entityType()) { - case LEASH_KNOT -> itemName = "lead"; - case CHEST_MINECART, COMMAND_BLOCK_MINECART, FURNACE_MINECART, HOPPER_MINECART, TNT_MINECART -> - // The Bedrock identifier matches the item name which moves MINECART to the end of the name - // TODO test - itemName = entity.getDefinition().identifier(); - case SPAWNER_MINECART -> itemName = "minecart"; // Turns into a normal minecart - //case ITEM_FRAME -> Not an entity in Bedrock Edition - //case GLOW_ITEM_FRAME -> - case ARMOR_STAND, END_CRYSTAL, MINECART, PAINTING -> - // No spawn egg, just an item - itemName = entity.getDefinition().entityType().toString().toLowerCase(Locale.ROOT); - default -> itemName = entity.getDefinition().entityType().toString().toLowerCase(Locale.ROOT) + "_spawn_egg"; - } - - String fullItemName = "minecraft:" + itemName; - ItemMapping mapping = session.getItemMappings().getMapping(fullItemName); - // Verify it is, indeed, an item - if (mapping == null) return; - - InventoryUtils.findOrCreateItem(session, fullItemName); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaMerchantOffersTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaMerchantOffersTranslator.java index 970061436..e4ff0539f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaMerchantOffersTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaMerchantOffersTranslator.java @@ -173,7 +173,7 @@ public class JavaMerchantOffersTranslator extends PacketTranslator<ClientboundMe // Bedrock expects all price adjustments to be applied to the item's count int count = stack.getAmount() + ((int) Math.max(Math.floor(stack.getAmount() * demand * priceMultiplier), 0)) + specialPrice; - count = MathUtils.constrain(count, 1, Registries.JAVA_ITEMS.get().get(stack.getId()).maxStackSize()); + count = MathUtils.constrain(count, 1, Registries.JAVA_ITEMS.get().get(stack.getId()).defaultMaxStackSize()); return getItemTag(session, stack, mapping, count); } 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 df0450ce6..14a64d57a 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java @@ -34,19 +34,16 @@ import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket; -import org.cloudburstmc.protocol.bedrock.packet.PlayerHotbarPacket; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.inventory.Container; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.LecternContainer; -import org.geysermc.geyser.inventory.PlayerInventory; import org.geysermc.geyser.inventory.click.Click; import org.geysermc.geyser.inventory.recipe.GeyserRecipe; import org.geysermc.geyser.inventory.recipe.GeyserShapedRecipe; import org.geysermc.geyser.inventory.recipe.GeyserShapelessRecipe; import org.geysermc.geyser.item.Items; -import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.level.BedrockDimension; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.type.ItemMappings; @@ -58,7 +55,6 @@ import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.translator.inventory.InventoryTranslator; import org.geysermc.geyser.translator.inventory.LecternInventoryTranslator; import org.geysermc.geyser.translator.inventory.chest.DoubleChestInventoryTranslator; -import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.CompositeSlotDisplay; @@ -69,7 +65,6 @@ import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDis import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.TagSlotDisplay; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.WithRemainderSlotDisplay; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundContainerClosePacket; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundSetCreativeModeSlotPacket; import org.jetbrains.annotations.Contract; import java.util.ArrayList; @@ -270,171 +265,6 @@ public class InventoryUtils { .count(1).build(); } - /** - * See {@link #findOrCreateItem(GeyserSession, String)}. This is for finding a specified {@link ItemStack}. - * - * @param session the Bedrock client's session - * @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) { - if (isEmpty(itemStack)) { - return; - } - PlayerInventory inventory = session.getPlayerInventory(); - - // Check hotbar for item - for (int i = 36; i < 45; i++) { - GeyserItemStack geyserItem = inventory.getItem(i); - if (geyserItem.isEmpty()) { - continue; - } - // If this is the item we're looking for - if (geyserItem.getJavaId() == itemStack.getId() && Objects.equals(geyserItem.getComponents(), itemStack.getDataComponents())) { //TODO verify - setHotbarItem(session, i); - // Don't check inventory if item was in hotbar - return; - } - } - - // Check inventory for item - for (int i = 9; i < 36; i++) { - GeyserItemStack geyserItem = inventory.getItem(i); - if (geyserItem.isEmpty()) { - continue; - } - // If this is the item we're looking for - if (geyserItem.getJavaId() == itemStack.getId() && Objects.equals(geyserItem.getComponents(), itemStack.getDataComponents())) { //TODO verify - //ServerboundPickItemFromBlockPacket packetToSend = new ServerboundPickItemFromBlockPacket(i); // https://wiki.vg/Protocol#Pick_Item - //session.sendDownstreamGamePacket(packetToSend); - // TODO 1.21.4 - return; - } - } - - // If we still have not found the item, and we're in creative, ask for the item from the server. - if (session.getGameMode() == GameMode.CREATIVE) { - setPickedItem(session, inventory, GeyserItemStack.from(itemStack)); - } - } - - // Please remove!!! - public static void findOrCreateItem(GeyserSession session, String itemName) { - findOrCreateItem(session, Registries.JAVA_ITEM_IDENTIFIERS.getOrDefault(itemName, Items.AIR)); - } - - /** - * Attempt to find the specified item name in the session's inventory. - * If it is found and in the hotbar, set the user's held item to that slot. - * 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. - * <p> - * This attempts to mimic Java Edition behavior as best as it can. - * @param session the Bedrock client's session - * @param item the Java item to search/select for - */ - public static void findOrCreateItem(GeyserSession session, Item item) { - // Get the inventory to choose a slot to pick - PlayerInventory inventory = session.getPlayerInventory(); - - if (item == Items.AIR) { - return; - } - - // Check hotbar for item - for (int i = 36; i < 45; i++) { - GeyserItemStack geyserItem = inventory.getItem(i); - if (geyserItem.isEmpty()) { - continue; - } - // If this isn't the item we're looking for - if (!geyserItem.asItem().equals(item)) { - continue; - } - - setHotbarItem(session, i); - // Don't check inventory if item was in hotbar - return; - } - - // Check inventory for item - for (int i = 9; i < 36; i++) { - GeyserItemStack geyserItem = inventory.getItem(i); - if (geyserItem.isEmpty()) { - continue; - } - // If this isn't the item we're looking for - if (!geyserItem.asItem().equals(item)) { - continue; - } - - // TODO 1.21.4 - //ServerboundPickItemPacket packetToSend = new ServerboundPickItemPacket(i); // https://wiki.vg/Protocol#Pick_Item - //session.sendDownstreamGamePacket(packetToSend); - return; - } - - // If we still have not found the item, and we're in creative, set the item ourselves. - if (session.getGameMode() == GameMode.CREATIVE) { - GeyserItemStack itemStack = item.newItemStack(1, null); - setPickedItem(session, inventory, itemStack); - } - } - - private static void setPickedItem(GeyserSession session, PlayerInventory inventory, GeyserItemStack itemStack) { - // Try to find an empty hotbar slot. - int slot = inventory.getHeldItemSlot() + 36; - if (!inventory.getItemInHand().isEmpty()) { // Otherwise we should just use the current slot - for (int i = 36; i < 45; i++) { - if (inventory.getItem(i).isEmpty()) { - slot = i; - break; - } - } - } - GeyserItemStack existingItem = inventory.getItem(slot); - if (!existingItem.isEmpty()) { - // Try to move the item to another slot. - for (int i = 9; i < 36; i++) { - if (inventory.getItem(i).isEmpty()) { - inventory.setItem(i, existingItem, session); - InventoryTranslator.PLAYER_INVENTORY_TRANSLATOR.updateSlot(session, inventory, i); - - ServerboundSetCreativeModeSlotPacket actionPacket = new ServerboundSetCreativeModeSlotPacket((short) i, - existingItem.getItemStack()); - session.sendDownstreamGamePacket(actionPacket); - break; - } - } - } - - // As of 1.21.3 - the client does this on its own end and the server doesn't send a slot response back. - inventory.setItem(slot, itemStack, session); - InventoryTranslator.PLAYER_INVENTORY_TRANSLATOR.updateSlot(session, inventory, slot); - - ServerboundSetCreativeModeSlotPacket actionPacket = new ServerboundSetCreativeModeSlotPacket((short) slot, - itemStack.getItemStack()); - if ((slot - 36) != inventory.getHeldItemSlot()) { - setHotbarItem(session, slot); - } - session.sendDownstreamGamePacket(actionPacket); - } - - /** - * Changes the held item slot to the specified slot - * @param session GeyserSession - * @param slot inventory slot to be selected - */ - private static void setHotbarItem(GeyserSession session, int slot) { - PlayerHotbarPacket hotbarPacket = new PlayerHotbarPacket(); - hotbarPacket.setContainerId(0); - // Java inventory slot to hotbar slot ID - hotbarPacket.setSelectedHotbarSlot(slot - 36); - hotbarPacket.setSelectHotbarSlot(true); - session.sendUpstreamPacket(hotbarPacket); - // No need to send a Java packet as Bedrock sends a confirmation packet back that we translate - } - @Nullable public static Click getClickForHotbarSwap(int slot) { return switch (slot) { From 1eedf1987c786115dee571e5198a69bd93cb0601 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Sun, 1 Dec 2024 11:50:52 -0500 Subject: [PATCH 082/165] Fix #5150 --- .../java/JavaUpdateRecipesTranslator.java | 20 +++++++------------ 1 file changed, 7 insertions(+), 13 deletions(-) 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 7ea66e0a3..3872321af 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 @@ -43,7 +43,6 @@ import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.inventory.recipe.GeyserStonecutterData; import org.geysermc.geyser.inventory.recipe.TrimRecipe; import org.geysermc.geyser.item.Items; -import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.item.ItemTranslator; @@ -58,7 +57,6 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.Clientbound import java.util.ArrayList; import java.util.Collections; -import java.util.Comparator; import java.util.List; import java.util.Objects; import java.util.UUID; @@ -117,7 +115,7 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator<ClientboundUpd session.getGeyser().getLogger().debug("Using old smithing table workaround? " + oldSmithingTable); session.setOldSmithingTable(oldSmithingTable); - Int2ObjectMap<List<SelectableRecipe>> unsortedStonecutterData = new Int2ObjectOpenHashMap<>(); + Int2ObjectMap<List<SelectableRecipe>> rawStonecutterData = new Int2ObjectOpenHashMap<>(); List<SelectableRecipe> stonecutterRecipes = packet.getStonecutterRecipes(); for (SelectableRecipe recipe : stonecutterRecipes) { @@ -131,19 +129,15 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator<ClientboundUpd session.getGeyser().getLogger().debug("Ignoring stonecutter recipe for weird output: " + recipe); continue; } - unsortedStonecutterData.computeIfAbsent(ingredient.getHolders()[0], $ -> new ArrayList<>()).add(recipe); + rawStonecutterData.computeIfAbsent(ingredient.getHolders()[0], $ -> new ArrayList<>()).add(recipe); } Int2ObjectMap<GeyserStonecutterData> stonecutterRecipeMap = new Int2ObjectOpenHashMap<>(); - for (Int2ObjectMap.Entry<List<SelectableRecipe>> data : unsortedStonecutterData.int2ObjectEntrySet()) { - // Sort the list by each output item's Java identifier - this is how it's sorted on Java, and therefore - // We can get the correct order for button pressing - data.getValue().sort(Comparator.comparing((stoneCuttingRecipeData -> - Registries.JAVA_ITEMS.get().get(((ItemStackSlotDisplay) stoneCuttingRecipeData.recipe()).itemStack().getId()) - // See RecipeManager#getRecipesFor as of 1.21 - .translationKey()))); - - // Now that it's sorted, let's translate these recipes + for (Int2ObjectMap.Entry<List<SelectableRecipe>> data : rawStonecutterData.int2ObjectEntrySet()) { + // Implementation note: data used to have to be sorted according to the item translation key. + // This is no longer necessary as of 1.21.2, and is instead presented in the order the server sends us. + // (Recipes are ordered differently between Paper and vanilla) + // See #5150. int buttonId = 0; for (SelectableRecipe recipe : data.getValue()) { // As of 1.16.4, all stonecutter recipes have one ingredient option From 48ae28432e2e0015889844cc5c6d4001851966a8 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Mon, 2 Dec 2024 02:23:02 +0800 Subject: [PATCH 083/165] More changes - remove getPickItemComponents in WorldManager, separate additional and base component --- .../mod/world/GeyserModWorldManager.java | 72 ------------------- .../manager/GeyserSpigotWorldManager.java | 19 ----- .../living/animal/tameable/WolfEntity.java | 25 ++++--- .../geyser/inventory/AnvilContainer.java | 10 +-- .../geyser/inventory/GeyserItemStack.java | 58 ++++++++------- .../updater/AnvilInventoryUpdater.java | 37 ++++++---- .../java/org/geysermc/geyser/item/Items.java | 4 -- .../org/geysermc/geyser/item/type/Item.java | 28 ++++---- .../geyser/level/GeyserWorldManager.java | 20 ------ .../geysermc/geyser/level/WorldManager.java | 10 --- .../geyser/session/cache/TagCache.java | 6 +- .../session/cache/tags/GeyserHolderSet.java | 30 ++++++-- .../geyser/skin/FakeHeadProvider.java | 15 ++-- .../inventory/InventoryTranslator.java | 14 ++-- .../inventory/LecternInventoryTranslator.java | 7 +- .../inventory/LoomInventoryTranslator.java | 11 +-- .../inventory/PlayerInventoryTranslator.java | 9 +-- .../translator/item/ItemTranslator.java | 58 +++++++-------- .../bedrock/BedrockBookEditTranslator.java | 2 +- .../org/geysermc/geyser/util/BlockUtils.java | 5 +- .../org/geysermc/geyser/util/ItemUtils.java | 12 ---- 21 files changed, 176 insertions(+), 276 deletions(-) diff --git a/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/world/GeyserModWorldManager.java b/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/world/GeyserModWorldManager.java index f85b6e079..f791aab7a 100644 --- a/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/world/GeyserModWorldManager.java +++ b/bootstrap/mod/src/main/java/org/geysermc/geyser/platform/mod/world/GeyserModWorldManager.java @@ -28,37 +28,24 @@ package org.geysermc.geyser.platform.mod.world; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.minecraft.SharedConstants; import net.minecraft.core.BlockPos; -import net.minecraft.core.RegistryAccess; -import net.minecraft.core.component.DataComponents; import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.network.chat.Component; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerChunkCache; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.entity.BannerBlockEntity; -import net.minecraft.world.level.block.entity.BannerPatternLayers; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.DecoratedPotBlockEntity; import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.level.chunk.LevelChunkSection; -import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3i; import org.geysermc.geyser.level.GeyserWorldManager; import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.util.MinecraftKey; -import org.geysermc.mcprotocollib.protocol.data.game.Holder; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.BannerPatternLayer; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; -import java.util.HashMap; import java.util.List; -import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; public class GeyserModWorldManager extends GeyserWorldManager { @@ -117,49 +104,6 @@ public class GeyserModWorldManager extends GeyserWorldManager { return GameMode.byId(server.getDefaultGameType().getId()); } - @NonNull - @Override - public CompletableFuture<org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents> getPickItemComponents(GeyserSession session, int x, int y, int z, boolean addNbtData) { - CompletableFuture<org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents> future = new CompletableFuture<>(); - server.execute(() -> { - ServerPlayer player = getPlayer(session); - if (player == null) { - future.complete(null); - return; - } - - 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* - // the banner might have a custom name, both of which a Java client knows and caches - ItemStack itemStack = banner.getItem(); - - org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents components = - new org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents(new HashMap<>()); - - components.put(DataComponentType.DAMAGE, itemStack.getDamageValue()); - - Component customName = itemStack.getComponents().get(DataComponents.CUSTOM_NAME); - if (customName != null) { - components.put(DataComponentType.CUSTOM_NAME, toKyoriComponent(customName)); - } - - BannerPatternLayers pattern = itemStack.get(DataComponents.BANNER_PATTERNS); - if (pattern != null) { - components.put(DataComponentType.BANNER_PATTERNS, toPatternList(pattern)); - } - - future.complete(components); - return; - } - future.complete(null); - }); - return future; - } - @Override public void getDecoratedPotData(GeyserSession session, Vector3i pos, Consumer<List<String>> apply) { server.execute(() -> { @@ -184,20 +128,4 @@ public class GeyserModWorldManager extends GeyserWorldManager { private ServerPlayer getPlayer(GeyserSession session) { return server.getPlayerList().getPlayer(session.getPlayerEntity().getUuid()); } - - private static net.kyori.adventure.text.Component toKyoriComponent(Component component) { - String json = Component.Serializer.toJson(component, RegistryAccess.EMPTY); - return GSON_SERIALIZER.deserializeOr(json, net.kyori.adventure.text.Component.empty()); - } - - private static List<BannerPatternLayer> toPatternList(BannerPatternLayers patternLayers) { - return patternLayers.layers().stream() - .map(layer -> { - BannerPatternLayer.BannerPattern pattern = new BannerPatternLayer.BannerPattern( - MinecraftKey.key(layer.pattern().value().assetId().toString()), layer.pattern().value().translationKey() - ); - return new BannerPatternLayer(Holder.ofCustom(pattern), layer.color().getId()); - }) - .toList(); - } } 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 6588a22a3..54b5b9178 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 @@ -25,18 +25,14 @@ package org.geysermc.geyser.platform.spigot.world.manager; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.DecoratedPot; 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.math.vector.Vector3i; 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; @@ -44,7 +40,6 @@ import org.geysermc.geyser.level.WorldManager; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import java.util.List; import java.util.Objects; @@ -128,20 +123,6 @@ public class GeyserSpigotWorldManager extends WorldManager { return GameMode.byId(Bukkit.getDefaultGameMode().ordinal()); } - @Override - public @NonNull CompletableFuture<@Nullable DataComponents> getPickItemComponents(GeyserSession session, int x, int y, int z, boolean addNbtData) { - Player bukkitPlayer; - if ((bukkitPlayer = Bukkit.getPlayer(session.getPlayerEntity().getUuid())) == null) { - return CompletableFuture.completedFuture(null); - } - CompletableFuture<Int2ObjectMap<byte[]>> future = new CompletableFuture<>(); - Block block = bukkitPlayer.getWorld().getBlockAt(x, y, z); - // Paper 1.19.3 complains about async access otherwise. - // java.lang.IllegalStateException: Tile is null, asynchronous access? - SchedulerUtils.runTask(this.plugin, () -> future.complete(PickBlockUtils.pickBlock(block)), block); - return future.thenApply(RAW_TRANSFORMER); - } - public void getDecoratedPotData(GeyserSession session, Vector3i pos, Consumer<List<String>> apply) { Player bukkitPlayer; if ((bukkitPlayer = Bukkit.getPlayer(session.getPlayerEntity().getUuid())) == null) { 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 f0b554ef9..67e5788c6 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 @@ -38,6 +38,8 @@ import org.geysermc.geyser.item.enchantment.EnchantmentComponent; import org.geysermc.geyser.item.type.DyeItem; import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.session.cache.registry.JavaRegistries; +import org.geysermc.geyser.session.cache.tags.GeyserHolderSet; import org.geysermc.geyser.session.cache.tags.ItemTag; import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.util.InteractionResult; @@ -51,6 +53,8 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.Object import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; import java.util.Collections; import java.util.Locale; @@ -58,7 +62,7 @@ import java.util.UUID; public class WolfEntity extends TameableEntity { private byte collarColor = 14; // Red - default - + private GeyserHolderSet<Item> repairableItems = null; private boolean isCurseOfBinding = false; public WolfEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) { @@ -123,9 +127,11 @@ public class WolfEntity extends TameableEntity { } @Override - public void setChestplate(ItemStack stack) { - super.setChestplate(stack); - isCurseOfBinding = ItemUtils.hasEffect(session, stack, EnchantmentComponent.PREVENT_ARMOR_CHANGE); // TODO test + public void setBody(ItemStack stack) { + super.setBody(stack); + isCurseOfBinding = ItemUtils.hasEffect(session, stack, EnchantmentComponent.PREVENT_ARMOR_CHANGE); + HolderSet set = GeyserItemStack.from(stack).getComponent(DataComponentType.REPAIRABLE); + repairableItems = GeyserHolderSet.convertHolderSet(JavaRegistries.ITEM, set); } @Override @@ -152,16 +158,17 @@ public class WolfEntity extends TameableEntity { return super.testMobInteraction(hand, itemInHand); } } - if (itemInHand.asItem() == Items.WOLF_ARMOR && !this.chestplate.isValid() && !getFlag(EntityFlag.BABY)) { + if (itemInHand.asItem() == Items.WOLF_ARMOR && !this.body.isValid() && !getFlag(EntityFlag.BABY)) { return InteractiveTag.EQUIP_WOLF_ARMOR; } - if (itemInHand.asItem() == Items.SHEARS && this.chestplate.isValid() + if (itemInHand.asItem() == Items.SHEARS && this.body.isValid() && (!isCurseOfBinding || session.getGameMode().equals(GameMode.CREATIVE))) { return InteractiveTag.REMOVE_WOLF_ARMOR; } - if (Items.WOLF_ARMOR.isValidRepairItem(itemInHand.asItem()) && getFlag(EntityFlag.SITTING) && - this.chestplate.isValid() && this.chestplate.getTag() != null && - this.chestplate.getTag().getInt("Damage") > 0) { + if (getFlag(EntityFlag.SITTING) && + session.getTagCache().is(repairableItems, itemInHand.asItem()) && + this.body.isValid() && this.body.getTag() != null && + this.body.getTag().getInt("Damage") > 0) { return InteractiveTag.REPAIR_WOLF_ARMOR; } // Tamed and owned by player - can sit/stand 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 45a062468..f5969efbb 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/AnvilContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/AnvilContainer.java @@ -25,15 +25,15 @@ package org.geysermc.geyser.inventory; -import net.kyori.adventure.text.Component; -import org.geysermc.mcprotocollib.protocol.data.game.inventory.ContainerType; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundRenameItemPacket; import lombok.Getter; import lombok.Setter; +import net.kyori.adventure.text.Component; 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 org.geysermc.mcprotocollib.protocol.data.game.inventory.ContainerType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundRenameItemPacket; /** * Used to determine if rename packets should be sent and stores @@ -73,7 +73,7 @@ public class AnvilContainer extends Container { String correctRename; newName = rename; - Component originalName = ItemUtils.getCustomName(getInput().getComponents()); + Component originalName = getInput().getComponent(DataComponentType.CUSTOM_NAME); String plainOriginalName = MessageTranslator.convertToPlainText(originalName, session.locale()); String plainNewName = MessageTranslator.convertToPlainText(rename); 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 256de7799..c595ea1b5 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java @@ -25,7 +25,11 @@ package org.geysermc.geyser.inventory; -import lombok.*; +import lombok.AccessLevel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; @@ -104,10 +108,27 @@ public class GeyserItemStack { return isEmpty() ? 0 : amount; } + /** + * Returns all components of this item - base and additional components sent over the network. + * These are NOT modifiable! To add components, use {@link #getOrCreateComponents()}. + * + * @return the item's base data components and the "additional" ones that may exist. + */ + public @Nullable DataComponents getAllComponents() { + return isEmpty() ? null : asItem().gatherComponents(components); + } + + /** + * @return the {@link DataComponents} that aren't the base/default components. + */ public @Nullable DataComponents getComponents() { return isEmpty() ? null : components; } + public boolean hasNonBaseComponents() { + return components != null; + } + @NonNull public DataComponents getOrCreateComponents() { if (components == null) { @@ -119,33 +140,20 @@ public class GeyserItemStack { @Nullable public <T> T getComponent(@NonNull DataComponentType<T> type) { if (components == null) { - return null; + return asItem().getComponent(type); } - return components.get(type); + + T value = components.get(type); + if (value == null) { + return asItem().getComponent(type); + } + + return value; } - public <T extends Boolean> boolean getComponent(@NonNull DataComponentType<T> type, boolean def) { - if (components == null) { - return def; - } - - Boolean result = components.get(type); - if (result != null) { - return result; - } - return def; - } - - public <T extends Integer> int getComponent(@NonNull DataComponentType<T> type, int def) { - if (components == null) { - return def; - } - - Integer result = components.get(type); - if (result != null) { - return result; - } - return def; + public <T> T getComponentOrFallback(@NonNull DataComponentType<T> type, T def) { + T value = getComponent(type); + return value == null ? def : value; } public int getNetId() { 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 00270e47a..459d8adf8 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 @@ -40,12 +40,15 @@ import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.item.BedrockEnchantment; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.enchantment.Enchantment; +import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.session.cache.registry.JavaRegistries; +import org.geysermc.geyser.session.cache.tags.GeyserHolderSet; import org.geysermc.geyser.translator.inventory.InventoryTranslator; import org.geysermc.geyser.translator.text.MessageTranslator; -import org.geysermc.geyser.util.ItemUtils; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; import org.geysermc.mcprotocollib.protocol.data.game.item.component.ItemEnchantments; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundRenameItemPacket; @@ -63,7 +66,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater { super.updateInventory(translator, session, inventory); AnvilContainer anvilContainer = (AnvilContainer) inventory; updateInventoryState(session, anvilContainer); - int targetSlot = getTargetSlot(anvilContainer); + int targetSlot = getTargetSlot(anvilContainer, session); for (int i = 0; i < translator.size; i++) { final int bedrockSlot = translator.javaSlotToBedrock(i); if (bedrockSlot == 50) @@ -88,7 +91,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater { updateInventoryState(session, anvilContainer); int lastTargetSlot = anvilContainer.getLastTargetSlot(); - int targetSlot = getTargetSlot(anvilContainer); + int targetSlot = getTargetSlot(anvilContainer, session); if (targetSlot != javaSlot) { // Update the requested slot InventorySlotPacket slotPacket = new InventorySlotPacket(); @@ -117,7 +120,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater { // Changing the item in the input slot resets the name field on Bedrock, but // does not result in a FilterTextPacket - String originalName = MessageTranslator.convertToPlainText(ItemUtils.getCustomName(input.getComponents()), session.locale()); + String originalName = MessageTranslator.convertToPlainText(input.getComponent(DataComponentType.CUSTOM_NAME), session.locale()); ServerboundRenameItemPacket renameItemPacket = new ServerboundRenameItemPacket(originalName); session.sendDownstreamGamePacket(renameItemPacket); @@ -135,12 +138,12 @@ public class AnvilInventoryUpdater extends InventoryUpdater { * @param anvilContainer the anvil inventory * @return the slot to change the repair cost */ - private int getTargetSlot(AnvilContainer anvilContainer) { + private int getTargetSlot(AnvilContainer anvilContainer, GeyserSession session) { GeyserItemStack input = anvilContainer.getInput(); GeyserItemStack material = anvilContainer.getMaterial(); if (!material.isEmpty()) { - if (!input.isEmpty() && isRepairing(input, material)) { + if (!input.isEmpty() && isRepairing(input, material, session)) { // Changing the repair cost on the material item makes it non-stackable return 0; } @@ -233,7 +236,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater { // Can't repair or merge enchantments return -1; } - } else if (hasDurability(input) && isRepairing(input, material)) { + } else if (hasDurability(input) && isRepairing(input, material, session)) { cost = calcRepairLevelCost(input, material); if (cost == -1) { // No damage to repair @@ -394,8 +397,14 @@ public class AnvilInventoryUpdater extends InventoryUpdater { return isEnchantedBook(material) || (input.getJavaId() == material.getJavaId() && hasDurability(input)); } - private boolean isRepairing(GeyserItemStack input, GeyserItemStack material) { - return input.asItem().isValidRepairItem(material.asItem()); + private boolean isRepairing(GeyserItemStack input, GeyserItemStack material, GeyserSession session) { + HolderSet repairable = input.getComponent(DataComponentType.REPAIRABLE); + if (repairable == null) { + return false; + } + + GeyserHolderSet<Item> set = GeyserHolderSet.convertHolderSet(JavaRegistries.ITEM, repairable); + return session.getTagCache().is(set, material.asItem()); } private boolean isRenaming(GeyserSession session, AnvilContainer anvilContainer, boolean bedrock) { @@ -404,27 +413,27 @@ public class AnvilInventoryUpdater extends InventoryUpdater { } // This should really check the name field in all cases, but that requires the localized name // of the item which can change depending on NBT and Minecraft Edition - Component originalName = ItemUtils.getCustomName(anvilContainer.getInput().getComponents()); + Component originalName = anvilContainer.getInput().getComponent(DataComponentType.CUSTOM_NAME); if (bedrock && originalName != null && anvilContainer.getNewName() != null) { // Check text and formatting String legacyOriginalName = MessageTranslator.convertMessage(originalName, session.locale()); return !legacyOriginalName.equals(anvilContainer.getNewName()); } - return !Objects.equals(originalName, ItemUtils.getCustomName(anvilContainer.getResult().getComponents())); + return !Objects.equals(originalName, anvilContainer.getResult().getComponent(DataComponentType.CUSTOM_NAME)); } private int getRepairCost(GeyserItemStack itemStack) { - return itemStack.getComponent(DataComponentType.REPAIR_COST, 0); + return itemStack.getComponentOrFallback(DataComponentType.REPAIR_COST, 0); } private boolean hasDurability(GeyserItemStack itemStack) { if (itemStack.asItem().defaultMaxDamage() > 0) { - return itemStack.getComponent(DataComponentType.UNBREAKABLE, false); + return itemStack.getComponentOrFallback(DataComponentType.UNBREAKABLE, false); } return false; } private int getDamage(GeyserItemStack itemStack) { - return itemStack.getComponent(DataComponentType.DAMAGE, 0); + return itemStack.getComponentOrFallback(DataComponentType.DAMAGE, 0); } } 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 d2ae08ec4..4a2d5827a 100644 --- a/core/src/main/java/org/geysermc/geyser/item/Items.java +++ b/core/src/main/java/org/geysermc/geyser/item/Items.java @@ -25,7 +25,6 @@ package org.geysermc.geyser.item; -import org.geysermc.geyser.item.components.ToolTier; import org.geysermc.geyser.item.type.ArmorItem; import org.geysermc.geyser.item.type.ArrowItem; import org.geysermc.geyser.item.type.AxolotlBucketItem; @@ -45,16 +44,13 @@ import org.geysermc.geyser.item.type.FireworkStarItem; import org.geysermc.geyser.item.type.FishingRodItem; import org.geysermc.geyser.item.type.GoatHornItem; import org.geysermc.geyser.item.type.Item; -import org.geysermc.geyser.item.type.LightItem; import org.geysermc.geyser.item.type.MaceItem; import org.geysermc.geyser.item.type.MapItem; -import org.geysermc.geyser.item.type.OminousBottleItem; import org.geysermc.geyser.item.type.PlayerHeadItem; import org.geysermc.geyser.item.type.PotionItem; import org.geysermc.geyser.item.type.ShieldItem; import org.geysermc.geyser.item.type.ShulkerBoxItem; import org.geysermc.geyser.item.type.SpawnEggItem; -import org.geysermc.geyser.item.type.TieredItem; import org.geysermc.geyser.item.type.TippedArrowItem; import org.geysermc.geyser.item.type.TropicalFishBucketItem; import org.geysermc.geyser.item.type.WolfArmorItem; 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 7f0d9099e..c851ee332 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 @@ -25,6 +25,7 @@ package org.geysermc.geyser.item.type; +import com.google.common.collect.ImmutableMap; import net.kyori.adventure.key.Key; import net.kyori.adventure.text.Component; import org.checkerframework.checker.nullness.qual.NonNull; @@ -45,7 +46,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.ChatColor; import org.geysermc.geyser.text.MinecraftLocale; import org.geysermc.geyser.translator.item.BedrockItemBuilder; -import org.geysermc.geyser.translator.item.ItemTranslator; import org.geysermc.geyser.translator.text.MessageTranslator; import org.geysermc.geyser.util.MinecraftKey; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; @@ -98,16 +98,23 @@ public class Item { return Rarity.fromId(baseComponents.getOrDefault(DataComponentType.RARITY, 0)); } + /** + * Returns a modifiable DataComponents map. Should only be used when it must be modified. + * Otherwise, prefer using GeyserItemStack's getComponent + */ + @NonNull public DataComponents gatherComponents(DataComponents others) { - if (others == null) return baseComponents.clone(); - DataComponents components = baseComponents.clone(); + if (others == null) { + return new DataComponents(ImmutableMap.copyOf(components.getDataComponents())); + } components.getDataComponents().putAll(others.getDataComponents()); - return components; + return new DataComponents(ImmutableMap.copyOf(components.getDataComponents())); } - public boolean isValidRepairItem(Item other) { - return false; + @Nullable + public <T> T getComponent(@NonNull DataComponentType<T> type) { + return baseComponents.get(type); } public String translationKey() { @@ -121,14 +128,11 @@ public class Item { // Return, essentially, air return ItemData.builder(); } - ItemData.Builder builder = ItemData.builder() + + return ItemData.builder() .definition(mapping.getBedrockDefinition()) .damage(mapping.getBedrockData()) .count(count); - - ItemTranslator.translateCustomItem(components, builder, mapping); - - return builder; } public @NonNull GeyserItemStack translateToJava(GeyserSession session, @NonNull ItemData itemData, @NonNull ItemMapping mapping, @NonNull ItemMappings mappings) { @@ -292,7 +296,7 @@ public class Item { } public static Builder builder() { - return new Builder().components(new DataComponents(new HashMap<>())); // TODO actually set components here + return new Builder().components(new DataComponents(ImmutableMap.of())); // TODO actually set components here } public static final class Builder { 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 befcfa4b7..ca2ebcb08 100644 --- a/core/src/main/java/org/geysermc/geyser/level/GeyserWorldManager.java +++ b/core/src/main/java/org/geysermc/geyser/level/GeyserWorldManager.java @@ -25,20 +25,15 @@ package org.geysermc.geyser.level; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import org.checkerframework.checker.nullness.qual.NonNull; -import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3i; import org.geysermc.erosion.packet.backendbound.BackendboundBatchBlockRequestPacket; import org.geysermc.erosion.packet.backendbound.BackendboundBlockRequestPacket; -import org.geysermc.erosion.packet.backendbound.BackendboundPickBlockPacket; import org.geysermc.erosion.util.BlockPositionIterator; import org.geysermc.geyser.erosion.ErosionCancellationException; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import java.util.concurrent.CompletableFuture; @@ -124,19 +119,4 @@ public class GeyserWorldManager extends WorldManager { public GameMode getDefaultGameMode(GeyserSession session) { return GameMode.SURVIVAL; } - - @NonNull - @Override - public CompletableFuture<@Nullable DataComponents> getPickItemComponents(GeyserSession session, int x, int y, int z, boolean addNbtData) { - var erosionHandler = session.getErosionHandler().getAsActive(); - if (erosionHandler == null) { - return super.getPickItemComponents(session, x, y, z, addNbtData); - } else if (session.isClosed()) { - return CompletableFuture.failedFuture(new ErosionCancellationException()); - } - CompletableFuture<Int2ObjectMap<byte[]>> future = new CompletableFuture<>(); - erosionHandler.setPickBlockLookup(future); - erosionHandler.sendPacket(new BackendboundPickBlockPacket(Vector3i.from(x, y, z))); - return future.thenApply(RAW_TRANSFORMER); - } } 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 6baf9c2b4..a85462108 100644 --- a/core/src/main/java/org/geysermc/geyser/level/WorldManager.java +++ b/core/src/main/java/org/geysermc/geyser/level/WorldManager.java @@ -192,16 +192,6 @@ public abstract class WorldManager { return null; } - /** - * Used for pick block, so we don't need to cache more data than necessary. - * - * @return expected NBT for this item. - */ - @NonNull - public CompletableFuture<@Nullable DataComponents> getPickItemComponents(GeyserSession session, int x, int y, int z, boolean addExtraData) { - return CompletableFuture.completedFuture(null); - } - /** * Retrieves decorated pot sherds from the server. Used to ensure the data is not erased on animation sent * through the BlockEntityDataPacket. diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java index 2b0f257a3..26b6aad96 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.session.cache; import it.unimi.dsi.fastutil.ints.IntArrays; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import net.kyori.adventure.key.Key; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.item.type.Item; @@ -119,7 +120,10 @@ public final class TagCache { /** * @return true if the specified network ID is in the given holder set. */ - public <T> boolean is(GeyserHolderSet<T> holderSet, T object) { + public <T> boolean is(@Nullable GeyserHolderSet<T> holderSet, @Nullable T object) { + if (holderSet == null || object == null) { + return false; + } return contains(holderSet.resolveRaw(this), holderSet.getRegistry().toNetworkId(session, object)); } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java b/core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java index 3c6e02e53..0e0d117a4 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java @@ -25,10 +25,6 @@ package org.geysermc.geyser.session.cache.tags; -import java.util.List; -import java.util.Objects; -import java.util.function.ToIntFunction; - import it.unimi.dsi.fastutil.ints.IntArrays; import lombok.Data; import net.kyori.adventure.key.Key; @@ -37,6 +33,11 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.TagCache; import org.geysermc.geyser.session.cache.registry.JavaRegistryKey; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; + +import java.util.List; +import java.util.Objects; +import java.util.function.ToIntFunction; /** * Similar to vanilla Minecraft's HolderSets, stores either a tag or a list of IDs (this list can also be represented as a single ID in vanilla HolderSets). @@ -87,6 +88,27 @@ public final class GeyserHolderSet<T> { return tagCache.getRaw(Objects.requireNonNull(tag, "HolderSet must have a tag if it doesn't have a list of IDs")); } + /** + * Reads a MCPL {@link HolderSet} and turns it into a GeyserHolderSet. + * @param registry the registry the HolderSet contains IDs from. + * @param holderSet the HolderSet as the MCPL HolderSet object + */ + public static <T> GeyserHolderSet<T> convertHolderSet(@NonNull JavaRegistryKey<T> registry, @Nullable HolderSet holderSet) { + if (holderSet == null) { + return new GeyserHolderSet<>(registry, IntArrays.EMPTY_ARRAY); + } + + if (holderSet.getHolders() != null) { + return new GeyserHolderSet<>(registry, holderSet.getHolders()); + } + + if (holderSet.getLocation() != null) { + return new GeyserHolderSet<>(registry, new Tag<>(registry, holderSet.getLocation())); + } + + throw new IllegalStateException("HolderSet must have a tag or a list of IDs! " + holderSet); + } + /** * Reads a HolderSet from an object from NBT. * 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 22786a4ee..2434d6d91 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java +++ b/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java @@ -25,10 +25,6 @@ package org.geysermc.geyser.skin; -import org.geysermc.mcprotocollib.auth.GameProfile; -import org.geysermc.mcprotocollib.auth.GameProfile.Texture; -import org.geysermc.mcprotocollib.auth.GameProfile.TextureModel; -import org.geysermc.mcprotocollib.auth.GameProfile.TextureType; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; @@ -36,6 +32,7 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.skin.Cape; import org.geysermc.geyser.api.skin.Skin; @@ -46,8 +43,10 @@ import org.geysermc.geyser.entity.type.player.PlayerEntity; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.skin.SkinManager.GameProfileData; import org.geysermc.geyser.text.GeyserLocale; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; +import org.geysermc.mcprotocollib.auth.GameProfile; +import org.geysermc.mcprotocollib.auth.GameProfile.Texture; +import org.geysermc.mcprotocollib.auth.GameProfile.TextureModel; +import org.geysermc.mcprotocollib.auth.GameProfile.TextureType; import java.awt.*; import java.awt.image.BufferedImage; @@ -105,9 +104,7 @@ public class FakeHeadProvider { } }); - public static void setHead(GeyserSession session, PlayerEntity entity, DataComponents components) { - GameProfile profile = components.get(DataComponentType.PROFILE); - + public static void setHead(GeyserSession session, PlayerEntity entity, @Nullable GameProfile profile) { if (profile == null) { return; } 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 15c19c542..ffaae13d2 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 @@ -76,7 +76,6 @@ import org.geysermc.geyser.util.InventoryUtils; import org.geysermc.geyser.util.ItemUtils; import org.geysermc.mcprotocollib.protocol.data.game.inventory.ContainerType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.EmptySlotDisplay; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; @@ -252,8 +251,8 @@ public abstract class InventoryTranslator { //only set the head if the destination is the head slot GeyserItemStack javaItem = inventory.getItem(sourceSlot); if (javaItem.asItem() == Items.PLAYER_HEAD - && javaItem.getComponents() != null) { - FakeHeadProvider.setHead(session, session.getPlayerEntity(), javaItem.getComponents()); + && javaItem.hasNonBaseComponents()) { + FakeHeadProvider.setHead(session, session.getPlayerEntity(), javaItem.getComponent(DataComponentType.PROFILE)); } } else if (sourceSlot == 5) { //we are probably removing the head, so restore the original skin @@ -1020,12 +1019,9 @@ public abstract class InventoryTranslator { // As of 1.16.210: Bedrock needs confirmation on what the current item durability is. // If 0 is sent, then Bedrock thinks the item is not damaged int durability = 0; - DataComponents components = itemStack.getComponents(); - if (components != null) { - Integer damage = components.get(DataComponentType.DAMAGE); - if (damage != null) { - durability = ItemUtils.getCorrectBedrockDurability(itemStack.asItem(), damage); - } + Integer damage = itemStack.getComponent(DataComponentType.DAMAGE); + if (damage != null) { + durability = ItemUtils.getCorrectBedrockDurability(itemStack.asItem(), damage); } itemEntry = new ItemStackResponseSlot((byte) bedrockSlot, (byte) bedrockSlot, (byte) itemStack.getAmount(), itemStack.getNetId(), "", durability); diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java index 3b33f5909..e72de744f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java @@ -30,7 +30,6 @@ import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.erosion.util.LecternUtils; -import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.inventory.Container; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.Inventory; @@ -158,13 +157,13 @@ public class LecternInventoryTranslator extends AbstractBlockInventoryTranslator session.getLastInteractionBlockPosition() : inventory.getHolderPosition(); NbtMap blockEntityTag; - if (book.getComponents() != null) { + if (book.hasNonBaseComponents()) { int pages = 0; - WrittenBookContent writtenBookComponents = book.getComponents().get(DataComponentType.WRITTEN_BOOK_CONTENT); + WrittenBookContent writtenBookComponents = book.getComponent(DataComponentType.WRITTEN_BOOK_CONTENT); if (writtenBookComponents != null) { pages = writtenBookComponents.getPages().size(); } else { - WritableBookContent writableBookComponents = book.getComponents().get(DataComponentType.WRITABLE_BOOK_CONTENT); + WritableBookContent writableBookComponents = book.getComponent(DataComponentType.WRITABLE_BOOK_CONTENT); if (writableBookComponents != null) { pages = writableBookComponents.getPages().size(); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java index 0694e2ac6..7cdcbe8a9 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java @@ -49,11 +49,9 @@ import org.geysermc.geyser.level.block.Blocks; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.data.game.item.component.BannerPatternLayer; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundContainerButtonClickPacket; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; public class LoomInventoryTranslator extends AbstractBlockInventoryTranslator { @@ -156,16 +154,11 @@ public class LoomInventoryTranslator extends AbstractBlockInventoryTranslator { GeyserItemStack inputCopy = inventory.getItem(0).copy(1); inputCopy.setNetId(session.getNextItemNetId()); - // Add the pattern manually, for better item synchronization - if (inputCopy.getComponents() == null) { - inputCopy.setComponents(new DataComponents(new HashMap<>())); - } - BannerPatternLayer bannerPatternLayer = BannerItem.getJavaBannerPattern(session, pattern); // TODO if (bannerPatternLayer != null) { - List<BannerPatternLayer> patternsList = inputCopy.getComponents().getOrDefault(DataComponentType.BANNER_PATTERNS, new ArrayList<>()); + List<BannerPatternLayer> patternsList = inputCopy.getComponentOrFallback(DataComponentType.BANNER_PATTERNS, new ArrayList<>()); patternsList.add(bannerPatternLayer); - inputCopy.getComponents().put(DataComponentType.BANNER_PATTERNS, patternsList); + inputCopy.getOrCreateComponents().put(DataComponentType.BANNER_PATTERNS, patternsList); } // Set the new item as the output diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java index 8fd365d7f..f08b90765 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java @@ -58,6 +58,7 @@ import org.geysermc.geyser.util.InventoryUtils; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; import org.geysermc.mcprotocollib.protocol.data.game.inventory.ContainerType; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundSetCreativeModeSlotPacket; import java.util.Arrays; @@ -103,8 +104,8 @@ public class PlayerInventoryTranslator extends InventoryTranslator { contents[i - 5] = item.getItemData(session); if (i == 5 && item.asItem() == Items.PLAYER_HEAD && - item.getComponents() != null) { - FakeHeadProvider.setHead(session, session.getPlayerEntity(), item.getComponents()); + item.hasNonBaseComponents()) { + FakeHeadProvider.setHead(session, session.getPlayerEntity(), item.getComponent(DataComponentType.PROFILE)); } } armorContentPacket.setContents(Arrays.asList(contents)); @@ -147,8 +148,8 @@ public class PlayerInventoryTranslator extends InventoryTranslator { if (slot == 5) { // Check for custom skull if (javaItem.asItem() == Items.PLAYER_HEAD - && javaItem.getComponents() != null) { - FakeHeadProvider.setHead(session, session.getPlayerEntity(), javaItem.getComponents()); + && javaItem.hasNonBaseComponents()) { + FakeHeadProvider.setHead(session, session.getPlayerEntity(), javaItem.getComponent(DataComponentType.PROFILE)); } else { FakeHeadProvider.restoreOriginalSkin(session, session.getPlayerEntity()); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java index 062666f84..284296209 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java @@ -112,7 +112,7 @@ public final class ItemTranslator { NbtMap nbt = data.getTag(); if (nbt != null && !nbt.isEmpty()) { // translateToJava may have added components - DataComponents components = itemStack.getComponents() == null ? new DataComponents(new HashMap<>()) : itemStack.getComponents(); + DataComponents components = itemStack.getOrCreateComponents(); javaItem.translateNbtToJava(session, nbt, components, bedrockItem); if (!components.getDataComponents().isEmpty()) { itemStack.setComponents(components); @@ -193,7 +193,7 @@ public final class ItemTranslator { } if (bedrockItem.getJavaItem().equals(Items.PLAYER_HEAD)) { - translatePlayerHead(session, components, builder); + translatePlayerHead(session, components.get(DataComponentType.PROFILE), builder); } translateCustomItem(components, builder, bedrockItem); @@ -391,7 +391,7 @@ public final class ItemTranslator { return ItemDefinition.AIR; } - ItemMapping mapping = itemStack.asItem().toBedrockDefinition(itemStack.getComponents(), session.getItemMappings()); + ItemMapping mapping = itemStack.asItem().toBedrockDefinition(itemStack.getAllComponents(), session.getItemMappings()); ItemDefinition itemDefinition = mapping.getBedrockDefinition(); CustomBlockData customBlockData = BlockRegistries.CUSTOM_BLOCK_ITEM_OVERRIDES.getOrDefault( @@ -401,7 +401,7 @@ public final class ItemTranslator { } if (mapping.getJavaItem().equals(Items.PLAYER_HEAD)) { - CustomSkull customSkull = getCustomSkull(itemStack.getComponents()); + CustomSkull customSkull = getCustomSkull(itemStack.getComponent(DataComponentType.PROFILE)); if (customSkull != null) { itemDefinition = session.getItemMappings().getCustomBlockItemDefinitions().get(customSkull.getCustomBlockData()); } @@ -466,39 +466,35 @@ public final class ItemTranslator { builder.blockDefinition(blockDefinition); } - private static @Nullable CustomSkull getCustomSkull(DataComponents components) { - if (components == null) { + private static @Nullable CustomSkull getCustomSkull(@Nullable GameProfile profile) { + if (profile == null) { return null; } - - GameProfile profile = components.get(DataComponentType.PROFILE); - if (profile != null) { - Map<TextureType, Texture> textures; - try { - textures = profile.getTextures(false); - } catch (IllegalStateException e) { - GeyserImpl.getInstance().getLogger().debug("Could not decode player head from profile %s, got: %s".formatted(profile, e.getMessage())); - return null; - } - if (textures == null || textures.isEmpty()) { - return null; - } - - Texture skinTexture = textures.get(TextureType.SKIN); - - if (skinTexture == null) { - return null; - } - - String skinHash = skinTexture.getURL().substring(skinTexture.getURL().lastIndexOf('/') + 1); - return BlockRegistries.CUSTOM_SKULLS.get(skinHash); + Map<TextureType, Texture> textures; + try { + textures = profile.getTextures(false); + } catch (IllegalStateException e) { + GeyserImpl.getInstance().getLogger().debug("Could not decode player head from profile %s, got: %s".formatted(profile, e.getMessage())); + return null; } - return null; + + if (textures == null || textures.isEmpty()) { + return null; + } + + Texture skinTexture = textures.get(TextureType.SKIN); + + if (skinTexture == null) { + return null; + } + + String skinHash = skinTexture.getURL().substring(skinTexture.getURL().lastIndexOf('/') + 1); + return BlockRegistries.CUSTOM_SKULLS.get(skinHash); } - private static void translatePlayerHead(GeyserSession session, DataComponents components, ItemData.Builder builder) { - CustomSkull customSkull = getCustomSkull(components); + private static void translatePlayerHead(GeyserSession session, GameProfile profile, ItemData.Builder builder) { + CustomSkull customSkull = getCustomSkull(profile); if (customSkull != null) { CustomBlockData customBlockData = customSkull.getCustomBlockData(); ItemDefinition itemDefinition = session.getItemMappings().getCustomBlockItemDefinitions().get(customBlockData); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBookEditTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBookEditTranslator.java index 456b6507f..700ba0532 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBookEditTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBookEditTranslator.java @@ -53,7 +53,7 @@ public class BedrockBookEditTranslator extends PacketTranslator<BookEditPacket> GeyserItemStack itemStack = session.getPlayerInventory().getItemInHand(); if (itemStack != null) { - DataComponents components = itemStack.getComponents() != null ? itemStack.getComponents() : new DataComponents(new HashMap<>()); + DataComponents components = itemStack.getOrCreateComponents(); ItemStack bookItem = new ItemStack(itemStack.getJavaId(), itemStack.getAmount(), components); List<String> pages = new LinkedList<>(); 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 6367b2d14..1d84c169e 100644 --- a/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java @@ -131,6 +131,7 @@ public final class BlockUtils { return 1.0 / speed; } + // TODO 1.21.4 this changed probably; no more tiers public static double getBreakTime(GeyserSession session, Block block, ItemMapping item, @Nullable DataComponents components, boolean isSessionPlayer) { boolean isShearsEffective = session.getTagCache().is(BlockTag.LEAVES, block) || session.getTagCache().is(BlockTag.WOOL, block); //TODO called twice boolean canHarvestWithHand = !block.requiresCorrectToolForDrops(); @@ -160,7 +161,7 @@ public final class BlockUtils { boolean waterInEyes = session.getCollisionManager().isWaterInEyes(); boolean insideOfWaterWithoutAquaAffinity = waterInEyes && - ItemUtils.getEnchantmentLevel(session, session.getPlayerInventory().getItem(5).getComponents(), BedrockEnchantment.AQUA_AFFINITY) < 1; + ItemUtils.getEnchantmentLevel(session, session.getPlayerInventory().getItem(5).getAllComponents(), BedrockEnchantment.AQUA_AFFINITY) < 1; return calculateBreakTime(block.destroyTime(), toolTier, canHarvestWithHand, correctTool, toolCanBreak, toolType, isShearsEffective, toolEfficiencyLevel, hasteLevel, miningFatigueLevel, insideOfWaterWithoutAquaAffinity, session.getPlayerEntity().isOnGround()); @@ -173,7 +174,7 @@ public final class BlockUtils { DataComponents components = null; if (item != null) { mapping = item.getMapping(session); - components = item.getComponents(); + components = item.getAllComponents(); } return getBreakTime(session, block, mapping, components, true); } 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 eec0d173d..eca9756e6 100644 --- a/core/src/main/java/org/geysermc/geyser/util/ItemUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/ItemUtils.java @@ -25,7 +25,6 @@ package org.geysermc.geyser.util; -import net.kyori.adventure.text.Component; import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.inventory.item.BedrockEnchantment; import org.geysermc.geyser.item.Items; @@ -102,17 +101,6 @@ public final class ItemUtils { return original; } - /** - * @param components the data components of the item - * @return the custom name of the item - */ - public static @Nullable Component getCustomName(DataComponents components) { - if (components == null) { - return null; - } - return components.get(DataComponentType.CUSTOM_NAME); - } - private ItemUtils() { } } From 77ffb6098ea78c1f1df33199f28a98795225e40f Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Mon, 2 Dec 2024 02:48:54 +0800 Subject: [PATCH 084/165] Better immutability checks --- .../main/java/org/geysermc/geyser/item/type/Item.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) 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 c851ee332..fde742efa 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 @@ -63,7 +63,7 @@ public class Item { protected final Key javaIdentifier; private int javaId = -1; private final int attackDamage; - private final DataComponents baseComponents; + private final DataComponents baseComponents; // unmodifiable private final List<Item> enchantmentGlintPresent = List.of(Items.ENCHANTED_GOLDEN_APPLE, Items.EXPERIENCE_BOTTLE, Items.WRITTEN_BOOK, Items.NETHER_STAR, Items.ENCHANTED_BOOK, Items.END_CRYSTAL); @@ -104,10 +104,11 @@ public class Item { */ @NonNull public DataComponents gatherComponents(DataComponents others) { - DataComponents components = baseComponents.clone(); if (others == null) { - return new DataComponents(ImmutableMap.copyOf(components.getDataComponents())); + return baseComponents; } + + DataComponents components = baseComponents.clone(); components.getDataComponents().putAll(others.getDataComponents()); return new DataComponents(ImmutableMap.copyOf(components.getDataComponents())); } @@ -315,7 +316,7 @@ public class Item { } public DataComponents components() { - return this.components; + return new DataComponents(ImmutableMap.copyOf(components.getDataComponents())); } private Builder() { From a19e7cb9f42f5753d8db22c1ebb7ef314b8554e2 Mon Sep 17 00:00:00 2001 From: Arno Keesman <34793978+arnokeesman@users.noreply.github.com> Date: Mon, 2 Dec 2024 21:06:06 +0100 Subject: [PATCH 085/165] Bump cloud-minecraft-modded (#5181) fixes crashes on fabric from the previously included Fabric Permissions API --- 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 1e942df77..01fffb29f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,7 +28,7 @@ viaversion = "4.9.2" adapters = "1.15-SNAPSHOT" cloud = "2.0.0-rc.2" cloud-minecraft = "2.0.0-beta.9" -cloud-minecraft-modded = "2.0.0-beta.9" +cloud-minecraft-modded = "2.0.0-beta.10" commodore = "2.2" bungeecord = "a7c6ede" velocity = "3.3.0-SNAPSHOT" From d956354b7f401664de7103228bc4f7ec5213802b Mon Sep 17 00:00:00 2001 From: BugTeaON <99161186+BUGTeas@users.noreply.github.com> Date: Tue, 3 Dec 2024 14:03:09 +0800 Subject: [PATCH 086/165] =?UTF-8?q?Feature=EF=BC=9AMake=20custom=20effect?= =?UTF-8?q?=20information=20visible=20&=20Support=20for=20customizing=20it?= =?UTF-8?q?em=20name=20via=20'custom=5Fname'=20tag=20in=20'potion=5Fconten?= =?UTF-8?q?ts'=20component=20(new=20feature=20since=201.21.2)=20(#5176)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Make custom effect information visible * Support for customizing item name via 'custom_name' tag in 'potion_contents' component * A little optimization of custom effect information * The effect information should appear in front of the custom lore --- .../geysermc/geyser/item/type/PotionItem.java | 13 ++++ .../geyser/item/type/TippedArrowItem.java | 14 ++++ .../translator/item/ItemTranslator.java | 78 +++++++++++++++++++ 3 files changed, 105 insertions(+) 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 89e60b325..4cc3756cd 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 @@ -34,7 +34,9 @@ import org.geysermc.geyser.inventory.item.Potion; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.geyser.translator.item.CustomItemTranslator; +import org.geysermc.geyser.translator.item.ItemTranslator; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.PotionContents; @@ -68,6 +70,17 @@ public class PotionItem extends Item { return super.translateToBedrock(session, count, components, mapping, mappings); } + @Override + public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNull DataComponents components, @NonNull BedrockItemBuilder builder) { + // Make custom effect information visible + PotionContents potionContents = components.get(DataComponentType.POTION_CONTENTS); + if (potionContents != null) { + ItemTranslator.addPotionEffectLore(potionContents, builder, session.locale()); + } + + super.translateComponentsToBedrock(session, components, builder); + } + @Override public @NonNull GeyserItemStack translateToJava(GeyserSession session, @NonNull ItemData itemData, @NonNull ItemMapping mapping, @NonNull ItemMappings mappings) { Potion potion = Potion.getByBedrockId(itemData.getDamage()); diff --git a/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java b/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java index 09e4ee21f..9e212ebef 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java @@ -25,12 +25,15 @@ package org.geysermc.geyser.item.type; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.inventory.item.Potion; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.item.BedrockItemBuilder; +import org.geysermc.geyser.translator.item.ItemTranslator; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.PotionContents; @@ -57,4 +60,15 @@ public class TippedArrowItem extends ArrowItem { } return super.translateToBedrock(session, count, components, mapping, mappings); } + + @Override + public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNull DataComponents components, @NonNull BedrockItemBuilder builder) { + // Make custom effect information visible + PotionContents potionContents = components.get(DataComponentType.POTION_CONTENTS); + if (potionContents != null) { + ItemTranslator.addPotionEffectLore(potionContents, builder, session.locale()); + } + + super.translateComponentsToBedrock(session, components, builder); + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java index 3cfd00233..97cb3df2f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.translator.item; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TranslatableComponent; import net.kyori.adventure.text.format.NamedTextColor; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -55,6 +56,7 @@ import org.geysermc.geyser.util.InventoryUtils; import org.geysermc.mcprotocollib.auth.GameProfile; import org.geysermc.mcprotocollib.auth.GameProfile.Texture; import org.geysermc.mcprotocollib.auth.GameProfile.TextureType; +import org.geysermc.mcprotocollib.protocol.data.game.entity.Effect; import org.geysermc.mcprotocollib.protocol.data.game.entity.attribute.AttributeType; import org.geysermc.mcprotocollib.protocol.data.game.entity.attribute.ModifierOperation; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; @@ -63,12 +65,16 @@ import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponen import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; import org.geysermc.mcprotocollib.protocol.data.game.item.component.ItemAttributeModifiers; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.MobEffectDetails; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.MobEffectInstance; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.PotionContents; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.EnumMap; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; public final class ItemTranslator { @@ -324,6 +330,65 @@ public final class ItemTranslator { return MessageTranslator.convertMessage(attributeComponent, language); } + private static final List<Effect> negativeEffectList = List.of( + Effect.SLOWNESS, + Effect.MINING_FATIGUE, + Effect.INSTANT_DAMAGE, + Effect.NAUSEA, + Effect.BLINDNESS, + Effect.HUNGER, + Effect.WEAKNESS, + Effect.POISON, + Effect.WITHER, + Effect.LEVITATION, + Effect.UNLUCK, + Effect.DARKNESS, + Effect.WIND_CHARGED, + Effect.WEAVING, + Effect.OOZING, + Effect.INFESTED + ); + + public static void addPotionEffectLore(PotionContents contents, BedrockItemBuilder builder, String language) { + List<MobEffectInstance> effectInstanceList = contents.getCustomEffects(); + for (MobEffectInstance effectInstance : effectInstanceList) { + Effect effect = effectInstance.getEffect(); + MobEffectDetails details = effectInstance.getDetails(); + int amplifier = details.getAmplifier(); + int durations = details.getDuration(); + TranslatableComponent appendTranslatable = Component.translatable("effect.minecraft." + effect.toString().toLowerCase(Locale.ROOT)); + if (amplifier != 0) { + appendTranslatable = Component.translatable("potion.withAmplifier", + appendTranslatable, + Component.translatable("potion.potency." + amplifier)); + } + if (durations > 20) { + int seconds = durations / 20; + int secondsFormat = seconds % 60; + int minutes = seconds / 60; + int minutesFormat = minutes % 60; + int hours = minutes / 60; + String text = ((minutesFormat > 9) ? "" : "0") + minutesFormat + ":" + ((secondsFormat > 9) ? "" : "0") + secondsFormat; + if (minutes >= 60) { + text = ((hours > 9) ? "" : "0") + hours + ":" + text; + } + appendTranslatable = Component.translatable("potion.withDuration", + appendTranslatable, + Component.text(text)); + } else if (durations == -1) { + appendTranslatable = Component.translatable("potion.withDuration", + appendTranslatable, + Component.translatable("effect.duration.infinite")); + } + Component component = Component.text() + .resetStyle() + .color((negativeEffectList.contains(effect)) ? NamedTextColor.RED : NamedTextColor.BLUE) + .append(appendTranslatable) + .build(); + builder.getOrCreateLore().add(MessageTranslator.convertMessage(component, language)); + } + } + private static void addAdvancedTooltips(@Nullable DataComponents components, BedrockItemBuilder builder, Item item, String language) { int maxDurability = item.maxDamage(); @@ -448,6 +513,19 @@ public final class ItemTranslator { if (customName != null) { return MessageTranslator.convertMessage(customName, session.locale()); } + PotionContents potionContents = components.get(DataComponentType.POTION_CONTENTS); + if (potionContents != null) { + // "custom_name" tag in "potion_contents" component + String customPotionName = potionContents.getCustomName(); + if (customPotionName != null) { + Component component = Component.text() + .resetStyle() + .color(NamedTextColor.WHITE) + .append(Component.translatable(mapping.getJavaItem().translationKey() + ".effect." + customPotionName)) + .build(); + return MessageTranslator.convertMessage(component, session.locale()); + } + } customName = components.get(DataComponentType.ITEM_NAME); if (customName != null) { // Get the translated name and prefix it with a reset char to prevent italics - matches Java Edition From 289a74975d607312e5860f028a71b3f6022d81b8 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Tue, 3 Dec 2024 17:25:48 +0800 Subject: [PATCH 087/165] start implementing new block breaking --- .../entity/attribute/GeyserAttributeType.java | 3 + .../type/player/SessionPlayerEntity.java | 9 + .../geyser/session/GeyserSession.java | 5 + .../player/input/BedrockBlockActions.java | 5 +- .../org/geysermc/geyser/util/BlockUtils.java | 246 +++++++++--------- 5 files changed, 150 insertions(+), 118 deletions(-) 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 1e050c840..833f2f46d 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 @@ -51,6 +51,9 @@ public enum GeyserAttributeType { MAX_HEALTH("minecraft:generic.max_health", null, 0f, 1024f, 20f), SCALE("minecraft:generic.scale", null, 0.0625f, 16f, 1f), BLOCK_INTERACTION_RANGE("minecraft:player.block_interaction_range", null, 0.0f, 64f, 4.5f), + MINING_EFFICIENCY("minecraft:mining_efficiency", null, 0f, 1024f, 0f), + BLOCK_BREAK_SPEED("minecraft:block_break_speed", null, 0f, 1024f, 1f), + SUBMERGED_MINING_SPEED("minecraft:submerged_mining_speed", null, 0f, 20f, 0.2f), // Bedrock Attributes ABSORPTION(null, "minecraft:absorption", 0f, 1024f, 0f), 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 9d5bc011c..7543e05bc 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 @@ -286,6 +286,15 @@ public class SessionPlayerEntity extends PlayerEntity { return attributeData; } + public float attributeOrDefault(GeyserAttributeType type) { + var attribute = this.attributes.get(type); + if (attribute == null) { + return type.getDefaultValue(); + } + + return attribute.getValue(); + } + public void setLastDeathPosition(@Nullable GlobalPos pos) { if (pos != null) { dirtyMetadata.put(EntityDataTypes.PLAYER_LAST_DEATH_POS, pos.getPosition()); 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 ef6261ead..9b49b3cfc 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -523,6 +523,11 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { @Setter private long blockBreakStartTime; + /** + * // TODO + */ + private long destroyProgress; + /** * Stores whether the player intended to place a bucket. */ diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockBlockActions.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockBlockActions.java index 061a04b77..ea386ebcf 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockBlockActions.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockBlockActions.java @@ -32,6 +32,7 @@ import org.cloudburstmc.protocol.bedrock.data.PlayerActionType; import org.cloudburstmc.protocol.bedrock.data.PlayerBlockActionData; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket; +import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockState; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.ItemFrameEntity; @@ -88,7 +89,7 @@ final class BedrockBlockActions { LevelEventPacket startBreak = new LevelEventPacket(); startBreak.setType(LevelEvent.BLOCK_START_BREAK); startBreak.setPosition(vector.toFloat()); - double breakTime = BlockUtils.getSessionBreakTime(session, BlockState.of(blockState).block()) * 20; + double breakTime = BlockUtils.getSessionBreakTime(session, BlockState.of(blockState).block()) * 20; // TODO afdaöwelfunöwoaenf // If the block is custom or the breaking item is custom, we must keep track of break time ourselves GeyserItemStack item = session.getPlayerInventory().getItemInHand(); @@ -169,6 +170,7 @@ final class BedrockBlockActions { if (session.getGameMode() != GameMode.CREATIVE) { // As of 1.16.210: item frame items are taken out here. // Survival also sends START_BREAK, but by attaching our process here adventure mode also works + GeyserImpl.getInstance().getLogger().warning("abort break, not creative - item frame???"); Entity itemFrameEntity = ItemFrameEntity.getItemFrameEntity(session, vector); if (itemFrameEntity != null) { ServerboundInteractPacket interactPacket = new ServerboundInteractPacket(itemFrameEntity.getEntityId(), @@ -180,6 +182,7 @@ final class BedrockBlockActions { ServerboundPlayerActionPacket abortBreakingPacket = new ServerboundPlayerActionPacket(PlayerAction.CANCEL_DIGGING, vector, Direction.DOWN, 0); session.sendDownstreamGamePacket(abortBreakingPacket); + LevelEventPacket stopBreak = new LevelEventPacket(); stopBreak.setType(LevelEvent.BLOCK_STOP_BREAK); stopBreak.setPosition(vector.toFloat()); 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 1d84c169e..52a4a6df9 100644 --- a/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java @@ -27,156 +27,168 @@ package org.geysermc.geyser.util; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3i; +import org.geysermc.geyser.entity.attribute.GeyserAttributeType; +import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.PlayerInventory; import org.geysermc.geyser.inventory.item.BedrockEnchantment; import org.geysermc.geyser.level.block.Blocks; import org.geysermc.geyser.level.block.type.Block; +import org.geysermc.geyser.level.block.type.BlockState; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.session.cache.EntityEffectCache; +import org.geysermc.geyser.session.cache.registry.JavaRegistries; import org.geysermc.geyser.session.cache.tags.BlockTag; +import org.geysermc.geyser.session.cache.tags.GeyserHolderSet; import org.geysermc.geyser.translator.collision.BlockCollision; +import org.geysermc.mcprotocollib.protocol.data.game.entity.attribute.AttributeType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.ToolData; public final class BlockUtils { - private static boolean correctTool(GeyserSession session, Block block, String itemToolType) { - return switch (itemToolType) { - case "axe" -> session.getTagCache().is(BlockTag.MINEABLE_AXE, block); - case "hoe" -> session.getTagCache().is(BlockTag.MINEABLE_HOE, block); - case "pickaxe" -> session.getTagCache().is(BlockTag.MINEABLE_PICKAXE, block); - case "shears" -> session.getTagCache().is(BlockTag.LEAVES, block) || session.getTagCache().is(BlockTag.WOOL, block); - case "shovel" -> session.getTagCache().is(BlockTag.MINEABLE_SHOVEL, block); - case "sword" -> block == Blocks.COBWEB; - default -> { - session.getGeyser().getLogger().warning("Unknown tool type: " + itemToolType); - yield false; + public static float getBlockDestroyProgress(GeyserSession session, BlockState blockState, GeyserItemStack itemInHand) { + float destroySpeed = blockState.block().destroyTime(); + if (destroySpeed == -1) { + return 0; + } + + int speedMultiplier = hasCorrectTool(session, blockState.block(), itemInHand) ? 30 : 100; + return getPlayerDestroySpeed(session, blockState, itemInHand) / destroySpeed / speedMultiplier; + } + + private static boolean hasCorrectTool(GeyserSession session, Block block, GeyserItemStack stack) { + return !block.requiresCorrectToolForDrops() || isCorrectItemForDrops(session, block, stack); + } + + private static boolean isCorrectItemForDrops(GeyserSession session, Block block, GeyserItemStack stack) { + ToolData tool = stack.getComponent(DataComponentType.TOOL); + if (tool == null) { + return false; + } + + for (ToolData.Rule rule : tool.getRules()) { + if (rule.getCorrectForDrops() != null) { + GeyserHolderSet<Block> set = GeyserHolderSet.convertHolderSet(JavaRegistries.BLOCK, rule.getBlocks()); + if (session.getTagCache().is(set, block)) { + return rule.getCorrectForDrops(); + } } - }; + } + + return false; } - private static double toolBreakTimeBonus(String toolType, String toolTier, boolean isShearsEffective) { - if (toolType.equals("shears")) return isShearsEffective ? 5.0 : 15.0; - if (toolType.isEmpty()) return 1.0; - return switch (toolTier) { - // https://minecraft.wiki/w/Breaking#Speed - case "wooden" -> 2.0; - case "stone" -> 4.0; - case "iron" -> 6.0; - case "diamond" -> 8.0; - case "netherite" -> 9.0; - case "golden" -> 12.0; - default -> 1.0; - }; + private static float getItemDestroySpeed(GeyserSession session, Block block, GeyserItemStack stack) { + ToolData tool = stack.getComponent(DataComponentType.TOOL); + if (tool == null) { + return 1f; + } + + for (ToolData.Rule rule : tool.getRules()) { + if (rule.getSpeed() != null) { + GeyserHolderSet<Block> set = GeyserHolderSet.convertHolderSet(JavaRegistries.BLOCK, rule.getBlocks()); + if (session.getTagCache().is(set, block)) { + return rule.getSpeed(); + } + } + } + + return tool.getDefaultMiningSpeed(); } - private static boolean canToolTierBreakBlock(GeyserSession session, Block block, String toolTier) { - if (toolTier.equals("netherite") || toolTier.equals("diamond")) { - // As of 1.17, these tiers can mine everything that is mineable - return true; + private static float getPlayerDestroySpeed(GeyserSession session, BlockState blockState, GeyserItemStack itemInHand) { + float destroySpeed = getItemDestroySpeed(session, blockState.block(), itemInHand); + EntityEffectCache effectCache = session.getEffectCache(); + + if (destroySpeed > 1.0F) { + destroySpeed += session.getPlayerEntity().attributeOrDefault(GeyserAttributeType.MINING_EFFICIENCY); } - switch (toolTier) { - // Use intentional fall-throughs to check each tier with this block - default: - if (session.getTagCache().is(BlockTag.NEEDS_STONE_TOOL, block)) { - return false; - } - case "stone": - if (session.getTagCache().is(BlockTag.NEEDS_IRON_TOOL, block)) { - return false; - } - case "iron": - if (session.getTagCache().is(BlockTag.NEEDS_DIAMOND_TOOL, block)) { - return false; - } + int miningSpeedMultiplier = getMiningSpeedAmplification(effectCache); + if (miningSpeedMultiplier > 0) { + destroySpeed *= miningSpeedMultiplier * 0.2F; } - return true; + if (effectCache.getMiningFatigue() != 0) { + float slowdown = switch (effectCache.getMiningFatigue()) { + case 1 -> 0.3F; + case 2 -> 0.09F; + case 3 -> 0.0027F; + default -> 8.1E-4F; + }; + destroySpeed *= slowdown; + } + + destroySpeed *= session.getPlayerEntity().attributeOrDefault(GeyserAttributeType.BLOCK_BREAK_SPEED); + if (session.getCollisionManager().isWaterInEyes()) { + destroySpeed *= session.getPlayerEntity().attributeOrDefault(GeyserAttributeType.SUBMERGED_MINING_SPEED); + } + + if (!session.getPlayerEntity().isOnGround()) { + destroySpeed /= 5F; + } + + return destroySpeed; } - // https://minecraft.wiki/w/Breaking - private static double calculateBreakTime(double blockHardness, String toolTier, boolean canHarvestWithHand, boolean correctTool, boolean canTierMineBlock, - String toolType, boolean isShearsEffective, int toolEfficiencyLevel, int hasteLevel, int miningFatigueLevel, - boolean insideOfWaterWithoutAquaAffinity, boolean onGround) { - double baseTime = (((correctTool && canTierMineBlock) || canHarvestWithHand) ? 1.5 : 5.0) * blockHardness; - double speed = 1.0 / baseTime; + private static int getMiningSpeedAmplification(EntityEffectCache cache) { + return Math.max(cache.getHaste(), cache.getConduitPower()); + } - if (correctTool) { - speed *= toolBreakTimeBonus(toolType, toolTier, isShearsEffective); - speed += toolEfficiencyLevel == 0 ? 0 : toolEfficiencyLevel * toolEfficiencyLevel + 1; - } - speed *= 1.0 + (0.2 * hasteLevel); - - switch (miningFatigueLevel) { - case 0: - break; - case 1: - speed -= (speed * 0.7); - break; - case 2: - speed -= (speed * 0.91); - break; - case 3: - speed -= (speed * 0.9973); - break; - default: - speed -= (speed * 0.99919); - break; - } - - if (insideOfWaterWithoutAquaAffinity) speed *= 0.2; - if (!onGround) speed *= 0.2; - return 1.0 / speed; + public int getDestroyStage(GeyserSession session) { + return session.getDestroyProgress() > 0F ? (int) session.getDestroyProgress() * 10 : -1; } // TODO 1.21.4 this changed probably; no more tiers public static double getBreakTime(GeyserSession session, Block block, ItemMapping item, @Nullable DataComponents components, boolean isSessionPlayer) { - boolean isShearsEffective = session.getTagCache().is(BlockTag.LEAVES, block) || session.getTagCache().is(BlockTag.WOOL, block); //TODO called twice - boolean canHarvestWithHand = !block.requiresCorrectToolForDrops(); - String toolType = ""; - String toolTier = ""; - boolean correctTool = false; - boolean toolCanBreak = false; - if (item.isTool()) { - toolType = item.getToolType(); - toolTier = item.getToolTier(); - correctTool = correctTool(session, block, toolType); - toolCanBreak = canToolTierBreakBlock(session, block, toolTier); - } - - int toolEfficiencyLevel = ItemUtils.getEnchantmentLevel(session, components, BedrockEnchantment.EFFICIENCY); - int hasteLevel = 0; - int miningFatigueLevel = 0; - - if (!isSessionPlayer) { - // Another entity is currently mining; we have all the information we know - return calculateBreakTime(block.destroyTime(), toolTier, canHarvestWithHand, correctTool, toolCanBreak, toolType, isShearsEffective, - toolEfficiencyLevel, hasteLevel, miningFatigueLevel, false, true); - } - - hasteLevel = Math.max(session.getEffectCache().getHaste(), session.getEffectCache().getConduitPower()); - miningFatigueLevel = session.getEffectCache().getMiningFatigue(); - - boolean waterInEyes = session.getCollisionManager().isWaterInEyes(); - boolean insideOfWaterWithoutAquaAffinity = waterInEyes && - ItemUtils.getEnchantmentLevel(session, session.getPlayerInventory().getItem(5).getAllComponents(), BedrockEnchantment.AQUA_AFFINITY) < 1; - - return calculateBreakTime(block.destroyTime(), toolTier, canHarvestWithHand, correctTool, toolCanBreak, toolType, isShearsEffective, - toolEfficiencyLevel, hasteLevel, miningFatigueLevel, insideOfWaterWithoutAquaAffinity, session.getPlayerEntity().isOnGround()); +// boolean isShearsEffective = session.getTagCache().is(BlockTag.LEAVES, block) || session.getTagCache().is(BlockTag.WOOL, block); //TODO called twice +// boolean canHarvestWithHand = !block.requiresCorrectToolForDrops(); +// String toolType = ""; +// String toolTier = ""; +// boolean correctTool = false; +// boolean toolCanBreak = false; +// if (item.isTool()) { +// toolType = item.getToolType(); +// toolTier = item.getToolTier(); +// correctTool = correctTool(session, block, toolType); +// toolCanBreak = canToolTierBreakBlock(session, block, toolTier); +// } +// +// int toolEfficiencyLevel = ItemUtils.getEnchantmentLevel(session, components, BedrockEnchantment.EFFICIENCY); +// int hasteLevel = 0; +// int miningFatigueLevel = 0; +// +// if (!isSessionPlayer) { +// // Another entity is currently mining; we have all the information we know +// return calculateBreakTime(block.destroyTime(), toolTier, canHarvestWithHand, correctTool, toolCanBreak, toolType, isShearsEffective, +// toolEfficiencyLevel, hasteLevel, miningFatigueLevel, false, true); +// } +// +// hasteLevel = Math.max(session.getEffectCache().getHaste(), session.getEffectCache().getConduitPower()); +// miningFatigueLevel = session.getEffectCache().getMiningFatigue(); +// +// boolean waterInEyes = session.getCollisionManager().isWaterInEyes(); +// boolean insideOfWaterWithoutAquaAffinity = waterInEyes && +// ItemUtils.getEnchantmentLevel(session, session.getPlayerInventory().getItem(5).getAllComponents(), BedrockEnchantment.AQUA_AFFINITY) < 1; +// +// return calculateBreakTime(block.destroyTime(), toolTier, canHarvestWithHand, correctTool, toolCanBreak, toolType, isShearsEffective, +// toolEfficiencyLevel, hasteLevel, miningFatigueLevel, insideOfWaterWithoutAquaAffinity, session.getPlayerEntity().isOnGround()); } public static double getSessionBreakTime(GeyserSession session, Block block) { - PlayerInventory inventory = session.getPlayerInventory(); - GeyserItemStack item = inventory.getItemInHand(); - ItemMapping mapping = ItemMapping.AIR; - DataComponents components = null; - if (item != null) { - mapping = item.getMapping(session); - components = item.getAllComponents(); - } - return getBreakTime(session, block, mapping, components, true); +// PlayerInventory inventory = session.getPlayerInventory(); +// GeyserItemStack item = inventory.getItemInHand(); +// ItemMapping mapping = ItemMapping.AIR; +// DataComponents components = null; +// if (item != null) { +// mapping = item.getMapping(session); +// components = item.getAllComponents(); +// } +// return getBreakTime(session, block, mapping, components, true); } /** From 650cb8d4733f52fa19020a0cf4c8631e205b65fa Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Tue, 3 Dec 2024 18:35:02 +0800 Subject: [PATCH 088/165] remove isValidRepairItem in favor of component, remove unneeded item tiers, deprecate repair items and tool tier in NonVanillaCustomItemData --- .../item/custom/NonVanillaCustomItemData.java | 10 ++- .../java/org/geysermc/geyser/item/Items.java | 6 +- .../geyser/item/components/ToolTier.java | 64 ------------------- .../geysermc/geyser/item/type/ArmorItem.java | 10 +-- .../geyser/item/type/DyeableArmorItem.java | 5 +- .../geysermc/geyser/item/type/ElytraItem.java | 39 ----------- .../geysermc/geyser/item/type/LightItem.java | 1 - .../geysermc/geyser/item/type/MaceItem.java | 39 ----------- .../geysermc/geyser/item/type/ShieldItem.java | 7 -- .../geysermc/geyser/item/type/TieredItem.java | 46 ------------- .../geyser/item/type/WolfArmorItem.java | 5 +- .../CustomItemRegistryPopulator.java | 18 +++--- .../geyser/registry/type/ItemMapping.java | 2 - 13 files changed, 19 insertions(+), 233 deletions(-) delete mode 100644 core/src/main/java/org/geysermc/geyser/item/components/ToolTier.java delete mode 100644 core/src/main/java/org/geysermc/geyser/item/type/ElytraItem.java delete mode 100644 core/src/main/java/org/geysermc/geyser/item/type/MaceItem.java delete mode 100644 core/src/main/java/org/geysermc/geyser/item/type/TieredItem.java 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 2c283780c..2fff247a7 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 @@ -80,10 +80,9 @@ public interface NonVanillaCustomItemData extends CustomItemData { @Nullable String toolType(); /** - * Gets the tool tier of the item. - * - * @return the tool tier of the item + * @deprecated no longer used */ + @Deprecated(forRemoval = true) @Nullable String toolTier(); /** @@ -108,10 +107,9 @@ public interface NonVanillaCustomItemData extends CustomItemData { @Nullable String translationString(); /** - * Gets the repair materials of the item. - * - * @return the repair materials of the item + * @deprecated No longer used. */ + @Deprecated(forRemoval = true) @Nullable Set<String> repairMaterials(); /** 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 4a2d5827a..5cdb6c4ce 100644 --- a/core/src/main/java/org/geysermc/geyser/item/Items.java +++ b/core/src/main/java/org/geysermc/geyser/item/Items.java @@ -36,7 +36,6 @@ import org.geysermc.geyser.item.type.CrossbowItem; import org.geysermc.geyser.item.type.DecoratedPotItem; import org.geysermc.geyser.item.type.DyeItem; import org.geysermc.geyser.item.type.DyeableArmorItem; -import org.geysermc.geyser.item.type.ElytraItem; import org.geysermc.geyser.item.type.EnchantedBookItem; import org.geysermc.geyser.item.type.FilledMapItem; import org.geysermc.geyser.item.type.FireworkRocketItem; @@ -44,7 +43,6 @@ import org.geysermc.geyser.item.type.FireworkStarItem; import org.geysermc.geyser.item.type.FishingRodItem; import org.geysermc.geyser.item.type.GoatHornItem; import org.geysermc.geyser.item.type.Item; -import org.geysermc.geyser.item.type.MaceItem; import org.geysermc.geyser.item.type.MapItem; import org.geysermc.geyser.item.type.PlayerHeadItem; import org.geysermc.geyser.item.type.PotionItem; @@ -873,7 +871,7 @@ public final class Items { public static final Item CARROT_ON_A_STICK = register(new Item("carrot_on_a_stick", builder())); public static final Item WARPED_FUNGUS_ON_A_STICK = register(new Item("warped_fungus_on_a_stick", builder())); public static final Item PHANTOM_MEMBRANE = register(new Item("phantom_membrane", builder())); - public static final Item ELYTRA = register(new ElytraItem("elytra", builder())); + public static final Item ELYTRA = register(new Item("elytra", builder())); public static final Item OAK_BOAT = register(new BoatItem("oak_boat", builder())); public static final Item OAK_CHEST_BOAT = register(new BoatItem("oak_chest_boat", builder())); public static final Item SPRUCE_BOAT = register(new BoatItem("spruce_boat", builder())); @@ -1215,7 +1213,7 @@ public final class Items { public static final Item WRITABLE_BOOK = register(new WritableBookItem("writable_book", builder())); public static final Item WRITTEN_BOOK = register(new WrittenBookItem("written_book", builder())); public static final Item BREEZE_ROD = register(new Item("breeze_rod", builder())); - public static final Item MACE = register(new MaceItem("mace", builder())); + public static final Item MACE = register(new Item("mace", builder())); public static final Item ITEM_FRAME = register(new Item("item_frame", builder())); public static final Item GLOW_ITEM_FRAME = register(new Item("glow_item_frame", builder())); public static final Item FLOWER_POT = register(new BlockItem(builder(), Blocks.FLOWER_POT)); 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 deleted file mode 100644 index a8832df1e..000000000 --- a/core/src/main/java/org/geysermc/geyser/item/components/ToolTier.java +++ /dev/null @@ -1,64 +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 com.google.common.base.Suppliers; -import org.geysermc.geyser.item.Items; -import org.geysermc.geyser.item.type.Item; - -import java.util.Collections; -import java.util.Locale; -import java.util.Set; -import java.util.function.Supplier; - -public enum ToolTier { - WOODEN(2, () -> Set.of(Items.OAK_PLANKS, Items.SPRUCE_PLANKS, Items.BIRCH_PLANKS, Items.JUNGLE_PLANKS, Items.ACACIA_PLANKS, Items.DARK_OAK_PLANKS, Items.CRIMSON_PLANKS, Items.WARPED_PLANKS, Items.MANGROVE_PLANKS)), // PLANKS tag // TODO ? - STONE(4, () -> Set.of(Items.COBBLESTONE, Items.BLACKSTONE, Items.COBBLED_DEEPSLATE)), // STONE_TOOL_MATERIALS tag - IRON(6, () -> Collections.singleton(Items.IRON_INGOT)), - GOLDEN(12, () -> Collections.singleton(Items.GOLD_INGOT)), - DIAMOND(8, () -> Collections.singleton(Items.DIAMOND)), - NETHERITE(9, () -> Collections.singleton(Items.NETHERITE_INGOT)); - - private static final ToolTier[] VALUES = values(); - - private final int speed; - private final Supplier<Set<Item>> repairIngredients; - - ToolTier(int speed, Supplier<Set<Item>> repairIngredients) { - this.speed = speed; - // Lazily initialize as this will likely be called as items are loading - this.repairIngredients = Suppliers.memoize(repairIngredients::get); - } - - public Set<Item> getRepairIngredients() { - return repairIngredients.get(); - } - - @Override - public String toString() { - return this.name().toLowerCase(Locale.ROOT); - } -} diff --git a/core/src/main/java/org/geysermc/geyser/item/type/ArmorItem.java b/core/src/main/java/org/geysermc/geyser/item/type/ArmorItem.java index 0a25a8d4f..ec87728a9 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/ArmorItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/ArmorItem.java @@ -30,7 +30,6 @@ import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.protocol.bedrock.data.TrimMaterial; import org.cloudburstmc.protocol.bedrock.data.TrimPattern; -import org.geysermc.geyser.item.ArmorMaterial; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.mcprotocollib.protocol.data.game.item.component.ArmorTrim; @@ -38,11 +37,9 @@ import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponen import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; public class ArmorItem extends Item { - private final ArmorMaterial material; - public ArmorItem(String javaIdentifier, ArmorMaterial material, Builder builder) { + public ArmorItem(String javaIdentifier, Builder builder) { super(javaIdentifier, builder); - this.material = material; } @Override @@ -68,11 +65,6 @@ public class ArmorItem extends Item { } } - @Override - public boolean isValidRepairItem(Item other) { - return material.getRepairIngredient() == other; - } - // TODO maybe some kind of namespace util? private static String getNamespace(String identifier) { int i = identifier.indexOf(':'); diff --git a/core/src/main/java/org/geysermc/geyser/item/type/DyeableArmorItem.java b/core/src/main/java/org/geysermc/geyser/item/type/DyeableArmorItem.java index 8c63eaeb0..480385d07 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/DyeableArmorItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/DyeableArmorItem.java @@ -26,14 +26,13 @@ package org.geysermc.geyser.item.type; import org.checkerframework.checker.nullness.qual.NonNull; -import org.geysermc.geyser.item.ArmorMaterial; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; public class DyeableArmorItem extends ArmorItem { - public DyeableArmorItem(String javaIdentifier, ArmorMaterial material, Builder builder) { - super(javaIdentifier, material, builder); + public DyeableArmorItem(String javaIdentifier, Builder builder) { + super(javaIdentifier, builder); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/item/type/ElytraItem.java b/core/src/main/java/org/geysermc/geyser/item/type/ElytraItem.java deleted file mode 100644 index e5d94eb8b..000000000 --- a/core/src/main/java/org/geysermc/geyser/item/type/ElytraItem.java +++ /dev/null @@ -1,39 +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.type; - -import org.geysermc.geyser.item.Items; - -public class ElytraItem extends Item { - public ElytraItem(String javaIdentifier, Builder builder) { - super(javaIdentifier, builder); - } - - @Override - public boolean isValidRepairItem(Item other) { - return other == Items.PHANTOM_MEMBRANE; - } -} diff --git a/core/src/main/java/org/geysermc/geyser/item/type/LightItem.java b/core/src/main/java/org/geysermc/geyser/item/type/LightItem.java index fa10b08b1..d176ff367 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/LightItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/LightItem.java @@ -60,7 +60,6 @@ public class LightItem extends BlockItem { return super.toBedrockDefinition(components, mappings); } - private static ItemMapping getLightLevelMapping(DataComponents components, ItemMappings mappings) { String lightLevel = "15"; if (components != null) { diff --git a/core/src/main/java/org/geysermc/geyser/item/type/MaceItem.java b/core/src/main/java/org/geysermc/geyser/item/type/MaceItem.java deleted file mode 100644 index e7b9a8684..000000000 --- a/core/src/main/java/org/geysermc/geyser/item/type/MaceItem.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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.item.type; - -import org.geysermc.geyser.item.Items; - -public class MaceItem extends Item { - public MaceItem(String javaIdentifier, Builder builder) { - super(javaIdentifier, builder); - } - - @Override - public boolean isValidRepairItem(Item other) { - return other == Items.BREEZE_ROD; - } -} diff --git a/core/src/main/java/org/geysermc/geyser/item/type/ShieldItem.java b/core/src/main/java/org/geysermc/geyser/item/type/ShieldItem.java index 14d41a073..98ef80d95 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/ShieldItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/ShieldItem.java @@ -26,7 +26,6 @@ package org.geysermc.geyser.item.type; import org.checkerframework.checker.nullness.qual.NonNull; -import org.geysermc.geyser.item.components.ToolTier; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.mcprotocollib.protocol.data.game.item.component.BannerPatternLayer; @@ -54,10 +53,4 @@ public class ShieldItem extends Item { builder.putInt("Base", 15 - baseColor); } } - - @Override - public boolean isValidRepairItem(Item other) { - // Java Edition 1.19.3 checks the tag, but TODO check to see if we want it or are simulating what Bedrock is doing - return ToolTier.WOODEN.getRepairIngredients().contains(other); - } } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/TieredItem.java b/core/src/main/java/org/geysermc/geyser/item/type/TieredItem.java deleted file mode 100644 index d998eb0d4..000000000 --- a/core/src/main/java/org/geysermc/geyser/item/type/TieredItem.java +++ /dev/null @@ -1,46 +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.type; - -import org.geysermc.geyser.item.components.ToolTier; - -public class TieredItem extends Item { - private final ToolTier tier; - - public TieredItem(String javaIdentifier, ToolTier tier, Builder builder) { - super(javaIdentifier, builder); - this.tier = tier; - } - - public ToolTier tier() { - return tier; - } - - @Override - public boolean isValidRepairItem(Item other) { - return tier.getRepairIngredients().contains(other); - } -} diff --git a/core/src/main/java/org/geysermc/geyser/item/type/WolfArmorItem.java b/core/src/main/java/org/geysermc/geyser/item/type/WolfArmorItem.java index bd97a6a7d..52ded0407 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/WolfArmorItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/WolfArmorItem.java @@ -26,14 +26,13 @@ package org.geysermc.geyser.item.type; import org.checkerframework.checker.nullness.qual.NonNull; -import org.geysermc.geyser.item.ArmorMaterial; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; public class WolfArmorItem extends ArmorItem { - public WolfArmorItem(String javaIdentifier, ArmorMaterial material, Builder builder) { - super(javaIdentifier, material, builder); + public WolfArmorItem(String javaIdentifier, Builder builder) { + super(javaIdentifier, builder); } @Override 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 ec094ea31..3d2ca4ef9 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 @@ -51,7 +51,13 @@ import org.geysermc.geyser.registry.type.NonVanillaItemRegistration; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; public class CustomItemRegistryPopulator { public static void populate(Map<String, GeyserMappingItem> items, Multimap<String, CustomItemData> customItems, List<NonVanillaCustomItemData> nonVanillaCustomItems) { @@ -129,18 +135,11 @@ public class CustomItemRegistryPopulator { public static NonVanillaItemRegistration registerCustomItem(NonVanillaCustomItemData customItemData, int customItemId, int protocolVersion) { String customIdentifier = customItemData.identifier(); - Set<String> repairMaterials = customItemData.repairMaterials(); - DataComponents components = new DataComponents(new HashMap<>()); components.put(DataComponentType.MAX_STACK_SIZE, customItemData.stackSize()); components.put(DataComponentType.MAX_DAMAGE, customItemData.maxDamage()); - Item item = new Item(customIdentifier, Item.builder().components(components)) { - @Override - public boolean isValidRepairItem(Item other) { - return repairMaterials != null && repairMaterials.contains(other.javaIdentifier()); - } - }; + Item item = new Item(customIdentifier, Item.builder().components(components)); Items.register(item, customItemData.javaId()); ItemMapping customItemMapping = ItemMapping.builder() @@ -148,7 +147,6 @@ public class CustomItemRegistryPopulator { .bedrockData(0) .bedrockBlockDefinition(null) .toolType(customItemData.toolType()) - .toolTier(customItemData.toolTier()) .translationString(customItemData.translationString()) .customItemOptions(Collections.emptyList()) .javaItem(item) diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/ItemMapping.java b/core/src/main/java/org/geysermc/geyser/registry/type/ItemMapping.java index 8a2c77f28..d940db6e0 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/ItemMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/ItemMapping.java @@ -52,7 +52,6 @@ public class ItemMapping { null, // Air is never sent in full over the network for this to serialize. null, null, - null, Collections.emptyList(), Items.AIR ); @@ -68,7 +67,6 @@ public class ItemMapping { BlockDefinition bedrockBlockDefinition; String toolType; - String toolTier; String translationString; From 9e276c10777ddf73dacb4d35769f1801d42882d6 Mon Sep 17 00:00:00 2001 From: chris <github@onechris.mozmail.com> Date: Tue, 3 Dec 2024 20:37:05 +0800 Subject: [PATCH 089/165] Feature: 1.21.50 support (#5180) * Drop pre-1.21.40 support, start adapting to 1.21.50 changes * fix camera definitions * remove more old workarounds, make it compile * Add 1.21.50 data files * Add item tags, update block registry populator * finishing touches * Don't add items to the creative inventory that we don't have a Java mapping for * fix readme typo --- README.md | 2 +- .../type/player/SessionPlayerEntity.java | 8 +- .../SessionLoadResourcePacksEventImpl.java | 12 +- .../geyser/impl/camera/CameraDefinitions.java | 15 +- .../level/physics/CollisionManager.java | 34 - .../geysermc/geyser/network/GameProtocol.java | 48 +- .../geyser/network/UpstreamPacketHandler.java | 22 +- .../geysermc/geyser/registry/Registries.java | 3 +- .../registry/loader/ResourcePackLoader.java | 9 +- .../populator/BlockRegistryPopulator.java | 35 +- .../registry/populator/Conversion685_671.java | 220 - .../registry/populator/Conversion712_685.java | 439 -- .../registry/populator/Conversion729_712.java | 152 - .../CreativeItemRegistryPopulator.java | 28 +- .../populator/ItemRegistryPopulator.java | 21 +- .../populator/TagRegistryPopulator.java | 12 +- .../geyser/session/GeyserSession.java | 4 +- .../inventory/InventoryTranslator.java | 20 +- .../entity/SkullBlockEntityTranslator.java | 5 - .../player/input/BedrockMovePlayer.java | 29 +- .../entity/JavaSetEquipmentTranslator.java | 8 +- .../resources/bedrock/biome_definitions.dat | Bin 37653 -> 37891 bytes .../bedrock/block_palette.1_20_80.nbt | Bin 176786 -> 0 bytes .../bedrock/block_palette.1_21_0.nbt | Bin 177397 -> 0 bytes .../bedrock/block_palette.1_21_20.nbt | Bin 178977 -> 0 bytes .../bedrock/block_palette.1_21_30.nbt | Bin 180490 -> 0 bytes .../bedrock/block_palette.1_21_50.nbt | Bin 0 -> 192451 bytes .../bedrock/creative_items.1_20_80.json | 5812 -------------- .../bedrock/creative_items.1_21_0.json | 6214 --------------- .../bedrock/creative_items.1_21_20.json | 6214 --------------- ...21_30.json => creative_items.1_21_50.json} | 3049 ++++---- .../resources/bedrock/entity_identifiers.dat | Bin 8314 -> 8378 bytes .../resources/bedrock/item_tags.1_20_80.json | 784 -- .../resources/bedrock/item_tags.1_21_0.json | 802 -- .../resources/bedrock/item_tags.1_21_20.json | 806 -- ...gs.1_21_30.json => item_tags.1_21_50.json} | 126 +- .../bedrock/runtime_item_states.1_20_80.json | 6274 --------------- .../bedrock/runtime_item_states.1_21_0.json | 6398 ---------------- .../bedrock/runtime_item_states.1_21_20.json | 6794 ----------------- ....json => runtime_item_states.1_21_50.json} | 1288 ++-- gradle.properties | 2 +- gradle/libs.versions.toml | 6 +- 42 files changed, 2563 insertions(+), 43132 deletions(-) delete mode 100644 core/src/main/java/org/geysermc/geyser/registry/populator/Conversion685_671.java delete mode 100644 core/src/main/java/org/geysermc/geyser/registry/populator/Conversion712_685.java delete mode 100644 core/src/main/java/org/geysermc/geyser/registry/populator/Conversion729_712.java delete mode 100644 core/src/main/resources/bedrock/block_palette.1_20_80.nbt delete mode 100644 core/src/main/resources/bedrock/block_palette.1_21_0.nbt delete mode 100644 core/src/main/resources/bedrock/block_palette.1_21_20.nbt delete mode 100644 core/src/main/resources/bedrock/block_palette.1_21_30.nbt create mode 100644 core/src/main/resources/bedrock/block_palette.1_21_50.nbt delete mode 100644 core/src/main/resources/bedrock/creative_items.1_20_80.json delete mode 100644 core/src/main/resources/bedrock/creative_items.1_21_0.json delete mode 100644 core/src/main/resources/bedrock/creative_items.1_21_20.json rename core/src/main/resources/bedrock/{creative_items.1_21_30.json => creative_items.1_21_50.json} (84%) delete mode 100644 core/src/main/resources/bedrock/item_tags.1_20_80.json delete mode 100644 core/src/main/resources/bedrock/item_tags.1_21_0.json delete mode 100644 core/src/main/resources/bedrock/item_tags.1_21_20.json rename core/src/main/resources/bedrock/{item_tags.1_21_30.json => item_tags.1_21_50.json} (99%) delete mode 100644 core/src/main/resources/bedrock/runtime_item_states.1_20_80.json delete mode 100644 core/src/main/resources/bedrock/runtime_item_states.1_21_0.json delete mode 100644 core/src/main/resources/bedrock/runtime_item_states.1_21_20.json rename core/src/main/resources/bedrock/{runtime_item_states.1_21_30.json => runtime_item_states.1_21_50.json} (96%) diff --git a/README.md b/README.md index d0bcb1fdc..83a1d5c0b 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,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! ## Supported Versions -Geyser is currently supporting Minecraft Bedrock 1.20.80 - 1.21.44 and Minecraft Java 1.21.2/1.21.3. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). +Geyser is currently supporting Minecraft Bedrock 1.21.40 - 1.21.50 and Minecraft Java 1.21.2/1.21.3. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). ## Setting Up Take a look [here](https://geysermc.org/wiki/geyser/setup/) for how to set up Geyser. 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 9d5bc011c..6e5e55f03 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 @@ -39,7 +39,6 @@ import org.cloudburstmc.protocol.bedrock.packet.UpdateAttributesPacket; import org.geysermc.geyser.entity.attribute.GeyserAttributeType; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.level.BedrockDimension; -import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.AttributeUtils; import org.geysermc.geyser.util.DimensionUtils; @@ -235,12 +234,7 @@ public class SessionPlayerEntity extends PlayerEntity { // the bubbles visually pop setFlag(EntityFlag.BREATHING, amount >= this.lastAirSupply); this.lastAirSupply = amount; - - if (amount == getMaxAir() && GameProtocol.isPre1_21_0(session)) { - super.setAirSupply(0); // Hide the bubble counter from the UI for the player - } else { - super.setAirSupply(amount); - } + super.setAirSupply(amount); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/event/type/SessionLoadResourcePacksEventImpl.java b/core/src/main/java/org/geysermc/geyser/event/type/SessionLoadResourcePacksEventImpl.java index 5ed0f8d22..5bc0dd0bd 100644 --- a/core/src/main/java/org/geysermc/geyser/event/type/SessionLoadResourcePacksEventImpl.java +++ b/core/src/main/java/org/geysermc/geyser/event/type/SessionLoadResourcePacksEventImpl.java @@ -36,14 +36,14 @@ import java.util.UUID; public class SessionLoadResourcePacksEventImpl extends SessionLoadResourcePacksEvent { - private final Map<String, ResourcePack> packs; + private final Map<UUID, ResourcePack> packs; - public SessionLoadResourcePacksEventImpl(GeyserSession session, Map<String, ResourcePack> packMap) { + public SessionLoadResourcePacksEventImpl(GeyserSession session, Map<UUID, ResourcePack> packMap) { super(session); this.packs = packMap; } - public @NonNull Map<String, ResourcePack> getPacks() { + public @NonNull Map<UUID, ResourcePack> getPacks() { return packs; } @@ -54,16 +54,16 @@ public class SessionLoadResourcePacksEventImpl extends SessionLoadResourcePacksE @Override public boolean register(@NonNull ResourcePack resourcePack) { - String packID = resourcePack.manifest().header().uuid().toString(); + UUID packID = resourcePack.manifest().header().uuid(); if (packs.containsValue(resourcePack) || packs.containsKey(packID)) { return false; } - packs.put(resourcePack.manifest().header().uuid().toString(), resourcePack); + packs.put(resourcePack.manifest().header().uuid(), resourcePack); return true; } @Override public boolean unregister(@NonNull UUID uuid) { - return packs.remove(uuid.toString()) != null; + return packs.remove(uuid) != null; } } 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 index ee20c14a2..346b971cc 100644 --- a/core/src/main/java/org/geysermc/geyser/impl/camera/CameraDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/impl/camera/CameraDefinitions.java @@ -43,13 +43,14 @@ public class CameraDefinitions { static { CAMERA_PRESETS = List.of( - new CameraPreset(CameraPerspective.FIRST_PERSON.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()), - new CameraPreset(CameraPerspective.FREE.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()), - new CameraPreset(CameraPerspective.THIRD_PERSON.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()), - new CameraPreset(CameraPerspective.THIRD_PERSON_FRONT.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()), - new CameraPreset("geyser:free_audio", "minecraft:free", null, null, null, null, null, CameraAudioListener.PLAYER, OptionalBoolean.empty(), null, OptionalBoolean.of(false), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()), - new CameraPreset("geyser:free_effects", "minecraft:free", null, null, null, null, null, CameraAudioListener.CAMERA, OptionalBoolean.empty(), null, OptionalBoolean.of(true), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()), - new CameraPreset("geyser:free_audio_effects", "minecraft:free", null, null, null, null, null, CameraAudioListener.PLAYER, OptionalBoolean.empty(), null, OptionalBoolean.of(true), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty())); + CameraPreset.builder().identifier(CameraPerspective.FIRST_PERSON.id()).build(), + CameraPreset.builder().identifier(CameraPerspective.FREE.id()).build(), + CameraPreset.builder().identifier(CameraPerspective.THIRD_PERSON.id()).build(), + CameraPreset.builder().identifier(CameraPerspective.THIRD_PERSON_FRONT.id()).build(), + CameraPreset.builder().identifier("geyser:free_audio").parentPreset(CameraPerspective.FREE.id()).listener(CameraAudioListener.PLAYER).playEffect(OptionalBoolean.of(false)).build(), + CameraPreset.builder().identifier("geyser:free_effects").parentPreset(CameraPerspective.FREE.id()).listener(CameraAudioListener.CAMERA).playEffect(OptionalBoolean.of(true)).build(), + CameraPreset.builder().identifier("geyser:free_audio_effects").parentPreset(CameraPerspective.FREE.id()).listener(CameraAudioListener.PLAYER).playEffect(OptionalBoolean.of(true)).build() + ); SimpleDefinitionRegistry.Builder<NamedDefinition> builder = SimpleDefinitionRegistry.builder(); for (int i = 0; i < CAMERA_PRESETS.size(); i++) { 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 69f88e2a1..ff6557935 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 @@ -416,40 +416,6 @@ public class CollisionManager { return BlockUtils.getCollision(blockId); } - public boolean isOnGround() { - // Temporary until pre-1.21.30 support is dropped. - Vector3d bottomCenter = playerBoundingBox.getBottomCenter(); - Vector3i groundPos = Vector3i.from(bottomCenter.getX(), bottomCenter.getY() - 1, bottomCenter.getZ()); - BlockCollision collision = BlockUtils.getCollisionAt(session, groundPos); - if (collision == null) { - return false; // Probably air. - } - - // Hack to not check below the player - playerBoundingBox.setSizeY(playerBoundingBox.getSizeY() - 0.001); - playerBoundingBox.setMiddleY(playerBoundingBox.getMiddleY() + 0.002); - - boolean intersected = collision.checkIntersection(groundPos.getX(), groundPos.getY(), groundPos.getZ(), playerBoundingBox); - - playerBoundingBox.setSizeY(playerBoundingBox.getSizeY() + 0.001); - playerBoundingBox.setMiddleY(playerBoundingBox.getMiddleY() - 0.002); - - boolean result; - if (intersected) { - result = true; - } else { - // Hack to check slightly below the player - playerBoundingBox.setSizeY(playerBoundingBox.getSizeY() + 0.001); - playerBoundingBox.setMiddleY(playerBoundingBox.getMiddleY() - 0.002); - - result = collision.checkIntersection(groundPos.getX(), groundPos.getY(), groundPos.getZ(), playerBoundingBox); - - playerBoundingBox.setSizeY(playerBoundingBox.getSizeY() - 0.001); - playerBoundingBox.setMiddleY(playerBoundingBox.getMiddleY() + 0.002); - } - return result; - } - /** * @return if the player is currently in a water block */ 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 463cc54fd..378dc5078 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -27,14 +27,9 @@ package org.geysermc.geyser.network; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; -import org.cloudburstmc.protocol.bedrock.codec.v671.Bedrock_v671; -import org.cloudburstmc.protocol.bedrock.codec.v685.Bedrock_v685; -import org.cloudburstmc.protocol.bedrock.codec.v686.Bedrock_v686; -import org.cloudburstmc.protocol.bedrock.codec.v712.Bedrock_v712; -import org.cloudburstmc.protocol.bedrock.codec.v729.Bedrock_v729; import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748; +import org.cloudburstmc.protocol.bedrock.codec.v765.Bedrock_v765; import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec; -import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodec; import org.geysermc.mcprotocollib.protocol.codec.PacketCodec; @@ -51,8 +46,9 @@ 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 = CodecProcessor.processCodec(Bedrock_v748.CODEC.toBuilder() - .minecraftVersion("1.21.44") + public static final BedrockCodec DEFAULT_BEDROCK_CODEC = CodecProcessor.processCodec(Bedrock_v765.CODEC.toBuilder() + .minecraftVersion("1.21.50") + .protocolVersion(766) .build()); /** @@ -67,24 +63,10 @@ public final class GameProtocol { private static final PacketCodec DEFAULT_JAVA_CODEC = MinecraftCodec.CODEC; static { - SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v671.CODEC.toBuilder() - .minecraftVersion("1.20.80/1.20.81") - .build())); - SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v685.CODEC.toBuilder() - .minecraftVersion("1.21.0/1.21.1") - .build())); - SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v686.CODEC.toBuilder() - .minecraftVersion("1.21.2/1.21.3") - .build())); - SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v712.CODEC.toBuilder() - .minecraftVersion("1.21.20 - 1.21.23") - .build())); - SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v729.CODEC.toBuilder() - .minecraftVersion("1.21.30/1.21.31") - .build())); - SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC.toBuilder() + SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v748.CODEC.toBuilder() .minecraftVersion("1.21.40 - 1.21.44") - .build()); + .build())); + SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC); } /** @@ -103,22 +85,6 @@ public final class GameProtocol { /* Bedrock convenience methods to gatekeep features and easily remove the check on version removal */ - public static boolean isPre1_21_0(GeyserSession session) { - return session.getUpstream().getProtocolVersion() < Bedrock_v685.CODEC.getProtocolVersion(); - } - - public static boolean isPre1_21_2(GeyserSession session) { - return session.getUpstream().getProtocolVersion() < Bedrock_v686.CODEC.getProtocolVersion(); - } - - public static boolean isPre1_21_30(GeyserSession session) { - return session.getUpstream().getProtocolVersion() < Bedrock_v729.CODEC.getProtocolVersion(); - } - - public static boolean isPre1_21_40(GeyserSession session) { - return session.getUpstream().getProtocolVersion() < Bedrock_v748.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 1ac38aa35..0cf161c6a 100644 --- a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java @@ -77,11 +77,12 @@ import java.util.ArrayDeque; import java.util.Deque; import java.util.HashMap; import java.util.OptionalInt; +import java.util.UUID; public class UpstreamPacketHandler extends LoggingPacketHandler { private boolean networkSettingsRequested = false; - private final Deque<String> packsToSent = new ArrayDeque<>(); + private final Deque<String> packsToSend = new ArrayDeque<>(); private final CompressionStrategy compressionStrategy; private SessionLoadResourcePacksEventImpl resourcePackLoadEvent; @@ -133,8 +134,6 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { } session.getUpstream().getSession().setCodec(packetCodec); - // FIXME temporary until 1.20.80 is dropped - session.getPlayerEntity().resetAir(); return true; } @@ -209,10 +208,12 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { PackCodec codec = pack.codec(); ResourcePackManifest.Header header = pack.manifest().header(); resourcePacksInfo.getResourcePackInfos().add(new ResourcePacksInfoPacket.Entry( - header.uuid().toString(), header.version().toString(), codec.size(), pack.contentKey(), + header.uuid(), header.version().toString(), codec.size(), pack.contentKey(), "", header.uuid().toString(), false, false, false, "")); } resourcePacksInfo.setForcedToAccept(GeyserImpl.getInstance().getConfig().isForceResourcePacks()); + resourcePacksInfo.setWorldTemplateId(UUID.randomUUID()); + resourcePacksInfo.setWorldTemplateVersion("*"); session.sendUpstreamPacket(resourcePacksInfo); GeyserLocale.loadGeyserLocale(session.locale()); @@ -233,8 +234,8 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { break; case SEND_PACKS: - packsToSent.addAll(packet.getPackIds()); - sendPackDataInfo(packsToSent.pop()); + packsToSend.addAll(packet.getPackIds()); + sendPackDataInfo(packsToSend.pop()); break; case HAVE_ALL_PACKS: @@ -311,7 +312,7 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { @Override public PacketSignal handle(ResourcePackChunkRequestPacket packet) { ResourcePackChunkDataPacket data = new ResourcePackChunkDataPacket(); - ResourcePack pack = this.resourcePackLoadEvent.getPacks().get(packet.getPackId().toString()); + ResourcePack pack = this.resourcePackLoadEvent.getPacks().get(packet.getPackId()); PackCodec codec = pack.codec(); data.setChunkIndex(packet.getChunkIndex()); @@ -335,8 +336,8 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { session.sendUpstreamPacket(data); // Check if it is the last chunk and send next pack in queue when available. - if (remainingSize <= GeyserResourcePack.CHUNK_SIZE && !packsToSent.isEmpty()) { - sendPackDataInfo(packsToSent.pop()); + if (remainingSize <= GeyserResourcePack.CHUNK_SIZE && !packsToSend.isEmpty()) { + sendPackDataInfo(packsToSend.pop()); } return PacketSignal.HANDLED; @@ -345,7 +346,8 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { private void sendPackDataInfo(String id) { ResourcePackDataInfoPacket data = new ResourcePackDataInfoPacket(); String[] packID = id.split("_"); - ResourcePack pack = this.resourcePackLoadEvent.getPacks().get(packID[0]); + UUID uuid = UUID.fromString(packID[0]); + ResourcePack pack = this.resourcePackLoadEvent.getPacks().get(uuid); PackCodec codec = pack.codec(); ResourcePackManifest.Header header = pack.manifest().header(); diff --git a/core/src/main/java/org/geysermc/geyser/registry/Registries.java b/core/src/main/java/org/geysermc/geyser/registry/Registries.java index b0ae0d6aa..61bb42454 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/Registries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/Registries.java @@ -70,6 +70,7 @@ import java.util.HashSet; import java.util.IdentityHashMap; import java.util.Map; import java.util.Set; +import java.util.UUID; /** * Holds all the common registries in Geyser. @@ -163,7 +164,7 @@ public final class Registries { /** * A mapped registry holding {@link ResourcePack}'s with the pack uuid as keys. */ - public static final SimpleMappedDeferredRegistry<String, ResourcePack> RESOURCE_PACKS = SimpleMappedDeferredRegistry.create(GeyserImpl.getInstance().packDirectory(), RegistryLoaders.RESOURCE_PACKS); + public static final SimpleMappedDeferredRegistry<UUID, ResourcePack> RESOURCE_PACKS = SimpleMappedDeferredRegistry.create(GeyserImpl.getInstance().packDirectory(), RegistryLoaders.RESOURCE_PACKS); /** * A versioned registry holding most Bedrock tags, with the Java item list (sorted) being the key, and the tag name as the value. diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/ResourcePackLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/ResourcePackLoader.java index 800a3d22c..adb64b8af 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/ResourcePackLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/ResourcePackLoader.java @@ -45,6 +45,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.UUID; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -54,7 +55,7 @@ import java.util.zip.ZipFile; /** * Loads {@link ResourcePack}s within a {@link Path} directory, firing the {@link GeyserLoadResourcePacksEvent}. */ -public class ResourcePackLoader implements RegistryLoader<Path, Map<String, ResourcePack>> { +public class ResourcePackLoader implements RegistryLoader<Path, Map<UUID, ResourcePack>> { static final PathMatcher PACK_MATCHER = FileSystems.getDefault().getPathMatcher("glob:**.{zip,mcpack}"); @@ -64,8 +65,8 @@ public class ResourcePackLoader implements RegistryLoader<Path, Map<String, Reso * Loop through the packs directory and locate valid resource pack files */ @Override - public Map<String, ResourcePack> load(Path directory) { - Map<String, ResourcePack> packMap = new HashMap<>(); + public Map<UUID, ResourcePack> load(Path directory) { + Map<UUID, ResourcePack> packMap = new HashMap<>(); if (!Files.exists(directory)) { try { @@ -100,7 +101,7 @@ public class ResourcePackLoader implements RegistryLoader<Path, Map<String, Reso for (Path path : event.resourcePacks()) { try { GeyserResourcePack pack = readPack(path); - packMap.put(pack.manifest().header().uuid().toString(), pack); + packMap.put(pack.manifest().header().uuid(), pack); } catch (Exception e) { e.printStackTrace(); } 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 5b7213bee..1723b22ed 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 @@ -44,11 +44,8 @@ import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.nbt.NbtUtils; -import org.cloudburstmc.protocol.bedrock.codec.v671.Bedrock_v671; -import org.cloudburstmc.protocol.bedrock.codec.v685.Bedrock_v685; -import org.cloudburstmc.protocol.bedrock.codec.v712.Bedrock_v712; -import org.cloudburstmc.protocol.bedrock.codec.v729.Bedrock_v729; import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748; +import org.cloudburstmc.protocol.bedrock.codec.v765.Bedrock_v765; import org.cloudburstmc.protocol.bedrock.data.BlockPropertyData; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.geysermc.geyser.GeyserImpl; @@ -69,6 +66,7 @@ import org.geysermc.geyser.registry.type.BlockMappings; import org.geysermc.geyser.registry.type.GeyserBedrockBlock; import org.geysermc.geyser.util.BlockUtils; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; +import org.jetbrains.annotations.NotNull; import java.io.DataInputStream; import java.io.InputStream; @@ -127,20 +125,8 @@ public final class BlockRegistryPopulator { private static void registerBedrockBlocks() { var blockMappers = ImmutableMap.<ObjectIntPair<String>, Remapper>builder() - .put(ObjectIntPair.of("1_20_80", Bedrock_v671.CODEC.getProtocolVersion()), Conversion685_671::remapBlock) - .put(ObjectIntPair.of("1_21_0", Bedrock_v685.CODEC.getProtocolVersion()), Conversion712_685::remapBlock) - .put(ObjectIntPair.of("1_21_20", Bedrock_v712.CODEC.getProtocolVersion()), Conversion729_712::remapBlock) - .put(ObjectIntPair.of("1_21_30", Bedrock_v729.CODEC.getProtocolVersion()), tag -> tag) - .put(ObjectIntPair.of("1_21_40", Bedrock_v748.CODEC.getProtocolVersion()), tag -> { - final String name = tag.getString("name"); - if (name.endsWith("_wood") && tag.getCompound("states").containsKey("stripped_bit")) { - NbtMapBuilder builder = tag.getCompound("states").toBuilder(); - builder.remove("stripped_bit"); - NbtMap states = builder.build(); - return tag.toBuilder().putCompound("states", states).build(); - } - return tag; - }) + .put(ObjectIntPair.of("1_21_40", Bedrock_v748.CODEC.getProtocolVersion()), faultyStrippedWoodRemapper()) + .put(ObjectIntPair.of("1_21_50", Bedrock_v765.CODEC.getProtocolVersion()), faultyStrippedWoodRemapper()) .build(); // We can keep this strong as nothing should be garbage collected @@ -427,6 +413,19 @@ public final class BlockRegistryPopulator { } } + private static @NotNull Remapper faultyStrippedWoodRemapper() { + return tag -> { + final String name = tag.getString("name"); + if (name.endsWith("_wood") && tag.getCompound("states").containsKey("stripped_bit")) { + NbtMapBuilder builder = tag.getCompound("states").toBuilder(); + builder.remove("stripped_bit"); + NbtMap states = builder.build(); + return tag.toBuilder().putCompound("states", states).build(); + } + return tag; + }; + } + private static void registerJavaBlocks() { List<NbtMap> blocksNbt; try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResourceOrThrow("mappings/blocks.nbt")) { diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion685_671.java b/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion685_671.java deleted file mode 100644 index c72ea64b2..000000000 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion685_671.java +++ /dev/null @@ -1,220 +0,0 @@ -/* - * 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.cloudburstmc.nbt.NbtMap; -import org.cloudburstmc.nbt.NbtMapBuilder; -import org.geysermc.geyser.item.Items; -import org.geysermc.geyser.item.type.Item; -import org.geysermc.geyser.registry.type.GeyserMappingItem; - -import java.util.List; -import java.util.stream.Stream; - -public class Conversion685_671 { - private static final List<String> NEW_CORAL_BLOCKS = List.of("minecraft:tube_coral_block", "minecraft:brain_coral_block", "minecraft:bubble_coral_block", "minecraft:fire_coral_block", "minecraft:horn_coral_block", "minecraft:dead_tube_coral_block", "minecraft:dead_brain_coral_block", "minecraft:dead_bubble_coral_block", "minecraft:dead_fire_coral_block", "minecraft:dead_horn_coral_block"); - private static final List<String> NEW_DOUBLE_PLANTS = List.of("minecraft:sunflower", "minecraft:lilac", "minecraft:tall_grass", "minecraft:large_fern", "minecraft:rose_bush", "minecraft:peony"); - private static final List<String> NEW_STONE_BLOCK_SLABS = List.of("minecraft:smooth_stone_slab", "minecraft:sandstone_slab", "minecraft:petrified_oak_slab", "minecraft:cobblestone_slab", "minecraft:brick_slab", "minecraft:stone_brick_slab", "minecraft:quartz_slab", "minecraft:nether_brick_slab"); - private static final List<String> NEW_TALLGRASSES = List.of("minecraft:fern", "minecraft:short_grass"); - private static final List<String> OMINOUS_BLOCKS = List.of("minecraft:trial_spawner", "minecraft:vault"); - private static final List<String> NEW_BLOCKS = Stream.of(NEW_CORAL_BLOCKS, NEW_DOUBLE_PLANTS, NEW_STONE_BLOCK_SLABS, NEW_TALLGRASSES).flatMap(List::stream).toList(); - private static final List<String> MODIFIED_BLOCKS = Stream.of(NEW_BLOCKS, OMINOUS_BLOCKS).flatMap(List::stream).toList(); - private static final List<Item> NEW_MUSIC_DISCS = List.of(Items.MUSIC_DISC_CREATOR, Items.MUSIC_DISC_CREATOR_MUSIC_BOX, Items.MUSIC_DISC_PRECIPICE); - - static GeyserMappingItem remapItem(Item item, GeyserMappingItem mapping) { - mapping = Conversion712_685.remapItem(item, mapping); - String identifier = mapping.getBedrockIdentifier(); - - if (NEW_MUSIC_DISCS.contains(item)) { - return mapping.withBedrockIdentifier("minecraft:music_disc_otherside"); - } - if (item == Items.OMINOUS_TRIAL_KEY) { - return mapping.withBedrockIdentifier("minecraft:trial_key"); - } - if (item == Items.OMINOUS_BOTTLE) { - return mapping.withBedrockIdentifier("minecraft:glass_bottle"); - } - - if (!NEW_BLOCKS.contains(identifier)) { - return mapping; - } - - if (NEW_CORAL_BLOCKS.contains(identifier)) { - switch (identifier) { - case "minecraft:tube_coral_block" -> { return mapping.withBedrockIdentifier("minecraft:coral_block").withBedrockData(0); } - case "minecraft:brain_coral_block" -> { return mapping.withBedrockIdentifier("minecraft:coral_block").withBedrockData(1); } - case "minecraft:bubble_coral_block" -> { return mapping.withBedrockIdentifier("minecraft:coral_block").withBedrockData(2); } - case "minecraft:fire_coral_block" -> { return mapping.withBedrockIdentifier("minecraft:coral_block").withBedrockData(3); } - case "minecraft:horn_coral_block" -> { return mapping.withBedrockIdentifier("minecraft:coral_block").withBedrockData(4); } - case "minecraft:dead_tube_coral_block" -> { return mapping.withBedrockIdentifier("minecraft:coral_block").withBedrockData(8); } - case "minecraft:dead_brain_coral_block" -> { return mapping.withBedrockIdentifier("minecraft:coral_block").withBedrockData(9); } - case "minecraft:dead_bubble_coral_block" -> { return mapping.withBedrockIdentifier("minecraft:coral_block").withBedrockData(10); } - case "minecraft:dead_fire_coral_block" -> { return mapping.withBedrockIdentifier("minecraft:coral_block").withBedrockData(11); } - case "minecraft:dead_horn_coral_block" -> { return mapping.withBedrockIdentifier("minecraft:coral_block").withBedrockData(12); } - } - } - - if (NEW_DOUBLE_PLANTS.contains(identifier)) { - switch (identifier) { - case "minecraft:sunflower" -> { return mapping.withBedrockIdentifier("minecraft:double_plant").withBedrockData(0); } - case "minecraft:lilac" -> { return mapping.withBedrockIdentifier("minecraft:double_plant").withBedrockData(1); } - case "minecraft:tall_grass" -> { return mapping.withBedrockIdentifier("minecraft:double_plant").withBedrockData(2); } - case "minecraft:large_fern" -> { return mapping.withBedrockIdentifier("minecraft:double_plant").withBedrockData(3); } - case "minecraft:rose_bush" -> { return mapping.withBedrockIdentifier("minecraft:double_plant").withBedrockData(4); } - case "minecraft:peony" -> { return mapping.withBedrockIdentifier("minecraft:double_plant").withBedrockData(5); } - } - } - - if (NEW_STONE_BLOCK_SLABS.contains(identifier)) { - switch (identifier) { - case "minecraft:smooth_stone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab").withBedrockData(0); } - case "minecraft:sandstone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab").withBedrockData(1); } - case "minecraft:petrified_oak_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab").withBedrockData(2); } - case "minecraft:cobblestone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab").withBedrockData(3); } - case "minecraft:brick_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab").withBedrockData(4); } - case "minecraft:stone_brick_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab").withBedrockData(5); } - case "minecraft:quartz_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab").withBedrockData(6); } - case "minecraft:nether_brick_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab").withBedrockData(7); } - } - } - - if (NEW_TALLGRASSES.contains(identifier)) { - switch (identifier) { - case "minecraft:short_grass" -> { return mapping.withBedrockIdentifier("minecraft:tallgrass").withBedrockData(1); } - case "minecraft:fern" -> { return mapping.withBedrockIdentifier("minecraft:tallgrass").withBedrockData(2); } - } - } - - return mapping; - } - - static NbtMap remapBlock(NbtMap tag) { - tag = Conversion712_685.remapBlock(tag); - - final String name = tag.getString("name"); - - if (!MODIFIED_BLOCKS.contains(name)) { - return tag; - } - - if (OMINOUS_BLOCKS.contains(name)) { - NbtMapBuilder builder = tag.getCompound("states").toBuilder(); - builder.remove("ominous"); - return tag.toBuilder().putCompound("states", builder.build()).build(); - } - - String replacement; - - if (NEW_CORAL_BLOCKS.contains(name)) { - replacement = "minecraft:coral_block"; - String coralColor; - boolean deadBit = name.startsWith("minecraft:dead_"); - - switch (name) { - case "minecraft:tube_coral_block", "minecraft:dead_tube_coral_block" -> coralColor = "blue"; - case "minecraft:brain_coral_block", "minecraft:dead_brain_coral_block" -> coralColor = "pink"; - case "minecraft:bubble_coral_block", "minecraft:dead_bubble_coral_block" -> coralColor = "purple"; - case "minecraft:fire_coral_block", "minecraft:dead_fire_coral_block" -> coralColor = "yellow"; - case "minecraft:horn_coral_block", "minecraft:dead_horn_coral_block" -> coralColor = "red"; - default -> throw new IllegalStateException("Unexpected value: " + name); - } - - NbtMap states = tag.getCompound("states") - .toBuilder() - .putString("coral_color", coralColor) - .putBoolean("dead_bit", deadBit) - .build(); - - return tag.toBuilder().putString("name", replacement).putCompound("states", states).build(); - } - - if (NEW_DOUBLE_PLANTS.contains(name)) { - replacement = "minecraft:double_plant"; - String doublePlantType; - - switch (name) { - case "minecraft:sunflower" -> doublePlantType = "sunflower"; - case "minecraft:lilac" -> doublePlantType = "syringa"; - case "minecraft:tall_grass" -> doublePlantType = "grass"; - case "minecraft:large_fern" -> doublePlantType = "fern"; - case "minecraft:rose_bush" -> doublePlantType = "rose"; - case "minecraft:peony" -> doublePlantType = "paeonia"; - default -> throw new IllegalStateException("Unexpected value: " + name); - } - - NbtMap states = tag.getCompound("states") - .toBuilder() - .putString("double_plant_type", doublePlantType) - .build(); - - return tag.toBuilder().putString("name", replacement).putCompound("states", states).build(); - } - - if (NEW_STONE_BLOCK_SLABS.contains(name)) { - replacement = "minecraft:stone_block_slab"; - String stoneSlabType; - - switch (name) { - case "minecraft:smooth_stone_slab" -> stoneSlabType = "smooth_stone"; - case "minecraft:sandstone_slab" -> stoneSlabType = "sandstone"; - case "minecraft:petrified_oak_slab" -> stoneSlabType = "wood"; - case "minecraft:cobblestone_slab" -> stoneSlabType = "cobblestone"; - case "minecraft:brick_slab" -> stoneSlabType = "brick"; - case "minecraft:stone_brick_slab" -> stoneSlabType = "stone_brick"; - case "minecraft:quartz_slab" -> stoneSlabType = "quartz"; - case "minecraft:nether_brick_slab" -> stoneSlabType = "nether_brick"; - default -> throw new IllegalStateException("Unexpected value: " + name); - } - - NbtMap states = tag.getCompound("states") - .toBuilder() - .putString("stone_slab_type", stoneSlabType) - .build(); - - return tag.toBuilder().putString("name", replacement).putCompound("states", states).build(); - } - - if (NEW_TALLGRASSES.contains(name)) { - replacement = "minecraft:tallgrass"; - String tallGrassType; - - switch (name) { - case "minecraft:short_grass" -> tallGrassType = "tall"; - case "minecraft:fern" -> tallGrassType = "fern"; - default -> throw new IllegalStateException("Unexpected value: " + name); - } - - NbtMap states = tag.getCompound("states") - .toBuilder() - .putString("tall_grass_type", tallGrassType) - .build(); - - return tag.toBuilder().putString("name", replacement).putCompound("states", states).build(); - } - - return tag; - } -} diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion712_685.java b/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion712_685.java deleted file mode 100644 index 45963cb90..000000000 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion712_685.java +++ /dev/null @@ -1,439 +0,0 @@ -package org.geysermc.geyser.registry.populator; - -import org.cloudburstmc.nbt.NbtMap; -import org.geysermc.geyser.item.type.Item; -import org.geysermc.geyser.registry.type.GeyserMappingItem; - -import java.util.List; -import java.util.stream.Stream; - -public class Conversion712_685 { - private static final List<String> NEW_STONE_BLOCK_SLABS_2 = List.of("minecraft:prismarine_slab", "minecraft:dark_prismarine_slab", "minecraft:smooth_sandstone_slab", "minecraft:purpur_slab", "minecraft:red_nether_brick_slab", "minecraft:prismarine_brick_slab", "minecraft:mossy_cobblestone_slab", "minecraft:red_sandstone_slab"); - private static final List<String> NEW_STONE_BLOCK_SLABS_3 = List.of("minecraft:smooth_red_sandstone_slab", "minecraft:polished_granite_slab", "minecraft:granite_slab", "minecraft:polished_diorite_slab", "minecraft:andesite_slab", "minecraft:polished_andesite_slab", "minecraft:diorite_slab", "minecraft:end_stone_brick_slab"); - private static final List<String> NEW_STONE_BLOCK_SLABS_4 = List.of("minecraft:smooth_quartz_slab", "minecraft:cut_sandstone_slab", "minecraft:cut_red_sandstone_slab", "minecraft:normal_stone_slab", "minecraft:mossy_stone_brick_slab"); - private static final List<String> NEW_DOUBLE_STONE_BLOCK_SLABS = List.of("minecraft:quartz_double_slab", "minecraft:petrified_oak_double_slab", "minecraft:stone_brick_double_slab", "minecraft:brick_double_slab", "minecraft:sandstone_double_slab", "minecraft:nether_brick_double_slab", "minecraft:cobblestone_double_slab", "minecraft:smooth_stone_double_slab"); - private static final List<String> NEW_DOUBLE_STONE_BLOCK_SLABS_2 = List.of("minecraft:prismarine_double_slab", "minecraft:dark_prismarine_double_slab", "minecraft:smooth_sandstone_double_slab", "minecraft:purpur_double_slab", "minecraft:red_nether_brick_double_slab", "minecraft:prismarine_brick_double_slab", "minecraft:mossy_cobblestone_double_slab", "minecraft:red_sandstone_double_slab"); - private static final List<String> NEW_DOUBLE_STONE_BLOCK_SLABS_3 = List.of("minecraft:smooth_red_sandstone_double_slab", "minecraft:polished_granite_double_slab", "minecraft:granite_double_slab", "minecraft:polished_diorite_double_slab", "minecraft:andesite_double_slab", "minecraft:polished_andesite_double_slab", "minecraft:diorite_double_slab", "minecraft:end_stone_brick_double_slab"); - private static final List<String> NEW_DOUBLE_STONE_BLOCK_SLABS_4 = List.of("minecraft:smooth_quartz_double_slab", "minecraft:cut_sandstone_double_slab", "minecraft:cut_red_sandstone_double_slab", "minecraft:normal_stone_double_slab", "minecraft:mossy_stone_brick_double_slab"); - private static final List<String> NEW_PRISMARINE_BLOCKS = List.of("minecraft:prismarine_bricks", "minecraft:dark_prismarine", "minecraft:prismarine"); - private static final List<String> NEW_CORAL_FAN_HANGS = List.of("minecraft:tube_coral_wall_fan", "minecraft:brain_coral_wall_fan", "minecraft:dead_tube_coral_wall_fan", "minecraft:dead_brain_coral_wall_fan"); - private static final List<String> NEW_CORAL_FAN_HANGS_2 = List.of("minecraft:bubble_coral_wall_fan", "minecraft:fire_coral_wall_fan", "minecraft:dead_bubble_coral_wall_fan", "minecraft:dead_fire_coral_wall_fan"); - private static final List<String> NEW_CORAL_FAN_HANGS_3 = List.of("minecraft:horn_coral_wall_fan", "minecraft:dead_horn_coral_wall_fan"); - private static final List<String> NEW_MONSTER_EGGS = List.of("minecraft:infested_cobblestone", "minecraft:infested_stone_bricks", "minecraft:infested_mossy_stone_bricks", "minecraft:infested_cracked_stone_bricks", "minecraft:infested_chiseled_stone_bricks", "minecraft:infested_stone"); - private static final List<String> NEW_STONEBRICK_BLOCKS = List.of("minecraft:mossy_stone_bricks", "minecraft:cracked_stone_bricks", "minecraft:chiseled_stone_bricks", "minecraft:smooth_stone_bricks", "minecraft:stone_bricks"); - private static final List<String> NEW_LIGHT_BLOCKS = List.of("minecraft:light_block_0", "minecraft:light_block_1", "minecraft:light_block_2", "minecraft:light_block_3", "minecraft:light_block_4", "minecraft:light_block_5", "minecraft:light_block_6", "minecraft:light_block_7", "minecraft:light_block_8", "minecraft:light_block_9", "minecraft:light_block_10", "minecraft:light_block_11", "minecraft:light_block_12", "minecraft:light_block_13", "minecraft:light_block_14", "minecraft:light_block_15"); - private static final List<String> NEW_SANDSTONE_BLOCKS = List.of("minecraft:cut_sandstone", "minecraft:chiseled_sandstone", "minecraft:smooth_sandstone", "minecraft:sandstone"); - private static final List<String> NEW_QUARTZ_BLOCKS = List.of("minecraft:chiseled_quartz_block", "minecraft:quartz_pillar", "minecraft:smooth_quartz", "minecraft:quartz_block"); - private static final List<String> NEW_RED_SANDSTONE_BLOCKS = List.of("minecraft:cut_red_sandstone", "minecraft:chiseled_red_sandstone", "minecraft:smooth_red_sandstone", "minecraft:red_sandstone"); - private static final List<String> NEW_SAND_BLOCKS = List.of("minecraft:red_sand", "minecraft:sand"); - private static final List<String> NEW_DIRT_BLOCKS = List.of("minecraft:coarse_dirt", "minecraft:dirt"); - private static final List<String> NEW_ANVILS = List.of("minecraft:damaged_anvil", "minecraft:chipped_anvil", "minecraft:deprecated_anvil", "minecraft:anvil"); - private static final List<String> NEW_YELLOW_FLOWERS = List.of("minecraft:dandelion"); - private static final List<String> NEW_BLOCKS = Stream.of(NEW_STONE_BLOCK_SLABS_2, NEW_STONE_BLOCK_SLABS_3, NEW_STONE_BLOCK_SLABS_4, NEW_DOUBLE_STONE_BLOCK_SLABS, NEW_DOUBLE_STONE_BLOCK_SLABS_2, NEW_DOUBLE_STONE_BLOCK_SLABS_3, NEW_DOUBLE_STONE_BLOCK_SLABS_4, NEW_PRISMARINE_BLOCKS, NEW_CORAL_FAN_HANGS, NEW_CORAL_FAN_HANGS_2, NEW_CORAL_FAN_HANGS_3, NEW_MONSTER_EGGS, NEW_STONEBRICK_BLOCKS, NEW_LIGHT_BLOCKS, NEW_SANDSTONE_BLOCKS, NEW_QUARTZ_BLOCKS, NEW_RED_SANDSTONE_BLOCKS, NEW_SAND_BLOCKS, NEW_DIRT_BLOCKS, NEW_ANVILS, NEW_YELLOW_FLOWERS).flatMap(List::stream).toList(); - - static GeyserMappingItem remapItem(Item item, GeyserMappingItem mapping) { - mapping = Conversion729_712.remapItem(item, mapping); - String identifier = mapping.getBedrockIdentifier(); - - if (!NEW_BLOCKS.contains(identifier)) { - return mapping; - } - - if (identifier.equals("minecraft:coarse_dirt")) { - return mapping.withBedrockIdentifier("minecraft:dirt").withBedrockData(1); - } - - if (identifier.equals("minecraft:dandelion")) { - return mapping.withBedrockIdentifier("minecraft:yellow_flower").withBedrockData(0); - } - - if (identifier.equals("minecraft:red_sand")) { - return mapping.withBedrockIdentifier("minecraft:sand").withBedrockData(1); - } - - if (NEW_PRISMARINE_BLOCKS.contains(identifier)) { - switch (identifier) { - case "minecraft:prismarine" -> { return mapping.withBedrockIdentifier("minecraft:prismarine").withBedrockData(0); } - case "minecraft:dark_prismarine" -> { return mapping.withBedrockIdentifier("minecraft:prismarine").withBedrockData(1); } - case "minecraft:prismarine_bricks" -> { return mapping.withBedrockIdentifier("minecraft:prismarine").withBedrockData(2); } - } - } - - if (NEW_SANDSTONE_BLOCKS.contains(identifier)) { - switch (identifier) { - case "minecraft:sandstone" -> { return mapping.withBedrockIdentifier("minecraft:sandstone").withBedrockData(0); } - case "minecraft:chiseled_sandstone" -> { return mapping.withBedrockIdentifier("minecraft:sandstone").withBedrockData(1); } - case "minecraft:cut_sandstone" -> { return mapping.withBedrockIdentifier("minecraft:sandstone").withBedrockData(2); } - case "minecraft:smooth_sandstone" -> { return mapping.withBedrockIdentifier("minecraft:sandstone").withBedrockData(3); } - } - } - - if (NEW_RED_SANDSTONE_BLOCKS.contains(identifier)) { - switch (identifier) { - case "minecraft:red_sandstone" -> { return mapping.withBedrockIdentifier("minecraft:red_sandstone").withBedrockData(0); } - case "minecraft:chiseled_red_sandstone" -> { return mapping.withBedrockIdentifier("minecraft:red_sandstone").withBedrockData(1); } - case "minecraft:cut_red_sandstone" -> { return mapping.withBedrockIdentifier("minecraft:red_sandstone").withBedrockData(2); } - case "minecraft:smooth_red_sandstone" -> { return mapping.withBedrockIdentifier("minecraft:red_sandstone").withBedrockData(3); } - } - } - - if (NEW_QUARTZ_BLOCKS.contains(identifier)) { - switch (identifier) { - case "minecraft:quartz_block" -> { return mapping.withBedrockIdentifier("minecraft:quartz_block").withBedrockData(0); } - case "minecraft:chiseled_quartz_block" -> { return mapping.withBedrockIdentifier("minecraft:quartz_block").withBedrockData(1); } - case "minecraft:quartz_pillar" -> { return mapping.withBedrockIdentifier("minecraft:quartz_block").withBedrockData(2); } - case "minecraft:smooth_quartz" -> { return mapping.withBedrockIdentifier("minecraft:quartz_block").withBedrockData(3); } - } - } - - if (NEW_STONE_BLOCK_SLABS_2.contains(identifier)) { - switch (identifier) { - case "minecraft:red_sandstone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab2").withBedrockData(0); } - case "minecraft:purpur_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab2").withBedrockData(1); } - case "minecraft:prismarine_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab2").withBedrockData(2); } - case "minecraft:dark_prismarine_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab2").withBedrockData(3); } - case "minecraft:prismarine_brick_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab2").withBedrockData(4); } - case "minecraft:mossy_cobblestone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab2").withBedrockData(5); } - case "minecraft:smooth_sandstone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab2").withBedrockData(6); } - case "minecraft:red_nether_brick_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab2").withBedrockData(7); } - } - } - - if (NEW_STONE_BLOCK_SLABS_3.contains(identifier)) { - switch (identifier) { - case "minecraft:end_stone_brick_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab3").withBedrockData(0); } - case "minecraft:smooth_red_sandstone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab3").withBedrockData(1); } - case "minecraft:polished_andesite_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab3").withBedrockData(2); } - case "minecraft:andesite_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab3").withBedrockData(3); } - case "minecraft:diorite_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab3").withBedrockData(4); } - case "minecraft:polished_diorite_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab3").withBedrockData(5); } - case "minecraft:granite_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab3").withBedrockData(6); } - case "minecraft:polished_granite_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab3").withBedrockData(7); } - } - } - - if (NEW_STONE_BLOCK_SLABS_4.contains(identifier)) { - switch (identifier) { - case "minecraft:mossy_stone_brick_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab4").withBedrockData(0); } - case "minecraft:smooth_quartz_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab4").withBedrockData(1); } - case "minecraft:normal_stone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab4").withBedrockData(2); } - case "minecraft:cut_sandstone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab4").withBedrockData(3); } - case "minecraft:cut_red_sandstone_slab" -> { return mapping.withBedrockIdentifier("minecraft:stone_block_slab4").withBedrockData(4); } - } - } - - if (NEW_MONSTER_EGGS.contains(identifier)) { - switch (identifier) { - case "minecraft:infested_stone" -> { return mapping.withBedrockIdentifier("minecraft:monster_egg").withBedrockData(0); } - case "minecraft:infested_cobblestone" -> { return mapping.withBedrockIdentifier("minecraft:monster_egg").withBedrockData(1); } - case "minecraft:infested_stone_bricks" -> { return mapping.withBedrockIdentifier("minecraft:monster_egg").withBedrockData(2); } - case "minecraft:infested_mossy_stone_bricks" -> { return mapping.withBedrockIdentifier("minecraft:monster_egg").withBedrockData(3); } - case "minecraft:infested_cracked_stone_bricks" -> { return mapping.withBedrockIdentifier("minecraft:monster_egg").withBedrockData(4); } - case "minecraft:infested_chiseled_stone_bricks" -> { return mapping.withBedrockIdentifier("minecraft:monster_egg").withBedrockData(5); } - } - } - - if (NEW_STONEBRICK_BLOCKS.contains(identifier)) { - switch (identifier) { - case "minecraft:stone_bricks" -> { return mapping.withBedrockIdentifier("minecraft:stonebrick").withBedrockData(0); } - case "minecraft:mossy_stone_bricks" -> { return mapping.withBedrockIdentifier("minecraft:stonebrick").withBedrockData(1); } - case "minecraft:cracked_stone_bricks" -> { return mapping.withBedrockIdentifier("minecraft:stonebrick").withBedrockData(2); } - case "minecraft:chiseled_stone_bricks" -> { return mapping.withBedrockIdentifier("minecraft:stonebrick").withBedrockData(3); } - } - } - - if (NEW_ANVILS.contains(identifier)) { - switch (identifier) { - case "minecraft:anvil" -> { return mapping.withBedrockIdentifier("minecraft:anvil").withBedrockData(0); } - case "minecraft:chipped_anvil" -> { return mapping.withBedrockIdentifier("minecraft:anvil").withBedrockData(4); } - case "minecraft:damaged_anvil" -> { return mapping.withBedrockIdentifier("minecraft:anvil").withBedrockData(8); } - } - } - - return mapping; - } - - static NbtMap remapBlock(NbtMap tag) { - tag = Conversion729_712.remapBlock(tag); - - final String name = tag.getString("name"); - - if (!NEW_BLOCKS.contains(name)) { - return tag; - } - - String replacement; - - if (NEW_DOUBLE_STONE_BLOCK_SLABS.contains(name)) { - replacement = "minecraft:double_stone_block_slab"; - String stoneSlabType; - - switch (name) { - case "minecraft:quartz_double_slab" -> stoneSlabType = "quartz"; - case "minecraft:petrified_oak_double_slab" -> stoneSlabType = "wood"; - case "minecraft:stone_brick_double_slab" -> stoneSlabType = "stone_brick"; - case "minecraft:brick_double_slab" -> stoneSlabType = "brick"; - case "minecraft:sandstone_double_slab" -> stoneSlabType = "sandstone"; - case "minecraft:nether_brick_double_slab" -> stoneSlabType = "nether_brick"; - case "minecraft:cobblestone_double_slab" -> stoneSlabType = "cobblestone"; - case "minecraft:smooth_stone_double_slab" -> stoneSlabType = "smooth_stone"; - default -> throw new IllegalStateException("Unexpected value: " + name); - } - - NbtMap states = tag.getCompound("states") - .toBuilder() - .putString("stone_slab_type", stoneSlabType) - .build(); - - return tag.toBuilder().putString("name", replacement).putCompound("states", states).build(); - } - - if (NEW_STONE_BLOCK_SLABS_2.contains(name) || NEW_DOUBLE_STONE_BLOCK_SLABS_2.contains(name)) { - replacement = NEW_STONE_BLOCK_SLABS_2.contains(name) ? "minecraft:stone_block_slab2" : "minecraft:double_stone_block_slab2"; - String stoneSlabType2; - - switch (name) { - case "minecraft:prismarine_slab", "minecraft:prismarine_double_slab" -> stoneSlabType2 = "prismarine_rough"; - case "minecraft:dark_prismarine_slab", "minecraft:dark_prismarine_double_slab" -> stoneSlabType2 = "prismarine_dark"; - case "minecraft:smooth_sandstone_slab", "minecraft:smooth_sandstone_double_slab" -> stoneSlabType2 = "smooth_sandstone"; - case "minecraft:purpur_slab", "minecraft:purpur_double_slab" -> stoneSlabType2 = "purpur"; - case "minecraft:red_nether_brick_slab", "minecraft:red_nether_brick_double_slab" -> stoneSlabType2 = "red_nether_brick"; - case "minecraft:prismarine_brick_slab", "minecraft:prismarine_brick_double_slab" -> stoneSlabType2 = "prismarine_brick"; - case "minecraft:mossy_cobblestone_slab", "minecraft:mossy_cobblestone_double_slab" -> stoneSlabType2 = "mossy_cobblestone"; - case "minecraft:red_sandstone_slab", "minecraft:red_sandstone_double_slab" -> stoneSlabType2 = "red_sandstone"; - default -> throw new IllegalStateException("Unexpected value: " + name); - } - - NbtMap states = tag.getCompound("states") - .toBuilder() - .putString("stone_slab_type_2", stoneSlabType2) - .build(); - - return tag.toBuilder().putString("name", replacement).putCompound("states", states).build(); - } - - if (NEW_STONE_BLOCK_SLABS_3.contains(name) || NEW_DOUBLE_STONE_BLOCK_SLABS_3.contains(name)) { - replacement = NEW_STONE_BLOCK_SLABS_3.contains(name) ? "minecraft:stone_block_slab3" : "minecraft:double_stone_block_slab3"; - String stoneSlabType3; - - switch (name) { - case "minecraft:smooth_red_sandstone_slab", "minecraft:smooth_red_sandstone_double_slab" -> stoneSlabType3 = "smooth_red_sandstone"; - case "minecraft:polished_granite_slab", "minecraft:polished_granite_double_slab" -> stoneSlabType3 = "polished_granite"; - case "minecraft:granite_slab", "minecraft:granite_double_slab" -> stoneSlabType3 = "granite"; - case "minecraft:polished_diorite_slab", "minecraft:polished_diorite_double_slab" -> stoneSlabType3 = "polished_diorite"; - case "minecraft:andesite_slab", "minecraft:andesite_double_slab" -> stoneSlabType3 = "andesite"; - case "minecraft:polished_andesite_slab", "minecraft:polished_andesite_double_slab" -> stoneSlabType3 = "polished_andesite"; - case "minecraft:diorite_slab", "minecraft:diorite_double_slab" -> stoneSlabType3 = "diorite"; - case "minecraft:end_stone_brick_slab", "minecraft:end_stone_brick_double_slab" -> stoneSlabType3 = "end_stone_brick"; - default -> throw new IllegalStateException("Unexpected value: " + name); - } - - NbtMap states = tag.getCompound("states") - .toBuilder() - .putString("stone_slab_type_3", stoneSlabType3) - .build(); - - return tag.toBuilder().putString("name", replacement).putCompound("states", states).build(); - } - - if (NEW_STONE_BLOCK_SLABS_4.contains(name) || NEW_DOUBLE_STONE_BLOCK_SLABS_4.contains(name)) { - replacement = NEW_STONE_BLOCK_SLABS_4.contains(name) ? "minecraft:stone_block_slab4" : "minecraft:double_stone_block_slab4"; - String stoneSlabType4; - - switch (name) { - case "minecraft:smooth_quartz_slab", "minecraft:smooth_quartz_double_slab" -> stoneSlabType4 = "smooth_quartz"; - case "minecraft:cut_sandstone_slab", "minecraft:cut_sandstone_double_slab" -> stoneSlabType4 = "cut_sandstone"; - case "minecraft:cut_red_sandstone_slab", "minecraft:cut_red_sandstone_double_slab" -> stoneSlabType4 = "cut_red_sandstone"; - case "minecraft:normal_stone_slab", "minecraft:normal_stone_double_slab" -> stoneSlabType4 = "stone"; - case "minecraft:mossy_stone_brick_slab", "minecraft:mossy_stone_brick_double_slab" -> stoneSlabType4 = "mossy_stone_brick"; - default -> throw new IllegalStateException("Unexpected value: " + name); - } - - NbtMap states = tag.getCompound("states") - .toBuilder() - .putString("stone_slab_type_4", stoneSlabType4) - .build(); - - return tag.toBuilder().putString("name", replacement).putCompound("states", states).build(); - } - - if (NEW_PRISMARINE_BLOCKS.contains(name)) { - replacement = "minecraft:prismarine"; - String prismarineBlockType; - - switch (name) { - case "minecraft:prismarine_bricks" -> prismarineBlockType = "bricks"; - case "minecraft:dark_prismarine" -> prismarineBlockType = "dark"; - case "minecraft:prismarine" -> prismarineBlockType = "default"; - default -> throw new IllegalStateException("Unexpected value: " + name); - } - - NbtMap states = tag.getCompound("states") - .toBuilder() - .putString("prismarine_block_type", prismarineBlockType) - .build(); - - return tag.toBuilder().putString("name", replacement).putCompound("states", states).build(); - } - - if (NEW_CORAL_FAN_HANGS.contains(name) || NEW_CORAL_FAN_HANGS_2.contains(name) || NEW_CORAL_FAN_HANGS_3.contains(name)) { - replacement = NEW_CORAL_FAN_HANGS.contains(name) ? "minecraft:coral_fan_hang" : NEW_CORAL_FAN_HANGS_2.contains(name) ? "minecraft:coral_fan_hang2" : "minecraft:coral_fan_hang3"; - boolean deadBit = name.startsWith("minecraft:dead_"); - boolean coralHangTypeBit = name.contains("brain") || name.contains("fire"); - - NbtMap states = tag.getCompound("states") - .toBuilder() - .putBoolean("coral_hang_type_bit", coralHangTypeBit) - .putBoolean("dead_bit", deadBit) - .build(); - - return tag.toBuilder().putString("name", replacement).putCompound("states", states).build(); - } - - if (NEW_MONSTER_EGGS.contains(name)) { - replacement = "minecraft:monster_egg"; - String monsterEggStoneType; - - switch (name) { - case "minecraft:infested_cobblestone" -> monsterEggStoneType = "cobblestone"; - case "minecraft:infested_stone_bricks" -> monsterEggStoneType = "stone_brick"; - case "minecraft:infested_mossy_stone_bricks" -> monsterEggStoneType = "mossy_stone_brick"; - case "minecraft:infested_cracked_stone_bricks" -> monsterEggStoneType = "cracked_stone_brick"; - case "minecraft:infested_chiseled_stone_bricks" -> monsterEggStoneType = "chiseled_stone_brick"; - case "minecraft:infested_stone" -> monsterEggStoneType = "stone"; - default -> throw new IllegalStateException("Unexpected value: " + name); - } - - NbtMap states = tag.getCompound("states") - .toBuilder() - .putString("monster_egg_stone_type", monsterEggStoneType) - .build(); - - return tag.toBuilder().putString("name", replacement).putCompound("states", states).build(); - } - - if (NEW_STONEBRICK_BLOCKS.contains(name)) { - replacement = "minecraft:stonebrick"; - String stoneBrickType; - - switch (name) { - case "minecraft:mossy_stone_bricks" -> stoneBrickType = "mossy"; - case "minecraft:cracked_stone_bricks" -> stoneBrickType = "cracked"; - case "minecraft:chiseled_stone_bricks" -> stoneBrickType = "chiseled"; - case "minecraft:smooth_stone_bricks" -> stoneBrickType = "smooth"; - case "minecraft:stone_bricks" -> stoneBrickType = "default"; - default -> throw new IllegalStateException("Unexpected value: " + name); - } - - NbtMap states = tag.getCompound("states") - .toBuilder() - .putString("stone_brick_type", stoneBrickType) - .build(); - - return tag.toBuilder().putString("name", replacement).putCompound("states", states).build(); - } - - if (NEW_LIGHT_BLOCKS.contains(name)) { - replacement = "minecraft:light_block"; - int blockLightLevel = Integer.parseInt(name.split("_")[2]); - - NbtMap states = tag.getCompound("states") - .toBuilder() - .putInt("block_light_level", blockLightLevel) - .build(); - - return tag.toBuilder().putString("name", replacement).putCompound("states", states).build(); - } - - if (NEW_SANDSTONE_BLOCKS.contains(name) || NEW_RED_SANDSTONE_BLOCKS.contains(name)) { - replacement = NEW_SANDSTONE_BLOCKS.contains(name) ? "minecraft:sandstone" : "minecraft:red_sandstone"; - String sandStoneType; - - switch (name) { - case "minecraft:cut_sandstone", "minecraft:cut_red_sandstone" -> sandStoneType = "cut"; - case "minecraft:chiseled_sandstone", "minecraft:chiseled_red_sandstone" -> sandStoneType = "heiroglyphs"; - case "minecraft:smooth_sandstone", "minecraft:smooth_red_sandstone" -> sandStoneType = "smooth"; - case "minecraft:sandstone", "minecraft:red_sandstone" -> sandStoneType = "default"; - default -> throw new IllegalStateException("Unexpected value: " + name); - } - - NbtMap states = tag.getCompound("states") - .toBuilder() - .putString("sand_stone_type", sandStoneType) - .build(); - - return tag.toBuilder().putString("name", replacement).putCompound("states", states).build(); - } - - if (NEW_QUARTZ_BLOCKS.contains(name)) { - replacement = "minecraft:quartz_block"; - String chiselType; - - switch (name) { - case "minecraft:chiseled_quartz_block" -> chiselType = "chiseled"; - case "minecraft:quartz_pillar" -> chiselType = "lines"; - case "minecraft:smooth_quartz" -> chiselType = "smooth"; - case "minecraft:quartz_block" -> chiselType = "default"; - default -> throw new IllegalStateException("Unexpected value: " + name); - } - - NbtMap states = tag.getCompound("states") - .toBuilder() - .putString("chisel_type", chiselType) - .build(); - - return tag.toBuilder().putString("name", replacement).putCompound("states", states).build(); - } - - if (NEW_SAND_BLOCKS.contains(name)) { - replacement = "minecraft:sand"; - String sandType = name.equals("minecraft:red_sand") ? "red" : "normal"; - - NbtMap states = tag.getCompound("states") - .toBuilder() - .putString("sand_type", sandType) - .build(); - - return tag.toBuilder().putString("name", replacement).putCompound("states", states).build(); - } - - if (NEW_DIRT_BLOCKS.contains(name)) { - replacement = "minecraft:dirt"; - String dirtType = name.equals("minecraft:coarse_dirt") ? "coarse" : "normal"; - - NbtMap states = tag.getCompound("states") - .toBuilder() - .putString("dirt_type", dirtType) - .build(); - - return tag.toBuilder().putString("name", replacement).putCompound("states", states).build(); - } - - if (NEW_ANVILS.contains(name)) { - replacement = "minecraft:anvil"; - String damage; - - switch (name) { - case "minecraft:damaged_anvil" -> damage = "broken"; - case "minecraft:chipped_anvil" -> damage = "slightly_damaged"; - case "minecraft:deprecated_anvil" -> damage = "very_damaged"; - case "minecraft:anvil" -> damage = "undamaged"; - default -> throw new IllegalStateException("Unexpected value: " + name); - } - - NbtMap states = tag.getCompound("states") - .toBuilder() - .putString("damage", damage) - .build(); - - return tag.toBuilder().putString("name", replacement).putCompound("states", states).build(); - } - - if (NEW_YELLOW_FLOWERS.contains(name)) { - replacement = "minecraft:yellow_flower"; - return tag.toBuilder().putString("name", replacement).build(); - } - - return tag; - } -} diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion729_712.java b/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion729_712.java deleted file mode 100644 index fbc2233bc..000000000 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion729_712.java +++ /dev/null @@ -1,152 +0,0 @@ -package org.geysermc.geyser.registry.populator; - -import org.cloudburstmc.nbt.NbtMap; -import org.geysermc.geyser.item.type.Item; -import org.geysermc.geyser.registry.type.GeyserMappingItem; - -import java.util.List; -import java.util.stream.Stream; - -public class Conversion729_712 { - private static final List<String> NEW_PURPUR_BLOCKS = List.of("minecraft:purpur_block", "minecraft:purpur_pillar"); - private static final List<String> NEW_WALL_BLOCKS = List.of("minecraft:cobblestone_wall", "minecraft:mossy_cobblestone_wall", "minecraft:granite_wall", "minecraft:diorite_wall", "minecraft:andesite_wall", "minecraft:sandstone_wall", "minecraft:brick_wall", "minecraft:stone_brick_wall", "minecraft:mossy_stone_brick_wall", "minecraft:nether_brick_wall", "minecraft:end_stone_brick_wall", "minecraft:prismarine_wall", "minecraft:red_sandstone_wall", "minecraft:red_nether_brick_wall"); - private static final List<String> NEW_SPONGE_BLOCKS = List.of("minecraft:sponge", "minecraft:wet_sponge"); - private static final List<String> NEW_TNT_BLOCKS = List.of("minecraft:tnt", "minecraft:underwater_tnt"); - private static final List<String> STRUCTURE_VOID = List.of("minecraft:structure_void"); - private static final List<String> NEW_BLOCKS = Stream.of(NEW_PURPUR_BLOCKS, NEW_WALL_BLOCKS, NEW_SPONGE_BLOCKS, NEW_TNT_BLOCKS, STRUCTURE_VOID).flatMap(List::stream).toList(); - - static GeyserMappingItem remapItem(Item item, GeyserMappingItem mapping) { - mapping = Conversion748_729.remapItem(item, mapping); - String identifier = mapping.getBedrockIdentifier(); - - if (!NEW_BLOCKS.contains(identifier)) { - return mapping; - } - - if (identifier.equals("minecraft:underwater_tnt")) { - return mapping.withBedrockIdentifier("minecraft:tnt").withBedrockData(1); - } - - if (NEW_PURPUR_BLOCKS.contains(identifier)) { - switch (identifier) { - case "minecraft:purpur_block" -> { return mapping.withBedrockIdentifier("minecraft:purpur_block").withBedrockData(0); } - case "minecraft:purpur_pillar" -> { return mapping.withBedrockIdentifier("minecraft:purpur_block").withBedrockData(1); } - } - } - - if (NEW_WALL_BLOCKS.contains(identifier)) { - switch (identifier) { - case "minecraft:cobblestone_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(0); } - case "minecraft:mossy_cobblestone_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(1); } - case "minecraft:granite_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(2); } - case "minecraft:diorite_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(3); } - case "minecraft:andesite_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(4); } - case "minecraft:sandstone_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(5); } - case "minecraft:brick_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(6); } - case "minecraft:stone_brick_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(7); } - case "minecraft:mossy_stone_brick_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(8); } - case "minecraft:nether_brick_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(9); } - case "minecraft:end_stone_brick_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(10); } - case "minecraft:prismarine_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(11); } - case "minecraft:red_sandstone_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(12); } - case "minecraft:red_nether_brick_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(13); } - } - } - - if (NEW_SPONGE_BLOCKS.contains(identifier)) { - switch (identifier) { - case "minecraft:sponge" -> { return mapping.withBedrockIdentifier("minecraft:sponge").withBedrockData(0); } - case "minecraft:wet_sponge" -> { return mapping.withBedrockIdentifier("minecraft:sponge").withBedrockData(1); } - } - } - - return mapping; - } - - static NbtMap remapBlock(NbtMap tag) { - final String name = tag.getString("name"); - - if (!NEW_BLOCKS.contains(name)) { - return tag; - } - - String replacement; - - if (NEW_PURPUR_BLOCKS.contains(name)) { - replacement = "minecraft:purpur_block"; - String purpurType = name.equals("minecraft:purpur_pillar") ? "lines" : "default"; - - NbtMap states = tag.getCompound("states") - .toBuilder() - .putString("chisel_type", purpurType) - .build(); - - return tag.toBuilder().putString("name", replacement).putCompound("states", states).build(); - } - - if (NEW_WALL_BLOCKS.contains(name)) { - replacement = "minecraft:cobblestone_wall"; - String wallType; - - switch (name) { - case "minecraft:cobblestone_wall" -> wallType = "cobblestone"; - case "minecraft:mossy_cobblestone_wall" -> wallType = "mossy_cobblestone"; - case "minecraft:granite_wall" -> wallType = "granite"; - case "minecraft:diorite_wall" -> wallType = "diorite"; - case "minecraft:andesite_wall" -> wallType = "andesite"; - case "minecraft:sandstone_wall" -> wallType = "sandstone"; - case "minecraft:brick_wall" -> wallType = "brick"; - case "minecraft:stone_brick_wall" -> wallType = "stone_brick"; - case "minecraft:mossy_stone_brick_wall" -> wallType = "mossy_stone_brick"; - case "minecraft:nether_brick_wall" -> wallType = "nether_brick"; - case "minecraft:end_stone_brick_wall" -> wallType = "end_brick"; - case "minecraft:prismarine_wall" -> wallType = "prismarine"; - case "minecraft:red_sandstone_wall" -> wallType = "red_sandstone"; - case "minecraft:red_nether_brick_wall" -> wallType = "red_nether_brick"; - default -> throw new IllegalStateException("Unexpected value: " + name); - } - - NbtMap states = tag.getCompound("states") - .toBuilder() - .putString("wall_block_type", wallType) - .build(); - - return tag.toBuilder().putString("name", replacement).putCompound("states", states).build(); - } - - if (NEW_SPONGE_BLOCKS.contains(name)) { - replacement = "minecraft:sponge"; - String spongeType = name.equals("minecraft:wet_sponge") ? "wet" : "dry"; - - NbtMap states = tag.getCompound("states") - .toBuilder() - .putString("sponge_type", spongeType) - .build(); - - return tag.toBuilder().putString("name", replacement).putCompound("states", states).build(); - } - - if (NEW_TNT_BLOCKS.contains(name)) { - replacement = "minecraft:tnt"; - byte tntType = (byte) (name.equals("minecraft:underwater_tnt") ? 1 : 0); - - NbtMap states = tag.getCompound("states") - .toBuilder() - .putByte("allow_underwater_bit", tntType) - .build(); - - return tag.toBuilder().putString("name", replacement).putCompound("states", states).build(); - } - - if (STRUCTURE_VOID.contains(name)) { - NbtMap states = tag.getCompound("states") - .toBuilder() - .putString("structure_void_type", "air") - .build(); - - return tag.toBuilder().putCompound("states", states).build(); - } - - return tag; - } -} 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 8e42887ff..01dcd38a6 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 @@ -37,6 +37,7 @@ import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.type.BlockMappings; import org.geysermc.geyser.registry.type.GeyserBedrockBlock; +import org.geysermc.geyser.registry.type.GeyserMappingItem; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -50,12 +51,10 @@ import java.util.function.Consumer; public class CreativeItemRegistryPopulator { private static final List<BiPredicate<String, Integer>> JAVA_ONLY_ITEM_FILTER = List.of( // Bedrock-only as its own item - (identifier, data) -> identifier.equals("minecraft:empty_map") && data == 2, - // Bedrock-only banner patterns - (identifier, data) -> identifier.equals("minecraft:bordure_indented_banner_pattern") || identifier.equals("minecraft:field_masoned_banner_pattern") + (identifier, data) -> identifier.equals("minecraft:empty_map") && data == 2 ); - static void populate(ItemRegistryPopulator.PaletteVersion palette, Map<String, ItemDefinition> definitions, Consumer<ItemData.Builder> itemConsumer) { + static void populate(ItemRegistryPopulator.PaletteVersion palette, Map<String, ItemDefinition> definitions, Map<String, GeyserMappingItem> items, Consumer<ItemData.Builder> itemConsumer) { GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); // Load creative items @@ -68,7 +67,7 @@ public class CreativeItemRegistryPopulator { BlockMappings blockMappings = BlockRegistries.BLOCKS.forVersion(palette.protocolVersion()); for (JsonNode itemNode : creativeItemEntries) { - ItemData.Builder itemBuilder = createItemData(itemNode, blockMappings, definitions); + ItemData.Builder itemBuilder = createItemData(itemNode, items, blockMappings, definitions); if (itemBuilder == null) { continue; } @@ -77,7 +76,7 @@ public class CreativeItemRegistryPopulator { } } - private static ItemData.@Nullable Builder createItemData(JsonNode itemNode, BlockMappings blockMappings, Map<String, ItemDefinition> definitions) { + private static ItemData.@Nullable Builder createItemData(JsonNode itemNode, Map<String, GeyserMappingItem> items, BlockMappings blockMappings, Map<String, ItemDefinition> definitions) { int count = 1; int damage = 0; NbtMap tag = null; @@ -89,6 +88,23 @@ public class CreativeItemRegistryPopulator { } } + // Attempt to remove items that do not exist in Java (1.21.50 has 1.21.4 items, that don't exist on 1.21.2) + // we still add the lodestone compass - we're going to translate it. + if (!items.containsKey(identifier) && !identifier.equals("minecraft:lodestone_compass")) { + // bedrock identifier not found, let's make sure it's not just different + boolean found = false; + for (var mapping : items.values()) { + if (mapping.getBedrockIdentifier().equals(identifier)) { + found = true; + break; + } + } + + if (!found) { + return null; + } + } + JsonNode damageNode = itemNode.get("damage"); if (damageNode != null) { damage = damageNode.asInt(); 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 1da3b0e66..e9901c620 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 @@ -45,11 +45,8 @@ import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.nbt.NbtUtils; -import org.cloudburstmc.protocol.bedrock.codec.v671.Bedrock_v671; -import org.cloudburstmc.protocol.bedrock.codec.v685.Bedrock_v685; -import org.cloudburstmc.protocol.bedrock.codec.v712.Bedrock_v712; -import org.cloudburstmc.protocol.bedrock.codec.v729.Bedrock_v729; import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748; +import org.cloudburstmc.protocol.bedrock.codec.v765.Bedrock_v765; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.SimpleItemDefinition; @@ -85,7 +82,6 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -111,18 +107,9 @@ public class ItemRegistryPopulator { } public static void populate() { - List<Item> bundles = List.of(Items.BUNDLE, Items.BLACK_BUNDLE, Items.BLUE_BUNDLE, Items.BROWN_BUNDLE, Items.CYAN_BUNDLE, Items.GRAY_BUNDLE, - Items.GREEN_BUNDLE, Items.LIGHT_BLUE_BUNDLE, Items.LIGHT_GRAY_BUNDLE, Items.LIME_BUNDLE, Items.MAGENTA_BUNDLE, Items.ORANGE_BUNDLE, Items.RED_BUNDLE, - Items.PINK_BUNDLE, Items.PURPLE_BUNDLE, Items.WHITE_BUNDLE, Items.YELLOW_BUNDLE); - Map<Item, Item> pre1_21_2Items = new HashMap<>(); - bundles.forEach(bundle -> pre1_21_2Items.put(bundle, Items.SHULKER_SHELL)); - - List<PaletteVersion> paletteVersions = new ArrayList<>(3); - paletteVersions.add(new PaletteVersion("1_20_80", Bedrock_v671.CODEC.getProtocolVersion(), pre1_21_2Items, Conversion685_671::remapItem)); - paletteVersions.add(new PaletteVersion("1_21_0", Bedrock_v685.CODEC.getProtocolVersion(), pre1_21_2Items, Conversion712_685::remapItem)); - paletteVersions.add(new PaletteVersion("1_21_20", Bedrock_v712.CODEC.getProtocolVersion(), pre1_21_2Items, Conversion729_712::remapItem)); - paletteVersions.add(new PaletteVersion("1_21_30", Bedrock_v729.CODEC.getProtocolVersion(), pre1_21_2Items, Conversion748_729::remapItem)); + List<PaletteVersion> paletteVersions = new ArrayList<>(2); paletteVersions.add(new PaletteVersion("1_21_40", Bedrock_v748.CODEC.getProtocolVersion())); + paletteVersions.add(new PaletteVersion("1_21_50", Bedrock_v765.CODEC.getProtocolVersion())); GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); @@ -207,7 +194,7 @@ public class ItemRegistryPopulator { noBlockDefinitions.add("minecraft:structure_void"); AtomicInteger creativeNetId = new AtomicInteger(); - CreativeItemRegistryPopulator.populate(palette, definitions, itemBuilder -> { + CreativeItemRegistryPopulator.populate(palette, definitions, items, itemBuilder -> { ItemData item = itemBuilder.netId(creativeNetId.incrementAndGet()).build(); creativeItems.add(item); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java index 24cc270c9..dd654531a 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java @@ -33,11 +33,8 @@ import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntList; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap; import it.unimi.dsi.fastutil.objects.ObjectIntPair; -import org.cloudburstmc.protocol.bedrock.codec.v671.Bedrock_v671; -import org.cloudburstmc.protocol.bedrock.codec.v685.Bedrock_v685; -import org.cloudburstmc.protocol.bedrock.codec.v712.Bedrock_v712; -import org.cloudburstmc.protocol.bedrock.codec.v729.Bedrock_v729; import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748; +import org.cloudburstmc.protocol.bedrock.codec.v765.Bedrock_v765; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.item.type.Item; @@ -70,11 +67,8 @@ public final class TagRegistryPopulator { }; List<ObjectIntPair<String>> paletteVersions = List.of( - ObjectIntPair.of("1_20_80", Bedrock_v671.CODEC.getProtocolVersion()), - ObjectIntPair.of("1_21_0", Bedrock_v685.CODEC.getProtocolVersion()), - ObjectIntPair.of("1_21_20", Bedrock_v712.CODEC.getProtocolVersion()), - ObjectIntPair.of("1_21_30", Bedrock_v729.CODEC.getProtocolVersion()), - ObjectIntPair.of("1_21_40", Bedrock_v748.CODEC.getProtocolVersion()) + ObjectIntPair.of("1_21_40", Bedrock_v748.CODEC.getProtocolVersion()), + ObjectIntPair.of("1_21_50", Bedrock_v765.CODEC.getProtocolVersion()) ); Type type = new TypeToken<Map<String, List<String>>>() {}.getType(); 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 ef6261ead..cfb981b7d 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -2241,9 +2241,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { @Override public void closeForm() { - if (!GameProtocol.isPre1_21_2(this)) { - sendUpstreamPacket(new ClientboundCloseFormPacket()); - } + sendUpstreamPacket(new ClientboundCloseFormPacket()); } public void addCommandEnum(String name, String enums) { 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 15c19c542..78322c529 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 @@ -261,9 +261,9 @@ public abstract class InventoryTranslator { } } - if (shouldRejectItemPlace(session, inventory, transferAction.getSource().getContainer(), + if (shouldRejectItemPlace(session, inventory, transferAction.getSource().getContainerName().getContainer(), isSourceCursor ? -1 : sourceSlot, - transferAction.getDestination().getContainer(), isDestCursor ? -1 : destSlot)) { + transferAction.getDestination().getContainerName().getContainer(), isDestCursor ? -1 : destSlot)) { // This item would not be here in Java return rejectRequest(request, false); } @@ -411,14 +411,14 @@ public abstract class InventoryTranslator { boolean isSourceCursor = isCursor(source); boolean isDestCursor = isCursor(destination); - if (shouldRejectItemPlace(session, inventory, source.getContainer(), + if (shouldRejectItemPlace(session, inventory, source.getContainerName().getContainer(), isSourceCursor ? -1 : sourceSlot, - destination.getContainer(), isDestCursor ? -1 : destSlot)) { + destination.getContainerName().getContainer(), isDestCursor ? -1 : destSlot)) { // This item would not be here in Java return rejectRequest(request, false); } - if (!isSourceCursor && destination.getContainer() == ContainerSlotType.HOTBAR || destination.getContainer() == ContainerSlotType.HOTBAR_AND_INVENTORY) { + if (!isSourceCursor && destination.getContainerName().getContainer() == ContainerSlotType.HOTBAR || destination.getContainerName().getContainer() == ContainerSlotType.HOTBAR_AND_INVENTORY) { // Tell the server we're pressing one of the hotbar keys to save clicks Click click = InventoryUtils.getClickForHotbarSwap(destination.getSlot()); if (click != null) { @@ -587,7 +587,7 @@ public abstract class InventoryTranslator { } craftState = CraftState.TRANSFER; - if (transferAction.getSource().getContainer() != ContainerSlotType.CREATED_OUTPUT) { + if (transferAction.getSource().getContainerName().getContainer() != ContainerSlotType.CREATED_OUTPUT) { return rejectRequest(request); } if (transferAction.getCount() <= 0) { @@ -780,7 +780,7 @@ public abstract class InventoryTranslator { } craftState = CraftState.TRANSFER; - if (transferAction.getSource().getContainer() != ContainerSlotType.CREATED_OUTPUT) { + if (transferAction.getSource().getContainerName().getContainer() != ContainerSlotType.CREATED_OUTPUT) { return rejectRequest(request); } if (transferAction.getCount() <= 0) { @@ -1028,15 +1028,15 @@ public abstract class InventoryTranslator { } } - itemEntry = new ItemStackResponseSlot((byte) bedrockSlot, (byte) bedrockSlot, (byte) itemStack.getAmount(), itemStack.getNetId(), "", durability); + itemEntry = new ItemStackResponseSlot((byte) bedrockSlot, (byte) bedrockSlot, (byte) itemStack.getAmount(), itemStack.getNetId(), "", durability, ""); } else { - itemEntry = new ItemStackResponseSlot((byte) bedrockSlot, (byte) bedrockSlot, (byte) 0, 0, "", 0); + itemEntry = new ItemStackResponseSlot((byte) bedrockSlot, (byte) bedrockSlot, (byte) 0, 0, "", 0, ""); } return itemEntry; } protected static boolean isCursor(ItemStackRequestSlotData slotInfoData) { - return slotInfoData.getContainer() == ContainerSlotType.CURSOR; + return slotInfoData.getContainerName().getContainer() == ContainerSlotType.CURSOR; } /** 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 77f58f5d6..be0f8560f 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 @@ -35,8 +35,6 @@ import org.cloudburstmc.protocol.bedrock.packet.UpdateBlockPacket; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.level.block.property.Properties; import org.geysermc.geyser.level.block.type.BlockState; -import org.geysermc.geyser.level.block.type.SkullBlock; -import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.SkullCache; import org.geysermc.geyser.skin.SkinProvider; @@ -58,9 +56,6 @@ public class SkullBlockEntityTranslator extends BlockEntityTranslator implements // Could be a wall skull block otherwise, which has rotation in its Bedrock state bedrockNbt.putFloat("Rotation", rotation * 22.5f); } - if (GameProtocol.isPre1_21_40(session)) { - bedrockNbt.putByte("SkullType", (byte) (blockState.block() instanceof SkullBlock skull ? skull.skullType().bedrockId() : 0)); - } if (blockState.getValue(Properties.POWERED)) { bedrockNbt.putBoolean("MouthMoving", true); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockMovePlayer.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockMovePlayer.java index 6abb3899a..ce8afa269 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockMovePlayer.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockMovePlayer.java @@ -25,7 +25,6 @@ package org.geysermc.geyser.translator.protocol.bedrock.entity.player.input; -import net.kyori.adventure.util.TriState; import org.cloudburstmc.math.vector.Vector3d; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.PlayerAuthInputData; @@ -33,7 +32,6 @@ import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; import org.geysermc.geyser.level.physics.CollisionResult; -import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.ChatColor; import org.geysermc.mcprotocollib.network.packet.Packet; @@ -88,14 +86,8 @@ final class BedrockMovePlayer { session.setLookBackScheduledFuture(null); } - TriState maybeOnGround; - if (GameProtocol.isPre1_21_30(session)) { - // VERTICAL_COLLISION input data does not exist. - maybeOnGround = TriState.NOT_SET; - } else { - // Client is telling us it wants to move down, but something is blocking it from doing so. - maybeOnGround = TriState.byBoolean(packet.getInputData().contains(PlayerAuthInputData.VERTICAL_COLLISION) && packet.getDelta().getY() < 0); - } + // Client is telling us it wants to move down, but something is blocking it from doing so. + boolean isOnGround = packet.getInputData().contains(PlayerAuthInputData.VERTICAL_COLLISION) && packet.getDelta().getY() < 0; // This takes into account no movement sent from the client, but the player is trying to move anyway. // (Press into a wall in a corner - you're trying to move but nothing actually happens) boolean horizontalCollision = packet.getInputData().contains(PlayerAuthInputData.HORIZONTAL_COLLISION); @@ -104,7 +96,7 @@ final class BedrockMovePlayer { // This isn't needed, but it makes the packets closer to vanilla // It also means you can't "lag back" while only looking, in theory if (!positionChanged && rotationChanged) { - ServerboundMovePlayerRotPacket playerRotationPacket = new ServerboundMovePlayerRotPacket(maybeOnGround.toBooleanOrElse(entity.isOnGround()), horizontalCollision, yaw, pitch); + ServerboundMovePlayerRotPacket playerRotationPacket = new ServerboundMovePlayerRotPacket(isOnGround, horizontalCollision, yaw, pitch); entity.setYaw(yaw); entity.setPitch(pitch); @@ -113,10 +105,9 @@ final class BedrockMovePlayer { session.sendDownstreamGamePacket(playerRotationPacket); } else if (positionChanged) { if (isValidMove(session, entity.getPosition(), packet.getPosition())) { - CollisionResult result = session.getCollisionManager().adjustBedrockPosition(packet.getPosition(), maybeOnGround.toBooleanOrElse(false), packet.getInputData().contains(PlayerAuthInputData.HANDLE_TELEPORT)); + CollisionResult result = session.getCollisionManager().adjustBedrockPosition(packet.getPosition(), isOnGround, packet.getInputData().contains(PlayerAuthInputData.HANDLE_TELEPORT)); if (result != null) { // A null return value cancels the packet Vector3d position = result.correctedMovement(); - boolean onGround = maybeOnGround.toBooleanOrElseGet(() -> session.getCollisionManager().isOnGround()); boolean isBelowVoid = entity.isVoidPositionDesynched(); boolean teleportThroughVoidFloor, mustResyncPosition; @@ -131,7 +122,7 @@ final class BedrockMovePlayer { if (teleportThroughVoidFloor || isBelowVoid) { // https://github.com/GeyserMC/Geyser/issues/3521 - no void floor in Java so we cannot be on the ground. - onGround = false; + isOnGround = false; } if (isBelowVoid) { @@ -151,7 +142,7 @@ final class BedrockMovePlayer { if (rotationChanged) { // Send rotation updates as well movePacket = new ServerboundMovePlayerPosRotPacket( - onGround, + isOnGround, horizontalCollision, position.getX(), yPosition, position.getZ(), yaw, pitch @@ -161,7 +152,7 @@ final class BedrockMovePlayer { entity.setHeadYaw(headYaw); } else { // Rotation did not change; don't send an update with rotation - movePacket = new ServerboundMovePlayerPosPacket(onGround, horizontalCollision, position.getX(), yPosition, position.getZ()); + movePacket = new ServerboundMovePlayerPosPacket(isOnGround, horizontalCollision, position.getX(), yPosition, position.getZ()); } entity.setPositionManual(packet.getPosition()); @@ -183,12 +174,12 @@ final class BedrockMovePlayer { session.getGeyser().getLogger().debug("Recalculating position..."); session.getCollisionManager().recalculatePosition(); } - } else if (horizontalCollision != session.getInputCache().lastHorizontalCollision() || maybeOnGround.toBooleanOrElse(entity.isOnGround()) != entity.isOnGround()) { - session.sendDownstreamGamePacket(new ServerboundMovePlayerStatusOnlyPacket(maybeOnGround.toBooleanOrElse(false), horizontalCollision)); + } else if (horizontalCollision != session.getInputCache().lastHorizontalCollision() || isOnGround != entity.isOnGround()) { + session.sendDownstreamGamePacket(new ServerboundMovePlayerStatusOnlyPacket(isOnGround, horizontalCollision)); } session.getInputCache().setLastHorizontalCollision(horizontalCollision); - entity.setOnGround(maybeOnGround.toBooleanOrElse(entity.isOnGround())); + entity.setOnGround(isOnGround); // Move parrots to match if applicable if (entity.getLeftParrot() != null) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java index 11178115a..e1ff7a5fc 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java @@ -29,7 +29,6 @@ import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.LivingEntity; import org.geysermc.geyser.entity.type.player.PlayerEntity; import org.geysermc.geyser.item.Items; -import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.skin.FakeHeadProvider; import org.geysermc.geyser.translator.protocol.PacketTranslator; @@ -79,11 +78,8 @@ public class JavaSetEquipmentTranslator extends PacketTranslator<ClientboundSetE } case BODY -> { // BODY is sent for llamas with a carpet equipped, as of 1.20.5 - if (GameProtocol.isPre1_21_2(session)) { - livingEntity.setChestplate(stack); - } else { - livingEntity.setBody(stack); - } + // and for wolves + livingEntity.setBody(stack); armorUpdated = true; } case LEGGINGS -> { diff --git a/core/src/main/resources/bedrock/biome_definitions.dat b/core/src/main/resources/bedrock/biome_definitions.dat index 2bd58d0a33a9ea50e55361a77e3832a66cdc771a..e59a99ce2a5c5ffc11489ea1a9d42285e77f137a 100644 GIT binary patch delta 926 zcmYjPUr1AN6lVV?)2U_IEWJ(Bh{7=%Ld*q*KPy4PhtU48x$?HsySv-Ht2t813<B3o zckrcNgvjh62!Bab*nB83S}6tgSP#K^>A`w33);?E(bN6T_nq_c{m!{lGy2h4{iA0F z!_2*UzF>GmAYrlS@(fH_zu-6R68N2>cSv%{Hb5X-yq(&z#SGf*tJo^p7(ZWX(xanN z{(w4?RSe`ZGY@TkO@wb;fThX?KCs16=!goyxBftnoXD3d^(3sMT6wu6js;IvJtSve z^;=>}gf#*>=S>0=wJ)&;y6V57-Qk8``0c7^Jh9tk#AvWrr1p({W(1ISF@CgBBR1{Y z_KyX@{Q_q`yWb;ucYZ&KnYh3|dQw#Qsu}$DSozbYW0cW$ph$1GYf3OC2SmA7RKp@P zdj+WQ?tz}c8qAb`-Llt+4t%xQNs~VhelUaERt23Fhsmf0RS|UUG_YV`yua-+9tt)( z7!S2i($zLP76?4=%#fV0Fur`;NJWXz#&?|X>q_n6pd3;om&Je<3x*X~+f)huL^%u( z9^vaJPm@QtU!hkeql}mJ)X_$p&V0wz`4Gz4S42)r42I6(h9HOeXs7~LoG;*0Kdo+B znxr>+WIutaNa0t|IhoC-1SK&L3aY&#I32aH^N<}}ry2#bB^;5psHhg@@~W|jD)s)? zDnr^`gSlreE|Tj7%}F2`-Gu<U{S4MGeZ|}(g910i=19oIbN3p^;AJ!Mc^bQZrH4+C z9rEa5xW!tm$&pw*ph*!$)VS+v!8La`xIJ<ohg+}JSrPP&naH|tjPWOl8&tF;*HQJ2 fTmKRQgl^5{$=r?v?wuGTVWO5nNoo;=l@$8}M7(Fj delta 867 zcmX|<Ur1AN6vx@!+#jaa%CcE@o24d3V>JXZ3!$HtAmKx35t~-KQ@q|?cFXDdNBR<N z=AV;K5g0+)LlB*OXyKoS0z*qE(nos;7DNx$ldYh6j`{Tap3gbwd(ZFuZvVJ6`dE6N zGMg2p3@6QVED|=GX^p_B{VSc*UK#H@J`hCJ*~228yOYb(xdIyU7pYWr3T)q$Bax%- zddd|8MFO<VRt#@_$DndhhS|b0?AhjKFc*{oxBnuKY!YV+B~DDiadf$RDZqiEXY5>C z{GLgkyu!ldNwOF!c|$eOT>69TPL%zjv$<4YqCCe!qd{ee%QFY8Bw*Sr@YF$r>9lvp z1_jwSMLl199|=C1ILygZT*f8;2nV&r0{;5#_^RqO&*-dnNKjW(vBhQRZ80sVgknLx zBdm642H5+mX{NQ?E!0@Z0T+*WxbyeXPgZEMxku`Az~?N7{00|QPnrdG*1x1zf=r{p zaKkV^S*CH4#p|YdPA6;v7tUBX$dl`F*V%x{?TB=TqOnL+y_Db8riG)~FlfZux^y^} z+zrb&PvYvi^X$|T(0Q!6U^_3g>cY>BG4zXX8IGv}t}C=4$ZG5l7tn^+0$A?k&5fzU z?B&-2EJh>ie}c&)@LqI=Y4c?di>p`mk${$ffOPjaNl~C~{~lb4y<nb-3;5nUPw$e7 zPjFZCS}QN`^9{dLkZWj>SZ~l!BYMcND$z(hq+#)`b>r;j;db8>GC0(~*G@NUO$vCB um?7Ajoaaw@@2(Q49JK!jGA#LBpbR~vt}#`{is3t)94Zlz86gXp0`U))1vAwE diff --git a/core/src/main/resources/bedrock/block_palette.1_20_80.nbt b/core/src/main/resources/bedrock/block_palette.1_20_80.nbt deleted file mode 100644 index d330c7d6f984d4cd4ec2202c475f9c266a1d93e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176786 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 S?{TZQA3KZh#+`H6k^T>B9i{33 diff --git a/core/src/main/resources/bedrock/block_palette.1_21_0.nbt b/core/src/main/resources/bedrock/block_palette.1_21_0.nbt deleted file mode 100644 index 57366fc57f4456dd195497c435f5e5c7b397075d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 177397 zcmXtAWk6NS7M7ImR6^;H?hXk-x;v#oLQ=XUrMtVkJEU8>1?g@iB;MKE`}j4?%&KqI z9A*xrVF)k4AEcFZ7h&v0ynbv^Trn{y5jadZWVNIA8@>5gFR|WW#U#Pf(uKAB`Q?7v zZgi@vK2vXW+U|116dWxhLv=&tGEQ;&c)sHFcGu-|2T!AStpC85-#p(wZey~P5b^76 zb3$iaPIzNWi}7cym#|IfN%V!fbyQ;|bBjuemz0WAD6wX1m8mFUI@G7s>^6UT3SdrA z62H8+<+~eg-f@Cr3X&;{NTg>IDo8nOdduS)LC2AgSLzC#p{!r6L>WDDtC!-P9kg7A zil0Qxn4%OKfE4mhqUa8GY%MfEQAs*KCy-d-x77h`=gYdPwU3Nx!FY3@lR3-OofqsZ z(liJ}hQyRu7-qVpYErO|-RcyaPVUS95=&##9?q-qk3HY=`>N#ZRKFH7*b379ws|SC z;Y}!bSpWOh`OW$1h#Uh4k^T#;%x4bi-rL8^#qVpi6VlZEr<vQgt$6&bQ%{gxVU9%R zV&2ekw|}<l&OK{3!)V4NM~Vpy+jJOnFh>`sx*pv_=-K^V?W&_c$*zxnQT>poBu$%# zML|a*6n(t6mf>Au#Qqg}dGhZuP6q2Mfe;p6?^e#QBI&kzIpM+M@BXkxi{VkKNacKL zLGh@3<CJL9*kg_&djcPHK+{DpO&b{-;`LOaK%p2)K9h2rJVA~k*HiK&u4tF!B!yCV z!foq~L&QgrmU6S|sbB}o%$+XDVd>{*jP5`E<XqlD!;QwwZ9}JC^387(!GGFFW}g{{ zh?*d6u<8RQQUn`{+--1%fP$Tlf!)_%M>B|U)Gtxw8biyqa@U)FtQS?H$%=H_`*-gv zGxA`<QB$MH9aVKm;}E$J5DhtLq9DmJnx;|1?@S{#tK@{vjav24;!>(kD|qZQanRQ8 zVxZ<fU$u*}4Wx)|%&+Vv%#Th|Mc?v0t5vXnX|upLc+;^Ho7*RC7^g#rH5^~J2rs0c zeJ82!SS%T)Z(=`IYmSWk-~vy@c^;>fEu}`0NN<si#(!URbsLISr=WjK&o!r*j%-6S zvfFIt70j$fZdA>z!#1*gnYN8oeKaq$8>&ph?q>2kAT<S6d-R~$qL<#d%!A(eu}a8R z&bZ83t$(TW@{+t?15T~~t5IKa;Ld(L`Z%war)Q(v*Fdv!ah_Qg`O34hNNxE8(+s`e znlAW65AhnF94yI=arMWeDYGH7>Is^Sdizd38lEP}PG;qB&ES-7Kf0G(Sx3$2l7lrO zW%d0q>!D9Sp9E%U<-6L7@Q!T}VC~-ATG7_A{ep+M)!Hf5olv)OrDlogNB|rZxEI)p z&(k-SO}I#@Cl{*UR*zhLPON~8T<6?*i2f!)25OSxo6bA?xEUN`>2d(?8#qMq%m_*~ zeNEGHp`3MDqw9E+Il^r5{N4llkuobL>r-(+@YmvBMHt{3rO2^AsPJp&d;TDZ4W_t6 zlQnolrt#7_IkP{?HYpu61C+|}kZ~_uqmv@MM%QSoTnB|;wUniEyEDb{)U<NeG>&(` z;J#)|H0z!=N?*OblbRBdypP)wPXA$AaiLA(F@MomZOVAAP0}_uJDE7Dv$l&n2Y)la zs2^1{<B%Ms)Nk2gSF93qSK5N%TwX}kj+3Y*>_2$+l-J6;hbblg=>#`Blk#oQg^AE} z6e7;ffDh4dDNN*ivaq4xdr`FQ^s8$;Y?{$s$-!*ylk0YC=)k)p1fDpem@aK9g`|n^ z2ptxRq5BCpu(D2x)E~rRD8_`u#6GGRS?mZ6vX!!+T7E74E5Bw!lq+(4`*1~Nv}j%Y zJ%f+$Yg|l>)J&Zxk4XHYx|-^Qh7|Ib2lGJmU_*)5+-488l3Bzocyu&`0@g?0q8J|K z?xxTO**l$}7~U~SyymoZUieV`PV`-P&J~tQ$O^iw&{PH<?Zo!n5K1n!dWZ~xyi~sT zJLMXr>++ua7L*=}&sh?BwDF0C{Jp3u#amD3C@`d-vzCr)`96Ouka6V36Fm-jyzfSl ztwwh8SYya0OfkYg=&RezHZ>2`E&95QmiN{&6rJiy_Of;1ttArLfkLu>ECvVM%WF+M z4q`=RI|aYmX87c6TIawg(<JSWZ0voEGf@R3vZFt7S`}3J?pHb9D^s0(k7KLCiROsM zFZp!g`bzcd=3TZ6mshr8^XEgH0M{6+a9@Ap&Pu6(f#TV#?q<*5v+t=N@VNrKc<1H3 zHeI*{C)f_>1Ca7H@`w4K3f#VpCR<<`9^R?XP}VNUl;K4i#5&&pP1dxgI$?`4z^;tw zw8cve89}93z@Z=T<P00@m3@h2UEOAAJ7&aYf9wmZJ@x&DFM07cO`ve7r<0gD40WA{ z7-z?B<sGNbuH)c!n%SrkjH_IJJmV-Euol18(lPUnb7yzvbBZr6Q?y2zf)t0Z7sI># z%>D-S$C-z@z$*s!E?;?LD{{t88q^iITc=w-9omq=7K4hs)pw1VyDQV4TNlsfZ{tsL zVR>z0=;gAf9AQPH`Sl7Ibk2=Jlqd!?8L8m#8*P-(Jh-uQg_P_<e%Cr|_9Sa4QNeL_ z*(eG^ro%?_)=kSjNJn1`?5cd3cAJ1X`|ZQtcoy^?&V&2S*x2D&IgTJv?GCJ>RulB1 zU5HV!3JH^n_<)o#>)UNa_68W^sk^_rl9LO5si;@NrDe`uOTmGT^V7w_NuvzmqmCOt z@{O_!8iJ;Cyfg*BD7HsW@4=)w=TGb(J?*bZ&j+Y~B%>+bamkP7AFyjKpbmxGTw0~r zqd-a&W>9DL76?Q25KxjTTWIPG@t>X>(S_B$nD!}XJJx}*Z_Ul)%rSEo%coL+bhrGz zbG?>v&u1abE6sr0Q-<K!t!nr-*slXaIqWtMyLLU<bMM5**=YUEy9*-rp1*&mt=ay> z*7I$lmPMo?&00r%|08F?Ktil+Tk%s@|JH&-4dwREZ4C<tWbtm6GH@Y@KwGY$WzwDW z^|aB*5DxB-##$EIhBO)8nnMZBg5HE!@ioiF(C>)V+n+Y1$M9-dh#S(vU+LPSA;%j2 zQh@nH7s$#eYHdKY|MPw>tfp_rCMQ~z@$QcDoVIvdW0rBr^Nk>3JyEHebcAhhVRnM? zEPeDq#x3lOL)qZ({olQX841RLYuwY{Z}X-d$`-65ae50=6O6AJy+4Y2<nTy_;l_Nw zo~~e#ro|hPAu4cKh^o9^4$+^z`Us8OcuOv4sr8zhjw)s_{;Omk5hFfn^LD_Ej8>9G z`9-{N+R{@)-c@e;hmQ~2vW0i#-|!|vytj-Si}kK@EiNOECs*&@S5Z)4{n_C)v2U-U zLX#0<W9E81p2&^}3x6=KIofKWU*o>JR=IzF_Rxe}EX7Y-AV8ij9h=<s*U}fdMu?mY za^|8kMTOglGs+e%X=FH=c~f}Wg-d<B7lxF%Y<B90=-SL4dr=l2BBM_zZCMkJCAQev zv}|UIgFW>&$e}4dcq06V4kKa?(MS|8TW%6f^p?V0J#uSr_z(Uk%HW!FtLxXJG*oDW zvF{ga>YhAJaZHVQ{b=}>*uDG1e^^UPVr*O14pAm6CZX;l<gB=Iweqte)e;hm#PNN> zS2vL`<jf%tzQ`In;2otIrE-K-lw(xcHG)iMkq0{zh<n>Y7+&)D(d-I7C`S<nF1kj% z8P31U4P(w_P8~;VL$OwS6b&i(r1*{hENx41);kU1GS|1R!Z@>tEzL1^#*&UK#Z5C~ zC@gW}%RTN|FHMjNbUK}ren|3*wGu21-pWalQP`t0I^Q^k8G%t)ShaZJ=u{^yBPs)1 zRYdDodz|=eP%lfR*NrA-!eC1=Ncny3(fD-`SybQN!j8wMMTu4+byG9nEJf!+Rz096 z_)RyRKgp;f2tswf{c?y^CVGZgW`E!iYk*q=BcIiqPjZQ<1|cn&uvH2*!1a?iSVWj4 z@q_I5RfQ^c0oP`lD@e#R0@tw#Qah@Iy6Grh$aj?*5>*5wl|Up=N;AEZ0)+l7Zu0}T zEi@XUeU|K3flvfDCv}7aY}cQn1K}Xt+;3Gwbj~Fa0GSd*X>Adp%%0yNs^AnA${xd8 zK-AtFT7h72ZDsUZCWP?i8EnTpI$!#?1$3~P!iNcK+8BT>EBjRG;(+w^YghXJgq|S` zx@Ceww}~TVVN0XPU7=go;$uML7bp`yO9KQL_UGH8prLgwY;xEDv$RYuLDFsr|E@<e zvpL9=+&ZF4#DU*Gp<O@cU=lzc*3AoZzJP$N$6}3@i11<vJ3DWuMK2KY$#E!Th%sho zura3NHxz(13WEcJl)%8;IqMTDC{)S?trrszy7hH$E)ihXWot3$;-@+Y$M1VO?r%rg z3jjFS_;-c{B*3G;m>>suoGGmRI35JCccXT{12w|=dzg>iO&15l@B3nnEfU1?>nQI+ zGzf#6+)Xj4noX;W1E>eWB74~jz*6C><_&SkcJ(t@=ciQ?bx|Nxd@XHZZ9yJ_Yo2QH z01typKJ@=AU2iR#Sp(UP$$40Ps6uM?rH-1eoY4Z+l$NA-rUKQp@stn&fR1t~m(~W? z=#;KyfB{seQnw3&T6WqxBLBA8x^yrAVAP>vSqcd1X7e2#xIggJ$exe&pTjk0ok1V* zyJ=q2b<=I3WeCrQJH&zk>WBB8Q4$OS51U_TASnlZ+&QQtj8|R*7*X6LUIGxO4Z~&l zOzdAYVHuS`z;`X|{|*A8;r!6&1X8M-{ayc;F}_hGyUU<ZS4RtNh;CEWR4j(NALx8( z;l8w+4d^4#_!im3+WmzR^M0EJ`)B-|t|y`sLjn4Rt$zXZZCl9F-y~vSvF(*K^x`=_ zv~<>Y?~gi&Z|{+zDA)HF*Y%wr0)4PByaxTPMtt^|VB>^CBFiC0gB&ZyJukpG6IL^) zJu#0fMq2cxezUmg>wZNr2}oyLrrtb3e*-W(6ONt;1mF|an*GcR25~?7rUR%(-tlp; zRos9|AnZD#&XL;-b<yA_Q3aEk(rGwQ{Fz0^aw-@p16Q0)#DqD35!scY&i`!8=h9Cz z0j(7vmEHlJYwmp95DXfoSN@s%pNUJds|WIc7nqB$kJ&-S-0>G7TgBp#+;u(<9f-#O z85`4EC-s9kh0QG6--KX3LJ-)qqk?ZFe}4r*XuXq8S1Lm*K;Gank!14d7BKF5xV#)3 z+1Y7fop>67@Zg>3-KIg5DDuiW^!Hu>(0w!U^Bxo2sL<<lh7T$+_(3z2{w+v>rcU=a z1yp-OfBdbRC8nTnNO7PY2zQZ5d=JcU%_iW3b72c=kaj_^$`c(N(QrM`Row7`7LX^b z5dap<gdbT|V1Z#)KK17WK+7`I^-5KzQ?Y<<3p%6gSJ!kCmMCCU*5!tX+dma|efQ8n z6@RuYQ>;XwfSyFQDpLMus)nW~KHrn5FyhtLBlbU>o{C9$K-#RW<;O-y82RyXm9#ZS zf|ih(sf8JV-Z5FO9Qqey&sT2$$$i7(X(jv5l)Lg_WN_r_zK!u&@*5CsUGch7xFGAU zYdz%{TWAMJQ-C|2`)B>Ft5wu%P?rZ)i!(WpxahA}FgavS;V;bb`wtz6kZQr`R<YiZ znN*Cl4J&Wp^z;oB?Wd*1uWQZ(Qo9Pd>xF~Le%5CQSdRV|{nc(sF@X1i7Toq+LEcIB zo4@`k+tf(^2nEuz3oc}ArTVO6M-eZ)9tJ=kT75a$beb;)z}nTkf9nt87WK4e`(IxD zw0Eu^0Vgp$8}G$H)-<*42>-V^_g2^poLtbc4xh|OvW@P<K&SF0TJs3kgXf5O0s5Hq z&v<8G^1t!-)wRkVnHQj=PB*{2PX9?D1^x!rJtHZhPiIc?uL8W<`OE5OfV<&OeOC0S z|DOle#WV`v0F?!*k?;o|7%aZ36Oa-E$w6U6>*BNFJ<2z1KqqZSQYV$I0&-m8Y;=_X ztVUhk$QfXxI}#8a-|JQfH_o@{T7iAu?(8>bE)y<$E+p#|ZXGTYA<gauzb`qI$p3}k z73LU&mHc3$tvU`YucG6N|IhJ1Gq3+o&ODaAj|k~LB>cY5N47R^z_#V}M;oFLq*tDQ zN}fbT1BI(Ep*vFptFAw{gB9ILz{&S$9FdSZO4NnTz2ylF))z<s^B<ecR7{5h4fVFe zRteODWG>zJzX*tGxy)CbHUJqgkqWVYh58Xrw}p_=)ow)22o^3Bjg_^%>W|<K;>-%> zuV=F$x8`iAQ;^#?s%1jY;w(a-X_*K~BS9vqA;pGkHS)iVXYA1Egt!E905Obt`~X5a zvGMi)_UFuh{N5om4Dftm+v2aN{DQ3{ip>@J`)%z!h&mC^^}-$;0;s?#f8oE*=IZ6( zuc!_KPRh&WQ-U2Bg{H0o9nzN|S)XrD_<#6ae=hBSF1Ii&oB;=`R!+UggBW1VyX3zk z1DmkUOu`s!sRG&=Ebp1=EQqegzFs3SSjNloCq_UtWCR2w!8Z5vlciy<y25A?aD4bX z(6jgY4P;!gj+htj<@2B6bV8od;5o-G!^Qp`DCIPT_+P2Zf|VBQBk<&_0C8(c%pHbw zxzFo}Wvx7W+~C%$qsd*cwMrkmT3qG(nW{j}Ybk=HxH4dYuQHYq0kIsn|55+}il-YJ zLE9VeKflKv{h9iw(ix(TBkh-e2fz=$2mfG?3kYp}T~7xF?b&+ezJx3kMEjF7>=d%d z5fF7Tv7zu+1u2TaVaHt~j~r0RXP0e07DO-?Cz0!4bQH0dQa}zp$o#&QhfBYu5g-X# zf@DL=4ED@7xdnTupfMjU-~LPedd?P${;#0ojm-xepY51c-x6D4z46bB{YAFI_65vH z6`duhMpEG`d_UG<dNui8uv2mTC0QB+M?rJy?Dt9{BS71>d$*Q{2Ue*7l`nn&wYOZY zcQXI_<_>K}({dTebj3m+<Nxi=^Qo`t7ace~`o+uF{cAed*X=f?7DfN{g;JM+(0@hE zVVACA01qrkcZc6o|0(nS_76~Wl7TMmvL>TH3Mz(%hHp<902Xy#c@qJ!z!9+9{jh?J zvc6$;NB;j*aloZ%1aWD?9kNKf&YyiQCU9%go<1E=j<aAnSET<Af-J@1PVG*W$iTCT zcDWMJPP6oEN-ijxmC-YWa}TGHYk_v@v)TytU%<av$8`F4E|9y?xcFE7-<{sS_`mI| zKg9oUdz>KKNIWPoVWvIUD(yQ&^=sB*MUy442m3@my6Z$TK-zZE&CEbT1%Up{>)!?S zoc~8ZYAbB*Uw_me>Hp__8sB}nwXgqrxLsv=Q)LyzkI>QvW*6N5Z?xk3x^@CC;F+T+ zy=^rS)FADFBnU92zAb}SyAQOznDVrx8axc_QDL6^wgt}*Y62JZ|H7cY#H+9UTc1jx zP8assNh{KSp&wp$4mXeUuQzaY`nvyX#|FEB|F1ZQ6N%`bAl>?4wXB>%=wIg@xiN$X zI%?&O=gns{FrMByR)qfjst;K2xp94L=eYw`3_DHg%zxfa+`a1Ztfo@Nb%2vMsI-Ky z2mm+SZYi{L0ldOm(Is_E!DB&8`VQnHASB)(ljRSQ06I=*PMK>jK))+|N|OWj9aIgh z^Fo19cedg2{SF*4KX@?c%o~HY9}G2Q{5u7D7-zB@1FWI8>)!sq(rN0T(t@gQdAf0- zgCmquZleDjpXE{kL$MZ$kSRR5G`0*zjj%*{=nVt_KP@#2)h0TSLTB^3+w=Kf)3up6 zxi$n1z$5q11r9w+<W`So|ME>G^C0-YLKm7QF!?X!=<tWsV?lqe#OnQPunJbWY}y_W zHiKf&`E`h{Ce%?h3DVo=KU|x2q+#SO-!0WOxFf%Eb+PpNWB;*V;elyM;m&DEnl?mr z$mEBsG~HuuKGmps{EP%g0-oLU-tU=HABo}Dumf|_o4K-f%v=I*BW6{xmQvTN{MR*H zsPjt^(V$=lHryvsW$hN;+r1+#H8=F@@x7ZQ%GpM^-<+KBDA}nL`$0pSuY`yjCnK|& zjH%UExtox3MIQeLl`&hOsO=eL2DZ9jRLsJQBSShbP`X}!$@TR6t1C25+4vgs>?5n! z2;!7|w0%E-Yb04@C!UEM5dqt_Tx~amZ>R4^E%P|zB%O=wSa9DKdM74Qr(F}aWJrc# zB@t1Gg*!;S?qlK$Rl1b55R{o_K<J5&2_{%|9siU0(PpG}i{8_%G)T)2Z=#};Q_qmN zdbp=2KP8E*S|dBgQgE|SFOE)Y#bSVDEez51eW$!$eRze9O9gkJG#M7M_=T&csbn7F zF(y+2jkrU&!^Z@>!PVi~bHrq17R?`df1!HL5R*T$YyQ}>e`^ex4dc=j9k`Z%HhQ!5 zrSiS+=4!)jKosx8<fA2<hv)}luSM4iLBY4RXl~_o0dBR3s;sh!wE0+l(z;ZMZIYZ5 zI(*q|o&u(4mbxD?<`J5yROXm<um@SR-i3s!rOu?}<LoEmt4n4Z%*E#8xG)`C`ipj# z5q_lo9KW=J6X>U_o2N@m94^|;Uso5mA=c~-tw59XG9f`phlZ^c8Yz&x6z3T=SqCZb zM~G_ZBffFOtL*ij*{~kk5@i~kqq(q6%6nbmY=cI<G=8DmS4eQJ*BdeyMXli4WgnG* z2(YHZ%Xi2Du30{d6Vl*}UjO(UpYTK5439RS{h7xvCM2)U%{5|$UQ5-gO3<g@-u<L_ zg!d3yPP4OM!$crMN%q=^(BNF7TdU`V2Z2u_p8)-9_$q%W0{1K}%$^s}1U`Yw7m+42 zJ|Q7~eJ@;QwFOx$eQbQLcijbzXI?D7uo%f4A>=SHT5T)z4J;j{q?h%`_v^6R)>;#C z?s??lGC#M{BQ*(X>YW}J{v9@~0~fAh`ILYsrN#EFb9%tAkDmp9?7&)YFuv<1J+rY; zCXdsv6q?yXBgj-azDAd`ZFx7*X@;wwjMp&-%eWS5C-2p+Jq}xuj{95hVbZ=GQO6he z_m1Z)5>rbS$m(An_;U989b56H<IY``R8_*;v~~EQO(w{wsax0XS4FgDyzlE3ty)L5 zO*=XmuBKKwiZ#|!Ry+Sz_b>j)rmFCt?WRrnPRV#pnOV|mF<g2~E9J!oP>wbtt{E?V z_L6*cbt+$u>jy^=F7&mVcmBbgWPxdITF%t<karyIVm#?}|N94vn5`<z-S#%S8l?QS z6wT`kP_B>`LlJ^gUW*DH6d>i01-1lae^OU_b|30s|M&0MCh3}(p<DL9m8ume^M6=u z4Onh<IC^<|y}ElyY^{8ta@o22<efp)qJ<?Q#nDOseT(PY$gHK?JDj=D941ICBF;F# zu_-e!#EzSpPq@=<J8;-sF3V2sJzaIW>t&NBer#QZI$z1_>MCdzrB&=xk{;_ctM?y< z{JNY+`%qEpH$JuTd2u(&(<A05CTUFo-`Cynerk66xfq(?ElD@W=ZLatKPaS|h7PsW zJw&m0*+Q`N+^~N6TmhRC4;;%w<PnN{z9=uNl6m$9z5BgyHa5JDox*L|FwoV!;7TX* z4r>^jf=nuAhm>q%<_AKvsK^?=<6oC7ZpVihl~*~s=a2Q1NY%RUZPr(K3o~gf0tzZ; zQDc=kWa_NUs!{8huemrGLN!j)Q5{|B>XmY&Bq?wdQzB!PSwxHZrMZe)KOU2~Z7z2f zROV9$#?SAc>EL1&$0;Ed!-j+o$Oq&s{5<S_k&A<<fMXc@<YgX577{JWEb>uNrm<Ds z61H&0@!kk~pnCNqyUgMC+`1sDq~3-kYYNGcHi0=zbkbC~&jzdfFN=VRnQ$F4+9e*- z8|TQ?@g4K1AUyV)ojPJ(@?ri?Z|vMbtX}&Gd)HVCBJ9`pvnVJv?!e6e#eL1*W0O+E z!lSr3N_|+y1=}TNHM?WYvT$|sL|}flTm7S4>K*d}7mMAG^z+hFE`#4eGpEw`DN`w( zVVY%PWE2^Gx58oKO+CVeceTO+^lYt=E7>ee)KZ@IP4|#+iLK{?FDAVt`+1z71=BAG zFsZ*|mgK}^*`u^Se<3|T>#p9tIi1W=4c2qhC=7GXW2e2rwZa<5%(j40)v>lVg{hKN zY<-H$@K!qWrTvBeko2j9K}IGAQGp`Syyl0BcG6E{76x&W^!S&Q@wWr%f;Y86o6c!W zRk83<QJ71ZvOazy@cl*~(sLxep5p!8pj#&AMH?S9{0Uq$IPHR;ux~DLf<x9Rr!!0+ z7Fbj9+APSoReINTQHh>z7u&o^p3e4?cq>9%{FCrXv_+d&g44apZHk~5v-7Ylaui5t zRV2d#J!y+oWLjgkF&_<oZQ(8NHBR1pS1jT&kexPg8ogZ&PC=iqGuc_tVo;+iMrhWO zoy_^8`|PP+YW3b+u^qpYz-&@iHip@&Tu_Ds%6P-$ok)@&;o5GJ4~xA_!W)@&vVlG- z1DUi0N(AM){J(TzC$=#Gw0|bubHx+6-P-GzGZvXGDf2Ogw(BywHg!gl$Y^`^zf7P1 zGKoA4aG6{-u}`4yt<l#O@qTw+70mIjS`*D!!{emNgCz3A8f7GcudHB#o{FFc%PwfP zVbtdnTfIq+j8=e?*ll@k@{$quVa=)u7h8QF)!f;aNVJq<2F_|zu2))c;@Tb>L+D9W zd&r>;KGjJ5jcK7d3<hQD2ilA@OVIr-S|tYt5VC?Tt8$O}Uotk;A+zn&rwss0tDc3Q z0;ZN>gd-izcq97WPD;hen6LEkFW%`Jna|v$im>;d&A(UMdy~>ADjrVdFqd>)U?JmS zLI___j-{EWLr{pJcqM=`@n<=+L&zz)gPG-X*9(#*iWs4vKD;VM(ri)%Og?VTt%7zR zdqm+Z?D>m&UDIc!T*jD?yq^jb(u*)I)5JDD(8-mUMt42CMTPsm8K_i#Sul>M0dH?9 zk_nH1@!J8L;XKlplGaJ5DOy}<B7d`gC_?^G*qdOSHs+lt!3R5pFv-$)o+w8~sPBkP zj!8qYaU5`M{+>npQ)U!5lCGsTUA#gqojr1Z3rTl*8;Q@`=)gg?tLOTNlIE@$Do$6g zLxm?@tO56Zdpk!EH{djNN<*|mEh={wLr>F&nV7UdqggthX0#^lmQa<;AcN?}@A4!q zHPY)Pr{jT3@9dQrOld)<E`zzRC29L<)9o~tR@T9F&gotq>$qG@V03IKK8*=G>!k!_ z-0A!=-SniuQW9qSO+qNv$V{BC(+qz!!%Ly3qCYu-6OH%7X1$clDe#OabQA|Nm4b!= zN^;nrGwj<3;=bseiiBM^l<ltZ<_|!w)*{s<%}{wcjN?XwSm@J+&MUXyrKTd$XVoMv z&{idhUvOC0h~No&w7%=ST&JQ#UOra(cwd(-g2#93e8*CEVWxuDu)O`D??cZ!=v!xd znsu{VKGv=u&aI=(XC3V#c<#5(`*$@NYyjod#aQ1yye855vdPspri-HH!skSl#<57$ z8txyBAJ+_?bO2_Qr@E1^;Wg9Nm-8Rb-}fnM%G7;Cgn8*zgO<2wyT5yPdfBS`{$#8W zeP&8q@=ZisM@oh_<UzrP%t)h9q{fb$sOR{eK=}&>*X(pTPfULyc4i{g0da{ZmdT;g zrG>2;+xFje!tP5~O>&kbrf;RMy?=R9vF_G<VYmCmDEP(W9Tr`jQ9RxBJJoC<tqJ#P ztD+IVZ&#;=3l9y-j$28GH=_*GKNDh7(z>z52xrSitReS#v91m@v<wGm#u6-sp&!sp z&VmYzlNDu%zEcIU)=OogLN4H1&tMfz+oV<?S9fhM<uOc-_$)CY*L5MdB5@&KDCr@) zxizETYd%<tzG4ey!x_FvW*cYAZ4%BNO%||YVv|OriG%wtL1ZXlA1J!W?%88(io-<{ zSAN~lX(Ta(7+BNN?N>TVbD}_Vs8`n16CM+W+1C-{D^R(n&RK*&Cn{<Zp()-%q1XMA zj6SmTIbEX0TV;a5l(8trf1Os~&a|RD#-E_hRW&?$q^zw3KH*3li%yLZ+eB8-d~&{S zfqYrjh=$>-*?<^&FXi7*cvISBe8;CY#+~|R@3fK$^?Ufur=RwVl4uCJa`kchKl?05 zZe^&PjTk;HWn?_SWe)ZFDj_F3qrWl@n)tM#QyeJcX%zH<Fln^qlO?V4Q8$#42bJ^n z%raL6wIFuu*U-2D=YBJzx!5<VBREAaR_nX_p1JdmZR4lT$5Z_bq3}%wX&(`cG)HaL zH;R1S!}Jol;#ZV^+p{ysG+PddnEvs@>+_s`5^G5&&J?%D_1*qt`p3zS1-`<Nu*vs& zz!T&2LJ!+?w^gLGdO2sbF*bPZlom#5!oyH*&cs41uR@!y?PR3@(bHAW1b+kfldr~W zsa;RwC0S)v$24}TFH(vb!pMv5-qFT|Pg+v?$sVp7s74M}s1$`+WJc`ev>{ns#xiTA z#eBA5d-IGEUf!Wi&t7A$c?;Z2G(&v9D@%(dOSmU-TNS)WSf;-EtHT0see_8xl1-~p zgpBs?WPfS1xs0}{*A=NIsIBBG7h)XwBf>|LJ}!teHHA3Ut}!n0nsu?Fs}d|Y-28H7 zoG|S6zEa1YU6U5i<zRiz@QvQB<dOQ6_Kq&%$>8Ylr`_VtJf(TJTKu9n`uXd}WnmNb z!F()L_QzR@uU3t}BEx1#RL|n+Jx5RHEK=nVYmT_lrI?47BR&SdqeDJI9ek4(ikfKE zqTCLXCKwZsterty6)dr#WF{?;u9@>ht8+7ojw$hx^%TmKSZJOvG@=&OnD+24)I#=q z^+kF3_51zx6O>)2^3Zq}<N9HO(yn0*caGzmpZx6`q{h{8PNK6~xntAx{8qnSPqYH> zs^<6_2kugV0o7aCevHyes)hsxlk};j8$RGEmsMX|Vj}pI>*V>im;jtIxUF6UA6c0} z>*<pL53t&!6vxsbFRHX*1`ecxfp=n7GFyS!hu0Hfg;Ac}O}r0!dtbK`I6j#X=gzx4 z&p@7f;a2Ls4yaK7tmzU-=h4I8{v%R%Cu2oz7&5AzlfNPP47@=@Z!g6+0tTJsmgm6` z0nJR@xNUB@;3Ko#OXF}YTZ4IswAq*a`Jj?s$6u<sfz{G8-$!Eb*_ViWL?$_)Byq}@ zBMzhM*<RKMTWzNF5!)1RRY~fS8E=x2v&9&tBcobAhp&q<S0jQQy={TYD_#B4aXOak zFM=nQk&U+pq~!}!5w7SQFj%G_2S>8}3s>1`nytFkKo4<oV|+LG$x42%y_h9wGa+)x zxjx6~$M}5vm-8VRhTIj1W7{+Rv(;vQJ^A%=+Xz(aG+s%Ck+uvqXKr>QU-hJE8#|Ui zt$IP4YkmTKUrree;#DXtGzX(uuK@~8QbNl9k}WSh&Ltt7l7cerEG!BQb`TDN$fJPM ziZVQnAa%+s9kZp^C^Q7JsGh8+*zh>v1rl<4<2^oplPb4&>n<n?&S~b-8b6+SfTfmv zSD`LoX*cYIizUl|{kq{xG8Bpev>f|&wEi6_z()WZb`V^0ko}+!Oc1Z&*Cs#>XJE@7 zUq)zrgM!N~_P+eH90&|@+f|DR6qr-)4_@E<Lk;_4%RX{zOk%<yNhtd*r0@WIwzsC4 znE>Hxl7pcv!aNQ+#oNo|Fu+nhg}S^DAc6tIW!N9!hpL~_Y3k#!A*NjXamma;xZB)v zyXL?J+}vRENDas;`Q?~M4HL&kol?SYTT2hHJ{aTCL;!@=|022QgBUpDFT$1_T8K=Y z@)fHksyKBr2r_pWMxV_4$rB>4U2buZ-4U2nNz9X7CCqZL%PEd9Q*-JCz-e6<FK33R zH(T;t)(=SJ74#m!f~QfJV~?LZ>aqkuF|T%b1&BuTUf{+DL=QY6o%Fug?hh$IE5Ek= z4p=i?N*@9+a+<1eL<gwKFZr>4yois*mbF=NDq#oc8^rX=f`QG%BwUt&!E_dCA2i`< zT;$kiZ=8hf0kYy(e{uRDn#Fm@RXhL+S?bo_qreyGq?wnj_S|0r@XX%Y4=I9cg0$9T z0B3%5{PO-6+ub1r4%<uwfZu3^)<R_gg|-=(R6(W5`503BUc{$j%YNT3*9P@Kq;ISM zVq_)`&3)b&P{=cF!UUXI=A$*Y0~ka1txGOYq=mjC^k1r4zN&)T;{BcI`(kb<<t z@0C7)LALZ*(15T$+f1x*VB);?@SaV0ds|F7cTMHG8<0__Zu1_{o}*cDI)^|(*qtqZ zINs3b0ulhLOseGp0GS@l;T+(XxS~(f@PPEC>uhUYm^d!#l%-!e3*Nw#w64Y;EMPR} zr!79v3=88zWfTR$G;>R}_`6A9&ntZ!S9d^Z*%q!2Fl>g`Qe1tY=t!wk=#(wC<bXBR z(yB8QfDzsIG&dr^vci=c7F>CKNQSI67|X1N3qlqd12PQ{qOP+cu3cnEx7f=;hv=C+ z;hIaB^}r3Ws)g`9U^$1yQt2mv>v#7j8WMn+wzTd!1g42Gg2$<JXh171_qzZvZ8^~d z4<i73Lq({AScP%d#gw<P&>z7-dUZZe1-PO_dg+b@wAWg@fel7Q1QI0AALBE?DNQ9w z5N2;Ju4p63=3)9~gz0K5Z%EYs^?)jX;l786b6|>2+}8*JjBv<nVj=DVlOPhVGL=;r z&Mt?x<gSnt;C3)`;p_yc?sRwCL;?Vk;pNp4166_nNvWBgCo*8I-R9cnH9St#%YluX z*MPyZ%gryRuSbRD*l}AGM;)V8Ng+0SwhXZ9PRszwmS#*eEv^P+;Py5D*ryGJBy3qX zF;bJ7)}N5&xaEv?nf^DRnnSIDL!#mUd3NFwE3r2+BqB^+IveuR6aiT0_#Z+hrvaYl zO0vmlNC)pBr9!?vvXCGv6q3ut)A}S}9r$e_HxFo5|GXH94B}nA9JGIBq$tN;Petdm zf0YA3!MTNI$ctGDa313uVNMU8g>atP?X{O_6!GJkoC%ulN&4)+_a18OZ|KvQW6uXt zB=cYMOd0#%q5*Qeo3->*D7pY_Sq5~$G<3kxUqZ_<!SeOAI70-;rTcT{=muY81W8%* zv0O?Z=v5o;$9RD?q;$JtIsjui{`=HoSG-*@<w7bn;{($xAi^5@xeL%V0VwcEWQ<?6 z>_JRD@a&3tLQ$ZE1lwT~k3A%FGEAT4q75N#Kag5aq5-@kPQvJ(1XV&oopQiX>3{`j z^+PbQ0SFB`GVf{uK=Qr4HA}38I}J6Yf(xY%{n7)($iZ>4wIc`vL+EYG0(B}tqUEz8 zDb;0%QkwZe6~E8Wjsmbe;Q2lY<?VI05C0fif?>@#=wxf(eVGAi=`T67ArAc0P(*;c zLn2Ylc-6o(v3th(FBVg#JN`Pu7qLQe^oeUy5YSonZqf)BK*F?auL^7<$hmrKy1eg3 zLJD?Hyha@blmWT)&gaRDHK5NePUL0Oy?|7#F9;xp1fK(h-QyjR48A5f$+H-{|Fr<{ zQUmU#am!!{;N*2mRWugicnHpcopGyRiupA3HGt*!xkmJmIm>4bOX;HFlMm9Sn6e)h z951*;KGVSoDA%FmXa$z0C=z^27GYILs*0pe(SaFy_3bYM5OAtf`(NLKNs_=}Qqx#D z7*g<S*J|X7?1d*y7Oztla%_7$pjC%7Z2>+MfN+UJK9)=+M`>?J!4C<1)2~oz!20mY zx$)QXWI>#t%>i^7GE6>T(C@$h1w)uc_a&$Jg7x_~7(<HOB@ngm1%+-X0I_3V)>jRE zN`8bCm^zI$g#v{oUzcAGh!D%)yt@Mc&C*o`xAJ+}a7aPJIK#lq80crS*b*7y8bI`) zw&Ichx}?GB7eF;gb3;1$o45~WcdsCPYJVm;c%{V#vFC>Sg9~f>3pv0yn_NMx?Z?Hu z)F~+|wb0Yc89)$o<fuaxa0TxJfg}?_CS!{Mn&Fig`jIfp5>j_a4U63XmFQM-f13jO z-`SQl!vis^&(~?pdRjUZQsDYfDZ?2Aln1P`1~b+GAll-Tskx{QWq=qXE^klW*N|d> z^eH=Oy8i<2*t6x^fA!9JR`-YF3rRpnaXyrIX5rZ#G3CCFNL9eM!<qAqkWv<20Ig0H zWGu{LHOwfEj2nlVAN7&)6<)Lg1s=VMk}T2KfHGEoXg`&WK+UFkA`5%Nl{_)kgX!j_ zLm#aQR<s69%)m&%Z>)N%2FW&!9Gs!RJtXpQR~yBf{oCNtujJvkYccTt=a|W}k_6|X zhj`@Ym?HJAogXL1P=Y<^e{LK*!OgFe`&piU^PgAp5K~~#+fVpHB1l$?=O$hsEVvl_ z?+JDI%tNMzR8NY|n&cGgAF{_dH_>bBXNH}Ow_2}9nfQ`aa_;PaPf!wNGgoMcSFWUj zxEHJQzIe9V!vO`s=YoXh&#o-_5qMVj7{5;iX+<j(_9$CU&Sor(I~3}=V5D15#E`A$ zSA_A4Li6*KvUiwfCqwA!nfc|!!ftc=PpDlgIrGIms8v^Pi6@g2x&HRl7>O%k8fADE zyb!kIBweK73^B$peBn!&;j!en%ssdz?Zl1{xw(nIDSKJ8WiQOnmQJ0(TAuD&Esg4@ z+_Z~MJ<V-242#C385Ya*7n?@5{P3d%{5Mfb%IJff+m;ngxAWz!>#O57GSWU?Cw8+P zCPeYLl>6D-R<lPq2Qw)@i<4qfC4Q=%U(vABd2Hx>n=C9YK@>>^l<h|$1D|r9$-C;v z#?0Q3#0nhBSZ%<3+hpOX8dve^{`*QI`F4fhC0|IeGI*f(>5F>J_T!YR%#o1G+pvnD zb(ZSqm06peYkU&yzZ1G+cRb4*EXl4X34{chALAU770UB)$ePnQt*;r{yiND{{A$?q zI$PO2i)$l9^)EMoujkm$>CAOqCD=5OP-}Ov_V@259dG0r#j$YmMJ%>a<)O3oQ>`bJ zM>rf9v0a<yG-!=;x?^{?B!4wdw^=&iwq?8S=hY4hP_!^T`0mtDV>UgXv-f?XyH=ri z>Y;_^>!#mWsf#T-PP={gpY6<hLtsX>!*hljLU&(#R()NI4k3JeHPv9i1+ZGK;MpWe zF6P3vHm<kMX!+Qc!tKCf(>LF^GKR(#J1{U+g`+yW*U{7S@9$Nq83dX*D!iPZ{JXQP zO<#F38RU0oQ5A6F!QrZ3YJOra3TX}#7b!k(Hhqm^Y2;v}_>%-Zt$+YB{$r^4vtrge zoP%H{x-To8%7e(1xd{7`b(h#i;rS@5+MY}?hdCj}LNKpVqbP1<*3k!fQtDuX_SE8q zi`o2yvyjV9GaZEzZ9a|?A{K6BCIW0Vx6_JSE(W47M&L`&JsTXd5X>JPIZz1kTC|EZ zy<~=`+?sJJ@4^#DEDp!LP?v~k70b1?@00gl#YCEV5pTWu><IbN(P*VVk=RX^-}UGN zuWN@^F#jS3YqQqFrKEZEYxo&~%deTCc#GR!LDu-(rswrP;T<N>@*=|W((#5SNN00% zlsCEW)spifpjrBLZBT59eXa5t;w2}I?n30|U1w^U9&gY8bhCaTwGZ<rP1Uz(ZH{c{ z>rPD<!2VS5?MQ5CUA)GB1h_6y+QG9<yPxMQ^IbiAsLveJsrOhSe>I%ue^;ZACUt;- zX4nr`9k{c}mco4_oMd0J;)Wxb8{&^1KxlUVRi@XB-5x23*|@a@*NT}r#RUa2F15&~ z+hF@~P`!AWlYdTVc)if%)s5jHf&G=p*oWnBc$5~|7zze{#ohZ$uHWqaPup^t?KfV8 zo}<+*mwM?+<!l^tZ;B`}<5VtNr#@sDH|dlo4EWVtucm1r1j=S5u#r+#N3vF#<mP-L zi`Qagdr`}IFi5x?TzR$m;+N1xj3o^gzm=AYj!2&U5gMV7qSE;fnr0P>2je}pEa|Qa zn?p%~f^L+uk}t&}Jl9%F<|MqWW=h2rj0t%8mg99RPT!^y^_|g6^j|X|orZEsd!>`> zPGZ$hvVDSEN;}~_T-LhhT#e;_-Jb)8^T5n(daufm6PKc2*q5^-XLD-bhO+wIY|F8i z3I}JtKZiInoBdgn?MI=FAl{&PlX(zXJBMe0xBL>6JqrIoS4^@_F(FcDAm*!PX$uQn zN9VKCnW~}J_fyWt<1L9zX*FK5@%0FFQ7Kx%l)`8AJ1>e2p#?Fzv+n!w38<=I$ePla znqv*2p)k4!I`Lc#W_&|_`)|X}hQ+N87s1RS9=M!ZZD~XHo!u#p2V=p}z_t~`%iYnk zMm|6Ble{j?ic2<oV@@zBGIHeq@+5!0Wh2aKH>d?)m?r-NS+3)R;3wj5TbC;w-ZbpS z%&6Oy0=@j5PZGHJ6>3VDmI0o`qKGRl0!xTIzL|y8<zby#<~sIQOprg@X&g$wp*uxG zzhZiG*;eFqzE*lem!41kVh__Rw$3M=`o*{Bk3ElE8egFeurw|x8(#Ctzd(6TUkE!% z5QOqzB>g?JGE9J+`9kjQP_3eAVT#&k8aAf$9<BNeaXn6`swbH7od6Vbq}>{pJ970U zY}Z*Kj>lCDL;#g9uU_=*f*Z7q4o#(%LH#D=lS-Zjo=9eJ@4}EJJ?qKzpeJAFX=DR@ z_p{|XrvZQd=*oQfM4NtIjM$Ll=G`tmuG8bMQunL(@Y~8%2QnV~WW@*}?~shYr=v&| z{zlA|F<@@wCq%K_yS<}gPEsEpGPr8u^!SE|veReBN-!q*=fDcu|L!L$VR(PzQ%q`? zf#5gtBD3{k71}s^O!y4x=OO$8fh3cgh>qf^0$JH!la*KSN_dJX^3jl6M%?@;%LR+` zilKrJ!%kiw!nj87#zoRmv8d^!ty}(5Vz)^BW<`V-O)XmPoIh@Nbnfp{YCf89x_BXS zzFzzB63IeQp1*k`v}w>??KPdScQltMW0*qdEaY2D0~nJ`6fe1LXt}5#a<Ccpyym5X zCjFK|>P29j0@DmEZ|Jiuj#IAD>Rw48w|d-txZpdbfKqQv{ou8nPO<KXCbf05A_dL( zBpCegjZdnJq<duWv>_JuXv&-9uG~4shj>DcymLYht4g=pzL#s!4HsqB&8<lxKWoF} zE2YbZVfF}}m&v_U9RF$$#-Rs2O#7nkWh4zHW$aHbbYu?x>V4VG-?`@JX&w<I!bEaH zY<3dzY>jb9<Q!w~ksWOueLF;?vg?GIBtMT<vVFibZ;_pTZ#E*@QC^jMmibl|C6)pC z?svcMhW9si7K(;<Tf4uhho1<iAh%C7QH>`ux94Ubu;1&Bi2iylFnvA|HQJ+v{9dr6 zj(IopZSq8dHo?VydA!>*%8*CR%8w|s((C5GW*^Kr-|ICc-fm4qF<O6X<9A*^6nej7 zz_xWwN6z|$vOjD(=#RZj^2nC=I`wVj+@8b1L=?{=irWU1)9;C>6YFpM9C{AN6H(1c z19V?d(;`A=9|~k-2^XBu9W?}-<|B6QEbOVnhaMHF8UGLxKqDkpc(t1iy#+?Ok>kwa zKF&zrUWh)rxtn~${29@WA#C1Qw`(cEkVLSIEqo?e)e%nl(h%XzC{bJ^ZZ6(}Bmuih zbGjlj6~-@umgl^73d5~9D+9-nxRSn3%1L3P!d@YAXXr!%RiR9m*9t{4Buuyu9nRX^ zf7$Y4ip-sMj;PLe+2s>>W}}tpmaLf++Mha!3EA+cs{CGhnn$?8)}{IW^}Vng+fopn z#50B&a68gf&cX8(t>3x|B@V`J!d&8hTX2aD`D&(a3bvM>Aa}<k|2?C~M*L0iNYz{T zhyatyzyt3|<Q6W3GR|)&O@9i04B_Q%Nxm@Khzr9G-W&fM;4As|FZ0(Xr5HE8gqW%E z5qQS0E#<$m+2vm;J;CUr@4dNu(wT~k8u_GIiYV%oBl_;aLduLOcBFTlU&vo5dYfhN zmRz&JyVI-JE-h2eL&)22V&v|U8giZYqkyA%XRqalKp`r7P{@UB8Bc*EH6G<05gO#v zZzd;0BqI#Ees$m<pDD@3Jx6MX$S|$THES)B%9pr{CNN`A`DiYRAu;A--48SmosNu! zFR$87kdLAABgI3|NC)c&o<(jPB%9hRWZ4noM0Y+*m5H5&RNtZP+^7BYZTLx|aIX=s zP)27IG!l3C{P87udX|?Vz%`;Y%(U_C9MSX3)v&d}xmxRNfvhV`&LOV!l})3|^e|Qy zhC%og7-?d*=cg)s2igyRg*8k0TgHki8vtDgDy+PQvaCer7^9e8PDLz>`3uuhaFosP z4Q{`&!XM;YTdubOICiU-?D$u_)NB<#a76U7#72eAk78;QA2Y-cDAOft_0T`J&K1vM zzqm8aR?M;zonwqnC#-g|&JoGNVJ&g(ml-s93t@*Csd@vlQ+)C@;@fM9sz=^Bj$CC; zHOHU{4Az2w`&lMh^Hq(rFV6Qk@)I40Wr*3XYE0oPGo&V)Z%c>DR7tE_@}sn08CCLR z&DfiquWMBm7L;j|bmY=~uLAA)e$u=m94V{W$d5F~_j3_6ef5jZ0(=Y2r|pZRyRQLV zcuO$Sr0yea0w}FypSGc;EVQVHs9wQJzcr>4boLS8Fj<ARm~GiW(>6z^@$~qrmQTM| zO?#Li8DA@(xFGyRxR|^I@;qYCC@Ov=H!11Q23DyJWMiJwVJJ5Vxuf-P%QlNzJC1$R zxWyNrYX&Ce!LjQQqM@;`TinZOU*yOe@p_Hih4+oEywBC?TNMY(g$2cKIU7RYeU&~` zBcaC4ITc4~`-<IpuGoO_(M71+{{sSjv+&paCS7n}uvK6uhV6NeF8!7o8MQW}MBBiG zQ<$&?g)kYO_Trf6XG#aFpAte4SgUG_o-4>)wTJ(-CR@G^gsuFz=*7fFW`}jgn;egv zr&+Jvg>0f$5p`=a#r!k>Ej|8+c+X{$MNxO3u}`7T+CPRr6FBh4o_~m_1@*h!^tG6C z?u*h6X<Cg&t@)1UJN2P&>$yR+0$sCROi<<~aS4c^EwP-xa#pRTgXLlpvPT6~;J%CQ z!+b;a;4(dmR`m$^x@an2C8<dSrrt17J9X4%+>oMumfqG+I*kZ%5-Fo=Smq{;sLk=g zBWSH*oRe=9kThS%|4FRZ<$_o|p`HKkpX{K0ROPax{<n=-$#H4tm0<4R{rMuHD+}A= z2toF<a;t)RDi7eFVEi}|W0OX-X50^F5nk6|Xl}3`ZGJp#afR%ZduLv?07gdsT>YrA z2^V@Z?qHZPTf`!0kXKkuZTay5L=dgg)5-f~b4;4=uA^z5sE&byOO#Vz4N@_{Ag&{H zxNLCJ72Z;N)4UrfR}aQyE2nRvuzFCL?i<5+#@l}gbq-`EXw6fKeTLhxH@&t3W37xf zgBQlpX7H*Mja56G-fi$;xxU7C$45yr??OtRzSVEAm_NZWx%LOB=j*w;Rcl=?44(Lb z(xE>>)>)90s6JWoIahOjj8b-MTTuK{!cg}zPVoNaOY#=^o>hS@l{Xw#r5MLUJf9)? z_MyY;jjR6rAHJlRU)Kn~=IS3w3UsWGqvxD1A>=emoy`Vdfw5pPi@wag7uwT%3ibFf z9(C}X<wD5eX~}ii;sjAh%ev|CUnL5Q4SRdC?x)MMr9z@7rH*-H+YA7|vcwUT_7^KV zwmA*yQ+FWs)=~3<HAKEOlURIp&EdB+B#PpL6n99CGdMKfw*6ew(E4p<Twg0d0<1=P z({Y9-<tI6B3$c=?I<<sA=-YDAKK#;Xc>G)-vq?<BRKM&cq`c7$^Hcc~q>!1lF$05& zNE`K_-KqvYh=i?8-veTs9FeYH+FTS2E5j884s;m$7Q?R~xHA`K|1=CforH29BTu|g z*e#B@O`()ag*l2-@ZEw^b8ZLFpnuZ-1)|>JN$+<br`gP35&jzXK*{v@;8v}*C0>^S zVzhd@WP1(haarmo7pqqF!D3+~L3x{h<q~e$6LYN&*10@N*>@$y1?yZ^XQct+o(JU? z#;OYKz_j7bop6(M(2t6q!KZ}utxAK(jGtw+yuj%AU`unMIsaW$ZoB%xP9Xr5{beoh z(Q*BlB1J3DMlo#l2O7Db9sxTOkSA+z)sS-IQur;tJ7i6h7v>dJ)JYVdx|9E%qrJq> zo{?b8AlA%ygDDlmE+T%>WLK;~fLS=#Kkp&*yY8&8!E2RxZs!HVLvp*g6I1*BC-0hX z?-@d}@>15~B`%11wk_-V@kkV+e>GwvWdYwxpLY5=wLS8La<4Ao-`vo!AJGGI@YBE# zO|nz$p+>?g7k4D00P-iNlD*M}+sE4n%Xp!bjXx2|_|(6aq{2SyTMIiGt>GejSS0R* z1$(HrC1`P<9!)3|bM(L&x~5Ta5Tb5hjw(q?{>{v3Wfq_3y?Y%vaXEU=ku6HAX5zJ) zEH2-58JtH(QA3mcA!oD%rET=N8d=RlKEKD*mqnd&q}%T@;g>O967h&Zp!-W(4rG}w zRt?n1jL1>wS~J2j=}(2rroKE?D1Y`fQkd8XGE)mLQZGc`)^;s;(XAD^w5GuI|53i{ zey%FiG_V$mmq#vtGQ}fUmfsG;F8%`%Ar$|oLaXWl@~&CGr|gWIw)~V)M~^?pq@J#W zy(RlsHL2qstdeZ>`lSx!A8}M)sE_${nIHT#Pa=WOgb9DY27Sod_$@>VnlPN`Db|u1 zGQN+M4Evo;t`(?*C!U&!gJu=Qv~_V!?C5eni|f9JvZGV$b-cS0LXAO-t%>{)X=(j! zvg_Q4<FZQ4&_JV<cq=u-7w5C$dB4t3$5-~OtMk)`5Y$%9^-I20j*P)7Z3DBc{y^pG z-ww^pO7Ft5yj?OmbuOaiX=L8->y%wm)ZJlv$8xH5A8Di{dzO9UEG@GX6w6WB|Ayk= z@$O)1C03B~iw*XA<z@I*sB#fS&ZyhRHW|LD5d4pEWIT`?J%Y4pB~nrk?wz0%g0$TY z*6drmQ5a++yOYfKp&LCc=#0VL?dyr9<KX{Ss8m-i4?=&L*L*{K$k`VJGo{lXSzvSa zTL#5k-RigFfdhL!PRReb`pST)zUOaJ1SJF!2?a&Eq&r0E?rxBhF3ANIk?t<(?(XjH z?vfUeW_O>v_xt<5dEOo8PJU+2%wc!W)hzKlGF@zbuv)h16kZdGQ`)3NwL;2aCZSr> z^`arVGgkd4;%6nd&RVLw?aEYvnb>N<KYHgc1*hH7nKG-A*B+(*wEy3o^OaBS7eUH{ zTc(-mZ-AE`{CE3Ynf;9qJ^d(7bh@3~!{j9Vq<g!riW;`()ZA!t{-iii*!;@_zO0X@ z^`_ehk3MGfT1V1N+s#rFL9wux1?(F-|1Zp0a(kGEdoEn89Oip5=a}3aZwN)+BZ_e- zkU&rZ!qXiR5tK25-F2#Omwh-%@T-*IDNruMZ!8$USa|)RQ1X-s?GTp-zLYIL13dZ) zjp6kOMTkM>c8B=CT}mL0z(1R<u^^ZrZA}9hj}dma)?T~5(S)qu`uqQ<F!+LGj#?Aa zetWo3*CJ95oBw!mdf(I{+;N9GdODjw^6}dxMoQbMQT!RGs4C#&4Y(-9&(H%s@+~EZ zMLP^f<$(0Bd)|Yj{Wo^U;9_cPPvI>>IVq>~z7!(3V18_Jz>4pMn<UH2kL55P(F<H> zmStar<H9_L7b5?etL|n1gUiO$$O8S=O?7j}L&UxI&65KNAm#Th0W;bUkmM=U*7gCR zGhN{81}VaE^4}zXalyr_X(4a{U+*a00^DThfOM_$LqVPMI%f8JEV4j+aFxc#Zm@n; zz|*yVUV;1&qe8&clJ)K8D0$)mfZwT&Z3iIzgadL-jA{)gK;J!Yt8|TR1^{&)_ugS{ z48aILI*+!WvjdkW$*}svJ%oCL7bL1b4WR?bBf{rP@$4Xevag?=Jopy?UK42(0v1gX z7EfhP+Ed%!BXkC`uGU{j<RXHpHTx$8lmTH<o2Xlx6DYkJFj{|DhtS<-5&Uxb(h0#R z+@yhba>t|sK<P%7(W@tHj?jsk!cqzVw*33{$+F$G9|GvMS;5EGFcbu%fpb6lHS95B z3E}-7;0f_VxO9!J|H~8d1F>vUU`YQC_>MV3&Qr1U6p<dtbX8CNH8%*%;s{CowK*8? zQy;D6`(%Vq!eU2$o{%`;T_A^R`=Z`}@2|XIHE(RVz?7_1vYbHC5e`GVCuNrJDM1nA z1?}bgCtyV4d8zf+5(x-6X9xVhq8%zQTfo-Q3(3LIPo}B<XB^&DCFpQE2BttjO?qo} z4FoaLTYqyk-3$?XU$D4X<rdte(>)yz{-EBY4g3SO%b-w72px2V?`EFO^#Njdqkt{= z$r1i4rEOsZNE-YXO!)o7%u(HD7#s+VJP9tIgZ^%e{M$vImu>5>S8(!|Fmf@wqJ=ZK z-$vP9jrCK0gun-e*CA$oaEzaDZIy7~8aBNBFVUTOw;pJLRHIB9VF6+iOi;hKh6e?# zaw}-x1c8-*w1RsLdzJ~ueG1Xsaj8GFlSS;`w*B>vOHj`#kCG4#Xe7&ve*Mn;?H!<; zpS$^GcNic8uLkbaLz_UI=;(W4rhpR`59Ir_MhI_&<#;gM;5ZYArOQld5vZ`~4A!Lw zm-q(+V7KECy$$2%fs8d`yHz0of?LQpw1R8~js}ZKV7zAxX<K(R6bQSxbcD6vK%(KT z|2fF#*>a-y%Mj}DV|VTTq>~4X7%pWK;t9hB>{>iT>jr@)0@Ql2$^jD`FyOXWFT!_7 zXv*t)7_RJPA7)b90Z_{qq#*ihwq>-VU~mbC{@jSXallTsuQ)&udaQ@}L20;SnhYC2 z64?r<Ws5ppL*8S776_j_pd+Gf8`LLXzNG|E9fygDVlUr50Ra||j0SerCqxnnovyDy zjM~<FtGU5Q>fn=PZqOH?d`JNQ$sI332(Gp!{%%e9@o0L=1gRU840tRljJ*Tg#sUBo z_Oa9R0Ydg2#SO3p_Adz16Pmk?QSxVqG}m!BcmIzHpS$8Yd3c7<Zor!t2DGLvtP!{n zvlR~*M0&LzXaz3PjQyV#i-)N{Z-Gq>Ix*po=rf>BYeF0>b3}IAmZbU`LC?nmRn}Jx zL=Y)$t8yedfj$Fcyd>4x1j)#Ykl}@Az-9+g7(%}0N1&PwR~yo)Kx7@VscQ~wU=V#1 zcJcMqbg_SMWIo8{U*;329H^^tKv1$3f|t@JW@rdpzyoT&aG$Oowg<?F+~-ANIGnP8 z!4pYp|L}yMfgtv`j@4fifwg%*6SK8S{sG}3Ji@t@7u103cC<7MRzmWEp8csEP})eT zYhN3qw(l`IZkKM?I$GKS{{a4xvla54K(#<eevOswk!<bhY{OBv44gA$l(JyL;x`~N z!U4ytKL^4Q5)dErOQVDbgm<vx!^6_<ZLr|s6;Ow_)WRU7f#lyqOV^T=AUET{tG;l$ zXK+Du0=K3@)5zav0S(YoEks8aF<s{5Tf>(iZ@?WOm+l^k*tjfg#%piD5#6>Fk|+*^ z4Ce!Fr-*cy1r*skX2O1ln15xpCEV!<fm7D<SvhdVi6pOxUmF1YC>AgwDvXT-3;-^R zhvnaJJj8Q&e%0b1=qq+a7u;ykbGT;#0{?xc(_{oij8>ofCih3riiNMnA6$fMxenka z;(&HxebW$N8zS$e&${MMTzGz-1|~@*Wg|H-0NQW!W{K4!5Kq^*p(BW{jGP3Q?Eaz) z1#*VeBAmI9+zWQt<&918F}nmMKtzLR*#Cbq&kg8ovLm{ta5pzIIZ(KdM}!T{D<|$* zKr8X&eRJTb7ml;?NI+PL9}vhv=z~Alo&wj80bEqRx7+~>`SpuF>SO!M?}!`;yTOW= zK(<H+`mAd=5I|hJxz6J@ux9dx<v0%@wutD~<_>F=;L7X=h$;U4WM~sH#eJ-<iL&<k zKry{{GX7u$1I-@=zypZa_ah?kj1b`Db48^I(QQB63+}4F18NYN1U?PDW<o?{(6Sg@ z2Kuo0L8%@}1Xf0y|8gsEXj^~S&&d`)Jxx}EIEq|cj8WBt)88f;sso<3;FaYgG+@I1 zWlu|h*6$WB<UwtL-_js}iqi3i&G~E4sNV)et)~nFgwdi+4-^#MRUur4Jwa@iwYnV7 zXP~l)@67B#1l$%d$5gCZ!1MN7n%Lv&U@*BWza?HGRJ3_k?rDSUGT-^J!Lmrx@SV7Z zBm&NgUev|cbb<9e4)a&oLP9V?I?KPAfyih<OSi5J5L@FS-mKIOJP=I=vM&K>os2&S ze&_20gD1RKy8w@eG%q|^0}$5T)I1bGin-K7Xlq-02x5@$PhMU9H>c5=`2H*9pKU(; z>Bk@-mt_RepaBy(Z+oziU&6YrG4Mf}e;twVXP}eywpkP^TlN8+VEmo{diNM?t?7<F zU$Ot2pYq<<Y2eWD-lLC22>gUNw@#4*Y{(vv59wI{hp)%pDlwuNuNvt7o|ge--KU2B zi}n3Oz;$isr7$A>=fbM_PKd_0E!=#z;fxSDP#93D_;2pLY{s60V}Us-JHO8ZiT7h< z{!K7nu(Pzdg`EIIVB7Rmy)E?tO4YY_OfW230P=YB^e@{sqMyHi_&626@gK;i!X?_r zv>@>^oLtHT;lIH;>ry%*Bp>rRzC$oxc+oX4@b(m7XzXBxFN0RyP8?4dK|xgRS!#FK zIC3-GX7-VWFd}!S;dnEhEyDf?pW57KF7H5*KJ|kzaMvP*LWI^R++lbraJ({2G(d~U zshuGFR2XE7Z&iXIXzw4ENaUy*;5eggxm_E;TVsG3ui|i-2^?>bN!n&``UKksRUs+u zd*Nne|J$`J%P<Sz0x~dn$67nA5jh}%_`LqVR*_DQ5A_FgMIK6YiWpOpaEDWA#Nh7| zhMYAX049)*$+10><H7I;;_2(JAz=4r8M6xZgcBiJAyhbff(}f}o<G`uO)3=9xT6D} z3LwhsqPlP^L{Gfj(@OrYJ-&pIh21BCXS~yBZi*n#1=KN|V-RkLSA!{dL|ChF!a0E& zAO?xg^*hWHs5fE>BOb%r_}>X9yzpIdJ9zlm#9{bf$ZZ)m&r2bQ)5KFa%&edumJTG~ z{X>obyaQ}izN5lFj^h#Mr+=_J4sO7b!}nbX<>_%hs7NcFtRCh9iU@iXw_id&f@3hr z`Q=<2;yhsSuu#P@aDD1~amvD^2F4&<k%bDDmf;P5Y^w8r)z4mGZoiiP4UzCQZ)wc` zYaC|7tI7yeQ`-(^9Dy6(fM>{@F9JY4Ww~j<n{t4p)|F|ryaJz%!1%)MVa^En?s#cG z3xLEa1Aad6{0CteMhENb{lgXOTVh0>?+x5YqrBi0Jn&!k&urm{f^&vl7%qPR5|nUz z8>S8Ww(x+s!Ki5Q?K&)4OsWUCz!(%Kk`p(B1#K$Bfuh(fPP4TU*#Cb&Yv{7S=t%Vx zC&o8?>G8!j$u#CoV5Hx5atA~52l<}IYB8dPx702sM6XEgTQ4~S{Hy1QzZ+j1{^}15 z!Z$w%SU?`!%wICM5jLSH4BX4j=dwCG%16AR_Kwbjj__HQ@{pNvhU9CaQcI867_7X= zY#H$qjh^ROkw=epXSMT=y(@*ax-#NEDJqYgN>jRrZ8+9wzkY)IGTOsa;J=TnCNWDb z_JNo1eWV9&Nk7SoQO#5Y@8ZeD#W1Us8;lnzhpskFB)rc3Cl4Fxeh49(eRMhQE^fTT zYD~o>efm?ZQ@u|vON_U{u11r_Db<+x1DzOtBK5`5-Olf*zJe?*6D>D)XG_x;_rPy~ zMo0#4<uFLIxPxU&O)Ioqzm)y?xyoof_^Il#I&psfhO~RLY(8ejEotO?Y3Tx0j#8Ku zt~!^NaC)yx+vUIu3lzfYnV<iLaij)58OMHN%I(ow&$tq(wMS(N%eTS7?dA!sb~yjs z7dTxV`d+j&JG(Jbw3)B|fq-N@=mni!xL(u5+q0WR$p+^pD!G*mbWEiYn7NtpYwd^_ z#}mI_`>HdK2C{^IP8^<z_S*f)vU;^ERwv&m)H^ktw$|AnjWe@v^ciAjWLkzBAD*-{ zbUGn^H4;Wv;@(;L8YAP|<h>*A^EIyWCWru&Pa2BfAzs_^^`p*$t+$l^8`6Qh=9_eM zdgU~QGf%KQxPP6D&Uq|7Pj&WYhe&0)Br+C}Je~=}s`zUzRvvFzy+3@xenX&j8GI&D zNe?e0XC>P+{{Xus@X{Ym7tV+%n$E@G`=p&2-JOw$U5$3J9xN#%a961=S4>5wI*}x7 zqxSrbTYgLJ_;aMfm(5wWv<-V7OK$CI>4Q)&)_RsiWRNV3ebP^G$F;v{-2-2h^^LR% z3@(VOAmwLz<tyko${8)a>R<Z#RwCKr36kEng}`5?4vFr#rU-~<s<!PDIpp6#g#{yf zZ?AG?En(!&Z!oJ`g=_udkjA_FI>{yQtTC5PL~3U&6o+0Up@<NgbH}8Mo!pl1oR~}o zwk^#g%x4Y}I9T?pkscG6`e!D<3|c?wSYRQkF$&eYJ^oV}N;o9ywNjEKSB>t=?BTV@ zgXFl=8)Wuu{Whzai38o2Ueu!oj?(CC(o^|0h6mCD^114=)IW1Q?hW!k+h0$#tDSg> zG#HUa&PC>Y3(zX8%xj#uCSKrejox=0ztONS)_k#fN^cID4Y3w(Li>XsMmV&oS~Kea zupu?(zg8!4ChQ9`i`@1kb+#M}Qd6p4399(L7g4D_geCT-a1mMwVDC#U+N7@a$n)ud zmDrgsXLb|l-?zJ+5%h*1CM}uu+zoSYNG&jt<f=)$vMG;P-xU#xmGZhf&LiO7+?Z6} zXwQo%R)5ivWmi%WSc^2?6Xc4CHE$xR&JZl2CUa8lpNpi3-geB}oue<h2XH>eFvfaw zf@HslkCa4<&xUvD`ZNQ<9rXAbD_<j*#|FUhp)Wb49#`}aS=3C>+qtgZUriJ#wScb& zp)E``rJl}OV=pl>U%upaF9O{yMBgp@Vn(#j6WtSUr8M>>lL^T=!>WzI6?@3TOzF)m zrt7mI54E#7zu!;PT@%CDwQls)LaGtYie(gG;JL|e*iJc6Ki%--=@wKeB}Ek>Ub^y0 z!D{j{Y3aPFciyo9>xd^t;Ci|7WZHo`m=gO56BwAk9(3&2oLvX=3_xw9nx$AB+^q+! zvl^~UnvScH9me*Q7U+d7A;5aO`^j%5Vu<H)z!Xok*dM*XN$N$E&FbqF>T-$5Vy%~M z;SfK;%+Di(2^zUZ`u#a%)-QUo%bsQc)zQ5w*&@STeC+zlt%<Tng0L>M7fG=<eBls} z<rG!FY)h8pUb*dUBcJ^$3DRN$-y&V-qV2o`b?B%J-*y$qo0Btkr@cVMKl)=s@bjt< z5YR7TYgvL%?9%l*uFG;-@Wc=c<v|w{BwEU>U+;PcnHL?XLykG?o>wAZ^50%)b1FV8 zePv!ryPr^&3Zj0cm$--7m=6^3O+}j?E{M^OSi9=3#*-xn>L+HcV>sXr{u6Ocut|#2 z&b$m@6lkDM*-GiVg(wsnzpwr^EA?BlFZr>)99fcvBL5D#Zn_Amtdwy}!894_(FeYA zW}>)~N;{*`nQP%cag`diZM6jVuP+(lvo!`3*E1lS%UC2oZuFmpEun}Ig`QGTo`j36 zv~0<~7+r&jEx+2Rr9)D!xSn=VH2;bg{xICTDe`<xrSCgQSMmZ-f?u!xT=C6wk`)p5 zXg5v11^3g<-zYwvxgP$~Pmw2{(<6_xQ9Auu$40N!T@S+;lmuvZnkRwIU>sj8E!+*o zt7mZ29WZtmu>{tj4+dm;f|Zq|05$XAV%G=+f%bLE*Of*90;(XInsC`_zc^pbGoMSL zfkE3PfQA(xM_!BADLt>nD958EXBmR*Qic4|6sq*)oVWIdEzP)(>+!{q+n6!FWFX>c znHUnBbsY&~&@zqD-Zmz%LH-@QUP~IMy}-m@YWk-1t%nVW6WSay9q<(|!1u*n<;nm| zk{2E=mAYG77=zIlrt-NpE)t;Nop7ir!rC@U=Nza)(&lg|M+bRqpFAcn@mEXITsY<{ zHJvcLnUVrS`MN5Vw6s_{>rk7)yyn^s6tS_FLrYBipe@jP8gC-%N5HmO)NGyM!7AD^ z7EY-oITRvVW4v8Sg~XwBBIkdh?pg!@Njpi74z>}|cb+bjjldqF3KDxobPsme%`b|P zMCz_t0N=K&RGAeJ%|>#pkguW2yemfK>7~Org<m$;6c1eN--?g8UTIYFP&B0f*W0%k zM$vWV%=k(_Z3y^Skb~Xp@nY?gp&9pnJ$_Hd>cv}|3_6Ot@c560V{f!dXmR+`{RNYI zgQ!U?bUGQDs5)a~KILL&WdA9#k0l~$%(kG^W_Ze^=X!jqZur!UJQsT>{grf%y7Y6b z3dwwB+O4-7?)^J&wTEfKf668;mkBWCdYB}gXenv<f1=Nc5vBi-xp_w5N5M5B$@}H` zTja-?n^J9T;%}l7+HMt5*P3@3;>DmLa`(HzoX^y?DIeyNOW~pXLRsDyuISYngQfw> zh)bH))NA(OnaSE?&_E#_I5jcP<m*fOPf_sIxukq`K2y9S9Mzw=bRlV{xxe7#u#!Tf znt3SYh}wI}tWmU6p=*Q_e7gDyUFCNiLjtj0bqIQuFr_H)S|Ce$Ki14Zy?h4DPI`{a ziUFGwd}|(M#argFKMJ{tj+TMvW{{uC#mb6jY;UN7$N#l+B*dzj^f^OlGuJHXBg}X0 zULubL!wx%tSx6I8?V7>DZSX55UGT9moeF3^WGbRDNxZ2rN&V#U4vz91ANlZ|o|;{> zlH^h1kVBN8x#a&H+>Ad5kY_wE>fuN+sl$0EBxfViRS+{fOkBZOHvaS9C=PMX^I%SI zVJZTt{fbpDeBm-yQwApW%LSuWz5;$TXi`voj#xo~QNj+A%xLUaqnEz8sDEA8e7|-f zxxPo5aTE)Fiu%|PsWle{6}}qf`(0RUz4e1O=v&ZyQ0hF>FXP};!?&;AuIE%V^`MC{ z9(9X~9ksVVY9e@|^94HYo*H?ZGGa7;&1-J+8Rour>N(T0x3{_M1o0HMPBoqtAyLSA zYPYWcFZ9tciQ@I6T74ng&SGR2I|_;h$#+$cCg*)G?ery}HmJ(_9%QJ>t>W1ac`fFH zMV5sUMm=Qg3f$wI2{Bfbg4SF(u{UPF55_nzpyw@JYG$YBaD6X^7cH-wvc$tV3)ByM z4kl(H_k<MRWyZp=;8%7A5A5~Ms}qY(u${x!-lTLHQdmv3%pk^4xIvWF4wNhTT>Cau z68grR*ZY`-Dz2+zLT1Mz{T$*2&*GfCCW`1N@tPTkzaX#6#9Wb{`VjsF?!cfuUc$)v zM|B?{Vy{R)yFY~H%wgTrP=D89^>pl(_9)4BVOWel+>O^~uv!^BHnlO>ugRP(87`V& z)B+w}KC5GIl#cqRt#qi~dm<z#3JTy5cG^jo5nicRs@{h>I$m7byTaj(MNyX_H$}H~ zEpj!9^wD=@(7N<HV!b7AMcXdOeMS024SDi?2`oPSURw}Ss<(N{;sy(=6=Du6Tx(rb zJC`kPJ=~g|EMV`Su*;QsuxdEnD<p)q7MlAOeYYOJ7W4Lo)%}G>e~eY97Ep1i_vDy4 z5bRvZvu9VgnqRxzTpM+a)F5$(T*Upc<Ztg?nV21$;GYp!-_f3N46;-#41Fqic|Md* zIx#(deb*XM7oOEePD7bQ!t2#SrVOjA9+P5gB)ACJP0l&_0ewZ4#ZMer_N4%_8b}>6 zkQN^QNO}b`St?Gwjko7+=cu=LV3u;mmAQ5mznoH=d&ad?&T{EKey?dGy=|(uLk;+V zT_q_jdPv-M=GZF!N__H$y6JdN91H$76V(Rd6D@xmj$F_xuc7WzH+>Lg8h^*uef4_G z=aw{zLaCmysOi1L_co^F-i4Km^r08f5%-?(t>HFuQ}wH3Eqg8dG2Vg~Y1`%`Iptgl zYY;KMaA)2Q3sQlOP^71_X3tZUlh^9?<x?%T8L%1D-nRL*SY`VaguWrcF4vfd)g|F4 ze`jQu#n8ZZwN@E3|LxTrkxJ|2_%G<&3f{J6j`uas%ssU>FQpBgWN(8^2G<?&Pge#* zP*q;#wOPJ&e9(FW%V5hgY|46WVQ7_g0ma|NvW}%Qu#^oCPM1V_l*?w^5-dZO_46<u zAcmx~iENT_x?B3Dk??NH63%h~ruubq+n=Dke;*r}b6AffeV7U`a#+tBzD6fWSp3t( zuA$Y#IUZBS6V!LzEQ*4W%h%k+??8q*mgf}e)uY63h1^&0_aF<12svk$NJ*Dn?l!2a zo8#;$CRxJ4<7z<{dG}YGI}G8kN+bxgI#5-}f!`$+{I2g!I*;ueUI=KGT1QHq3OEJc z+XYKvdp&J8r6cC|D3^=x%YjWnJ$3RqVc&Gaos;BxyK3KkF=tE6thGw(X8!#@pQq>~ zzwN4Q1i2|j!hdkRIFIe!P0A6%^F_X6PR@4uWa-Vl!w^cZ#gCIAf~rC~mG|SE^yO&Y zZKzkyg!`?a4`tU32C51%H;yhc?k{ymOU6d^*8-H<12q+_j(fB{oSQ(%X#r0Kq);&a zOdqFQJLjJ$IXnE2h;Ncc_^0juD&AxFr_~UE)*pF#ipzdE`IiZUn$0%x)9pCL+<9I( z4o-e~(~R-OKn_`%4Cy5#WFJs>vgHWE`Y^hM6^twOM=%KmE%p8Hw*utSCT}7*MuJeV zWo`ZyOs0`z3vpZQFoqd3b=^So^9cadmz&cJN8&Ssv(B^cG%s`hEauy?V;;3W*CS&= zW&XAkpIMZZ9GugwqNzKtFnXRavk~0wq}kwZc+fRqq^sw@1Knl}-?1SLdFKbz4pniJ zf|~la!suqbAZ;ccfTR#p!-bSARu>z@@r6YAb{4+LHrrOas>G+^w9UaF=)m3fub10k z<WEPp{}h!kr>FEd>_)2T<MX_qnb^uWHqSwa115O$LbWH>{R+b6@405xHLn0)9_w2Q zr=a1Cmt1)4w9zv?(3rbVGq~1ZW4}(gqdm57!kdNDHjA8K7dZw!##5x}2s*8feSs8H zB_hsgUHknJuB`Ww`xWOWBVrNWp{=1?xjHGJ7$jgRSNQyPo1(ssaeY0Nq*PaCvB?;@ zLZ!tGf?7tr0ILZsqfid4n~{Pc5;_JfT5|_R{j*I%L|xCfntYJ+H$w(6-WE&!8P)Dr zfYXPj;B!1#uUj2k#S_;PvpXlF5DMgOVjI@!iZz5fs72PL;EY3sz%PK&i<d<7j-1iN z^LWo9VjohOqUmnSG!3V1639K_K2bpIldz=YNDmT>Aap=-K^iy8<0TCPkl$jD7ZeUB zSd2t~KlNt(j1DJ3!vKa3=L5+TgF%l5JwnP%l+qEEU>bV;{c0foJ;ypfi@S7I&uGv% z*DV|$*wim(5@(c*Iz)(NvLFFETD0Ts)8bPEJrA+5Phu)Ks!y8|@qGOXLhe}Y-qn8g z_eU{f48`4JdUtgk8xPd(i+6ptkM3Vn5%tv^`WZ;BBgqAD9F!E5i~J7hi9D?G(ZB-2 zR?4t@Rv;0P@AnJXS(L&=1$|SFo$adPf3DsbVLd?|)FdH#q28o`*b6UC_{$Zvv;c3m z?xckU5xwNuB(-Tv=Qm%rxSz2rdi<cm+wu1W1g=JOBE-R6Ha6G=Tk$(R0PKe!1-0oJ z(P&K^ew2;~eMiAoOuM`K*&{83G^k1D6t*bz#t(HGzF)BVsiy~S${3EtH@nO6)$oAQ z@N0cHk+bfdLhrf7`|FHu7CS`6_N}jC;u5}qMOW~+a-}K;BY;$Gu&R`@91tcB-dac& zp~2@7(bKJTW-2LPPX{8-o6nR%bkDB7Qs3#)XfR^&)D9fwWcfi%RF0yDzewc%{xDO< z(8R-_(;P%M+0qLWQd8em=$-s^%#-~Z`Q`7yUyWRHMt;J)GL!;0Y={zjN!V1HH#zCU z_Clg6nfxE3XaoGA(9c*;?guo<v_D!m=OI*4JB>*SI-#0D0sY8b5;B60(F8z-U5`V1 zuaH!nEuXfe5H2ChPSjNNR8myK<1=Nt`c|JULS>j@GcJ#5LQo(b<yEgN_Vz8K&+T># z&*giJ+|PptTx4<cHWlmYZ*PTpEv#PNc(^z5@htLuz4Lsy85*DMKR*3a==itV!Cnno zVIF!4&v)0s4y$dBgV_|Ms?Thxg=a%_v=3I*<<cATCfk^7T<nId?&2FlY%B*=b@a%a zQzHS+mRi0<DmiI*?X<qm@#j_YRG3YLwM^FTm<{nm4HLOSY>Q0camwNvq$}^pwxE_k zujNmf0opnIMvqIr_Nw&tXxkA*a#<fzcnnjaH7ODE7aj^DQY{~Wg_-Jr*Hg>PQVU(- z3ap&R8S`CPSyV?K_QJ=cIBhaZ&x+%fxz74%Dw4R)_%<?Q<Sg#LdQ?D6?V!t|9c{Jm z$LBhF<#&?KWneHz;D4D>iX$>$K9XCBEbAjO@$b2s62?fu_~oc?ga6o9a;wT8^_K~z z)H7+B!yy&?M%LhH+6YC6+&{;pEM-kugS4oGxz<Zt6pCqsXVI&2Tq@dp0FB4B%S!+q z|DX)>_|h7Oo;ij^L5VELn@9x3|E|bbNfLf2EweSG@*GMzH<m3T3gz6Gw%^C|@A<n! z7q~;^N%jV~Ye2}Ff2I<6QEb2O=`Nl5dF&3KMr%L@;H_}9yfwxOUIE-;ZfYKThLiyd zviD+@*bG6^UDQvD(sZq;={`d`j{@8r?$<Vs+!Vb!e=bI}<+mdFTM?r6^g*>MX>#%s zpw)PFohVUcz>@x0EwRLJiXv#Ozd12LKGl-?n&0P@|ITB2+LuSKI5hLynDzhBYic;W z@kkUBP3jJP=O+qPGx|E8*D^VI0f=^nLbabu=C@IwsIHoo)Q>j{h$*p^?J48aP8$#! z$rC-q#Kpzu(K6Si*QcXkUe0~$ULUl3{vtX)@15<^>K9q0A9oCIOBa>C1WWeBb;odt z&#z_#l?2{P1@nX{Z{qVr=Dkz@>^<nv9=9lx-}d(W=hJAOif8dZ0r^eJt#|V0G4Vg{ ztc_JF7RmT?qhNo4w@>v~=+N(vg~b;dZN<d-0LBZiiyh)X<3ygX3SK2BR=BxKciKx5 z6@)fyqXAG_Tvq&L%E?&)QsGc1ua=8Q&)F)yU2&)J$$8AD7V!%A$G(aXu^8Up{FwBX zlg+MIcApI{D2&?ZcmK<I$ywcNIz|E-4J9&NWwSS!&kxFiKC<6&DXKHdmu9|f`h3Zb z^={gL;IgbaE`c#%XLFlA2-l88W;hP`TOF!4ahFlr{ph0JFh$pl6{Z@}y@2Xig|rRf zQjfctA&U!*E@I^Rxg3#iZ7QAtEBuo+(JQWX#?ug#shJVs1;RhtlcJwd?v<h|7D;0~ zEd#>8)c0?-u=p2(CLjVQMHFYCm3b8JXW#l|#n>WReF57+R<vw!z*#JfHX7cT7g2yA z^-I0^)JIP)=fuW`Vq2caMFX@<mP>7UL?LG$FYn_>KN%cQdlCJUJ2<;T6zXzj+T2>V z8Rh6m*xT6C!hq+O0UOl3bFa#p>;z~(vnJ{~!9u$GS*@E}-VB8JOlZ5y33SmsJ=s=C z+fcr=G9ib*!yhzTrNy4z`Ynsi$uU+e&V@VMhc%iAv4`9q7LNymMh4WLccrzu<sp*9 zI%9aD<iE2EpjmH9^AVpGDX?NFJli!AO>7UKjo!bIJZ7Y4z-;$k9ghzuj7yC^7CkNB zaRH0n+1j07+;W4rVX!kFqQ*kPIBh^wMXh?Rrs)It^QYF-f(rEUqD%K(rij=dKp_KV zu;jyS1Xywpf3p>^hQ<MRO7=LHB~j4V1)yHeF_p&7j)eaE7sa+<UbH!|qxr5;W3ujv zoO0ZKU#e8JOgE4_egmqB!%degzZ@@BmMVjtv49>-4|4LXhN}8c`P``Yys(W&$an{3 zzl=g(5ptU-q(xbLY0+|UBHAgyRQuB>W2lieojK3(<)bC&r4D{(JG3lD`+1qMF1R2F z<=ADg=}!}&0<Nxp%n8+t$$RTaJ{`q#feLE-Q_m;8*^TQi1#I5j?nJ|T1G<`bn_MfM zS8d8xVhKlBU-QbxQ)H<kone3Zz~a?saf7I98_VZr{%YpPCqxuERzUC-nH}YMqWv2M zCB~KL^et?)%SfOLneG=y8dzHLCI)3{wJ_DbQ_OFp51J+sGH_7hO&r|RZX!svC|88& zbu*@^s9Q<_G-Jts#|$8!7q<A7qNXBXXFf{T6B7jHC+C5Inzl4RyD{Z;<pXWob-CfI z?3G8P$cia7Njn85I)TBc*UtlA&`DXCvM5OLgzG*z_PJ#F0Q8Pd??Hb$MhY4gDcxh2 zTOo9O-@w^gCaT;{!;e?nbb-tzLej%O2C#rOT(Le|E`;@@Z@`Q;Y+6&w59lzNYnMIv z_c7~H4s3+}4vtaXTvTjXKxeIY&bP=eH$=EFv2e`;`f3Tg?2L^KjxKm7f90JbiD+@g zX272*{{EY$^qBD~uQb30Y(J<cX|-phNDXA0)?h-)ir<R&Lpg)!#eo8zIK<Ch%H0@! z@!>|SfcD3g_0+ENh+6^eKV>RrXf#T4!@^h&7PKbj`{2yb5{+5Q8e`q@t?tlYlq_YY zxsxEh;_4laWgq4|_?)8;9h_-~B=6+fW_kWxu8`9sSw0=QN3uxra}5$5`n~7?(yWr; zVeJK%5G>LeNqEnBJhK2Pg8N*S22%Fsv^2&gsh>{M8h%|YvM#c8nQJ2D&Ta8{!C7)L zZ8&pKtud!Gb>P|&OgX79SOjpoK~5g3HO6vtXGjJ2r)iF7TxP00J_gUOOz8_YC8?K@ zE@ppREZS3?I^c{xsFU_|5#%gcwT;sd0f?$o2PNbUPo+ICb*;2p#I|6zmSv@7xid_= znoD^tjmS<e$D3{LspW1Css$)EUaGbFIB98x2HeV2?R~o@>-!r8T#j_@|7KZ82Vi@z zIeff&4?H}0Ve|5X5bnR1zzb|77jpC3Bo<i`bX_$XMCrC5i>bLsO-~xG_h*EU<z=o` z&|{hs_tIVSnC?%o{(0)(8qB`B9|<2iNz?xN?qR4A_2|S)*E9>F<>tG>X`#$}1w1!& zTM<_)c$0I&VRl>a-okuVL3(ANs;TG|cWj)p+xbx`{Gy#&`9MBxg?I$l>o3b8&R>;@ zjNOYFc;yLF(-XH_$9+&sFmr+|EZ!ylXA$GS<dubnrA6GEE+Y4)rNx}Zm7Il@UShIp zsTzKEXuiRgAi9scf{W^H{o+z%-h;jyO=z)envhT$>P%b4WN(wT<U&MkcplOHjt+d! z_8fL;&g0q0KmWB*xy4t56SJn@>~&_m6=|2k^8yB?EU2Zl475i6cUDtVUR!8YlTAd{ z_fQ4tp83T*q-wdEllDF?0^QtI$(oa`){;1=GE+n9mt#G_6dPqh9N#7P@|?489JSFu zEw&m{n-&iJvnx_LhDqm+m#Yh2r1ZK@Dmv)aU3}<sHy~M(>Kbua8C_cCny~yrgROOa z#eD$n%j#a8qcNi_aD88QIP}P@rYLu@<G1Gve8?|O1E}snJVsbs$sogy!NSnWtckB% zVUO#JKQ8@e7A>m5?pD=0EN6jA=X=HtaP8rt%lkI1LN!<1vzpm_^Q1e2fqyFpA%f&= z<@IAwJ5u&5j{f$|(!jtA_N%INzaEUyudgF3(*HeWwB<hBoDPBNnj1RgiF2Eq|H;!_ z+TGi{g}5^)dP90D;4swPi^CU%EtA?BjUs>ir_%#(Pd#KF21st4N-`my#t)~<Y&&E2 zYB_gWrLP;Ef7bNeO@}j=Byn0p8#e7)akK6Jx;d-ye$Cy(2%lPYF6I1^0BgxPa~iO; zTj=Agk%X^K-c;;V*XhnM>EuD|EFV;z7MDJZxZV<bPQ_HMUTJf313d39U7J1A+4k2+ zb61V$Tp8kEEft4MGU4f-47Wqr$Pzjjr2Gc_{B9DYo(gJ%MA>jRmEU)}G$umv1FeFW zIe*7z0w-S=Y0E$^-tHDxV#~UJ^W>?|yW>)$4Av;mk<naImDx{gaomc>jr;<6;5rpv z{#omp6tBeA=reL<v-IHOE!TgipI7B_553clxHPxB`SWmpS@Y(wZjrU*?Zv4u_EhA= zr2)Ucj~NVF<PPo6PYq6hz^(M#?kCj65+QKQukX9onmeIm-+6gG=JQrX{KB{mT=m!3 zFQ3e0M6$dSvOa-}zs0V;v{!e(<Av=uX<{d{liX)*3gu{*E+2K*;;+4gd+{@!&pDR9 z_9<O0T}#h%4Z|sH6O^%@7uH$7>#s8^M1Q3dwnk&~;do82SOvPpeMs^lz?<CXYjTWL zO?&`>zLXAA@XXju2>i-#Bj!BgLV=u!^P-qPX{~;;T{Sq3Oa6$-VS-GUhzT~AnTAYf zu+d72=BdEKBB3^j5$8!ytjWIorL_n4Td-hu`m59QL;Tn{xdOc$wjhfFr0=wUQuX4& z)!6yYdV9?^lWt6&#Nd@c<j4<b*RUN8(d!x)Lw2dH3gvt5@L0dv(XiJ-wOp{Yv;y0N z+2)BqhfSMPkFs$-v5a!dZI0cBrd!9t;MS}w>LX1{Lt(9xe3vt`R(k<^l3O|sBzAjV z*Cxsf2K=GW>@)FEH{nbAM?|tF!j{ec7b^-S8(SCI73mzU`)4Z(1N6`|Gui#WD+(18 zg7{POxJ&02#L#60e}m`Ic}+!iL)Q`=1_2^%ZNmCRrbm$xx+P9|i__1F>f^@0crLE+ zwZVg&^|Lil6N-1cKI0)p_sW!zwCh&bRAZ8Q=P9#Ye5dABqWE5x*hd}PC|Y%<D*f5! z2}BRY@Gqf>*IGXoX)3@}*SffqE%L~K{o`kCnJ+77DJGdAnSq$o(erCEpE+&{Z*%q9 zh`2lyax6#$Jt|XBh`mN$GP(1-NE!iziHr|8-XT3QV8uYGiE}`uoR)~rm78|LGX2XL zeR%OE>>>{B&d|zjE`940v!75r^}X$WXpFjYQapXO={HVC6~H;-&=krG(GtScOjd|q z6ALC_GLf(3TQ{?7{RgH&+9U!Y4XRqcnE0oypR0d{^Pq8RI0yB17StjmI2$&i1F|q* z9HLrHO#6`Om20Lea<8^v`!6!^nN{&9Ou4=rUoYC-`O^Z8Kna$gP<2x&$wkC^hoRo) zPr}G2=5%LuPJ(aoS50N0w?R<Zc!Dm823e<uHlkxLWT5dQnYpa}K4wWslvL2jhyzyO zV*5J7u3i=mM!DN$evIr2Td*SnVB(P;oiP!X93{F$>Mgw>JS564(sFsuK$ByK@3t{Y zY{zNKu{=Ba`fN8zS`gP6nZL0d^kQ3QH^*2A(^VFIp(KhfV!0M~=|%s15eVxZ*gL%W zr%VzXMW<*!Nr}i90o-Go|0tD%o{F7jufXMb|GM?A$%3P2Mm)lkkcK*3<o9e|%q?Xh zHSU)BCJ$Q}%CIQRp{?*4cX$*49!}j#?KA6={^xRWNu}wMzdJNWP}RJJ&3a^Gl{w5x z(vR{G!1!4cNelRY-$4-hKfA_#b!K2E@tR5TNplLE{FW<CmrUF!=s9lqy)3zu-)>c1 zb5@nkESja`-48T?%~=a?4THYC|M^G=>z2AQ1?Bg={ma(o&T~L8>1F!v9KviU{qV53 zR-{VKbGZ^Gf(x)fTRTX0C4;FpUS}x>Q7^j<eL~=}CGgKxA;(`nR+)=XwCG?8FiN^6 zb2sulj$ciBVcL7)P!LfAQaoCpj2W<X{{o({@A(CH!x$W^I_5&h{Fup(%MHm@bkq;+ z|8;%ymcO0Bv@ERtTcC_ZQ)rP~z%jpmNc}r})gyc2ttuC`SIIGmN@BxzD)AKuWYwIQ z(2l=_`26qsN5p>$A&n_q9L~|s2B=;>$-3eE^8ApUetWl+ZZIf=KF4CT&qM#eUF3~( zu9D$ptICjLF`T!vO9M3bM+Tfk--ZN~)Ss)-i4infjT>W`n*MQy%$(+SR^|iHc-!HO zQu_gHaj5#u?SqVbX6zM1Y$_yQ{<>TgE5Q%2hO+2$z7)o=lF6cAw_0(nmc(ZlOBN~z zeIDOqeTFE7&${rsoab>;YSI&Awl!812w)a;o7||(dX#}wvIPIRR|X0-k*{GaO+%ge z5`+I%hPpxdObV^N-+rlCt5gH)Ne-|nNmQ5DexVQ(w>k*3S(g;c7K%!L-rV1-dhFYw zF<e7%eL}|=Q5X?LS7~O;iP+^T)h04JIXOy%${cfgpLb{wLF9b&bQpFE{<q<5w<R66 zZyPC;N*~KqFQKKS>K_wQv>JGX25h5T&*Xu%=Py2~Ne*n+HC4wV%6^%@T*mUFQLGZ% zP??#=;!7hlRoRP%DLXpGAAnI}!De?egwd)w;X~FODn-C3Wv<&RaResfYe7~;<w%91 zLAkdQOxOs3e_d9mR!mOjVbPILrZ!+ATES<ZQynt7a!qnYjik}tKi_)peiRZz3PL8M z0IuW@{4}0XBHzoB!u(8L&@z54jK~}iy!b){+7z@p=E%vB2W$>(K$)WvYy(B!@6t-! zMFH8Qt*Idyfyih?n^HH2dq`^~s`$sqZU&F|gV6ohVcMf(v<ITFtTI=}05vW-4q2G( z$Pp^Db&+u#5CBa>%1jr%XXJ;P_yA+uURFJC=U{%~Gx;~1v2h$~k`qTZYoBQ`IoMLv zf7&S0F<Job-SSPka-#!ng||{+ud&iG7mF?tGrnmU?8!Q)*5*o@{i<)ME*7aPC=qN0 zOYMBRTEu{BA$FK8pHK`Z^AiGuJD%S>85YsOHIL0R80<W$buHkL_15@2P;nHmjH_!2 z&+la+^SO0WR=;$psdG`dZ8?!A(K;6J_7cD-^yKFj+99Jc<6jg?(;sfJ(1ka|D?^~f zX@xN(z=xPkOOJA%hlOWJn^~uymzgD7>99uTWm(G$MDj(XRPXhsFHHg;aGF}59&CKs zS}(lYDpT6J7p^~^{!)8vOtNG|gtK<cQOR@35qfNaTsK9*apgm@H1Wtb?>2>$d}?0) z#ky;fK*L|Y(BnVv>#|<KocMR(i($bf^gB|;=l`zDrEa5DU~4#Qb-TwlTV{tFH-~9f zL_?)}9F<D42Pi>}*K?|(SCrK2+~F@z{nFBen7LeQS8Gp%3SJa>+}5}iiTA0jS>63{ zS6DPANfRbwf3RkS$E@W#y1C%W)+mZ3^KD()YGrF%O#JkB%VElH*-wvXY~pLm_QI>b z=gZwqvO2RqyiZxJDV8qmX-Tc*h`zDoz2cU9g~3<&Wu*;LpZid$8cg-GOuOK^pUovJ zr!No(A1>zv*DW4rfk0YU^-Hfx(^^-#R%>756vW*d;}g$ud{!vjVHBVFa}E4JufPk^ zjQO=dAXP1Fb(KUo4YHuC>?5iyoeVYHt;~4Fe623ChIc<PZ1#~!W^P8-<YSVe=)$nL zO?2xUq>Ro;wZ80%H%zn{X->B3aR`znO&(8P#Ty&ij4)hgqS)394t?Lx@RPtpi$kJ> zb2b<>@qTMe?)Ia%S{Rr92^|Bhv4zj}EZ3=q#XoydzdA?B&!E=)x1;mTmQG+@QB^>R z=VIBfhq~%Rxr)srrVhGe9nD%sPZ`T*`t!BPj9E3=c^&C3mq>VASaYFDa7zw{KJl#` z9donN$E&#cvQVq}$^AGc#(AB=pw-C+qGO$^x)|)1oF_&r{FQat!K;(8yWXDVbuq76 zat_DH?knqJP+M}AoG|#x>#_q@C!x8msDNzX>SR~mN3|oS9Z|b|%l>(htGIs?Ivx|I z2am7fp3bw_7eQ<bZdkBpHFkDJZ;Z9ght#_&7LSK=7Nx#qBtOD$JDj^8A(|pL_$Am% z`Xtu8P@|VmVzuYa>Pj#6E_fm0mCaPdE6e=7kW(Ys25-H|`Hv)V+*_V6A-fi199Qi= z$D8E=10T%q%q52$=DU9XFj!QDk`nb9;kI_Ym>Y@kozgr{76ksPdtj~QI-yg*?3)(; zVa{0{<jug(GV@v>Gl&D`gquWir@uCLe&z7*W{X2yg)*Ql{^KA#?rPy_z=$gU&V%^D z=gFJasI!q~7tHkYvE+&FsDhP>EwO@RsjkPe@X(Ji2gkUdWhG8?Z5K!Po~PM9+1?LU z^vA@dthalO{&4NN)v3|Zm9y}%^fvO@nUcvZt&1^ML6s77eAh!3t*j!WzgxeK!o^zC z(=Go%&uQqh7!IxtB3nPo3uTMmAIlp?4ziC=E%A@<3hN7JiM)Ass?}V{Tl7Ux*PD$u z=R(WM;yoR2y+<LNV9sCdlSW4AMxdm_Ruf-OHNK7At$1$+XZ{ZN<lvny(w#}{k=pCC zi60)JZM`^H9VYs2aDr}TtGxC({T0PV&pKd0%(lg<L9^L0_d%IRVg{10`|2SnW^Kgl zH@^qZL*KwmhJi|W7^6IIvuf!os*PG{A~af|2(~iAsMw%NXP^Q1l)32`ELypF#HilT zR&{r(bxAPi8(Aek#f@pH`JOqOx%#CkV~~`{-$M3k3HC*5<PQUX&su7$<xsv&&UE(b z1tz1R<@(h?`4zb_AIqO6<1$MxyrXzI;wm#LxAu-g@_0$H`3EgEa)-5gUIzx+d(6kG zmmYWd`G6SB)+(!3Kd{LEu2*<X(D9B!bH+XdLj6lhWSzupHjQrDJqb-7)pR?G*(uFC ztfLTZvpq%puuildZ8Kq1gX=Svi$0qlPi`lH_7Bl7C=T+ND~w#m&L|Fw1~@L>#XjjG zWRv&Dw}Tl!P#jc=tX~ucb7FP-sWo~-uw?1*%w2@;f{A<S@GvfI{#7(n6o{m#mR#2* z%o*Kkqi>dHuBsoQ&0uxAa~{6#oj&~3j3U~hxnFyR-^)PZ8;g5-nOLtOVu)pVGCF;T z){L?p*BO;~obQR=pBn$uPAKvk>#^cz>#CVI$AlE-*-yfr;<qzUDDJR)HO_vokBmHg z`DZ!!?N@ZPBClZXFq%_Byx+qsKmX+bi)>YHb5@qVs57j`ns%l7$t*z{0Qk3^CjyMO z6dB}=j@Ysb<HP|S0~nLdLV{kSUL%`vUKDbcy1~}|c*=fUId^(T32U}DROFH-^a4g7 zyhD_Kk5~ryOl|pYqgsl$$m;iYM&V{lF%=6g;HG#{j2wz*tq9cv&r}Ic_Do%Qwi3Jm z0l7~qs^@+j`CmK()RCykC96D6$?P$cy(mHt<*xdr{>h<qHVDjrrIdUg?Ymy1GZf<f zO!XG1j)GV@e-*Gg0+1tz@8{5DQBYJA#^kdKfJEnQa}S8e0Hre_(6!_K2cQ%jiVa@} z8{^|O2gRN(GWbe~{N}^2i(l9X`6lISpETi3?;h=o__dac-7{H~ZAX2K=*e#hXlSK` zHWD_Q#`yDY?4K-j7nW;;G#k?%1X+g(2>|J3_-li<or(=t*ni$^~7y|31Q&6c2h zFPpSfC+NF89{Kb?hn7SPAAGNGHxVb>No(oBig@I)@*U<gyd>ynep;<fjRE1xc<E}1 zt$Kxy_E?+W?>JcY>2M1ugbIka!r64ZbGzt&;U0c5vED6-|7VGQ=FZEX;)+P}^N`Ve zKV=UVD8>;@`J)fvl)pUD(Q-2=NlV|H5aK1MTiVUbt}uw4G=~HcORh3dh@`&G9}|G7 zG;4^6(4XaYX(KnIpr}>Z$vk?pMTpl<z4~~R`J0AFd8J(`0m#ouR+0VMyUdrurPt)W z(@Q$yGGE`=rj*wgI8Uj{eAfxfjjNsvGvJ+?EO=k?e*UC|ZS2QWp=*MYaGsE?MKQW> z4V_w{u=3-{OPP4~@x84dPd=SCfwPFCA5TH_SQ=}<Ylq4w-E^UW|H6Olqi+^JJgOze zxq8wac<DKj`&RxvUO-LOX+s)Cmq<#?$OfN|VvrwCVa@d*Ta|ChD^v$<8hQoYu-K>F zem3a`{SQ*v#>5mRO?lyFz44Y>kI*VyQDqb86Tg{>*jt$jSUqzY@?D>Hb-1S7W<o_# zy?=|zzpwKMt-w%EW%u#B9blRBLIRifmmx7l!?MGhnx2ZM5e#e#d&_v8Y!rs*cch0? zbx$KI8(D+gze#tqQ7AS*h`W#UWc%1CEaYr_GUDIIAtM)$*T_)X6Jt(dvs@6JZS$Hd zdl^PkZV|i(ND1=H>?45#k`cYm%`@LV{tiL2l$UXP#FNE_pZ&pKw`G*fzng*b1Igrk ztoU%#f)_h}wvzV|G|ByKSs1`;7}wL=g9H$@5^Xdy0|q4{9>xB%VyW67nggCH(~KS) zhPm&gMp9rO!k`z!yk%DXk`cRR-u8|uNczYbhK<&-#y(G@&aoaF_I>OnB>>unEH8~< z)mucVRB9Z55m{lN;Nk5iXO>2kidIWWH(5yb*D@qan%1$f1(~p48X~`g&TNJSzSHag z)$;G4mmSwCAJJG?B%-dsHWbP0#762f@fRzC{U(o3<p;1>z*v(`4BRBdYqrInyz4bT zc=zP{;}sT#M()dPUKeF&ea|GO#PqX*=uDM!>)BA=N0N)vQWJDNkmU}6l1LtaLv~_M zuIsC8>hsj8G~Stn>)9N{I&w>YgvcvbK1iPabpCqSfn-0GkB+YlYi6&<F$q`|Hnn(( zf>J7FDN4unfXu7u3iFD%W<X|C+Vk+}Ct03+P?+^Vc9_n7GTINPL@uuS5O92aO*c=q zNJf)<SvMAi1vZ!zFRg?<c0_}jx=%2_1{zGi!`eFku#l%TFpI>8;v^C$frWDF${ZVp zg(4f~WBpO|#l2_k?<f>wD`_FgjZz}^N%xCXG0jpUzLSFFJQ8TpzJ@c-K1CHkkLiEX zHS|%NHd>^)z-+n1Zuo=SgBps1;WHW?HuHpYN6c<k?AE>hX38NMYP>$v)&4t_Zfd+e zj$HVa@yk>ZvX~Wr2C?Z=f?prCbt{cbViYOD4s?4+hZBh(LIE{-+|H%QDp=iGE~oFm z3M0l)jlx#w8%cURnjE&O5&tTzZle*a>XK)w40wAk*HI8ppf8AaZ1Ys!1|ufO(N!F7 zGT2&D9sCmnTOI>B&&@D%jLSYDq!_vTUOfgTKgS@3|KlP91;qjv*|j)QnXd?Ek(SwR z%u{7R$CtZEblgvWf&WtaHZ}YX<fnYX%`3geKp{DE&<gX#1DJ}EV`mwZno+*ZS(uM7 zmv5u)Gsh7)UDcw}kV{^8nDMePyt@@inmo(#<P!nr3Y`lH(eQB8xr|Um@ASHAq@f}( zMQHBvhlWsqr^KAU0^QMoXVf(#nmuH}89#x!qi<8y9Nq`at1L&W9VfgPU?%NLV_@v= z(~bd86<b_Lmyn`yv$e#+xr|nYx6%<aNaVic2{1o?IPsoqLs}38QY0R_m}&{sz|l9U z@4FLRn2)79P?OoJvcUrB`xL)B4GbQY#78V;id>ix+I(eA5v@`p5$9!X@w|_}M@jk0 za?-CFe?y{1_AB&)Ly-~eQ(k*=!w+1TzzkBW-j4Bl3yhwk-+x7RL)k^Ck=Zb^?xc3# z+wN2Q%}9$n)&-_>3&hassS<>-d8X!QP(8+#ZJK(zdo66q{NbxCd$6!UszV}$KyJzC zD}Bdu%uXlA!8nFr0rGgSRiQ}7KSJ)%Hr}A$&h?K-&^`{g5(%WK`$~eo;kU0xJ8)DH zgOfucP{dlJS1<b&@AY(~LtTJ<Bvxm%<0whDP4D-=<zyJ)W?{q9dFps+@l|F<fM0L* zk)wEn-W$igpeyr5a_zr-bWs)I3mjVxwAYHs9m;&$xA~1>SO@yZlQ!IzYewh#$c~lE zc1^67z({$%a;<NNm_;*5UxMkuS;Xi@_1=?F2{@UkV+23nU_1TrRZ$CLR7ez2FiZ-C zoi>|*A8`va=CA2hfS#t09!|_o#jj9Ck+bq6>eX;Gbx&ee!)-A7LAQX@BX*3|3$`cI zye<5~Kj{|S3((I~_}m6i9G*;npc=FP{K)EN0R14Fxv4%zqfPI({QmIo&6LklL1PCn zywCy7|Hso+hE>%yZRtj&q&Y}QH`0PA4I<s$T}Py(Q$Ubzl<o#erKAoZEiK_eT2cYy zTl>84`~911?X?y@*PdtYnS1Wp=YwpX!BsBNbsr`M++ax#525$xHz5XGtMh1Ff=G*S z_Sv_+uM=HDV+#VBW$?~4Z($ulO&mK4>Pej=9d3-iVI5B2#H-3DV}h`ln&8z`al(8E zlPWu_7_{59>j_CTF5nVx+6Zwqmls@YMQ@c@Qj-+-DY$hjEDOT!k7sUwB0m84usBGR z1(A7jV}yO_Z`?Y?x1@&oKC;iS5IrgbrchDO3Jr6JEy!uU(T#V>sY0;y<a~XPDc)B0 zmh*92HeS55!o5RY3KdGhG1YDB%N8wpg)q^2`9D36Wd%u_1q`#WUPjokI9U4^NGFLu zOg0Bk*<ZaC$~+Sjw_|Y#_sR*rM+;+?qtzlBC)T&5##<_{T!?#xVb9`#@oI71o|~6h zE@!UkfnTQdv>0?CTg%eLS_j<1QFn4?2av1TGK+7;A#_~nGg73)oe>GY4ZP;9#gVOa zUvAfvQIPC9wtdNbyut<Jk4&wd4tuX3vSRY$SqT*!<Ql~kUVqU2fN$xFSAON42GL?y zcjIaX3xpIMzU8}gO!4}%w`jd=;qrGt0Gaz_@(27olwM#B%T)|6J~;12w+UR{#Nmkq z`wiAxgEc4zxnM6G&A5BJlGqlx>iOJor~aLWD&rxq0we|>vBA>eBQRu<>Knsh%-pqc z8DXA&CnhovPItq!t31PO<6+Fgqbn1uORm)WcLmWZGJK^oaY9KC9<derEEQ`$=k;eI zs}~gVGma@TAI2O|x$D0@uE=kLZjitbz39zPm=&TUqFtjPMJ~@Kt2-I!A)=AUMD|%? zj+^#OL+zSHp6%AWjjvQwJ2Ayr2*051*(af=Td16dl5CWp&+J(}VN%Lf@866HkhZXw z?fGUt_^WJyt)&0m(Kd62($N6qHRA==nL}Ztz^_zhjKz-b^a{cZf*c(^Rp`cUwcj<W za>HWc#@MFQm27|ojfKE2-Wf;hql1H$KlK!kVu24fhu!$tt|c+qQp0LKK2phxG{oLJ z<PV^mws<-6EZnXz5wRwjznjwThrL%=o4<dAdxvONPIvJ|r}QUbO?Ha5AHRu`oC*^w zcXzT7o+`N}7;v@D+NhtQBiMWO9dmpih+SyQnLBA_&c!qyXqJgc&%VhL*!WIcUSu@& zPRTjdqi|x>Q(>G)c1xCiA#o?lykRs{q9H_S(({oRPDCMxM>qZ1wWz>Oh^(GnrN9ht ziU%>S=El=|_$j`?m`v24dv{DnQtTC<XYlM6*d=o6ri%1nMV~+m-JJ<d<cb9Q4VvQ2 z{n(SdWno-hEQ?BnJ0XQ||L=G0KB(OT+xA|5({6eUw&{)iJ`N@s5QlkmO9mGwh)tl$ zAv*USAp<zpg|QBMvZ9T-4`Vg7KeLsZ&mGFJsmtZeB>c3mvz{hz7H1VP=nrK7mRVXz zRQcjExn3B{RqKq?NHCiFL`C~^>G^fkIE6`em}r&fg`2?b{ki1QLUotx?=lGSirg9U zX3M!h?_Vu?rP_ln6@8Iw0+Lal>e`<bTDZ>Lyluc@P4oy-<}0|>qQw|Y*S#;Xq9#$W zGx>1$deZ<qCcwQ#I=%x$8>8H|Uut{lXuXc|88%1)DZDXI>g+tBH?UV)D(0mQv`jS7 z>ams8tn~X*UyTd)?RlIms!^zn3Cfz0t$5{ta6?ib=pG=5Q#xHwh^r+nGS4p=bqC6k zo%<h!4T3eJZ*|=(Tu``KwzRS8v#(`+6;7fqjPXjHbJV-G<j2QTx8P}xEpML4q4W33 z@7zA^7~#Jj`TJ27Nu4;*p5Esz(NZ`6gaJIq(fzm{C;n7#)I@cIiAQ=Rb+JkB8raV$ zOa;Qki<rBiJ))bk2f7--vY&%1<)cX<jqq<f+00NOe>snURd(B?t=Si5z>220v#~Yl z3H}9LZyv7NoZj1{fZ?;LGTU1M#4*^3B-laa!W3iCa8@W6zNg1$oxh|Ba@Xg>8H#F5 z#}u%il%;%sl%U*3d<EA|V}%vuv*oqN(!IH(a!}kdG!e>0RZgQ1%FOWqwxLxz7P#zu z2jy6WkZoKh-UbCp{ektR(BwLY9~NdEhBfC)c|WYZZUOtf+dl{507_kddnra`Nm=fV zALlaaqBx++qq%dgvNL8BV_ZmF`8CV)B~`m@-fY}QXZu<AyXD$W9c&}?C3nG>U?lt= zdXwM;1C;v0*=dB(gz5Ln(x>O7U(&~07HU+k{N+TTRnSpjz;)c4`6M>zFyKa90mq}a z(+Fon6U@H0>0&}L#&oRUK69e2EQwI9PMHK$E7|x9XNo(-LRhtA<+51NWh)!fxU^>R zFlg-7?t`^p|2s?RXo7I-Pn(DLK-{QW;ABL8Co)P$ljCl<z_1Iq76b*6^IZR-?spKS zIEK>Ny0AdpT9bIq?n>GZ;7QtH&k^M>Rh<K?x6+dfR|%VzuB}AB#$&o#+|irM;`^}z zA(MEd+e{RMOqG`}*o1;c`2f(&biKpz4Fyl-OeN>tsZhA|!=p;M9-P&ooNquF(t`Tu zGq&hn<*vL503oij(j0;?=)hG@wQ=aE(r31dN(*JX%s1ZPX*CWjyAWUb$t1w03%8v_ zdGr@p5n+CJ_S2tI)!iE5@*}b|d&u^c0v6=(!0`|Uxrv$6x=ra*ju%);s%WnNT(-N> z(RGp&{1THd@o|;Pa=mizLNrW*1KmJwEy_s_*Z*~;<C>xMI{7_O41k=(Dd+9D>a`h~ zT;=rwrrnvnAd~}F*NUI1(6H9sYPU{X9*cXeZ*ftWv{JemES%<GA-V#$Y1LD&(<8~t zK*q<Z3b|1{F4NgL$A0dMudF5Kqq4)RW^q}X^qu_i(Cp#aR-RO9*!NtSPIJrWq)Arf zkL{Zed+*t4s&;6S<jr<xZvT`D3j5xb{q*QgpE7$)Vr6h*1dfyoID-Flfwun%TMY5u zQc|*8mr2<7>dOOy!@*~)F^OX>n@73l5G(WI<r>1JRAq!k_By=wq^Z=ElqB^H<4Y^w zLQPQTXl7shmO67LLQA>T>*M>D7@l&=(S91v*<>6t4G}ZTDW;jHiBTXi=A>^Z%|ex4 z&73!`XrRoR>&qZ>Lh*dke=c*`+(}_=rw7i8u@<Bx)jieCCcF@H=hdn&5GnCA1y-^i z5muraSkR5QY(!N~WsP&L(H@{~8pr)INWRx)gYKy&`lL=ko#8=_Z0?MB4V|li1fU~Q z{5}cZ@SL3B4KNud1PbD?lE)NDbUEIe**bXu2s~-32Pxv_ud1|Q6P0xruQsU4Wa)G~ zEYh$c3UBs6J}B$I6dpI_V<E{Go(q7)tEuN6`Y(yM?OJLjn#u}Q%U*2K_#nE#ydzwt zvi$Qx^h0vz9dLx26vzRgm;LAt7ZJ)Kj7q!_j?dyiZLWm1v(QG4av{l=`B}pEpj-5K zJ4SNLpMccGfI?rSQXMMP;n~!`;(PREllEQ)5uJH)LmW*>i!@hL_+7|}qV(M7ISfvj z4xf|Zi}IJLg}aA<0>^Jv<iR?jvP@E`PEFtoc_mOdl~}#XN$6t%RG$Cu!V6QVmMX)* zBIe(5^HPyXvTOF;wnow$)&efD_+0^J>n*4z<D_1TTSUgYgT0m9-F;c~6JmhB^WHOb z^q@sidJg@ki09?GP)RjjO*x)B`03%5EX_jbW)1!nsF!!%ROvLuy#tj_otCZH%eRpK zNS#Y2mO#dJysC`y3JZ+C=8vd7FL0iz9TCFc_d(f(2)nw-4C-_M=PG&)iG#@pSzs?# zW3$KU1{4NB#Z7<ta^S#20kFJc6mHMAxgcJT!e(=v?u!c8X#jUE>d);_7-oTa&{u2z zxpg<?V^0p#qpi`=0I96#gIyiGO^g6){n)EM-VxTA*CPQhgph|)%7Su%Y7gS0Qpet_ zlN4xQZg;9}aXe#>xvg?MLxv13z$}2tu*^JJt@XNtzgaXLw@NuQbwB2I^~iV6!C&{W zP7E&`KG)*ol)+@m>C$jK91-_rDy*(|ke-eBoBc+OZP;h?;5UuKeswjUAAkD~ySIF* zg<$s8GD8#m{(J_GOtV5aLko3m+LE+;zyz5U-*=qC0TGN@_I_n9GmD!P#E(5d8X-># zHbFR=-l115B>+K7QMj#H5f`HPg!?D+$a*37`7ZdA*st!^)i39s@UiboC(5hk;EOG| zz<F$a9q<2_;L|;|46^H&t2GOK!8qo%7$wL&>O=zgISLUKyEgi5Tgn)3!KK3jqIbaX z4`v@Ti#LW5SIQR$dnTE{G@Mjl$|FBBYdjAXV_kl8o6f>NRIKX9=Tbb253;!i;YPO^ zwlFa~4Xpe3u|f$kJheJUsf2QFpXv|}Jj-H3F5pODZ#JLj*&p_*U~hgra!RyKR0R|t zi2_^0fTvwxRyqKyPO}>70Ec^M0IqyC`g%=gc`(AX&&wucAdYW#Hc6%S9IVWaO)6$G zC#AYmlcZAaPrM?Ba$!^YY!_|_@CfeH=_%rlg@nKzX1DrL`^)HdGK<J!K}NkEnKI-b z2W7)cz7A=oRAaX|>U38hZUD}X*6eyRw={YJ5OJ-|mljAH*_RN@$JVM5n22KeEW*&d zoj8Udo{zU+>^+L-V@;p8PkgkQ257pGfSDzJ08PS`5l?2a*iZKWUxzLF(u)>}cXtOI z(o4J8{6gdpiZ7*bucMj7#UHPn!S0H@y3J@9-~lbiJ9548#hB%?Gj{*RB%lzh;=|>r z43yVo%HI^(4FD%dDKR~?1x9hnzc(_du7S=k$-8YSP}ksFBclbef>xJ)h;UTa@^KH~ z2}4IcOuUiQQcx97DfwMUs6Z8pHtjt$pBR|bfal28I9w-ye@YaHIM*J2D|eW{Uz>05 z4&aM}NWR9XprijM`Ns0J(>72fU#Fep)8Stbu}2NB4@^eUeG(S%Xg?!n&%NUBnfco} zeJ%kUaA4=U@ZgBs`v5CGah69QYZ9DNZom6wfUYcg4bX&V*%Hs~$jg9L<aOMU?s!qG z0qDS#A*p^R6F}_|bN&rdB{0)we`5b_YsCh82yEPP5)kyd6O<C-!J9Z`EB!<OFUiOF zYwHWB#Z+N@SXT--zT(&Kujr6hglH)tADe4OZIKol_<-uENd1!!2510UMI>V6e1<qa z-O6BF;?IRPpphWK-L=aWq8yT%eiLAK6cYwWzRK1`Bm)$1MA#=0HlUFZrki(1+ZZ48 z9p3YH?;%_ydS_Tj+?}ZRso~UBq%j!#K0>EbeXJxyIz=`v%n@p^#EQXbCtD^_K%1Xk z-Lryl>i)8qUB})}fKv1hpFKrY?vp6CFm*|L+hGS6$<lq9QC`pPOGWq8!!h0K?i0h> zEL>t26Y6GAgixw`m+X;;UZ`00+m1^O%^KNU{meCV<S-$s_WtyAHk%EqoX5`op0R9# z_rIIwXolp%K&!i@Y<ox(7}=p8^0@us#jyMumuxA`cHmlCGbqc6IN!pxA&M_e*eG0_ zH9QquQ6=SYrUMn<X?oG@h<+R>8ab(`S=yb(K+eK>=<aU}#TSY*sef#M<+CY&JvAX~ za4P4z%0_~1_b8edVd?6mBm+omP1Z?c6egL;pD)QnRG%pW!`OeRzUKF%6Y_<CuG1L1 zd7O;_QGI!tZr#{WYs$%x)f9Q*BLZOTtdW3j6)yuYc%vT63xlWw9nY3|3&8=omhq)} zQGP%s&gHh9W&ND|1<-8ENt4G|_nHlD!(>T}kCPYbL`uvwGM?%Fr`t44=gb3n42MfT z)0u4^=pR{hWKH&mK-6x>0>bT{Enswucj|`7dxgPkpIu!MP#aes0no&=Ywp{FBKyX| z)Ss3^-6_2dH`WoT9~t{JCF&KF)sWW0E!M=Cfm^+od1xS+|619i<xSF>YhQT7#BHtM z6|`jejxWI##vx@YBn)4!v0i0m#Fn&UZV0$K)kk01v8uD-zIN1|=4GI#j@(K0KAoVK z@(KG<ILg@L$6F*L_d-d2Ge@w_UFj}<U(r(i<vd5eg4_#>kvV&T+kd9tl1JEIZ0{N) ze~VOT0IKb+obf|1i1MpEGT6V*R|S)*CK%i^-z=wy*lD?04iExt-J{;r@rQd6s2-!W zF=^8kH5#D#iuWpqx^9#~;=<o<J2qi$SNtP)sZy$W1i;k&GI&!Q$d8i_9L|lAw#2{% zr{yh?2aozd7EODB&Xc7Wq5~XAx8#>D!qJ5VM3z}B;|xl`-h`#vFF%%tVoiGT<;?Uu zKtb2Ztey&>D8Gu;h%kCYZkscu)gU_DDktA<J)R%Xee~jXgQ*8yv*>UQqQfD9&IoUB z!1zTLw9`i?6U-{}9B2R5`tv+gqU2Ni5Y5|jbhw^)W2?u&H7Lh~_xNmykw{Le@_zqc zpXR8nsmfEb*Sh4MCRr6Gjt<PF`q`(~Sr=+lt(7Zd6ut?SsJ|k5Etn<=_!_*G^B@)o zSOV@GUq*J=hNwOGQa+?}L=LDs?Lu1&yGajHP#IMoZ&fmb%4nEADs)`$b1UF!XecHb z?n2l!NIl7o!lvc*t0&Zer$L|3HhG2zVUx~I&(=9qN9E`jvGKcqo^Ak@_wkN7H;U+^ zwfJmJ&&|yARy8s#Qq6K<XaiMDRXt)q3WqAF>&6d(K}w+DDSZ*%W|j$xB@OKdm-$$r z9K!y#dURkY3!W8Q7FicrKm=d5*lPpg3Gi&b{a2#@d$3)PNAIEirP5Yrav{;)h)MWC zIat)Xke3nYPtAoWKKRRjZz)AVg|@J_eQ=Bk=r*jGrkSwE5GWaJ)+_j<KxuK5t0)#~ zR!WUjS)no*;vu~jHmEu6BuT-j2$k9*W)|Ps0EJvQP3PH|0l68s`ycM7Pe5UQlYle+ zA9@e79G>HU{1$3v%ec4<y8KlGO>+xsr0a<$IbaRpEWtk$OuEo-Hls-X@V%C-w$A@h zrp;}GZndQwoo)XGSQ=@!<J~hXTaxg^Tt#!GB)8m{$U^q=r54h{O@=XxjV7Ikq;OL$ z0Lxdh*s@22d<U#5$)kK%@#{!6S(l-!JMF)4qttFyz0j#yr6ZJQgX#X&Serpndm<v1 zPcTr_US*>n_W!88(z7Q&Qvk<eY17ztI4PA-W=l;1e#qq-M;kO4D{!l5qqKlw#=to4 zj-rLJ2#@ZTxl_Y#UyPsqkJ4LRPN?7orFp%P#Pf_Ov2?U)t)0bKj7Ojlug)n`D2Gb! zis%BDPq?6;sn3vNCQXJaxnFfobTP?~3c^CviCh*4?WoJ!`s0;kCgMe^<b*U8=gWSW zmOe!ysmsG97Ef;}2y5beyRpe3f*3v9#;qw4h|zOe`E~L?Mo-d;u=b-3;Kk{S6s573 zvG<14?_MJi;1>pnW*w;&pA+A@!rm*VYb87gB_*CUgqJskQk!nN(3Nj3k-7+BR?(G{ z?elvd1u*4eJo+rQ&HM4U5(|=!WH@fFcA|NVB^P9I&3~~oak1c<7e38rQ@+GWW<9Sc zQ}2Ehhw^-WTVnltU+G9P*LcJY^l*1>`Mu+-HCBWHzVG={<~M%j@<ZY<hYNxcFU?y! zx7uCF^{irXC(yhIO=lAqqtXEL_tpPf#?Kgt(sQxP34P+>h`$shv`^_TMx6(kxC7&X z67)>Ku4zb)X3Go}b2xbKJwLj2b~PcOE=Q}wTh+6p2~HHZ9tIE5H4bnA>QC#^cMyLQ zP=AJSLcA0&!4t-Yhp}1n!S6{R4zS8I@g?Hbu@s>8lq01ZY@QQtWtSEvRL(OcJR1go z$EbT99)Jb7MC|!F-s^baC0@1KRT}@{{d-JpH8g>1e6GBTu!U0Hlqqct<hTeboaFiC zTcMKIWnJe?<_uJ_Yh?b=nlH>YWW|AM$xH=#`p_zvlt3{5pAwYrik#b;*^xb@0ff!o z=^`H@(eg0}G-*!b=_yvgjcV#?I}##5bg?jg^r>k_Pnlt6coX)ROueYKt?$J|3ps<q z&!x+LL74@u7iw_z>QnnbK(S?F=jIGb^(TvgRgD|9s<dqZU}>%f)FH~vNf@<y{Kzs_ zlS(GR@wvkbf-E74X-TlbqRc2$(KFkbLy9Y!Il$;gCa}sw(4{Lqvw&5BE`XQkHxACs z|2g%%5eI)ff1&CvQP$*hR2I`Ak_$Jd0vW4lr_x_*RDh|oBsPZ98Ao*=E@TA}7KjDH zjmuvNwjrA4Wx)e#b;X$5yT6f`NN#&@M=0mLOFVB*98}u7;x2fm_6lfW>Nx`>hZIji z<f)XqhzWpTXtv~xwFw`h^YjeJ&&i-B0)5T?=<lPU87|G^1V7=W2P9mS<zxhUhu;$+ z49cU??ZJNp$UJh9^KS+yGH*hty9Pz(^>4eG&p~7!O*+p4O{!Vpgws~Y5<-sd_a6Xb z7#Z&c69^$PPcPi{EkdpWG@bmk{@#Jh#f3^#(*9Wz`wDS+*jGmEvaA?z3o=PJ>ot=y z6#u)~j-d+#47gT#rQf#;-Kb$ZVrSjQz;|#pUcN;VjezKIzaT<-9Tg@{7vRe%{ONpi z*-ZiAkM!~HBys<6sKPRS@b<pY(?_2m4Fq?+i|V?dtkT84jMlBOThxE&e|r~G0spD` zGc@_B4>%3~g5jT?Ucj>DSR%V#`ip?-gf{cc#Tr?~(FTA*O&x#!fM7)F^Cz2UZ36$J z@&+F>m&R^nCc}tF;TQH00<jbry8576Ox4&4mJ>^ws8&@~z%ttwxZ5yc7O{s3K~|ap z)59i1(Mbq{d~a^(aX{axzoY0R%}*{N7~E5*vOn)j0&)>@#E9>c8$754=B)O$H>+m- z3Mf2bXTnKUsNLiU&qb&eXaQtNM`wR6=*<FB4@{l1o*Jb9ETzevkCUdTJ`>aYMdpl% z5@2xa`^G*P#(+DjFWD5_??JdVy31&tcwGuyqgbV-(uO5MU-lzs^7|}5)`U0uA!@EC z5BpqPSXa5~{WX=`v`@~iqwmqHomRGXzKFv*i4BUA(!IB3Cl{!(%uXSe?b!m8DbuA< zH}~)$*bMgy*r*(l=Z$%~=UlBC8oz{f!m$|4W198ajHF=hqW*5di)(O&bn|VSRtJ@6 z3lhfp-;(<8)e=YwW?$rWikgsz|0<{R(%TVz@F>veSa?Bb$g@OS5O5O~A7DrWUQP&# z_SA0D)#*SZXrA9@`xewG;8^6ENP>C?{y$)gsSx`sIKt49&|@1yN3gcyAJ%FcB3#S& z)lU`h#}+Lf&P55EzyliQ<gK!JvWFock|`MT%wl4ashIyXcZLUmX!2*He7kxwNx^(# zA7f^JyAqJ;)GH9PXKv<|*(ObwJ(^Pa^jk#)N#gN0J5;LiO-&*{4<+BEEW<29NFHp; zaDd(Btd0?xx$qPs+Ex}Z{}7C$Ad;lm@-}-*?V=O=G_$h6lQ;1V(Y7U);S)a#R}4R! zIp?647&AoMjtOS#k&C|z3fy6@IeigFup|%Iq?6+^E#g&6U;>7piHMhifqWW<pOtwu zg_Y9_!3i`bhn{W*1RaS6LL8Q~+AuzZ*hzxAOs0(V)=n=-CqP{AJ+wuTlM(HNz(o98 z>soJtwh<>saPR&=9tL{K&ShUMXjWlXJ9uX}gyv!t_u#v`a7TH|ewN@jjuyuciSd># z+@son8(;$DvaJ(O@f%N1@(z(|GV?X(O!Sr|8S`D)B;Zz0ejY&Z<R)vAXFTPjBmU-q zi97Norm{B44ta7BuQ!skO&H5l!@A~_vagsUCY*D+%Pv?mJ4~#?pzSZGEHFw!+=hOB zoF*SIJalaHzz|cH%l#7hCO-(E-DW*qE$A+Kij{K2q>PGGiZ$I8p9I(Gs9M*m;ef@N z>1zv7^qf){@xkv^$DAji)5GjNW9JnCk`B4*>6;z`R1@-Mx@aGyEw~yy-Pd{d0Mk<F zuiNn<9rTovrgvT5=d^<6(vq75cPFa3q*^n<H~_^bg^m(ERBtJrfocd*hUzUHnoJ0? zSCE0;(lX&4?K%|u!tEyWnhXS?5Ro5MODV5xE!Ou)iV~3TQYf+%&vs`Cv(OB`_P>P- z9#9Kn+~46lq_i;*w!zkHdN3rkBdQ`qlohIz@@I(6Q<EqQE$wnC3W4zmua-&3BD>Qk z0E@SgN$6u^zC@*r;&KvoQcKW3*h9wEBx;8z7dc{y;qJqP<&^mW*&pS_Y_Rp{>n0Bd zM}TEAh#(elM-)F5x52hz49D3g*q|c`EB%M@5Gf}O^(E~p{SE~Dc0kKo;9nQ-Ht-0Y zpJc2w)1W`8)vr$^&KCk+zmo)Wte=SzNN4y>bGMN^5#F*N@h>WbjG!DwbQdXQERc&4 zHlIUjXO9JZPiLX%F6}Fj@l==6J2jY)?A*#C)?O;`3yw+$?qYn$_mB`FULQ<^CNETn z@U|m2BAO1BYKpL%%!<p(fy16wCh8YbKbA~l*KJ2$*is$KGU(b9{o{n4$mY*Ube<vP z)N>ISei}Gz1-7kcTa^sMGnHbZEK~;!!$Jh+{^?in?7BeMYiIe1%Nx1NP^qeC+7hV> zyEv!y*^Ar`nCG{*{df$n3Z?aAlN6r^pPk>cqQZ@+YcIar8?US_M1pG<m6k3TDMW-3 z3j1blE12ICDx2iRCH$xT7B+e)r~BJ*-^ctUxOy1TsaA=u?<`<2X3g}w*2DtE)-aN0 z2EMLk6Bdk6i+NvPPrI0qq|gwbF+N%(dswJ!y;G~y!5b26bTls2k45_LsBkgsUfwu6 z;@QApd}KtMMq6HY2bSIadA?JIOqh}=UM^M$c{ehBSiu4=p|^Wu0UpbxeMs8pxbG{M zo4UG-fu-3_uvw1y;9{HTzM0kuXqgL*AY}K89<W^Blb?l<8q!xh3KJ9DsTn#C0gKHh z)&7D{Z~Gy6V~RK%W>Xfu;+?_sD$zNvwnt!bt5SfumO%_$|0R^P-wqG*7B(-n)^K!j z9HqMGONqr{NgT}b5XYOJZ=e>oM(3qa!HF<<`#QUd*X)?k+o!=2&g##_1u>=c;G{e2 z&%a?PymY_j6?l3SD~^NNh+h_e8M{FTJAB)fE+jPb7$nehho%CEbZZ@O5f~u&TY%+B zjB8RiPic`KI^{)-YxSUOf%->Q?g%=Q0^h{J8T`XZZZ3z6z}X`{Y@0x@(qFl3srvyB zwo-%!cT&an?w{ExZf>ic$Yn+HQ4d;!=f&5xulcg4MzS`wD@EoHr3--7l)ZLA<NZU? zpWQz0soKsOQaYE-KJNCu#jF+b+@S*8#Xk44Y)+3CSc<xhUW#V1acZ(-f4|S;CW0lL zR)^6W`FjS~5y|2`Es|#yDDg~C)m%9y)R~+uJ;`o|^52=tAAyJ_Iw=2j`tjY3eHW^F zek^X~Is$_=E#Sls+<{p&LlmA>B;x>SLXn;ti;*CN85nJ>;!lBirKO#|ZIO>p3Zl(b zpkIq0JQ0D}eD7Xf3P^pELNz+`JKl0*+_>SQu{McG2oP3L4>NaKwH7k=2_@l(9Q)_F z;!Xj0iq1dGoC#{r!agm|?l$YA^B;T)V9EB-=sfn?6vIz#E2CvM27;xU&ZHdi)$k9l zu-6BnTQy_+tFrleHcI(%RO_+~X>Qiit`IDZ4qj{f=6b?jt5Pf+@#}~uu|K!meRm&K zB(0dxJvWDfgI>8$*&K)}Hn^j`irJ{}^5@gKKPtRPh!<RteiWBw&@M8$O9s42t;RRn z=1!luEHYo}xIcGC4uZ5AIy2jBDp2~2aWx(jp+UYP;9Nz2PYg$ii$r&yE(|zVt<g^; zR_qoX$v|~k-V&awHpy`X^~v`^PY-}A4LRnmL6HD+yr%=6dttEvT$$MrG0ybUeF>1I zu&4Zp2fYN~O7?s!zL0Mp2Y5c+T{~!pf+7*mszJK1Z=(R%SPfQz?)W+qLYb<KglI%P z@eo+n+Nq30$bk!r@N@J(l4X{{G`Q?4WX`Z@|AD6#Z+nV-9s?#Mz12RQI@TH#(Q)hE z&ho2*Ffqe?#*;UIdWnz7-#{R$-hel*8BjX=U141irUduFwYvPQ1IZnXj*jNFp!}so z+#l2128Rb|V+58s?|L_iQG*icVmFB1ZtEFTB01^pcc!BQZ>n6&p&yNbIs#D#dxKp~ z3Q#ef7wo0|>b0$fNL|v(`ev{g1&0lBI->7jD%)%XCRIP8A=5zZOW0>kBUQuPSrf@J z2$N#VNti&CQj!vd|H$>X4Y2Q(=f}OhcQNx9fsLv4JM2f2Xg;q=Hc0Up<`91uI!>Dj z`Y^m>sAs}bOi1$QI?eod{N7`2$c?wJ*h}4Qfk{>T8GnRxB1q8JU+FXTM^v!^CRG=> zW7i7W(6UB<?3Q~EMpZ_+WZ8V0>yo0Ofr6#oszEo?w}F7PYvympZSur|swACan<g8m z<l$7Ymu?yfK{b*Jqct)hDo4jOoO2H!%A!Zva<A?~TJfa~SLs+FC=b~?acZFs0$OpA z%E@l8M}VNKX6Jh+{}@R4%+woq>{OoTo5`sZ;j>C+{;_ozqMbXvOE4R|>({O)pNX}X zYc&>Zt@7N=DO94&>FjqrlUt}nc^hMMrPVe%T<c0&)#m+7(XZ6C@rv!lX@Xh9pvni^ zH1m9#?4s_+)W`$g+OSZG>In6T*8)+Y5*3OXDVZ9nMS!Z~^!tg2%rops43(&fQOC;S z`S@NHd+(#L>V++*FGzgf-O%V;ww9Ja6pV&ie1{_BJqc|N|K;muUXA0B4ufD)zVx67 z9Ti@VR=0$t`n3X8;5g>%C<?~Opv&J62=i>-O~*|k98GON8J)hdau1HGuJ8}XvtoJg zr30zwMB@g6w%LapqZrTpJDwc@zZN7JpD`TUuaAGc6vUazZG)}QR*nuaZlXaxm}gbQ zsH(}8cJVkGqVJrp%Q2gb?|%UGj)t|p=qNr^1W^bVy~c(F5N{T5?dPHd5RuV8x$&V} zo}auiG=t<1Rh!8rS^pE}nM%xJr6m`ta}GPMVOfBu)$r1-%#^iXK+AVFdM4&mic*YM z=I3}SLS^;5_;2yEccKuzo7yy_@DLQ%f+CN`^2GO3feUy@kpFlm1WEHK=q)~{H-q5< znw2M$Do}f1Zib_*2}Rxg%ijqC)E%x~(2j}4r4lo!lL|Mz4cq{A2P+6ZT+Sfx<C68~ zOLh8~d#Er1%4#Bamj}tO^exO+NZ$SXhSZ48+Bx1OC&&u<5;?`5@gM3=W)&ma&VUDy zc&4JlRud6vNJ>Gpa^wCLBkv@zQ)eWS`G2xJotnZ$hX2U&^60xlQL?;i#fK}SC|RB_ z8(aK_1r<>89a2VzzqlWz7P4p5kd650D?umERtWFyBKaSCH$NaTZGw`_thxDRm7O#L zTG!xvSYLO!F}BkAICCo-eC*ap9z)iPTvW~UoLlr2lm+iSY^6Li(7Xb%#PRFG-9;#o z){_g*c}W7KnlU^^QvY&DfICzbFZ`N85xriKA^jlW48P|%#6f_j2KYPa&$7r6w1UOJ z!7`WE?5-@+L;WQY^{V@s4R#_9fPBlxjN}gzd@w0XpBlSNNbwl(cN8L*fvoY4g&I!N z3&a?5m7x-x51OX_$KT<MFR}GO{M}i~4*4yJzuW6-vs`<OtfDQS;cN+(^0pFET$iQS zy`&S$@)OJN3zgtnH$00&OTd7ev>J15_i^Iv4e0SbZKdcFhhdI?>lQ@}3!zkbBdtXL zRpntwJXlv>6Nkxmdlr0ET^ENbwQ%u&NQH`}O0S<nhz%7?fITyrN8bHFm6vqCyZ4X` zBt@8wzJBupot0A{VKMTp8*nE>k$!wZDT~V)ao!<nBu2jfa$(?>s#)a%j7@-64Kf5h zD<4ZZ9Da@m295lrmH>pD!G|vtb^L&(%ay3}<^g%=XJoTsu$nfgkVMPJ<lTK9gZ(M^ zjDI4;ZDRGoVhKY+w9rk|3DDWu!N+z8&g#wR!SR7ylY}hacJVR}hklxx(JPuXKoIUt z?bHJ1%mnax&z^kfaS2xgqQ1HEnp$>HWYK>4Es(<*X90TFrO357B2>jgF#pr(F%)Ig z3v_3bQT6pn>zd9fc=w##&0dt(fb#p>RVd@V{pJ*;I9h1?V#rw`5UP5eMub(7CsI71 zNY{Hgd&|yTLJ)G8tL^+MRHSK9c$G!p9|K&*;;qTIQ<R3YN5Y4XIUZ>8ZYUq}rB0ft zQsOXWJNReNx4zi{in>th&g`ZC5O-Z%{`<Bl3QttD*&=^KDHkwrWl@rZ-7gS;c}rcl zcScG-<A4NpJ`+pB;oz=~XGB@;ssAs?8{AgYKne16<=q!~Q9{0N^gfZVj7SPn8x%g= z>4GGB&I`NUGyh@mddhAu;Q<Z>zqHlQgb`{Ge5rXxhEMtvKdHm1!xyC*7cSoy{x5$= z{+?en3PPH=j+~UmGnEqnQXH?ZrW`;o3SC#Nkm7&*oxRwS3T9o1#kZ?b30f#FwJbj8 z%&>?6nJODHmaGpn2!fVMJ2>O?Lw*<qH=&QBn7dzZeg;$<6l%CkZ&d7)*Z~~EibN+R z0f5Bb79CrF0;JmsrbYZ-0AP61)Q>9Hc{R(<c?Hk!sqksqx13en{jUtqU~%iE8gsuc zzh<;ZQ#{_x`H2uA=r%1~x$r0nXe!PfJ?p0w8<Ne_+ej8&eGB!DqMGdeUqNodHnw&; zj&hTsc@aMp7@5xS3zWK1ljQ0Z<gdp;A!W(2dmPX(V4lE{K`aARSbLtYk>3FUVvZzl z6){B%#iTFcoj93(q$n40E|Rs=h>e1xP=Upg`K_@K*^)YuqaujA+jsiXLDvTon|dPK zT7lyR?{TH_I(4i^!`#Qu0?;7>&p>v=2=SW;1x3jc1?h5tgA@3M&pD=6a5@GAbHxP< z7r6Jq#@R29oOYd>8lZKQ)bV}KCCrw^p~#5lPl&j)JP}v~9~_!v3;{>%L<W&;l2@OA zl8-iZA)4L#8F*TZ?GrdDg}$8&T1)%8<xvO%r{AEX<j1;;C3JIi2jmf0-jmz{W)LE^ znr@*rncqht(z#E+H$?STnEo3>oO3`)j8DgDD-(+99ZL(y>erwE1YHuL>T^%jXr%bS zf{n%k3=&k8cF`L@f_!C8=5xeqMMju@NW8C5^?DK{s1o#a?Iq+-0e{$Ff9JKmnR3xK zkb+X|*>{f&p=dmJ?Tuc89h^!={%`#J3@?iaUpQe+`CWV#q|NoLf=QHQTr1k!nsCNw z?AlbwJQWkeni4S0e|{-&y96dtW@SG)F;V`EByWnmz_aZaF4mOtV8M!aRM}IKyoK*x z_GjMHc<+j`jqBGi7)0fKG%$!I`O6ZO((&Gf$1ytH`838FGr_rNwZW3eDd%I7pVuj9 zUI`RY5#AM)fqO|nOeaX(Jv^`nNgJ{}v5Mw_5jHJ6GxsVMw4F=CdaU<R^17hs@s@ku zC1BcV|L+<R7nsGx)$(hrjEjK=C5g9btWkrK9X~FViS~dV!g0I<9U;!l0tO@vZT}&A zaKT!oM&!f}mH-~EiF6>XAWD!|u^!=7GPY{#o^1gQGSU0rbjv}bv_~%dR{t5LWxE}X zZwmt=2lg{(>8xFmmyjIq5xZob?uVx^;tIn}{nFe`4j{*i!^P!5P1B0MoG`pyN*>cB zQR?R@g&JepF^sl`q<A{)uE9vSK@TKzkbA}HAm4)SY3A+!(0UIJ$o;n#D(Yt9hNuQX zi(|<rs6n7TvZ(kU9bWMl?mB-hAcxUdU#qovzRU_`Cbd!q{E1K|Gd<O8^T|F2WV4(% z)V{SS5!EQI;X?{YM5WHD^(h{TNHoc=fB7LHC+E{CdBj+QO&5Bx$PjS>J*rRb+Iy4b z?ew0Fk)=6Dvo_Rmqv1Q37|<SM?0Bc(qGS#{Q$<<Kx7xv6lJ;ow7f&HJAd;IY=`~zT z=)GEXWEtmZekp^Dw9)|LyZFSF;K|&naS?Dq>iQu(@hdde<jdI|GXRY>jS5t<3B4N> z08h0yq|EW(LTZOB#OFB-Xs~u~`)}(5QAmMj{II|QC3X1ZbG)QLo^osV%<r!qscT9| z;klFN>V1?nW}KsjZ$KT)ymc*_F4la+>tY6#mG9A{i&v=+&^icj7!x4r+-QI%qH=BM zb|lc%;F_uCJn$m<$RbOVg<zccuL#eyW(7&^mvSrXerxHn3^ZJeJ@me`9py3&x*c8r zKU~}1-^6#8B%Q}87idBB>F9i{UX_F~#ky{1Mv$9qV2FHiw$<d5YuK+`g`9)mALW4f zj?;ZNnfh?#z6{H&qN470T&$C4e!NrdV^fgyu6PHllrg=Qe866J{>GY@SVJyQvxMR4 z{g3jTF;6)+S8C#NtHXZPALzMQuK6n$=#dm;X!KMkpqkcawTf=YWJy#*=&Ov!LuiDl z8F6n@5HilIt$O5UK|4tMEPYWl3DQ!X*p&%Nh-d{W8MRI7KrIJN-StJ=S}6BDm>8Hw zVA4{6FmqwyG=>2MrdjF32r|%6D&85>PN79rOVa@#1dcyyLc>f9j5KYLeps79+(iBA zS$AwjVz4#`oC+S;j9R<dLAszkJ1qHGFoy0M9Zlc+9teIYU$0sczabb<ev<lOl+J%( zgqNgD_{Axw9j$aNklk^OAG%(L{6Y7$nsctRu~YnokG)y%Z%^NjZ9^54;{W@THHC@* zi6XqWhv<wytjQV_+SL<^rO6w7)G-)U`Mz;csD3r+J2w8UF%-Hi+l#8DsexvZSmgUP zCyiA>SzdpHI^Cl+L742S4<mmv1W+9{j0n2W;=r+x!e;HcXmQM>IMA|oYW#Yp0u3@{ z+9#VK%rZc|R2-|Jb=ZbVdk3pn%?SV&md7sz+9`1C0%WQgd-8z)j0H-24e}oIL3(bV ze%05HW>kxS4lZ<&KFc`-Qrs1H4n3D-10%HB$u+f~Py@CpF0bk(gFU-0m1uM}dhHO; zl)8X)k16l)!=@M*SfbHg*_@E-6py>jE&S4e4AerxRoQbxA7pKT=q?Ts3@P1EqPtj0 zcK*(aQy}(>`essL?dkz`*7?$OCgP(K7^89LjEEEbq^{|jfan-V*kFD4!F$wP!GeYY zt0qWkyqw^1(mC;cRiFX+ba@BStAvvIwi{mv{%2sHsvvTwOZg<!^oyZ&BT6T(iKeX$ zN^!w|Usd_RoG%eHi0u>0;l0KMiF{k`y`J|#O-qJQ)i{Gu*hc=C&wm;X3}3;ez+~%$ zbAp~uZ2VIoj(gLTo}>B+tZD3iNs2_w(8L0H+|aDI-QcnmGz~jqgTR=Khh%h9N2?|2 zr&(ZrmP0qi`2VMB#a~nU?g)cfT%EznhYVxZkW5d-B>N_D42bjOYIvzSVi$mA2yc@q zAAtmY@8`J}_40d^WyLaN{M|F3a;X5E*xz8zKtsXMsp4SkXJ~A)<I?oMbG6zVEiaj7 z)zP=foh@qwQz6A&Jwg8bIWTl;%ycs`gzslzV)Aj-6w{#t-ESpr`UQ>F1H2?QalT`r zr&mf~?S320&)mo0vk!V#y4cH@5Fq{Sc!pr|l~PAPDNSE&gnJJ{A9ffG;QjdoLL*-D z3KK#mvKVXs6uvRb7<Jgh2)wV>AYKEASo?E}2T_VU)2b~qa+EGSeJ(^?DEz}S&<VLZ zf5VvxRN<U%fs2xmDtvYgogOZy1qR!}FKb<SLO^uC$e=WAqn0A(tkPV?IUAJJZ^Stp zir<5f;H7BUSEYi&p)bz=yitZu+5{@3%y2%flR|}vS*BM7NzgRGlQ<elpyMSeZ<LlE z&V7TLCeXc5{lWv%72)qxFWT{;EcfDDm7YEXLZiILqQ*=hDW2b-3`Hd2vVx50+r_k$ zB==Qes~Z_EM$<r`D~1OUZSyU7rR|_bX)m&ToupCIwZ%OW2yTuK09DlFZr0l{0IGOb zJ`)dqC<_i0c@=e-go34%>8|SW{|(hT-`=)p#n^$q*svFvAdh(dl@2Jr#j_^pXED+O zVMKeo@ztFn0KBS2m(FefJ6Bs}m#7>7=4xX;H~IfmgFfw`Tj3eP3L%h=i|QRo6av+l z-?d9mg`{?IW-X$r9m*l!&!mR*w1Mv^B-R>^p@y#2FWu~k`%r>RhPtJGIs*+z1pbYS z>LV~A5jYkRUsD7$cwKq$K_~}GS@!(Kq!6_B5n$3le^7`GVYvb(5~|W7w%y1cy1%&p ztb@uB+jCq3_cp@Ev-26XFJ7N@W1Bl;I%=lYvtZl_HB*~y;1r8>I}avxKm2PEHuVKw zpZs1Kt!L6}O+eb6RGrlMK{K`Lx2bynH&ZJu?&gv81141-dC1GSagQQ`eXh~p*iDEb zBDzF-JqJuU=NZYpFymcz6O8sGgHqm^8U>2lZt6%JO5vkrWhl?(=+oMgfl$cj*TmUd z2!&Eg9JK@?7l7Nrd*q7&yu9%o*+D}GSxe=JyJ|J+Ln82e&o_(Kv5>5R#;jB@!|!%q zc%vuhgNPpekn=!Cp^W7LoDIvt=W9cBg-;*?1}lE#Q|f_KcUbCkGL`52;|N+IMej3+ zv@^X~c_aQKFT=2KVt4j8liJ7xG_6GbgZm@)CS`dzXHn5VD(1W8DIFCXpVd(UyUlM2 zmneaqeh-VkC8TaBO`mB*4b&R1{?4qqzM{t7D^8Srnu`t%)UIaw<^ES-H@4^^=KYt) zcSM%nARKEob2JY?2vruho_3~nCu$@zQlTlc|0@T;iL$RXLtq2yiw~KH9x|Y&o+d<& zgh~KlDehIa3VqTHRn+SyL+5}u#?^~FiX4owriLxhIUD#;_6f@RPx;mkyR19~QYj_d zV~gj{fXd;DoRDtxzXP>3_f4BRq3=8#Y_+^Tw4{!0?$o(&IE=`jI+s969j?w2LX#k& zgWP=kr94z8troPn-UFDFqdj)eO&kK2<fPl@thgY;ZhA|Q?GH-kz{Z%cf{P;TO0UT6 za6EfJJyfmJ)b+nvS_!At?)#kJme~f0WYZAvw7%8sVDO-I;vrbnSM%cH0afs$ULSKZ zDQzgxEq!}a!U;KvjYN3{sHAT_`?TLOUIEPt2=JYIg8}@c6Oo4F50Dx&e^T77mI6vy z=wCPAut0KPq4Jdo@vU6QS(eCkvKN^XBJ@Li$nPH_)t~|FUCI_?7+6`M2EADE+xc(6 zcVm{^8-7#Wt^3&Xp6T(wvA><0|Ksa2pYr`XqZS2x+>GXazB08QWL=Qz6Wgx<=1w#E z`bN-Nl=K^zx&0=&$8rYK3^N_ZOx1Xa_?P_3Y#6iJ<Zg7Q=Q%i(xl!WI8;B{-7IM*i zNoJR!8ym$$mbB-RnX%ZcS!p$lSzbwLwlgsz@SD+3pZbf<v|E*?gKER((NX=Y&Q3{I zSMAVd4o8)@?>jp?RXsV5hzD0!R}U$FbqIIb2&N!%AEX5QJ6Lmn>piiXlJYaiE??;1 z?OByCT`VVRgvKcw|3WQ-jJx+72~4pcE3%!ns|~EaXzw7z9gK@UqUQ|AKzpm*u0gOf zx@H?<<Ci*0%@mY@#*}J(VKOkRDGv6P%wt`$xe*uzgPm`d6Z&;s-;RZRb~-7%-ghk< z3(>5eN)&N+eK!_D!sWh{H6UsA?Yp2XX^qSgvswFnWpI~nQul(w@^?YlY^C8P-bqBf zjwyD8#UzrLh2i(kl5LVSaTENH{6K>pnk)7qE3M{@XhQ*_W)jw^DLpilgXbtb%sV^$ zbTZpgf~b)zE#P<ad7)nTf!6pcm0XubtahE;^DLyRUn<$WOOk2zjr1}Z1`^YU)+U2{ z&+WAD{qyhxr&Z3?Iq(}qNv4%5#3N_#Xowq~zqNgz2457Bd){7~o2f&&?3HBN@LOJm zRGzS8R~$wotgU(uOO#Tb_m)*^Z5w`U<!cz1kMXG7^-d0>%DT5KF8lzQD}MTujzmS; z$n#$+(K#K7*41N1m{~20+$0)P%JCwpzRSCvTjCr1;L|sIQX~GvxFa1w&cTzSz-mE? zEVlJx`x7UnymVY%ua5+GSLJqk=`|(;tCsq<+lR(HU^Q@d@Hu+SkbCXeT|abgCYM%c zYO|^`D;^8UDorvjTL}I}6@#);a}w(?)wPFtW|t9jQkvidm#*uq@FuHjS1HG~9!FZO zyWNU#<cd*+u5(Pz#XV^8K(2t{ECg(QHTR`mS#TCSRw0tONXw-91kZltRzWIW!?L!6 z2mp3V{>l+KUOxDn^)Gpt=UP7lUs)@FzjT%auhMFAG7mSk8#qOU()BBL+hakPkCSNC zq~dNTA?{nzRGLoxzq}YMZv#&-Hq%t+*KK9XeLTOMc!OJH9nzRLX*~nXYI(tbEUWhI zw)$9LRc}+<F{XY1&Q<v-#b{uFUm5seg+}qel>t#;wde&d9ytp^Uesb-m2=j<@TNFi zJ;Gr=Uvpn(GJwa`tbVIfF)@AJ+3`%Ugy+TIhHpQOmb%os6N#9PHZ<43vILRwfzogM z;_iiMB=}i^{A{W?HSfBT@mD%L-*p*epzS)27t%4lKK0P{u(U4857K4O)m6FsJx|Ww zL+4KS>%AXlK#LVq7tZ8caOi?LKK;bMbjK~te%&kQ&MPj3U?O4FOx&?!{G0+7`(ahZ z<xN*zNYbv#xJwi3F&E6H(&L!hb3q}h2mMi5Kl1~U+dq`2^ks49+Fx*PrcLOr>&wOn z7mkGS(|+fI6+6v!@So@rS6t)c_IA*@_8=&MRr9;FMwu(f9F1u<Eb5x&^d|+3oiZ-? z$d)V!E5e|Y%v8#f3s`3G*E?+NVxEEO>C&`k$k6<;h6Jod3gdQ>3i@|VuucurpW{^V z4m`uPGw<u8Vwt+J79;%^t?zh#Nig@8dtTDjWOl^f(+LB=lvRME{;1`y&4N?*r|=hd zaQ^)bJBYhtTs0w^w*dbS_6*XH)vbM7uuL+oSh9Z59%e+?s5)nBiDz|_>Hb>od5aq* z$0nhx;4tr(A8`E<Uv1^niTLlsHb#cOx(|J*N#dmQI_p{w!28w6Nq->51I4JB3Q>)k z65v`9MnWe<0`K(`fuB@V+j{@u@db~y*0$~UzB~e!ZVp;aEbRj?IJoCq$IkC@HsCQ0 zoC|sM+#rH^t-NTT(VzvvsF<_8h|%+xdOo<ProAOVVNnglDuZ7UG>Vo&q?=ZpBt%)J zgU2pdlS;!pUxvxkMxy`ujRRY|OIT4`&W>d}eT2iAZ}Xhv12tYdoaRVUNX9|ok=xsY z^pzFt%;Y5FV(|y&-4W1{wCfT1O;cKQaEP+n`ER(QhY+ck^W1xl*N%nYaOBeJ^G*NR z_=pviZ+u!?d|!cOMc?#6X(eIjAv05(8Er?9vLi+i)?<QCysI{w7@a!cby_HX=wgnh zFbW3mU0e6YOy&)E@13G}uSm<D+I|O9FKhl%_gWv80Jn))YAFlR*aIHMay<F%?vkuI znpZ|(*XF>oNbw#Q43kTDwW*B<_~*|j<+mRs_0)xsRGRNB({BU+O!e0b_)V4rZW*A- z5|unr%2tDXsfTfNePc!+W~-?=r1Sf!y7R$D@=?D$s+!Ryy?S^zv53nU)6~?wE)A7u zXs(9boK8JFO+%(#9Z_0%!11L+jbNwvsK2PhVqd~`wUnI=@3RlNi)oR<8Qadc8O?fl zN#!=(YJ&a4-ua8Y3JHl2ZOPvGl8&Z#_fLp@mfXT>_JyT`H}*}k@mhIjqtT>kPxn~A zbm+C^xa9XYq*?5Hjdxyl6#mY`d_4Ii$AMcwO}A77{SjZrhZK+Z-qZ8COJy_)8in=O zV6kMNjGgq1o#i_V%;xm<DHl@!JMgwV@6H%UwD~n<S%*}Y{XE)JUs4hkasBs3!+H{U zxZR_^s-~mZ5_m~f#FszKIH4oj%TCfms_V+KxGjFj<QJ`<!BLTiVrD|LyDYHnrQp7V zFPb}x%7r62^_!(*(daEPCyl?2@!k-K{`GOPYGkc53)>cCJ?nbnQhw&dro^kwyiODj zTg4oKk3Kx1J{gQMmz48*o2yGfH}I2;<!(h?&?b6$RM@tbDQ9atU274n-GX)WHPc$% zU`q+CUGFxs$02-|Ly0%l-Xra8VQJX5%IX~PJ%;FS%eqM>+>_n}v3O=H%lL2hMZU|a zZfcja1Ys%p)?GigDy&9%mwLgkI|Z~X;Jw>OXxGCUx_RZy(Hd=+W*XuTfCFe`GkC}3 zS#f~y^R`ka*i;|#uHw9(KYdz4fmJ!{C?fAt3LJ@>TajY3C!8BxFFTav_o^89RD{#? z_8-Hm8+_c7MiH(jQgmGE=4e`a%SLy|x@>?$o}VHfK78nM+Uv6tLE&q0O5v8xAaw<6 zF{2I~!g|EUSgcp^Gnx4^X#}T2*T1LXg(_k@d{$7ML--qp!>OE8-e0%EcC5_6B%`9~ zg{FmYbs43a*}>It|1fsO;(0FnhEaQul-pXWEmc~IR(;e%;2L;#&TmZ5%%~l3(Ief8 zS(&>Y;G!D*I&rzKR|)^Xs#jjsW!NuGRz-HSDQ`a`=LrsD@M6z9*0vO|+a>XE(>T}E z+vScRkJ6nAB2xygGwj1;yE@wFOA6Cx`<E8`MW*c%JT8g}x?4I79OZtRlX8W8>$I}$ z_iq`<AO+g*EV8_mV|mG$9&GZE6DCXs#iA8x`H;eVEw(i%oe1(UBlMWGuSwm_Q_53r ziT4XQQC)?GUXEu5iuO~6as4?uV0CL0Y9)0sukSZ?s^U3f{nDeBb(Hwf&QqxO(stBz zyzc$CRm|muU9a6ZN3muy7xVJ)wxSr?m*jsim+$V5AKg1_7bbTxuY6upR=fG-S$$A% zBOh&R!Bf@V%a*vz<iz(|vWwdFL2tEcb%=JRbn1gjoGuQpW3=^qF9-dbZEl^+5*Qoz zUS6D<1cn9{KTBM&8KzopV;SJ_ML||nLY7)!e{vxNfXKF-AQS-lZ?{DK61gvL4*n;~ zM!3hUN};@JlaZLs?Vlk8Yg$u-z8Q-kYB9~ltH2*FtAY5XfA!@Qd~&t!7T%A&yXv{I zsqdhuwHUFz^9_nxG^CjY@1HRPzhcrmnhGYH{5U+TFZ(^s=UMkH19Q1kx-lW5*JO&R zSi+Pn`rJRa*$0pUZ4+VJ66%e?4aCz%NkEZ)tfDq_PRVk&(xep2Rc;(>Bu!<>9!p^K zjkd3xS6bzh%Ox~tKBZb+2b;j#9>H>6gW2irL8J>7NhZ~Uw6AqA;Z!X8oI|IiZO?eH zM@p7jz$ee^hhXhSzO}D^$GHkB@f!3eUpj+y`qoI{zfL~SKtog-6k^sCQ)5F7U@LDz zCiAE1B|xaM&s?{URYB^6d(pjJReb78O`?*Qe;xY*>&=BPHH=-Fm|<=i1%D0U2|t%K z01z6)*+pV6JqDnr_jM%ocpG46YR8AVbsH4=?RD<RQ=*b`qaPcmG&#G1Figqm_xkQD z@e%cz_>bk;?zjKN@>h7|)Y}O6GbR*bW@=Hpdw9Ilk5E$L(Z(;(Uz8Oh)!G;Cn7C9f zr^c&@+{>0IDltrK<<n~X%JIMxJXF1~I>Fsc?1}-8v5eP{@mwC@z8Wn*jeBd}L*BrC z%gKU!FA>)(FFDDmLLeuRPIdy^K7X?C<RAK^l2VO+pVpJaFW|*bg&AIo>pSM`0<=0i zF<MbQ1wp1X^>%5L>YBdn@NDxudJQTp5&bdQR{}W`u5P80qN;mNb5QaGVaJ0hY!Ij_ z^o~0ouY_k*LSd=gyEL!$v%ahYyy4@a!!C$LZx5Ot-@*8>4MJY3lMkn^?|(q=aDG3w z=A44W-_*3po4ml7U0LwUqw8<T_JUaVk?J;$r4F;FH(k39S2ZcEwOX2aiD%p&-~eOd zbZS_R<~7$O9QOrXji=LI7`?unS2kX#xE|Zy;^_ukM3y=@UgClqT}>+vN)+zY%~(Lo z7b+h6R00aQ8(??FXnzwAuu&(K>GhucA5~WsR#nr5B}73=KnY2u1O(|$m6Ve14haeA zMp~tjPEkQRrMnvx4&A9VNY}sj;CJ!g%`<yu#XBp8!+G~<S%zi_b5t`3XKLT1lsV>y zxpG;y?!rqgR}_yJphiVW=w_2ID$v2A1Qn6d?$`I&yQZZ?vXw>Zz6VUDpmwS>-%SfX zW5;vA!)5a%P6>}^rUvDvasO69&lJ?Q{<@kD-#_6;kC4G;Q+ueJP6Z263w>4>LYN{0 zl`Bb=BN@Ym7prWL1in6-3$M(-kl0Y%$E*280Z@fw9A!Z_9h0O(q8dF(IS|U=Lyrp5 zMEmw?wdn^QHQ~m~!skuFaJS<;b?L_$dKsbp&6v@&!p{Mpdi49xVj5Z2P1LRclJ$h` z;$yFOOAkjX%lA-oGAOH*7vIi4nn`GCfSaA5Zn-p;<zvZ$k%aPtIDI#as5>g^o{>aZ z{l(uYt6mYG*WWFaTLR7Q>}yR+y7kSj1L@+<j2tZJET6=`m{qzfBa>5)ywr|)P|ye6 zop9Mgt5}W8mppHFcFrERx6&~ZLot&=x?Lwj4;LZjMPwZ_nQ7=c9y7PUddW4Y=Hp+h z%q(3?^9&LrR<u`eCwx*2Dq<u4nZH7G96=G&J?NIJ#ncUh7JOf?vy3YVfkt`L?t;Nd z-E0R?P;K%mo;|hN^ZhH4SC4`pdv3tE12r2r>+TpUYGbGcefqH>KZ3~yH9zTTMklKN zsJ$epuYHSCx@C$A_cf&ob{Ti*?XzDH^aGXJM*2`+V^ler;a?~xLWXA<pCRhQDxnVd zb>iNPugf++=ynrAQ|=TNkoXL)I!`Ig$`!b~s!pHYdz31?C=89YvDX{iyP+oaR~zA# zTHgq6Ju@AX-in~Z$@hf!M%G08D7=;_sBP7Fg$`Yc5)gTUj^c2K%VLwCC5)_!_8DB; z-7B)VzB^5-(CYfbkyOI2xpGVkH9N{LfB4;ud^Vu2CRca=xwz!4ln-i?Ys@3vrYACV zNP96)>u`2k6P~A_;@b;e`Dq)l$`4oX5dGm}sZ(9W*QZpAvH4T#sVzj*=~$DcH_2oF z_4uTs_FP%Wx9L*1-nUv$a&sZ*rZXlY@D>VgK5<C{&drBeY1JV?(bCSWF=+h*_IGhs zRYk7^2yBzRN4~iTWVBccWHjxs`%#h)L@k81(eLp5DW`hQf&Iv6$oML>T`eCQeWdk# zNw0r?ITz~#D_vpyRoCQ=v7Rqfj~@~Ca^HykJ>2oj&gbj-g_6<JH55<f#Q28X-O>-M z`6KJ)qUyFY{HqjSk<4CkWoZ|8{=B#(&Y-G(N>Q#TvhDUFudD1wB~rR4*}}-u*ZV9l zdx8jXRvt!Wu2bA_&3#u}u2~pgfvu80;C<ub6Nf<|fl7ZWyFgyr*1{9rhr7*xD^G$Z zJ)Sd=-JySxOrqAt^jXF6?@#j!tn^`vT={Va#0?bs2dR~HVJK~!)C!r3ziX9ske_XC z)L`h=et6r{CQi8h&}FwG%PE$<+68r7bEbni_3~(eA&uxtxh;=y<Elmc8Ontp)>A9_ zn!hr>a#dJQKa$4VuLu)uY)&b=)pgTRu8gmD+z-jrS-4U!nGO%dm-kNLYTx%}HaMQ$ z*j%`>@!UhZ!;L(<JzUTu**KGP+j!E;9sd#1t=xw@b%_?ZkB}sCA1YLqUA+=VmQ#H} zDX$V<@DVjR|9#_Rh75zf1C=|EFG}hMb(!ELF&AXnBrExzp@1FK?(Jl*w9Gs6=nj%= z-KQ_a?WqKOM}+tX>>QxMY1j7V@|qa7Eiy{!W^Et5zW;?<Z!_3fN0yWTZ{*QKj|Y#? zYEE=l*C62|%(J?!Ljk1osNbyBdo{(V37hddJq@>RgfaWm?buHZr;_U2mY;i(Ka;0t z3_rYGTm6||0vga0X_v4_5Zb@PAN-4TX9*To_-OPLvR=SfM=iEu1)j-|KAIkYO>iRD zh)jh|5a^Hn!whX}_l^{t?7LPdY0s?U2rGPABYJ@Y6izKH{8PC0G`EQkeu&HKt;rC^ zOn@V&Z&!Xo$5V})Dw0_Lpc}Z~n^blN&onNDds~9R{MqYKU`$G`jPv4}*zP<kM)Fqk zwML#8=TTYUB3mDU4LpcYUhMgYX-XAK;R0-Zc<Psp-k|{PIn;OC6n7vQF32sGre003 zL#K7Tf7;+dV!vi=4D6Y*(*S!Aa4{|FF{cEfw2zIIqvt<Nd0hT3Tf%zMXVT8^!1z_J z3B5b`@DV;?o49)??XWCTu29*Ip#Z#Q^d(E~U!P!M4*X{&1n~OK$cB9hVDjUZ<y$aF zjm4W;#{jLqg$8#B1~ndEMT%b~vAA83te+d-2V-FgdD+pq#IS_;u?DhrLSpzKgC2cs zDEyFmeb|x#I*t~K!%B@RDtOu0kFRH{u%e=?=MA5Me9`s>HGt*D5VHy|41DUiN(H3R zna7u$qNeCtqf;+dcPH$|588a~U|9M__;%+%P%B<w%mPrKq&RWSt%-%~uyZiF`@e<5 z<#2Z*3z~94)*7Wr1L(f@e!>pIWy4)*nGLqecBg(OKJ$)iBRVPXY)ZMmBpeYA<r}83 zrE}coN~rKE7sqc*|6E)-6J7(+ANCqsm>`<vd6>?Uv*G%>@h#R9F-l~iJG8uzOE<kx zbQybsy9kl*-tLN8$&dG-!u9RgoFKrBW<h;eWH2-7Y`7O7f|}e=X844v8-7aAgr3>9 zbjSDhUv1^>DzKqe1NyKqQgH>Etj+#v)~A}$3kf9Jb<GI^&;Kk>(S3k*>`d*@O1`Ye z4ffIbY?()_6$6{1a`?rQiB|9S^K{e0kvtuApyk-+PWfHf2HV%-mI%Dhut1l;bG!pe zA6$?F9{wT60|rj45<&i&KoT1l>Nat%9eK026c6;C|8g<|jwl#^*82jc>TQH+@55W4 zF24<-2ELt6ow!KDMm6r0Sfpm%Pk}NebrT9)U|m+~SxJ}y@J;)wr?>=2k*YZ@`R6bb z@mlNt@Wa%`QiB7JRu~slx4I1$;E##^94<h+Lhj9Sl~OpJ?d9oWC{P+Wc@xzZK765| zTczY4G*t>7Jih7KwRtqp6JYDgEIx<8v6mj<nQ{;8ki${$gMtZux+A#TIRGZ@)A(v- zAlo<CBWQ8p2;h0OWAz&7RKfo$#|)dHf8OYnx8Dl9k>hRFSPgl+4;`s${tzi4j6_7% z#mj#P6WJF|8Nw0u)cZsfF=qvi;yW*M@jqt?9=t82h1F#9<mNO0D6;0mo!-M|8$7|6 zwkj*)f_#*_X^=wq4L&jY-vaMB34GXKD{Ndi5$b3_BE*9vzz2tWev1B2b)|<1s--$L zILhdUaT@#Lz{<n{b-30iu=w*a7GKn>!sjHCdH;pW4C)dZUBuR}H5ULxeeaW2k{Ahq z-C7emBAFLxO70KWXn6=EZ3$X6@6%EW_;w_9`~e4LRTmjo?oSVc;bt@LAr4|73ujxs z&<+Y<v2pWnXiyP`aLcY&$f-Gjf<8meN)S7R7DAQt+1oi=ApkUc8m&?YjKG@R%aQBo zzC3)3u$+O^DscS~GA#o@2~O`<f%ufHtfRC<2N6Z!!p)%$)V`Yw6R>&Fim!g=K>uGv zZ@T?Dgm#F@vdZQZO%Nfue}GaENvcIxmYt+W-~R@L6@$Cye$SJSsKAL=%M8{IloPj+ zfa?uHz3PpU0Q>ak4XZRn=n5-$GTxQOElEKgZ(|-chb2q_u0Ke9y_-)!J8ArqO$G-Y zrMGgEG(6CMK0!tZ3f@R|&?;|r1WK}xRsoB+5pl0A6uT;nQ6`{`vg^i<H^QZljmMeW z&21W!@Kw71=TzPKH8G5Hv;t$V7SLmV5~jUz2yDlM0!W=mz?&PCEcVtq8ZfxXZodh~ zo_-o#wg5ac_z^=G>io%bsN{4T796on@J4#Ol6_AQqFJJ%nfx54l~6g3f0G~x@1U=$ zS7d}AD(r93X08T6R+{nnij$*<hAk$}Llw4W^qUhX!)ZUaD4<regDNJ+Yy}45)7s;H zaMk|1_kAid^G=%|zB<=e@q4hi9VWAHLI4oCSdBQ)Ul0Etikm&|gJFoOctb2(!_fjs zvoF|EgM_pN;X}VUZXpNu+UieO!h7dD>jv}yn0+?;A6M=qzy=wqImv?F7v)fG!cjei zNoenjKUiOv5D1&{a%(K+ARrLVAIhWw1%#S3I9i8r0S!HKaOQ6)7zR$Ir9j+g*hi9* z>d+%4H>O*C=mrgIuk=SLmoo^&iB%y>_Y{zdS3mml`gDM(TVy#!KStpNG-bu6qG8N2 zxN`az5xwFp_kcsRy`<fzV$Wdt3N@{^|5@<y!JDG`K`5YnZ(Dh)1s;5gf(57Rv~fy6 zQNozoc!7}xTy@n!LaZ>uSuJw0Z=^oC4yTh@MhB-xQVpm`0nzd%)`d#2BqoxhHgkt6 zVrD3_6$HP07-B2{__`cfmSBqjWu%3A5ss(<01(+9q<JW~KuD<?g)x~ZoV3<^Ca)tS zGVfHipbtyUnqk0EF^20E??@B_Z<>2{%LZYm4O|y&Nh-$ndj&LmD!y|hje}N<s1l!z zuYGbdtyFl(gH*^?m<3vNG2yq;e<oBK|Gm})bvTVB%=H_nuy;PQeMxzb=z%pAY^tTu zZHe3#8Eaqmq#us5Ze^ZkK1^vC#)vX&@Bd6FaZfDzXTrzJKV5ubGEkvQT+-rfmWQeW zJ>~D6HaADO?v#wm$K8SYq5s2(weg3b>`+7tEWkYl7h%A>ehC+YV4v;m+`MfRYQmBr zeA{tHpVjX#1bj_U`1+t?>tC(@*3qL5E=5Rv8(NP*1srDF;(7&2YAriWAZXFqn|EEc zz*N?Su7LBOUDSeP?<P0XFaV!hpdSm^DUik<<oG@Wo=o4|D$Psbjk?3zjINz~Wcvw} zyBb-oN=TrX&TH<9dzRXCaIrezIh9cb#@8^~m|~%4!abt1!DU+kn#?}(jXOaGH;Y>D zvLMIkaG+5<L@N$V#t<E*I(lE%vmOVtRQ>}OWWR8yDYzOxr_?A|Nde2o<assqKuL{V z=u$T#23hiuyIlJrXvs}k122FB%4<S=(ZEuPI-zjrHsODYseIc|kR9qF{%-fB2jf@e z1XD!{@eY1M#a&GB4q4)$CM?%yb_p-93i@>8Jr3R6q$B3K0S*W!?L_=4V1X4zb}`&b z{&>#4Da8lfiG*UzSpgXJ-QcD>XqW1)CISOVK0BzIhiN_kGHgyMmua1m27=1MuVpCd zzs#3eV*D@f*sHdkz|BV?b7Nf%$acftXq}k)3OB5^GQ+%0N7x#q)f1A`iiZp6OuxAk z%j@JIpBOUM(4B$nwL_`0i~x=C_We8-4iL1@eyQnue*FT8;r#J=zxZErd(`hG|4VLt zapr~?ppk7nlnB1C9WV_q+#k@oyNim~P}x4An+0taypwX?49tP<YoD(ED>;<<FJx`N z$)hB#=F-E;=hCO2Bam(bYmXKx)Fl+aQ8CA1nUMLUL!!toQ>Q|&lfAqvuCe?(bXvn^ z>8-nNz>1k4>rMYss;EkjdYuPU8J}n7$Or=kNa`@9_B$`oQ`c&1Pp@yi?4``ceZWrZ z(t3|hz8j*TuuY%fuHVLhGf3ouFG2klC9vc^X>udqJ28;6<0nSez<jCP87(@1omRhY zUQ0T_E{k7czxLi;`Si0_gxAV(eZ?Ou=Pg!3k7;iwf1rst<wnYv_mSIN&iZv~iF|?b z7j16anO|{Hr|Tjx<#o87{1wu+;VKDU_E5HiZVt0=hSQ-=Tj4D8XlRxA==MXeiwF6S zral%>h-%O7DsG&1c@-Ao?C<YmsJ-SuWAx6~TzuWyn~BDVqxJh0TYvX=?{gX!3TxY) zLg}5K&RB}>-&HbB<6o3DSrFE6c%S1pX{HGIoJ)w68#G*Xrj4SjbrcxctX}TR`<p*I z5N3!^wlm2<bHwIwg?@f=X&@tj<ato+>qc3W)j^+l?{2l*<WJJ%qeW3OK1FQIb=)}@ z!a9w=qSd3~c&{C)f{f*lXj-%;V;p)dQsD5tfn=|D;HeneU4K=vZP)6X=g%V!dNLLe zWcgndM9rU!od^)M?xIkwj<yt#xAk;Vz8jS8jBhR_SazlkNgvk3v2GwGrSwG;Ti0)k zeP&YinsPnv*^b758e1@B8D9UC#@(*%UzDqAE&hdR9yEg@=45|Qd0ZJv((uk)i*v-r zyfP1Uh@azXqT@SpjA2@5tD8LLsCoKG9pj!qLafKZo#CN7gQ^C`YiXBS;LsrVpBJv? zN^J}>8G8wAHo(SY?YEl`e&iZ{YKw5`9!s?Eq%0#bMO__!_JC1U15+(gdx9zeL(I}Z z>zn9&=gfPRSh0a9v%N0Z6?0EFQ4I69kT?Si<vX7U7=ow0<2g&QN*WA5eO2(%Z+QXy zU^bC@QAN@5d$^w^B`*i}RSjvzRDy~!N`~Vg?dDL}*fV}r_1nKcWc5?~-8OXo+#X}^ zpE^<8EOuL$&o&yB<aWMazDcev^up1<xfv3rL!=KFqrA8`>SsLpk9))J#lE|^6hjBD z<XNTK@s#BnhJM{C+xWf@l#7#1aiY0dbYR@cXv%*+LJfoXl4NWgXF{>KU5tk?#=RW# z;q83?k-lFB@|)@gRJHW($nI`E80&LwWfP=kdM?SU=LaG0?u#`E&GKS51mlZt{O!q7 zuvP0Kkui8tk}~%riWBjUb}B#HQP%IV0>+6%g$t$MZ864q)zsTzHa|<eM0;~<(~Q(! zAZ&s&L-!pjez-op`M#-qX#@p;jc3{O3freqyqSPL@KjdsRX_6Mymy0|$Mtg)%<G95 zO6denTb+{{aEvvl&Ib&rkE_Qcf1OLONm7K*xj9Z(idpoG5uuLpb>yt12R;~egrlJ; z;{z;cFNcv$O0?L`jB*8bzU+YVzQD%{n10-*iF84jVz~xJSsQivRst`54P8dho9{kW z#?`z-vmySZ{KpAoqo{YoPc2?!Tum&cH~ypL)kv&2yE8^Q>ae5MD9gw#I8%<}%KL&J z4|!tNA3Vn<_E&wDgTcP?FzE?G1GDcfmkR?3oU!bfvpj1#NJn<*7`GT$Cz*H@qj9H5 zk@e>L4BO&vXpE6dS$02%Yt!*p^|v+x`T&<E3A%0&WT}&vm7hXCK+xg~BC=v(Uy8i< zV*(JItlvZ)^9&U1zXI3{Vqqhxa<M^kq>1%j`2-BN^8<o+Mz_X<KB(M(_M3ItxrfSc z(88ta>?@+Xy&XcEQ?1(sU}Iaq^?eAz$qViMLeDi<0wQ9O!jdE4hk9NKfjC`CgaXJZ zkDBVENV5C6OaXr1v*hAHkucV6&p>br9V*doI2=SMnSngTl-EntBf&{iN;?+I)-uFx z;34;g!z`?Wzv4&15UU5(QcVM0F^F#R@k6CUErYj4$71wq%#Tghbu{35Qg^SSP-AkC zsGdOlV_J+B(4W>e)0Sstim8XeFX4I^C5l>XcJFh}nAT_~Q9Uk38hM>4C{Q7GgiTd1 zp{xpd80hylA+HE8Y@=4(wHDtgiKG@6kC{Zq^{1L5R_hFBwE^YdCA_wiCmvK&Ja!~* z_FdYr?g>YvvT3KWbV#|Ttc*;}{^vXl!!-OvG*_+h<ap!(bQ8Ax2-y3gi|4Tp2rlYC zmVm<bfm4|bC~{r+`;&~&Ld*2-K8P(`B9f%ubZ$*X<kKt3+MyU88}1-jKKE9rsNXEE zxWmjeKHI(0vh&r}<Tx51O4vi)KVM&`<XiJVF7_QBOGv>2D`(fG<QS8%TH=})9((IW z!ismSpMB>=aFPVF_><A0aYl<k<wPO7YsH)~=}rsbyB`h;nxHZ|MsrJ==olFsixC}; z4@toA_`dD$`kH4&i>Y^81#g5LN>;<S@rgm+<v)C%-aMobJ1mHVgKVcriPH)#nlrZf zXNFNR`b&g5Iu2i&jj_(6{;^o+xYHUYItQ-it>5-3SfwQzPd%u#^J8ejLFj}yBeshQ z6rnketCjRP5fpo}G0(6O%HK9vWiuHTI=y-!j7_t@FEmq>z8-Q#%;}Dj+*^QtE$k?K zN9hC=?aUo|X`fd{+1tI5z+01(Re|O$BhZgC{GJUn>HL#7$^8y5;hFkvY_)OP@;$`` z`%4XC9`nglah5Luhoukg2LDKK)<|iY2@9d~7!xPv6G?p72qK(|FgZFE=sh3!COK*= zoLUxDl_ncmSsiyu@}|j5iMou%_d-{5XPf~2$?k7g{Jtxz_s^Yl&b|kpq{-rU{%L(E zb8yzte%`0x*&AIKr<=Qv{<JZ!%X*<RFd&Gy|Cjd`xw9Kr+d#we0fp6W%R7Fw4iAxl z#S<@ESv?E^Veb#kO@IH82_&HP4%}iI(l@ORQ2BOazvrHRX4Oc=yafqI1Nnm&nUALr zA7PP5)N%QLT$W>sWojt)N3$@zd>7Xse(&!7_u*VezE9z*g=)m<3>@Z)Hzh(#k#bnq zb-m7SeS$x(pF7$0=HbDg@GN0R>hPbn4PY<3=<A@J<GC^a@#XQ(Cv=`L5uS@FIbBYq z4)oh*bAcb6UpCs&HW%xi2gz48$lW8&4tK2>&P8_2K%->9BC8hFV#r4detS65bAi%4 z)BlKxnqyFH^I)-Qch%1dv%uCdy<e?o=kB8Ky7K;>ck$vwZ-mQS^+cH~nUnSs4jGO% zVcbYzci4yX-;2JvUt4y2P_+-GN7Ry*SKkyb;_2yaCh53$hRJw%o=i-;H-&xB)(g`y zwEKD<%1HgRaxt7aK3pze?Li~o!C&Q(xjS#M^p~-Cs?RCZTiZy5TA5>aj|}T`;?to2 zkbKmj9J>lS2}C=+)uB_iRPw09%=qf>(2f=tpVl^yX61LosTsOCZ<|Z;R4LL;feXip zBK_Gk8KO&W_nPA?tu*Z;(#N&^Zu_W@Zn`sO;<6gK3W#H1tBPlwM!c~he$1mu957Ul zA!P7n&e(*&t+EPX`en|_gkVCYzA`BD(Kw?>#(K^HNm$qy)PP?{HcaztlF|xeNlxAB zU<!3|Vt5sv3LaB`LMS2e>Rof+FPcDm2kKil>8<{1;&%>3#-yiv>R9r^58svQq!^Hr zNugte4&NQ&;ful}AW!>Vmzw$Lv1o?qr=AmDzNk!O0%?kq`ZO?i(3C?C)*~t5+_H6` zrlBW2i{GY#Wr<BXvp=wdr&`@PzhO&A*uU~=mO3k}fMnniusH~y1OpN3vvG7_s(!^L zEd-vLcl*Tm08BBUEqz>ClkCS(sN~+-vH~tiK);tg2fJj>^~4MbOr8CzJ_gFatY7V5 z0_Ee}A%yl0UtBO0vdb-Pb-=RGq|Y{BSvJX%=K$<@gk_}~Id~THmN^t)7u;QvODiGq zzVJo>b>SA%GOURw!bV>eEIZMGzFh`SDU>_$v;z?(myu=wf}xolKT@);7a{rk28#1w zYIAbH_z86s>{GK(cpilrJf!ljGtB!YZ4V*y_hn7&L2l?0B(U?7z`jvfSd0h~#$$vv zIWTX~s}BPaWDRdJK(w3Y6$((pCz!d>rmiO-1t0m>5A`MWm(irqi51eyd9)2h;xULA z%pcBR0sMyXf0S@hgOyHa<$2Zyz!W!0D#VIF7v%rbRZ~606FhjfsZ^}=8)Uu;62`58 ze7!E<TkdOdgsc|)SakL??>d4P-c*!-LWe-X1g4CK&8mk-M!@=SiI4q;lqMk)G|T8Y z0o>FH8t~VfxZwR67C-XxI_>~d;wFCO1zp?!<$+_Kgf*BoBg5f>pxuJb+M%Eg1;B0S z%w9x(NyiHX40h;NE8ja&7`2Z)lQE9CfdDl-#$-p*5O~Nl(``a6AtC+cMnK;gULc6P z4c_=fN0BJ_@!CZ?>v}u`?0~{*n>NA#U}3Q4>Wqj42+!Mxehh#d2!i69W8hN^9Ek?r z)s}fwc(AKt=S8G>isWGEP;;5*%K(P+^Mo2k){^j9JbTbjaW^{rdH?K!q=C*j@&z~o zuA?KvY347z67Ljk6Wk*Xk{L{d@IE$&h*exIz=1>`R~JAALbm+}Z*_1Nv~G;!v5#Zs zdo~Jmaf5fBmrjOzk@^IrWPh};gVEzn2=w^^^_1G=$M6jBjLq81MfD{lRxFNrmL14Y zcim-N9~bEMpe72q_@1Q<GKNTrPI#SH1xzl>(>dcthofdje9`IGf(~903FEFMf)?@s zn%i25uLGj*AN(!`qMNh7=$O5S&5QRcpT`8plS7#M5)WSgl*>B53q-uNCmI1EJhkKG zR^<ysbW_VC6k+R{H-0Fo<EK8}hut|{^K4ss)I@I_9^cECD3K8E?>^>~q6G?ofmoW1 z4tUC>TfqW->;pN0ATu*2fCUd;{7j7_C3~ETOrXt@;s|_DFjl>)1<FcLoeTt%AaSUf za}<d&2l@{H+yPH`H3q)FT7eWgFfLxo0<io(L_@)=08e5Txczwt^i1lG*0wG^nt!RH z*T4eKr4+AD8aTd_{X5|$aOC*r?tTcsLZ$AmC6yv9;$?zL=)vMkSabSgr?e4e;Ac1C zS^w#XI6S-a)cdKWBxhG79=%A$Z;n1k))UF67zyDXhMr^J;P|NIVn<qM!~q7E*n2`b z4vDa(SdGlp(7OWCFpjcS;M3STxH@M=MDNGI6839?inyrZr4rVKHYV10lwfm=&7G3U zdF25R7r#;0@1p~`Rk8bcz?tBNCv%w~jI@dZ9e>4wXtO@?&(m53QU&={%mf=n;QbM` zLnH_zYB0SkHo65M-*Ntx%n#0J$}=|f8s~zD?!Y2)77*<8!&a2*RPrF!ehp1(giiqU zpJVSh;DZozOVUz=5U5-XnB^-Wzs%~DXqKG_G&3S=N{7M7KC)t7r^JMfes`)sj<BPK zMcq8Y&|-${Z<dYJw(L)Y{qyI~s@|ht_o0TDiqV{n=NaVyQ(OAEO~~#8WV0_m-&^nG zf>yl26(8A61t(op5;qB;AX0wFVi}AI_Ln2#)H4O>AuywV%+qP0s6az~0x_|m()I}` zQs(<t${%=55Z#3SWfG}>S3bOu!nH-x7X~k*<Bv=b(PMbg7Bkc6G5({Qz<KDm&&2Ul zLluBm>La`R`r;UneU%RkHr{=PN<<wpLDU-xXV7Dt>h)4dK^}>cseT2GhG?WBc}VMN zuPs#glnYO+iQ$-R&UsxJnkvE85=lyszGHEc@EmNC+h)8EwM%J*LDJeE??D069sdDo z?}K+&3h~wkf=OwGOOES|pUo1|?1M|aZRNnvOdw<)g`H@ckGlnK55-=bnHBo+^N`3+ zf!3L5csG^d%=9+2TM7xo2C-V$1RBN0-=uqB_a^CK@*-@4OJrk@d0r?nTp9PKe-eO6 zqS}IUhp@1vyc+?0Uh<)-_qkv-MU6GSL(%)DJW!eMpO&(4KyAT<om^Te#fEMwH1t!6 zU*thU!sWUgBM1v4kcXNix!XFpps=O6=_Ejg?P;ym=kNn`Miv%BXLxJ^A#3M%N*djO zWmHE;^^g&}_tF*YwM{eQ2!UJKt1A6#uGH*s2WyKxc_6F*6gCN$bEB6L)VM!wQ6yOU z9Pp%q^@-mA<oOFE4A<Nr2LBSRSKx}<@@*=}pZ+dG@xlloAtF5=x+}pwWPfx*{FVVY zK!P-#7IUk5V$kOQWRL!rY)0g!2LF=HR(f6Y6TEN!_yXS%c<3M{aR}gBi?M4+%zQ+n z?DNjKoDpiLpeU$%S9iH}MuQkMsO=Che8>q~JIK9!ln6Y}QD(FN?Jy6g)`o*?7E{7r z#izNvXg==|(RHT${Ax<(p8;i{Cx3XZ7mTK8(}_V{0N8#oQ0UPOV&w06d@|&}ED}bf zhHlZ10HB^Zd9Z|Q6%1Dp3~&BopaU>@rN2$JfY``7X3CrwyFOi7a=n1eM^%iwMS^xn z(0u~V$aeNK2IxKkEE$MfO#{0I&C{H1zyZ+7KP(4!Orvp4!WW#!B2>EAw-Ac~a26fE zbN#A;;|kT5d2E58t52b@?NrdWui>jI9)Vk|*Y6HsMeRU6CS?0FB#cw3I~o#CL0-4l zZM5^<eg-!m=gU1#ArL)Ley15gA^Axy9=I<KV>Wb>WQ*B<;qhfC3eFNZbN>W-oWho5 ze=5{=Y@G>B!w23T>7irH-woABdV1~4gM8yq{!F--NqP&v)r5;(+5SE^^zRV3zTvu* z!)=@>0QsUm8FW!wfw`|xsx$RSG=EJw8-Bw=3zwB&r+ayHt5RW0={EwJ7tzW=6D$(m z4d#b6kFtn|83>+V*ZE1SkRgAw9{9Rok+QX`0(w<IJGV<}goCnAbHAf^vC}?q91pe3 zh-@6Hjm^`FoVi9mz>v~5VUoI=EhVr~T5s3M@56Ok!A&dD5wzC#ay6`SKx9JJy*jA$ z&lg0v5T$B>sXt6TaLQ>wy$SE-NU<*1f&J3cQ4elc@3LmTvVn$Ksq`z7^OhgTmY-^c z$Y5Q6oMrNLW35%;*U0Jz!6cpcvIT$+-QmqiHml&Cy=8DFb%F!?-Efm44FzmAMbvb; z6@@|)k4}ZT$SkLbp`hB5n_Sdk0M-4tOd$S%=(_s_=df5p=r`;1)HqMOfc{J2=%--= zx18q9@{t2WvOaKN!3_;O>-V6GpS_}wSdd4E#$+=%Q(YFcqJP2u#>%77Z7u=!WZrg_ zvmO{DG<C@ZJbC9ew>k-??2{i4R6EMSjTF~&foUBH`l<p1u$^Dhey!*$bd0TzGdbw^ z{U?{Z+)to?Wk4PMg*5G=EB`C8oAkY1!tW1Us6cBn-$RD3%>Wy5!IUmO9&qRiRkqfM zV`LyxV|G&hx;cMq8m<N~1w;~F2fOX|9qbPETLy4zo9*xE2){mEnu%1-FNv@dRJ$Jr z-omHqmcvq@3$B4XOicoaA5UTJ%`vyMG?K0_9Nc#Vjj{AWm#>`djN?QDwTJ4dPUZ^m zII6BtNE)0L{~pc1B+u;b3p%)g0z~C_-tB{~SWWaFHMU%zgYc1FWywppP8$=`zI7%L z`8ktr*IE7)qo)GfRB%ZO22r7C^ARHNDRB5h=t$n^cW{HV>S0Sec=Z5Gw<GC5|L=no z5a=BwI--JTn;#B9&hvv+R7P$Ra8`iWaKTN8hTho;xnJ>G%W>QZLf;s}Y1{DemrL0u zy-cj|lO)aU!T3?BPgKYI>=xmF>or<$oYyh7cnOn5#`O@_Xy?rKxUQGYH|dHRWFYb7 zbJ1^EeAV=DjjcW3Ax6tB{~lL=W7;B2!U+1X!ksg%AV(ki?@1B-*@An3d5h-=pC9LB zinpoWdKZr$XN5-&@29AFzcEhstE3F@!OMdY@WBh$3ZYfeMsp8}OnI+nkN)_y#{N|p zGq>R%9*(oHdo23Mp&^EgAu9?l;|sKdJadDjJ=*0T(K*6+IEEztsB-zXqX(_LRR5(3 zJ;Wd4`Fi0u5SUxt+PE_m=%4MV>z2aMs+P-nPMM}d>MiPrDvwn(bvVhxhaHQGMnU7w zPiP&?cO10ZeqJM?F8T55d!2`O(dDji##7V&k)akMad*Zho~4$Os`jUR>geL!S@WJB z4IIkwK5G1Ns<bi{jH-)$)UI`pdyBJ_+<*v2*XC%r*UjHRAokJ_oqhdopxtG5Q4+_2 zdEuPdN_%PWBF8~Cb^B2d3dyhG%qXH7i7fi(O5xIm$}BU2L(oP~Q?}G65fiY8sWO|o z4+#giTPjUjGTxXXGDD93ntHo*jW~t4R)rqlGSznYO80GKU|`oF3#s~mCH&@K9Wq}` zunx0p@@T)Fp}C`l-zP+BD(_*5TV9j&hd0Ju@+a@yw{co8UyJygD>son!-}0e;j()- znTAL5E!atL;^Q0Mvk-5Wv_tIS6I7Rgwc(5m1HOas7YAqrJufRY=XFX@88HzaCHaQ! zJPj5&DHGhvg;=Ur8^+ljw6m5cRIc-S?6)Ak-j8D{*XS<>UTk=KXH3G>+ZAO@;^Jan zamztVrJ5><AN|kCdvLm(!yBcIsh6D9y(CGwoO7ha@o@a9Q{_j|jH!1;CFM}Zr|BNq zAyM(B{9Gm`mO{pjdRv3nK=VlIwwV2QqZ}4v>H<pYQ2}=TsK`p+h^eVaek$S+{@Y#C zjm=V>l6bxm0xwnB?h%LFBJMg@r%r8%^gqo$KQAMhZPfQhxq+W0VLebZK6#_@*xee7 z&xZACfh-$+*!kk%$NcWV)%G%e`r&W$1>&|>97z;Tq*j=rf~0-($9-``&lYb;D7C-t zV>B`+oj1?f%tlNQk<jrZ`eJ*lu?DsihqYH|XO^}Pw)$nh9`4vpWaZeMH&67^D~W5e zd088x{(j||L*Oq=uSZ0EMKAX!S&u{YIqrsEbhE*OU6zkBy>r~}hBiERTnPMTZ;MCQ zo#bVJ)kIgJRmA7*t(UIb>Kv~Z(iLxZ2+{mj@#XXLk{^GLvNBdfk!N<yDtsuog}dyn zSrg_I(lX-9r}w0X7lpaA-XTOdg^XCNG)^ZC$56s_;T(z3*rv3eqARSoRRfi|(@lB$ z=R2QX-73CyK5Oe|PR7A}cigM;?(?%fPx+lQklP#fQQHh#5&B+sJFmw#rCh%{55t|; z!>m_p<~tMWPWm;?etKM~uaA)*ObM8gnun1nohc<Fba>2XK6&TM6x@{v7vA{f|Hsjn zib`1S^gH;*cAEE;{-zy`mM$MD+lc;VbRuidrN(4i|Nnml`?JDFGTZz*MFJfKdOYre zy?*-lxA)9ixbMHHo~3tSy<sT-=n|><x2QZFxq#rzjpm7>2pzlnm1s2olibDgk0PGg zuPql*O^n)^AyzKyyh(C8)4-Hhz7#!e?+5&t&PPa!v>EZos!OOQm&IszUW&2W354Uv zw9P+>P4X9;8J)XnB0h={{Zfp|#%kvs8=Yln0&PZwGnb2K$V|nbOey-Md@Nmsesk{0 z1Zer>+|6Z$tnqMJX!)C+clJ!13u^FkZWqz<6tBN3(F&cD4{Fml_@ADHL0d1Nt)H<E zgbeU7T>bnAV>UDV24FGswmf@5Cm{-HPh~seB~<IAe{m{P5Q<kN`l;SzDLyl<jIJ{m z&)^Bq?`IX(d0@QYo6u6SEY7udm}Vj?5X5tlakh|oaEQqEuCF1=8?RKHTYBQzL!9^9 zn=Rf+`O7Kv3NKW1M`7_74h*49(h^*`HgpNBZ97alLCS)U)&86ZvGePUkc4ubrxg?U zEf?^OdaHPRnV%f{lx=eMIL>mP4$Hg0G24O4!f#gVg!Isi*$V@QO+80MKX=MOX1wqC z7b~MmM|@msQM_J)TDJJIb<vb^&HVu~J{vZ5W`o6NzZL{~v(7J~4G|-^PO~{!z10@Y z2nV!sM>~e|ZAFsMoU+AGIu#4CsE+W|E)2ds<dDoAx#be6+tFhqWiQy&{a_dC!K*v$ z1+=wcNh7U`7(3Q}$w@9pdzHu@!<|Ot+p*+oKJpD;w7Y9cJMQV1KTt{9d9!18Q@!f> zc=g5&Uru!|mtBk6Nl$I0*!oWm0{kNQoIEEuDQVaSO_!`;R_Be9CuByasiT{$8;vIR z1r0-=jlP_x8;4rer(m`{*V*-pD*ZYt^Z`3+&o63p=!%{gBTp40Z!nei8LM4P3`NYt zz7`e@hgfKYcUbo(DkGlfWjBs=mx&*_x<eu~TOunVSh2?QSeX7^y}X-5py7f5G**f2 zJ(Y&WBG8zVgvF_3?Kw0mZz!-YUz3DJ2ZYwr7DEZIyc9^drxFq|+gdZAaiXVCd<bOK zz>5cWXq1wvlJsmMgbYr{ShKEbU+P+JP1mJQlRjf|OcGi;aO%NVTljM#ZtvRVSbG|z z_QpmwenL`TB!I&i$1I7nB4z%Ep;CiW%#$GH;vSl_mYE+-VvnLaW=9w#p7{l|^X5rY z1pVj;Z}@$X%kx*~*|5{D=ZII%(@<UNKz@oNQ%VC{tYFth#HnR<AnNTA!!Y-LT58fT zR!$mw&y>Y)qhAgdFWiEtys5da42-VStO6oKFEAL7yzH^6Vta2$lLdvz+0D4oV-xIX zIIp!}9wcBBjM-eZ3}Jr?@1|2&zE|+m{4!clnN@EFXS{nQ(WJ;~u2w=~fr#3@8<T=a z)KM>`gkCog=VQcC8nb2$W6P~TuYwk=56C9Rjphd@wqIUIv3cm1Y1vx%y|~Nfv}kCs zbdL25e~lvj2t)1aIA|hnM_bYE*(PIVknt01pV!9Q){IYH3*GkN_&as_B9?;+RV2}N zWlU8j@h&oDXkV#K9gQqHQiSPJwcA+KivJBsCAZXRBdKVy8(&VQ({zizXi(kwxuN7N zulchK_r`0DzoYK494x3Jn#qfsjxvcv$dvhgTbJ!orhzvkBd3$oG=C1`-gum2iFQjS z@c}ZWHP8IXcoc2W4au6Ydy-aCrO$4B+0=MTUG(L*f%68AnQrqt&zg1-bgbLI9F*5< zYs+;oZAniT;>;#~JP6dYI@|C6{8F|Hug36nmNC$r(>FudNP&|fE$qrQGSB7B_?Kyx z*;Fo$q)1{nMJJqhMsY7s-Mi8Yge+wB<3+Jw(@alI+Z?=*Aj<o7xcu8Art0xqqfsf+ z)q|bYyJmhWTR7^uQqlaMnix_BUf*hWrTbX8r*<`U;aDtl-tg=vNqINR$|y-j*omU> zRYSk<Oq$a9c0>F53t0&kPmy%_j=6Y@lDF?qM)eKMe+AvMTM0p&tTtfyJ-A>S(9o=W zlOZass}?hIv{kRV&VzEF$!;b%_51g`mde%fS9y7@J+Jaodx?wmL!!y{y3cO49wJ`f zMYr(mYR1pkx3h_pX-K<YprYQ|Ssa~XkH)0FfTY7NuK4H&+K1q7VJCF6MgqJ^*$*$0 z7q}PX3>Z>`78-6vFxK_3xw!7MB%@V6sAN9zluiARk}EHwpRH+BInu->W6JyOk)ZtQ z)4;Cf(W}hE7k(CJ-zU+H(vvw^g`@43!cacPoqQvH_O~JBF2@(@@tN^rReV?4LHn2J zBPjf=YSHEj#L;9M1FEvkcWFN2Pl>C^ex?fb7%_cl$(azpSw{40r;C_{9bWg#=KjkT zcwI_^S9o#aOOc%OTaxYl`KpI6>#CaY(%1v#t@%kW7gFsESaZ&N(R=I$DvF3k7LBEH zOETGtEsa=n%qD*h&!<{K&ja>#_-qHtpyyNaPC`@rOibeC3(s<xH?p6Pj{I~B;V;g7 zIQnU^LS4DaJM;9DFIj==Z<Jx-z?()5ESC}7Iw#HFy^PXqFgS0xttU=zuW9Y=-MJdf zJsAC7eK}0cV=Cnx$}lXF$gub;Zq}AsgTn9LD0h$Id;7L^@3G;ld+EEYM!G6@mR)LD zrA=H`RUEH|Ox6%@i3n<RlY^!7%K51OO0ZA$Xc6vj{Y~?GqcTu9G3?R8-BM%Dw<I|A zu;2NU$*rBr42G-XBOwyyZ)Uxh-&<qs7!{8mDJ?coMC4GYV$HG{ew;Tq=s@r4J&t0t z6X~>9zYN#uI~M1*(}%{@K^lF>iEMU0(0F3+b>FcZw_Q3k9-x)0>pfeKM#)pVw=%PE zanXf@n3RyA*t<ktzOlY|%*j$Y;7@k?%g0q=E}Sd1Ax?KWpLOgg7x69io71Q03d~HR z4bO?6o+&)zSMy5_$u@uVZe<zOi(+wW=GIvYvbSVg)?ljULofN@p3ZUNHB>tYu4y91 z`^mZWaKtbCFm2XTE!ZHMiQ$N`+h#@0o5wpJ`f3{co};qS&oJq>4<Fw{ozkQ{VM^}% zTO^15_rh6=zi(bWUAbCsqS4OfB-$@bkQ=Qx=<9lb<x?A9ZOXgM^7(=yRoRHW{Zi0H z?`=QY!I2mp+k=8-1^Rm?CMw4*AH6XtX5-r~J@=*i){a9)Z&GYn#OvbPj!?cn)vMT` zKHYs*>*YZ(a#fS|N6%U1;<)nsozdPK$`8ed@5x`y5UIK|wvZ5)m!`1hVXFp~znyMB z`)J@;#+J9a-fCl^TQ|{CY${n@_{sI)eTSz0=*RMv5k~U$()|Oj1hqn!Jgq<BLVbOD zvVX0a+BE0q$GNA@Rh}Zu-ipQ9?yEJaU+pE4HTCJ;H0sNH6BUuvfYCm&Vib21ELx2t zzX=xY+c?`UtrWg1zEAStG^$?r%H8bAUJa%B>807<gB&KrYwkPuz7(pN6u)se>j|yb z{nR$`bRb{}GURgn#b~~j$^M^v;Rjpfvn{|jx;W3E-dr^SL|l&(Gc32^PVCVK`mR2` z7s53jf4qWVGfodjGFN~ZLsEgRcCf7<!YKB9;b)1~uNmauTrv=?$1+K|+wZI4AMqWZ z8z|9GD{SNA?z4MMHCv5sT&Sw=e{tt(`TGHV((@dPTZQO6rRB7*zff92eYRD1G)CC} zz&~)U*+bGmuw1upvxLoJ<OK@pR>7O~g>%Fh{>8DVRJy&ULDy433HtsA^-R>ySc}&? zaNhe(CTSSc(>k3(3u?IZ%4nYLlV*I8j@ZN{ejoB&*h?YG{p+N4SA>8BeaI-?tYMce zG#bbZbE+_=Pkj_a7jhJ+!G<|-w;QD)zbO{8>8-!L**c#$8v%ZZ*Lk|fz86~pbg%eK zAxxjfHBD^PRm3krzm2a$4Bb&44uw<1jMkf-YOqah&0Pkuqq7PNt=K)@>1e9+PID_f zkXx^_Rao&0?9j@pCzf+1NO#$=?^+N_z3F^Dkl;7r`7p=HHhHIMr`6(j;L+Osk~2CE z*8azd-mND%`4ju~!whSGH2Q37?3eb?V{)xeTc`&0j=avk`x$xVUS6H*AarYlEf2$| zw~0;ZHe9x(T~yv;VP4+DKiC$$d!vjk<o)u)+JwjG)^8ij7yJoXX);c9>t6Zq%zULT zt0$D%=Ey|6tj)Ify}!HSl}%iZ=8NDSc*Jgjg=9T5qbS&$&52qT^>unr5s@f(Y&5sF z;NVk&7#wtxt1L=`2Z7%Cuj1iBweif|H{$tJLTK*n+#B#H-E&(=AcVL)&_|V}ZOz?u zI1%04`yxZ;c;J_TOD`T;Wxu=sMnc-u4)YhY@41c-g<X>9p)ZitPAL`MA%16jZ)=lr z{#l^DVQ`=Q?eMZ?z6h%Lc>gle<^wt2#3-ux;5=x&S$1<m{ioyNjd`(Cf{`b`f7toh zo`?jx#X5}hh}dG0R{CQ$Jzx5=j4Kcos%;{r7K(yOH_-p96ZhqFX-#aZ%dph9Pkw*4 z^Vu<po4qYlZAMBt=7>pdBQ^RF#lJ$d&n*(t1MBRF*+heMu0^@FiFNL6e>ZiE!?j)u zm-_BqkP!UgTfYyJVxe@b_iLVwB!m6!TcT`^qhpTv7rJVhf2^J=Xqz3Ua`C%wvDN-I zx*X56Q)-^(@J(q(_N?<5p*p?sYk=02g`aMFMzXntHdUfm*U5E@(H*@f(FKjweY~x% z-|7*Q<w8}<hRNumi~akeybv?2(zs9o&(+%o8u$Z*rYsK}_j<74&5xnYM*ZA`@aC|m z?&G2;fk)KP=JBQtlQW$y3ORK|>;Aj(p0HXTPab&lZAf$8+%b|r^v4omeBDOtc~2Hz zEaxth{$YvHSs#T2wBe{>yr+My)R7h1Fna=RSU#`jg*JE$G<?wElH1w4Dwx1fxOsLJ z-*|aML*_`!+3<E-kwF-RK*eI};-XLAX7$_8brm7umLzW)?DOBc#1i~4<#(e)MVM8_ z<s$d(y({naq)N{qLSIw0mT-2wq6!A&qZ&ahGwL~g6;vl7($o);KA9?aD{bwqDIX!x z<vuKO$TcDnNA8E{zut)-l_1iHU~=Q@hTarFL`pr8ZwI^!!DSKzVA5LmjBf&}Q4Kj6 z1E2%{tU9!S*r}v*s9|}X<zX;g=6SyMB*gugNADeQ%(@FxKO}|b5$J%0^Vw_J93G@= z4b>w-j8A|3+d{+6c<`dilB*_Z_?ZIrO#A_$`Dn&sk-#%gO#+Ty!-I(Qh5lhuolbN) zefz)<F8~Fo$Rk7>Cb{?=wZAiiXMDb`MO4H4(``b&Z-bd%$Dt{ZbL`2D@1Kz4gKec3 zE#!duw~^BE1`vl|cy2R8<YgCR6q|u0K-$FPtQ`CRI7syD>=}SC%k!h&iU>B>e3HA1 z9kywQ;qRn1uySPREgx_<iy;a^qOD^)($RSUz+|CflLGj;WrESKG2unFcJ<szFiM#2 z<;#G}Y|B^u8zv?D;!6_!yd1*Zw{u47}tWLaJ991lQ@B4rv5a*T_DDZ6Lf)^7o2 zl~YN31JZ*x$IUZw6AR*dxgb9>71p25psIq{$TQUxrGSSd!O2y$^(smmhGxeBVh2O0 z5AWG?U-OOpuHMfBhLq$*O&*=I6pXi%=_d&=*EjkkFKZN@Q`mG3>;iKN(?7rSKs=*l zkx|UaR1hhrS|5s1r)XfUe#W;X0Kg4zpBJa<(m`_~`va50fb16jnUfJRiJQkatNaHk zh%IN`dxqBrizw___rOQmxZI$v;rtj_BIu@x2BTb5+1Q={g#elNU!JBPl;8xudov)& zNTMJx%UmkE07@LfF-iYWY8hC8{uKs6IB~RH0WpGUnj7#5t*WA7@XNI70uGj#VSt;R zjXwek8f{@^vzuEA4DeAcpE5ubX%cM<iVcWNG@H|F3&LgGCd*i`N(Sb?N28OlfMt3X zWyXSaa`2ob@A+F8bR@IwhkOueVJTSX4Jz$MUk~4Hz>h3)5&P}|V03plQ2_C?Tuf%E z1z1&c^HW%W^~2$m<&vsd7KBeU%gA$0<83r3EdU&$wONmEDS$ikdmKRn^j{<k=m8RB zW#T6NI???uI5F|UYI-4m07+<4lpp$uEtq4`XdN!a4u~kpp-f|dt0U61u>I?r79%J$ z&Jo7E6nup>#iu9%b7n*)?)?%14_#7rHE+QN+ddYhw4?`|Cz0HXNI$^4A$_yiPBQt@ zo{EmgcfY^I9fSa%idONPJwUeXO|avKzDfa6n9m*ii~n(YH>CB#4+bd!_hb1DnR+-$ zgmx#f9Od!LBu$8BqLAi$Z}|gIUdjE3Z=I49Ug=YCxKsg1C^_D)isA5aCa*=*!K7nl zt*=*H|1oDHJAzhV(w4;*+6Loem^Grm89b3^qz+gkgyiJ4*F0gzgPKcNnY%H*X32^) zV7g&Gj>x{IV`Iwu<p5~2523fK0~U(ow6?kpOp-yqJLWu)0MTxlZIL;X@}2-5^_;%f zJt%h}OD(+hSKY6<u){|peT#WDF+g>HshE2BEFj%sp7Nbvv!%J_6_>%WkdkqPItBsO zp}vpz$Q|IRJt3y?^ff=o`Ig|4D<edCE*sPixMmdPk6zXSXy<)jsLO9bq`Hj5kTY-k zYXb5!X+p#=!2H|xEv3`=N6ONEFSHLR-U@%V{r90G%&7kLcDpzg<}xAQRgao2jRGQV zk0`HqQzCyC)KLRa1Q)RT9xyzLx>MDJzQmY!01@0Fy82-Gt!ux78%qYLwqcQ6CnRP1 zz;1|rKCK?kSr83qW%Xu3LBKClW7+r@Ak4b3CDfg-S(QI|_=?-vz&X79Sle7J0}(9! zCmy*YJ{`Og1#GWg_Ro_rH@6Ny%hn7l2oT;oU0UIkhH%fxFPS4)zjq&i{RC&p5K2wJ zBdXIpRRn79_p!7=d}Vto93EdXYl=580nII0$RYk(Kyc$2Q|Tmdm0o8s<=`(L9CwX* zdzOVjYvk{vI5zRdna>_n3L;Sh7j@`>-V1Rkdp`BA{dRnG%?NJCW{CP2dCd)+97)#~ zM}{oQ{?agY6k7j^gh~YRs(N8!GWyevt^kM;ELUf<0t(R|mEXxxa9GDou{~i0O@n1@ zdX4!jF_e6BDyD4fnSk}!cy_j}3+34@9^dyLqAdaAGvq#5XxKx*w$1!}9{P<W9_G19 zMPpln&K66Ua-Il_CRndbgY`o1-f*jTum`V~uzW-7-31p+=`aUtP&xaPJq`(B0|v#( zjXh&vUf48db-D`%R3lI!n!0vL7F^0Gb#e;DA3+5YDtqo7q|3mP#mi-R@OF&APuo_Y z(i7Iunb3&X!=&H?vnY~2LN=JRi>R&80vue`P%U$ZpmvyMT>0G%`hrUvJj^B~NIOt` z2Zs%%b8es(Z?%E|kMBi??h&wgUMZ{ql)#o*hbr*?2eF(fJ?Lh#gStW^`G#ZjCoH5> zs~C?FDGFu=OP0M>0YvAgpZzn3?h>%WUGaHR8x6QHyy@P11bd_}7n_$Cjt3&>Q`zH> z*dh>)P?rBn4Z3FZilEX?CAI+89mGWSJaoCfr?AVmiohjuPWST)^cIsZjb@ZQ$uQ1% zjp)XI`TMJfWZ_60H0-uOWTFA_UW!Vg|LDkdo{!#wcAAZcqfS8s@!%BnjIFte$$Xx+ z!0+WaA6a|2o*@iUAP7gdl)MIF3_{83wsV3EYmH#0E+6usf?b;1eqxb%6bV?){CeR= zFz(PBI(BK?ivKZbpKB`@hoyro>m{G)Ft3jQ;q{6$VaPy%U0V_fc|52@2rh>iv^;D$ z>?H9PfpEe*6fAW7qZoG9mofiiHKz~$Y8Piwfb85s#r96N{;Mego1uR)=92^inm#rk zl7}kEyo60R=w&C02z>**$mJI=CFi^@rEcf>L&siVR}@zgxEdXw7CpHRb_?8s8GSwI z!g5<qzq%CXKNK?09%_W^02Z-8_TLfk){b6gp<KX6chNGH0B?2~e0CKBAA-OfYVzA3 zW`N)b)$X6(_x=$N8#j3={^Nva$RzfH&{|b0GXyaYv1Es;83$5Md4{O7lX=ftCqc&( zkaqYS2Wn({sXIBSfeP+6w1~&FkZa06^_C5#;2Ky^xwX<K?Xx6yXp1aWK%@Qy?nI55 zn_HQn6jk@;j{;_E<1WdqBhcXE6Uw>3n>J{|SWE<urR|{%M+(x(u>u>KyUpVNv1xxh zzJMA)#%&KKZum76!6FJNHF<uvaFvm{d5anxx&)7}^(r?Pc-I8(sZ=>kg#Du-*^mP0 z$>`xSf}jf&*&8||B(C57;om}@4H`>!Ttym8Rdp=?eWa2FoZgVja(@I(-J6}AcXYcZ zWlr8V#p(xdoQUUZ`Tzr+JdZl_d^3p>c2y*;l6hT-6;#muU{ziqrgu|yFA`u^ADVd` z>LRGf4168H&Zlc$0Sy4V{Xf&|xnP~!)|oiC2?Y1@f8sodhYEsYf^zJk8L(8~HD?s8 zcmX1wr!2F-gq?h*-Ee6DS(tt3wv6xu%LsJ#iz|S*2h6J)Aj3pZPdNk$s9{Uf^Lupv z(d8Qxp2=R*<tdS|(y|NyZ58Tar32nDWBX6G=tYQt4KnoS0GBxnM8d^yL@&#o406m& z0)^@z(I!s<>zc>f`#nwt98Mc~S|R8u$MIey|CR6%1`-K?A_d2|2F?YzDlPF9M;wg7 zMC4$R4lNVtWgGr<gVp0hw$MU)LcUTyI9_t<wwzL6m$jkJk;T#s*tGuDG#4Wnh`R(J zxz<zOhk_Td*k<dTF+jnifP(vG`9HJ|t70C2IGQW`VW|$@2at^w#_IHs!|baD{bCJx zO-RI?_~HS)+bk<CKMiINJ35^nTB{;c6WT*>THxHfzb?)V8EbKSty$&2s+Km&B18p1 zZJUdj27%lCoX+&Rhj^mBj|+nm25Ra(MeqMz0Dac&Z4gFrpeD*p3{Szqb0D2iaM$wr zJxKbWP7U@^mTN(wOkHq7LAP=hJQ|~a>AWVi$oL<RIJT)L7QF3){)fBV9e{7D-t_f> zccLbjwBbo!Ciyt0_tP~pDrfF-HP+S6US>vjf93LsYf!jw9?boq(>*IpZ7SuN9xjc) z@674tv|C&5R>vhtADg|GMfX$RZrJi!u*gPuE3(wzGc)tD2}+dPS}f(`Rb$p43|<a* zO*Uvvg*l;PzEm4bjH?kOH@A}AW0^hYEHv{LY#vL*eut=aT-bLpvgC`plPk56NbFts z`+q!rWk6M3(<miK2+~MOBhuX<Dc#-O-3=mL(%s$N-O>$$bV_&EJ!e1fcmIvEW=*e| zai7iFWhxII2Yv1HI(!=1Qs&Rk+xFk)Dvs?O`+sJB`XE3vme6v-|2ZUl**Q|1W$8?0 zo}aJW!@7D|kNAw;7t=$vF1SY!^lG%3Ow+IJ**}4`uR2u1W$;KZn?#Qc{QUH~*2%6B zq%Tj3O0EYPLs@ayNX%-@-J97v?R?YeIpbz7-tbu{_eW}4Uwqz>h_v<OirEIm8Z<H> z;~TKo8k5&4M<67w<C_{He5OuL&|dC|bs!mU%U(A(7~jIf*@Ow6yL|87Bf`rc`6#bU zzKJvZVT=h^!E=6Z3H|qN>-kl*Vqm#@LbfA6O<uN^ts0vBG=ind<m5sRyTQkCusu~7 z!s=VsnB!QP`n&FlYjv+lFsfYaYyiFap**yRIJ}3A>wYjgZ88kD&D8V?eZ@<KMa?<J zH4wCHRy{A<`s8q>KCO4AtdSlACVI+MwPUv7`-*!!uVIbg2wsa`L+p~$t-BrJ`)!rk zTmtJoPL0&KmL|me&r(IddOOYaNI<s^A>hWtr8L!@wX8cpYUC?3?>JZ^y7EP*1P~75 z57al$!!*@81V4fc?=v%yfJezqq3Eb>K#frJ0;=9|Q;`5(?aFQsK>Ao6^q?JBI(@sh zQ!-dH&!*;4Q(*1tTWAK@I_rku8a?JWSiF3M+eLHkvJOF~!>K6-?XfO1gKV4)K7Mn9 zJEH<Pyv$E$`|ae&HlSB#?o1J1_bXE*3>{2^z9t(!th&baKqQ3now<h~1+^#jVUDHn z9pnw`{Z8Z2>Jip%<qk(0goiWnd@Dj6)=Rh7bHR3N`+-D3h&<MbsJj@`(?8^|u4AOj z&xC`GpZxplP*7|SS+~DB_xUjnQ}Ry^20TRV3@O;{Flc7Oe^9<mIPCbzoC7K_aXro3 z-D6#id=W?#sK{emJ%3x{dfYzta2Q9w+kVJ06ntBIs9el>IM|oPC;SBQkKO4~+h)j$ z<{h*5eKHA)o|H`=_ieODEc1l=FM&4*@38;_H6+{)>OEi3-L{Lxf<hgFN<l*uhZ(j> z*|HB^O}Khr+YiJMMy@{5zS;5hfnGm*n|z3P6lyhX{zD<l+&4a#nC1NiyA-QUE@&O` zg_>yFSj|_2X_BjltB>+rn|TDOX-7PfDAu|v{6qB)BM2%^eelq@L;}4?6r{e?OY82p z8%)+}kv5RX({U-};G_}9naI-$g3gUIN)maRE`@5VJQC~^dFny96Z5-{M4lQD)Kcq{ zMjl=E{3|^xcS&!!j+&pWDC<d7<1%{$Wq1~T)>iE@9t8CbZPRO9hJc`sus&J!OD_;q zA^sArc4>FGfgMhEXG^wOO2>$zb4W+LJeBPG`17E{tDc|RjX!hPDF-%Nr3oL`CEwiN z_r#;sD9kZ)^?!f!2f8NlZGOO|UJ}0&^v;#Vhkb=}0n5c&$#LX4;W!zXslz%xGGjQ4 zTz^U^v)v|ottJ0dv(r$B$Gyu@LYVAZ6~#OvSg+$rWF>!GZ?1oZi3G(^tdF(leG|t5 z(mY+h;qOv+*{2{9CKkW)e3pBwYEp;(X^G6i#q0dl(yw~1<u?8-30c)}Q5v&o7Ip7v zw*oQZf%MI%psLHTv(B+$auiABtB3DzGM$%qgl?5ebQs+Q1A3|ySW+|V{C%<oh%?1M zytjMJ81BC3B9qq<Fr<$hcJ_XqP_>--Y^_(!CxwlJdS$8f&b;r(P2qYAEz~crArJmI z2&r}pO_<Nx*NvaSus#S@?C0wchoIm~#)ABvc%sG*#>;~6`xkZI(ohT+xYnqC?b?;d zjPTw4f9pgb5KLOQm&qW|>BkdZ8C(h#-&t(YtyMd$H%dcAu`{Z9U5;tk<4J*j#UKxY zgSx^dd@EGou-8Y=@~p$oyeXZx+v=s@J2Ro@=@89>><^Uoni$t{lW#y)3`I=4_e$$H zZ$DVu4gtYhAb6w%H5`oR0l_oat(^UVBHmGp{CKVY&DEhgNlS=TB{S@?AUNaCP7PvF z6f<Up{Daf;O(Id{430suX5H|di|#Fs-uELXYv1(!k~#iYg)ve`yL0-FI**ma7W56& zN<?)^V<@1X&aZ~}QOoBKpnv<4DdF8dML)Y|*f}3_-MXCezX^{Swy#|uNYY8vd-1S^ z!bl{$xo_tP*E-T8I4bsXvV7jls>K>e!8Se}{`@YRdPIlDGj)Ami0EqFh&If&DhN4I z0A4`4-pYA{Cj)I~xyipOn&ok)&-fRV942v6s_ZUh;EL|&m^QSv1VKar?dR3qY4Ru{ z)RZp4-VPI!q;CiU$}kI0TT&0!61nEky2S2K7Q*7$FxeD*{F+&jX=o0<{_$LR*$H66 z;>7f~-m@#>tHq(?>Aq4)Fxf4iims@OwE_P(6*Ua#jD?6qFlD>>j3-UKwc&uVe7)0j znSvQ)aX55T65(fVb`>qGiD*$QfMGlLR2xFQGnmZFcv>DH8xkvZJhqW|WvzXlaEp48 z9_|v8N%BoYTkfpc>cv^F-ID)O4>2c_8J$r{%*_Gf=FeWc4+!O;&_aW?-c++!KOTRi zi^kA^IPBfGIyC%E7loN5(rD`A4S1zPGgCL(YWrE1_A5<TSk4mHcd#7@6&dRAo=C$M z;ey-^o9{p6Lnw*Nw!+~FOcJYG%SX^JSf|2BKv?8@^jDlty++<(4G7Htgl75<Ssd0< zg6#^GC0M&$d;aB;Ef_3!%fNrSET;qSh&H@rzUmPO-KCFDI;00ONJ4I3MT$Qf6=X5| zUAMvJR416*MW;9Dnha2c4>PHi2>~*a>1}^oGC3$Ybn$>ngC|vr$-<Y%h%a&&MR2=4 zY}I4&pb)1GSyTPA{;OuI?iKR>m?99%ul2Xv+cfu4YJp-o%`!ojx;*R`2xZi357=Fo zk5<VtHMMF!C6K#xIlW*tEgD8rDy&mwYI>6oSP#?j4IrrVg8G~j5<bj*QNe+q*_9*) zv&6}?>c%`uEdjAa_N7iy1hc%bI(-sRVN)tnQx~?Wm=Q&wg>bG}*<Nx!N-YD?{cuPk zqz}OGD>ZXFeRBDVR}R97+G?f=fa!Ah(=JKsqYcLc<)2f|zH|0ND2WD3oqCpAHG@?7 zty!y#4G!`^g;gZg{;mD2a~S4edoA;qZTxsFXt__etFw;BZX>V83fImoLzzX#>l80R zM5`Z8_SGECkC9JK=z?+lMyAGG$8C*;T*5F#U#-V&#dF>nWbHgyjHGC-#Ag@;#+;_7 zI;d%yGeRWTpH-nh$Ig?zQ4eS4(07@!4tI&?rdh0(TP}e7bxsvm(1N4@QJOou!28_l z?G@EZt%4;o;eLJu6+Q<ghaH+R;aXqm&OI=)WfWwUV)P3trZuUd4!b@Fl-M<$W0^ZZ zV()o61gZV)2Z?61A1<JE2=V_HjB>7FY%JsoQqe?uW)dJ1qa}Pt?8ymA>`^CQ;~4O1 z5~lHCUL1iv!}uCLo`=N?I>^E@`wDjj3#^_X@9%u-xT*l_XK>!wCS759e_Eu5fFUw| zC4wda&g?Lo<&wJEVeW!3LH4gsX#nM3|07(5<+)5rZu4><V+uI4Nkj_7J5|`6i<IP9 z#<jmHz<&AYeI~AKtMT`DhJvxZ!~CC6K)=S*Q~Z5}f>(s$UwPz1B}ye-LLTWOsuQiS zr}5Nb6={_y5B!G{T-BikmfPZr^!4>}*#h=d3Ok?=J1K;r&yZOQ&61IoY+)41wSzzH z)W(hB>Y9{>C0O@s74$Xabh35+q@?KE=ZT%;y0{e1$v-{cA?Eu3X|p~qsWoLZgyrt; z#_S&JQ+>7>RL*K_czP~Z!pI8VuWjHatWZMt<~?$0s*wTBY<z3pY9=T`kaCzuE}ZO* z4Q$+&34yN;px1sGu|SDR%5j_=>Aa*~M)O#@c-Iu1<7YSUWzi|IqTvq+w~{K0TpL~k zQ5-&SRI9JGT7R|pyYGt_W2No#gD2VN{ep+a1s&6h-uKQp7c+E&PzLNT#v;CWN0oId z>MZus9F~CK(N6lS`i2EA%Y=bA&sDDF0X0xc`||{%vO{)r9hEC%Maih5HU*V)V}MSR zb(}2XUyJfO6?vr$d%ZA%2p9qB<ME57$-&mca%Bwo-NUSUkd_>#7Z<;NH>QGdrX9?- zjR7$b#i1(=mCGy6J}T5<X&F#fr?FyRl>>ct`x_b;WK1h+)!1vMUE6RF{aWwSOP=uX zjtW6)Dm^C`wDKao6HwlXxIVJb9Cuov4m%PO^gh-jgRt0o2!{)>Dvz7c5J7d*ANk^m zgWy++^D2-s+K77q5*;kN178;qqgM&Psj>ZiN0un`dxH$N>3dYP-1s-#k3z8s6;VuN z-hBU58qFO2n8<v-Ue!M^lL`8(#)}sH8XjPBj-WmfLWO4<_>HNNqCul*=DUfg@P-n_ zP-fUzxB^c+#E>Oaa=HRf00IBP4db*ULj^@v9`8hg0-ZDU=&V+88Q2S=I;!4VjYk83 z)8ePyX7t**O*v*;*b<Ge@?k>c)X?G7<w);nI4|vUOn=~ER9CFR70F@?LsjYW%YI?a z`FvH?CH)fFMaFY8jf$XU><}99@*ya&&i3*Uxt$}hI=y3S0=d?WM?I4OKb`wgVqcvn z6C!<{Fnwua>`Q&<qgULs&`>yfE1xWqON|>3B;TF0WhxdJ;_xj$WJpYz?V&iV+l>q2 zb+d<B+^_6I#8m@v$a?xWtIGz4(uFJ|9ZmKymV~_t@746+=w&t@d2r;q8V0uEFIr4z z%xDQ^u_pA((~ZaN*7EH#-S}&`4<0CyWr`GXmcCE&+uNBmubF)Uqb33(7YHeN-}-yh zbB%9dX0BxM(=kogB+0<22NErv(CcS(IMeHm9m)LtEDnw<pATvh9<QMRR|PvGp8)c$ zzpCqTnZ8>aTB~K}9|08C0c4_k?Jk&^F}j5_DZsxn8fEm3V-(D#A*@OA{UpCgS!DXV zS<XIkjT8<AGz!%Na`W&y>J};d!uWs1mi6HaUwS2OhQ+@TI^Ih^&JY+HeWNqnu{ww` zcIY5xZ%`>upep8e7|o*fS#OV|Z@}Ic+IKRQ%=v71h!Sdy27O&+4L_;t>)*Z;4f(~s zu^y3~Y;O_{dd9Cs8qYz<Kxb~qkEL1tFV@PhWYr7C&*YQG^Kp2wq~`hNk!S`j#GEmr z%lC#cu~_0}36wV4Q#73HWLvT;r3J&Q&BUm_TZxFV%Z@@Mul)pSZe}>ZTBdCqteud7 z`xcofneOb1Y=R8^V%V;}K1MdQzb4FhlxYqG>-{pbH|z%WZ;Q*iEnUx|k}5BM#pSHw zT%OYvek{m=J|n{<nqOzvpFYX^`Mhunm;Dm`_0GbDSJoKj^O-K*hMrmrg0@&m&REbo zO(cWVb$2%`1?_kkM4||8<<xKj{%`!UG-5<~(cuA$ip`{9Dx<}p!J}Tqds4)fk2G&6 z_3Gtj^(pAc`Wh`-A{iXvtY`@<EH-Hh#wc(9bd0IVZK7hroy_b5M<eX73Wny36A-lB zEWTF=7fhvbt4*6|6)r|rd3VV0LTjoiz&<h3rTZm$y3$0wU|`F1w_WgB>ht#pqMz@X zix{8!(U_XrL4`R?yoSEK$CeS;hn7rlfreVhZu5{9J@xZr{ddqrj_4||hwC(E2{UFv za)S^s7M|cBUY{<}!02V~bgSWmQCdwfNt7bzZlNIbX-$aw<qVVPjw(_gfyz`jtv20w z^O@6FUOoBis6!$*aa`$4-TQAt#yVBpRdVWT3vG01>PfRyN~i{XV|@&e3P(3+is_9L zk&E8k4|){uOutucFqu`E4+$7HuTZRulLf8kCJN(F^N%nnV;#lEew2{%z6w2)z#0<^ zJvi_DaZq7Kp=*!SbAw>MjF!!$w1IE%{Tl(iFstwB^$#i~k`9f&ke%v@kofJYNfB!K zVI&R(anK(T%()Eec{fa!7Gb1IH(4f2WPcxC#_=P!I!;3Md_x$WNnu=yD97DjXKK+h z#PJehJ;IbY>_b&ztGP;E+T~ZsRV~>{N3Xyo&`Eg+!v7*4Xg)vfU>~6&o$?88JdCD! zt<9T>TrGobn<&L=gAg}R;mdRwc@08_01hRF(bPc$LZoO^b$qnHiNJ1<ag4bdAKIun zofTDMSRw_MhZRLeL=5rlN1`-QA`0h%g3w?>JlCo=zTYe~qk*y!EbcSr^<AB}19-27 zuMIOckw*c)XnK~4Gd>6Ygp+RcWD1nXM^MH|npg6odA-PTt*Q2ll#Jmx1HD#Cb5wM% zhLGvN-P7A!YZn$>Fc<3Os-~u<B6U#%gLU3E2tq5h&i~%BHIYH1Ru$jfV(6nU`lUsr z$pHFB4hlwWN)wuH%CF`ZXZ#VN90|)iW}E#|RtL<sJ-xiN+^?F6Q8H%Etxe;m-Z^=W z)m+*$LzdqE{t2rTNpdQcQAf8L%FAmxWuQIrZppg}I2n&LR7~cb`u)@J#QxF;2I!;| z;swjOiJujTzv$HA8?37PpME>#vJY`Keb@T(nk7N9kb(J+qGH)DT5J`P7qhNo{dybB zDx8{P+NT!D8BUneK}+;WiD8alv{w_BR2wo*L_pjqM1wX;>4*&B%WAKpT}M`tDxH%{ z0mDM-u|1UWCcH5x67zCz2mgxvl-goHe&0BajQnHa+o1W)gNPk{69>XXFbU_8fhI@4 z;GDxwKb;!v_xq`kxK*c5(x@ehW&Ncb1tiq5P<bmH&2qgH)N|6I3%re=3Dw#SC{ksr zB4ZEp>K*LsQ(J5Bz4mN&(b*}#e3@<xw&m7~^)NY%ep^0sk$NGuk1a`nb=D(A701xn zqbzD_nZKs0pm5$*s))7NRcbLmQ|K;pTo1xU7&e*?5$K<HazwF+AX_+BRwgWyKSFv- zC}qWMQNc$m$e+`HYOSi*@sTY-DgB(LSk<K({^7Dve&}}t6{38yy@UzU^5Y$KEvEf# zyp3Y2yOWwr_W2godJ7k0H1a5}i43U>Dl>Nqg^qyvkmM_B?QLkQ(5OU|ri^|oappBr zQhn^kliJ-4E{)*VR6SU_lX$mutrDf7>U3xGu6v1a33<!EiW^&HEbwAp$6r(8xFf$+ zA<^T9ik8U9PvAE2pWJLjo!Ze$ungcgEl})klfVltHTQpP{<ENG%IvRBA&DL7?^p=; z$~(7*y}Mj=y{=#-TvsqBloc&Qj9inQz?fYmUP$d6VIF~;GU;U9#ms*5duPgTd-tQE z5d*eRZf<)SSG@Xa!^^I?W{K{sMpTEs!jMe~|Mk&_-Esv>QgR7Fdu&1ihBYs(m~W2B z0TgKuFve(o>0~ro^lX_D1s|2p8ay&O*=~prW=nP?W|2P%{aHt+6-gfX#eNh8K^W0I zABfFpSnb8y6ToO@9C<Q^L-PdT#sJHq@~1nZr}mv69O-n<fV>G(;=C^pP9GP`pCJ(X zJQ~i>%dTm33}@maj`(Q6B!gkIfS#0gsYiFjCW3zq&HIkwh)r03#(lAM*D;*ak2uT$ zxmnDHZUTBV=5agS5iyWZhCN%vx+#oIf_mjT9AD9ygD7DJFKvfy#&C4Tbcr(Y7%x*f zG4$^nsMQaBtPXASs>uTBf3uY-lH6GP7Q5J@W9jytg)m8ZDflM#>BFQ8ProMQ$%UwO zLK%?F9KI^%d}NgUZiiM9h4Dd%*dQ})gABJYQA!j97J@*h>}@p+lD$ueGP#hPn$ZFv zbo&O`;cT5f6awlM4=km;LnGvod`NN;3rFan*kA>iVs(Q|VtLV#7(^iqM=771Wq<_& z)8Qzme`q_(fG(So^|eDAzsYcb2@G+k_!(zr(*LJ}N_Z@eBwbkX4rx6|u%C(F!#e2S z<QLiH**pRt7svMH?u^!a)rzdCfY&)joWZ-{ao1U*^LKs!$aRUNd=nE<g*aA2HmzGT ziep8-To>AN@BN~Avb}w!oa-dem42L09aFr1H^`tvu|$m-6EAWY75F4G$ztX}C-G|= zTkDYo_F+~ncEAXo)4GT6W<6Q-P)YKoSylJJL?T}*{FyE_zNJm7l5wta(>MRs2C|8| zF5dV%Z&qbJji4G<u=;M@Y%NE3E&f*@Zz|gG_lX6&#pn-HM}g|dG{)wCl#c^+=#A7Z zP<+Tls<3NmLT|!VgusBQOK_BM6}HK0WBl&-nWD9SH-d@As(-PvrjG(?!rNqL)UQ4C z^*N393b0EP<a9kUa34F6QYow?UtE}5LrYd`miRDoy2Wym#KLBM^7IF@AG{w~!-v-` zdgnb@dqag^^GUCCfA<Me*MFD^wp2wiBzCU;Fmtw<hF9m@{0H`6pRMJn`lbs6{bO@Y ztNq2b1bdLAe57;baT_?5pLMyeIdQZEN6Bk1+7-E2ha&TsXPt=Gp6P8jvt{~NwQ+MC z5a%J0kmSz$w2^Omv#x3AeO8B$uqnG-uEEzBC1-QyZIB;W^nFs_`wX3Qm2>I>ZsCrP zaYiCxBBJ+kjZ$=3L0!Y|rb9Nu=`U)JU^$o^b2XOV08CEsViXN~<e7zIelrpr4xqem zcZA;q9QLFyvAQ4EOgWjfhR2rs&gw=aSa;JMijpD8iw3ifzW0o4GfTEc(lr%GNeZnW ze;)2}B<-7-ibd6hoenZl*BiD#vNm8Ui8sUGVlLyQ<kRAjGdB^Huo}A2o{5fO3LY^+ z+BIyIC6N!C*RUYw)8f9IJr&#kVjre84th);)n{&)Za`rlAEuN=ThVSBuT_L?8IM-N z1G)~dfX(JP!*t(4wpUwIWkpy!-`u4I)*v%7@<KYI_ci_J<JZLrXlHfP@%E|I)*p@A zmsa&^B&vqxT5l{b(@sy$nH*N~!Z~&ORH&rUT}#Fa-x66#3=Ax0O2l+{yopA~>*G`H z*$Y07FR^5w)`xo+SB&{&-l3-PYNX)>6whG^T~wtZzgDz*b0dTnD%)k-RGcL}5UXg* zGNXRzqT*@jolUi#@i3Jpbs7F>Uv@EmlNlef3Ux-}g2uJLny1kv^)ELb;RE?hF<dm4 zi0MD^P?j2#UG9*Uah5#%l9O)VMfs%Zgk`!?<~#=SiS`U{<7SJ$OtB1i(F8S0^+G>d zD9ppQm%D_66D}^Wqw4cN&Z{%muvFIcz}_sk*^Ba^yrPoIpLS8t{aN_3P;7{F2BDZ= z=_$+~$R`p|^7Qqg;O|GwmY5WinR-pBYkA@>BA;2iRoI}>zR^iMN$;hMwoCkrX@*6^ zo2Q!S7_*zVL#d`v{Ta<|kIo{Pu`V(XDgz%r6AB~+Ar9;GZ>uGyKL-#6xn7TPIup@K z?OP-~aqzKu6n#TERv3n#9aYDPBtux5lp`+^#yi7|7%d&w!!vN6v8}?KRi;-7oyw8f z1|RkI)~=k&N$?D<HN8Z?`P@*$m}<M*SV;TaAWUjB25mrhc?6pBzED_v00Yjpd>puG zowZ(?P4Uh<O`C|-2VeCUPMw*L2Meoysv~}gnh22Ag|CacGA{ry^OJ<_ec+{rcZ-W4 zOul8ep)D1gH~Cm=lTioqzZ>fM!<B;Yf0s<x9u0Iy$iCk&!GL968eVGNVwtl#=@4t% zWR=e5K3xy?pvkUk)p>cYP^$X#A!ep?=vnY97*I~$-R7}+l(^U4IMXfW26KOuuD4+T z1BbUuJ&<XgXeP8RRwGIvqGac-TMsk<c&i}z_UAf*;i%76GD?3|HSzY%Kvad<CT7z< z)ehb`x~T1L##K@D-a2Qa@{a<iH+_QP5mC^2X`PVDOpvMhL*K{O2F11G`pp#AQ33>< zzO)r)n~61<yGd<>)lnt9U*t^dFbE^dRhY9)cMRI<A!+v8KT_RWm}@Z@O$Lp_p?I2^ zYnwInOtj`(<565iv9b`yBJ}O8o0u6cTRT6p=Upq!epvaWe^ld{)B3fAxfk?Xw~jKl zy{S=&SV>Hc9G78)R%|Ol%3(Zi0efpfs{e`|gJuz&p|3*p<zm+@PMg415JqSF6GEHd zR?zeL;~&;zv{1au(RxSMYD+Sk-<@kssruOBE59!Ela35kLBKS(%wjiPTr;tA3W{of zWgP7|zSOixp^n(+S!x!E7P9O00KC;Euf-3=3FM)I>;@5W6Glvy4!4rj(<2zvp))X} z;zdz2!H(L~J#c@W#M4Ny`fBH>*#1QMd}t-^;~M<!>~ZwL>T+^YlEyd?ck%v7+cFQ^ zU!tPHWI*MmW+z~vT8{LqTg((>2f_}TrHa)!BIcg@$VhGR)e!yAPErxUYaZ|Q*I~PI zi>|#ZYWeTbDhrZXl+2<|PE4XSR+oq3ZC|^0-d!K<q8BE}(I@=cq0cDLp6*oQAOEnL zhA9+IE5$U(#!2_k7WkP=!uH-k0A9t}FZXU>!m~Iy7`DFE^fLGA;l|J)Ql)bCrL)C< z(m507ccP9(d~bNf?wZHwFjhjba}4&U(ZHL;xN*s1r!eeKS7Yy>m!fic-?jfvCSYUy zWqpACnu7hQZk7VJw)Nd(y$J=n#=(-6oq-*kj!}Qscxe&I(IpA#tJOk8xCMyseVuxx z>f&Yl?-2g91cc$T3lhVNlPt@^P!ST=XWZfS3fEY%B_RyBQ<;3d3f-OAxP6tdf}A{; zaKx(>(HfTPA@;1n^A$nVPWB+S4zH6t<S3o5)6X57SPE0-3oXH`$np?gC=@e<E^l`n zq|T`D5VE`nLbhD(zOH3G7hEbc>Dhgb)qHEL>s8(d=fVp^ZEjagC*SlEmkr(b^?Njz zOoxdx8{qtt@@}I1c`Q+&CeQwkkb(hOMzd?>_+^lF(`Fe`UuoVlJs^fWXZJBGXt>pg z=*br{8a>5~yxRv*oe?g|c|*iVTZVWw^z}=4-?zURL7N+=6x@D3H;MXCcw(hj!ixpE zVyRuK&<27lG}a)BfT@0VdB1_;I`1}@oi8S3e`h(i+CASV*j=Wa7M?rL>CJ|Raz0mj zu=-)9uW;4sOJp2FGyYF09oi8LyK{^i&Mvt&3<LV}cZPp>DE5fWRbd0E@^)B~c!GGQ zyu2H8#<UL?rULUSrhg#3t}LX@vY3@N4cUf&C?Jd7;`=<>@uJu8gjwuEsMBjHf?BsC z$lh!&K7(8-)$(#Qz^YlOAPYHfs{+e-Y-0Ea$~W-Eo0ZX9&-&unlAR}?&hYHFeb>7! zh&TH@M$Qjk6u*<qQ!lOGlGpAMWK?~ql04BtNp*bW-YUJ3W>)#ah-O{t+oe*mpg6m% zaPT`=2D47yz?{c6Lj+&8<5NaN{Lf)!kI*H{Oye)IT_673Mp(Eq8$NFzh4lTiwHX(x z`X$;Q%8Ib6Yf0$f{YnuzWRinROr}#YXrV8as_%AC%dd{3HdaJqnk-kVj)euA_?4N~ z6o<K3M-&ToZ=MqgX%^OHc(S+KLA`JnX*emsp_ZY#y!itQDZPVoDS8}>R%Kp0<*sRK z6R31Egb2z#8Bab@oQcOP!Wj7zP7b%BeWJ3y%b=0n=I%qzL6KW7WL3|0eTgP>_<L-; zV{c|KXhxwxrzk8E_QAIdC3^M~#b^0=N!=Y=OZW2gOu3X^)^hb>9}2BPmpk(wqy}1S zj=~8?eYeY39JZ8%A>yzBy!Y7S@Avue)XYDQz~N0rF1BVJ3ml{Huw}~<-HiV^3cm3l z8boirUV?TZT-cY)XJA%*bao)&k@ytj0V70UiGaQ=;<0uzG9ZGH+;%CIX~s+r=gLgU z>N5#tj<hZ4*~t5Pf7}xpAMz43micph3;|s+eAsNzqg+R&_r!!Ro>0D&0a{$@5Hh{1 ziWpHl!4C9e_`#fLft352X_J{~C>*KKoTF_xMS>fHR`jZClbKE^T;CVnu-~~Q<b+82 zV-L1i<8&8#Ui|jY9U|yb!AvHdN{9KdyJ$x{)CA6qG*WX0dxa~3;R;Rc++KgIery;% z_8CNO4(%MnwbBN;wOtP2s=QCk3&av?ckrr?$Ncf|$=-=^QS0FdL+g8dEJ=?38||WW zC%UjUu7jLd(U~J2no8kGr<>UvqdDB6nras<teF;N%a$&Lpq$@wkBBEzG=w988q&tv z!zuF~s$R?yxydq{F+zh%4*Oyi29^fXznc~U(h};H;vMvr3IUGhpX-S01FJ6q0blzT zakK2$pEoufEVVaTUFj0BKf_jXd4^l{t}X-wl=;_Q%dBMZa5SeHRX9PoULhk_?zLGG z46RmeCxaSwssdeTqGC;=N4)0r;S@50%HN8mg%mx|(>B9{>ypBqt|;_oF>|A!H=^F7 zeure5eWT4{2AV3YQGGs`-7XOn(w_t=m&$ZlVuAW8UKz}egLFz|$mmBbu{a|<9LFOO z|G3!;rE*VMq_}m6PM+%Yx>6RO&St$pR|E%jP^muL4y932<w&r$CnB!)_LFd{gsZc6 zRjFWs{?S?vnGrR;{70{Gry+UX-pz#F2@(CM_K|1gbf`*)^RK%4n8t%h6CN;h<W*ji zfQO^Q5}T<A-HzV6Qi&*J(1=6RR*_gc=!xw46FdL~Eu2bP_Ju6PE*dOAI}UKyfajzu z!6k9<;K6$PLslLDC~9P}!9at1+vG4Ximb?TdrcqB1Ny;Dax21h=v0h879Pzt{kyTy zUf}f%-V>=(J*r*M^ejOIjbvGETDqMF#K4rc-Z3c!%x&f~$@{=yw72bo0UCaMu#brt z%`kwmi|%pL04!3uI$r_?j7eoM?so%YoCm)R9e|av+zTooGMrWIEzeRd7#jfDCd2Go zsl(E8N$ac|zt^nfwn=_;iA7tV)T(m7YvN%_<k-xw+L(%uJqvmUD1Eq@zuq|D>uev~ zg!0Cdf7Wpl|0^&kBmUB=s%P+A&ql@r^!X`GM|;NKbI|`@Le!D`MNHVrBgR$VxbS`s zwa{I6;r~rSdktxw#D?nR=9ogp5Ahg9j5M}{fnGlF&eMkHINK25-eed4-t7Sgx4a;v zZF??g$oCKkZ5`*^CJ8g<YM0H6+r{hW_k@gGZ#sXMM5fmj0DZFCxBc91^qW7&b|`b- zltSng{zdJEi+_>iQubfc)7||N79)R7?vshjiLdMpi$o~(k6KHjwX=cOL6k|Q9G?Tp zV;4f}%bh=iW1r^bpues*tZb4tI<;)tG18Ok&?}Fi^$#yYGLPr^x)P+e1af#ukG>mS zd*Kj;*K{3E@G;YW_aRcBxhPoK>_gVVdffhb#a}UJuY+$L$ZjQt{F5IbPQ%R;V<ZSH ztp(m5jihG|wS^3FkfGH?HHs%HlH|l7X-MZe__pm-<Bik06JyqriH00CF;nNvb5r|x z<rl~@(pnbY7n4FH#_-wbM(z7!o`#zy#$a6&%|lx}tuxK6-FV%7vwqbSeaw~&eUQ_9 zON@C<YGVp+lcxQ9-4HS7YXqM;1d$_-Qn@m*siSBayY~2e3pJP6Wt?AE<(%8$iGCLZ zf{$)Fti`H8%Y5m_9(WdY>r4upDEljNnlFhlF4QkSZ<mHTrfoOb`Gx~V<o-S<#_V}} zTl3FRfVR4KVohC?DViw^w~5rdT5qjwG(}vG=hD*2{e4P|q0^bQL1W`3m(Vy`!+JNj z&}p2nSUaBmViV?R2vR>p$5=<e`bblhx-)&}T|<fOr-KukRFXf}@de*5TT^IX>>4Bp zDV4>7lGVv&VvyQ34U<U&o6a(JM^OpnUbO_Y#`^6C##W<<H3C_Br6}`rN49UROIb3+ zL#v2*oghx5%$f3Q5@LfkPje`QaMj60hce=g#lqj0?CEs5t#~gOeeZ%NyTkeZpk4g^ z=e45U5XNc#Lh-EYsHX0Yj721u_sP^fhO0s%m$x|?>qSUpd~t96p;?Q%qLD}%&C}7! z5m#_)#k~MekbY~=8wr$@7jiiBY-cNNs|ggkuCSHnGP4`jDzks+*+aGiG!6v@=sUU@ z=PiSEuWBrCDC?cP2Fq1jSlX=qp|&M|Qf?zUL|moywlp~n1>R-e!1c2Ck7l`uPv!ol zV7NF@-Yw!S)SGrjPrk2&F|i0&@LkwCT5vEmkAJKKJuM^QHA|ACX|;z!&tmvTa?)5S zqAH`em8Q{E_I2_RdNWNv$CN(vW~g?GVIbm8Vv;IUh3Ks*pd<IBbY^G*pH7UIsJUQ^ ztKRnXN5kOvchdObWcFP)-+m3>1pS=Ts1Y>2|KPzn(5q~3WrZi(l6gqaZ!qpWE2+}{ zs%7!(FoR0I*5|BeoVoR?L%@VEQ5K3>R&a59DcM~ueS`4|$(b`NEhYFN4Z$Y!3qjYs z$)3J_$j}&b-*gQsGfKE7k4dJz%;X5u6-U6Ol-5lp0&_GX)uchNmUfD});IS=T6!wO zJ$vZglny2#NfSa>xy%QGS{UXlH@{0OEzslg6iR5S$%Sl>mlSuVAD86_$Ps#b7cjf( zlvG8=dlv>fsD!MSa&+x87P}I&e|QmOw4Yknct4Og4h=76NgJeDXEVNFNg?&~7wnQ^ zeI$PWeLU@STU`KOKw!;%(8&N2)!)wx|IwQPF@*GeNbP;3E6rz_&!2~g=GBHbOZ1oa z>ml+-edN`VWj}C!>?yj9<ltf55g2KwZ}jU^6hbz-N~cf;P>Bx_W#AnTbnbto@{(D! zDk5h>g%V11b_#h=OJn1n!)d?gpTocnC39VblIb6-yyEn_pj|7z;3c{>Y9}E_KC;t{ zVjGS2N&JZQc*9HF^{n32H|CE;fBi6e>AZMZy%}yAdCyLB)ugfc(Q!4|{6k0%S^{xm z*p|je)LEatnh%slbL@tvZnNUyi&aE#N36dd7S{`31#9?ZuJ$(?rRcsjH$%V`ilS2O z1%81UDBn=3Eg#4m&dtMNc*Da<8rYg9i+<4HJHTNsoWioW+AhF9a@X%&*jw&&ebVGf z-QmAR;Ffu=cVihgJPi-`?29<iLu}xrwi&_FNv>`<nCcLA4i}4i4qh`@fle666DM>u z?f8RXA{9eBS7<aA8`#dEZ&|0i2)#{1D1Axvc$`dEMN24+6<oU{I<|6<9Hg7<p`;<^ z8tK;m`ggtY)P+~vpMb|#%CtXYnxFBiXea`neQoEGGGC2UUf#usbONp|aPfgY@zLQy zWd)D6(vXuvv-)G83NBrgeAyStypg<siGed;JPG&%6?PRFOT<B|=%C0=vm|Ivvrow< z)76YDl80;|iT(qG75Op5(IrO_!npbZ48read1JCX)Z!J~Vpv-%+pe0U5Cd~H+9&n; zdyh;8w+7slQ&cKr@O+?mEwy*DWAV~gQbpyq8YGur`^YTgH48<cWVfrZM|UK|@t<a( z2<K2}>4@_RwZ$xHXVh;<38vv#Pb~B;b2{H=e*Q)@H^=Q<A+r4V`WTHvonXw0fM_wa z)Wc3wrSyKreAZ~4QHdJn5U=OjZuBeWkNVM7^iK>*)T2-oSaX%qt*cG#3dG;zbX_0( zaukT=h`5j}EZqwPf4P)<b;Ao4)Rwy&emi-kyH43nK={U$qdz5ylz`y>Xyk4{Ir=rB zK-@erMX0`O!u}`d|5*kl!sLnyou5SLy5`I8$1-_KE~_HjEiP}ScNe1%d}!YlX=5UN zv;XXAtb2taC=k}}ziXLNWCxLt6K|+&a)m)65cbBk_qAUQn?|htLJsM{_FR6j6(Z;3 z6A$jN8un+5n^7O$G0<u_2YMt%ptQ%#2M010YLX=^WhF7X__IH`uZV|i<Jks_AG;Lc z@C-fEiY=7#DFnY=L@H||DXom(Q)82l;Z_~raCS<;_iFuNOZ|Hki!W)P<OPYZ8?vJ} zDBPs%;JM4l&kQ}zLG^pbAyUTt{pW?R@pFIO=6mTVpC#RY$|u*p@+ALM$?lCDv{RQ> zX(O4p@NVWf5g;X3Q6GrWw!OkH>K{p3v_;gQnKm*k@Af6^SCW1|E3u_UDCT^|MWCwu z))IW!S37NpM$&`H9FT^!!0<99k#EtVBM8r4<`p#`sgPc*YtPik<=>p2+Bc?9$)!T9 z*k80(pDp9Kz_56ecX8sp;Vm;jAhD8CB*d5U`*UZdMSJqdwkF-QzQ&wZB=(g@5{?GC zQn*L?g~8g>N(Ez#ie-E9m$cf2UG+4YyL`g|nu~7EnD5)HI%Db1;nTPh8gssp*p4}q zGekU==xB95!4Z9-PKMh9b1sJo3EvgjbjIo)nd>`>ux?DY2fVbMR!vA~m)#gMJY7n^ z<tyUR@1-u2lY_T9KL1;(_kO^-vECk_$@n5AobUa&CJJ?S=dwvx4DMQ9A}~mht=@R* z<cf$;?zf7S4JWoe1%crngx&I;`Svb;yk6gGChS=xe0HOhO?%o8tTFwz6z88T>-p=F z?}Ofi<)C$nuZu6vTZyP3iLPlgJ2!*tbAM8v=I;F2^&K!?Vx>0NlT<(CvNDRN(<)OD zOAR`1IXq~D3v||{A`VvVQp2~ms!JPYl*);hFE62jl;uY0Xg08WC(+&L?ph&Mp3a}) z_U`o&3x`sbdY<tb&eEfkx66AeCSA4|vG`LE;z#H#c38HDD4TYL!RI@E>v`!;L$=Cg zfzW0nnKZl*Lp%ctW%qK?43Cp&771G=<W>GC-DN&($B57+JedrmJ0H%!`BCThXj>xf z4!4^ary(?DA#SMjSS_4U+$7<Bcsl)c-t>_>QNL>~e_%6yb9vx~CgDH()*d3nYs>8* z22(MxmV(^16ZKvr{G~DTwVNQO0E;M9J?P0Wz!3J>>^4FCQ$VFcTejvwn4YQ-z8)PS z>81Xn0KQ(X?F{~(1QfXBZ0Y^6KR3v5YR^q#h}C8I$km`1`)P+NtvR}#!s#guRax-$ z7_Du_`zs88WQkUf6<#@IXyMT&DKm)7xIe|u`Opfkiaz6)s*=c%k(*E)L}*lwwipYm z_F(%;bSG^U+5aI&M_JZvYI>;&ry#5sBU~h@9t8nKc&8RMh?Io&*;cv^`bjc8W)&ps z_XgOqJZ9s!ychj+S#DFfPpkGle5f?mCfmFcm^n<(3J7v{Qdw~A8cU&2*H`<KL?P?X z9pf%#McPhpX9S(CR}(d^a9(+po9T2eH8tY5&2(u)0xqY|kt*%K)nvxiWL)mIdP+eL z>5e`@FI~J+9-WgI(wQO|dBWPz^n^z&RY5{8`FCgRy2aG27+7;I&HXreSe1}@UP{MU zk6l+j1wFd6FTzXQ5fOb}lA_jP_QU>kVd{8sk&FyHx<kAy)4U=v^kE}dNLFWj>yVJG zgUqF0SEerU_CkGUd+--wNb39}n-0S}6_fA(-c<Dx%~uqe$FqDpErLdr6<Ro?1XovP z7RPkUZ}S-2iYFH<c%|5_J*bqna6%Q#k5fhK`1?eg9*u5}ke*sp3N7Vr$5Df<wZ6`B zc4pQ8ijpyMZf(@%NwFcz&x7`$)~WO*=mx)f(BAs`Zxjq1>exP~g5EBe&Y<@trw3i1 zp!vffPm#c(B23LyC0h~!XDbQ}cs@(>qt=|33nX!>8o)%if_O=+B6tjdS;%;(*bISz z#D`P!-n>&anT2wuI)kckg_k4sVicXn-`_5?LVA^~n)yhbKSYdb_azSaaJk;;1pT2| z$3aZx{8T7kOwy0rqLZ6n{(A7Yich!3sYNXQAEyn~NSYV!L{K!dC{gC)FMTtq+GM)# zKKbG5TsgE;nA+ZqJv12sv{MOu`CkkZWsDG=2r`YSEfOcDvHl6#y5brpP7GuHJC#`_ z)JvRL!umIosc{S15l%Y=dNI#syU6vpBO0skgs}Y;iN6KfPgB{s@+*G>v|rn9brmyz zO~AbxJH_2bku!wde6SZ)kL)4DMpPCR<#v%1gkAVMM8kW~D}F0~a)sD0(idy)lr^PX z9kplOGOxHGTFG@g2SHfKsg72A7w$=S0tjvYv8%L8Fp4*<(j#EM9oer^D&=IaAlX|7 zP9W*2*Wv@1Y_-QKyzmOdPlH_zNp(q@C3?R-ibw0j)xGRIeK983@ocI)5{yb`c@WnD z$-1<IQ^=>|*>~RAEWOoz1u+J#ZS4N!1EG%XY)n+-g~(!vEgCrHN4cDd_-_h16@M2? zQ6@g#JuM`9$hE8O4^xx{eIoPd5XPPGGLR-aXWc<7h%E@be@aA3TE9?7p4^bwh^&4P zih_S{P3@n#&iA~L>=z(SK2>?PiH48<aY+d(&xqj8QL1~o5bZY+yCdNcOu7}de?Ee4 zmw^&7u^W{4X}d#zvEVuU@!_ojvMA;c*$w?cC{l*fk6us#;c)c5;I(=uj}?MEgdWQC zmlJHb2<jb(%<kBYXlQ_{E!>AXL_Tl>{nssLGYXi>?zuN41xNWkpFb?C@+U?xE6qf$ z7(*puR5z$A_VyNkF!{eGiy}m@K)r}ISKkO~m@I*%vK9*v)jiBs6wd)bbe`2(Oel)! z03(}yv)%U>5Xg(Zw%+rf%C)tOfXWZtlgEHS=}zr9fT%O}0TM^~H$0EOUmQBO9+>Ig z9_Tp}SU<U@{<}bcJnKh72S7e#Ar1{Fs?AHcKUgd{u>miv<*V=>O#aJt^imDbFQ7$T zMIX$H#Fd5!u$fBv)KMP1*8M6K#tRbojt6phOve-8<&4{`(+5`6=>73uBtWtf`z0Ts zac|s<5Fi<n^f3!0uyO<bcs$V+8@!m^AM_0y;J~?c)Ch2xb8#LC1bgjw(Y+nO%I<Nx z+z}-3gO9!IbUGbiPGH=`0H7aVri@zvn4Id$UY#G%opAjP3-GOtZ+QZA9zsh1<y5co zA}Uy|^K7NbHGl&eEl(CGG45f)R0vQb!5nZD3k}=>3-@~`<{3+W!9Ay`F}sq2745Fk zj7bCbA<k;zgRD4*k9T8P1Cn6lBg-=lV5(Fk+bm<L94zRP78ykRXfRW^bFNWrfN6#Q zr&qv2GPne5z{2mznk6LQje5GFvizWpqUSK3>8TvBfCE>%iueJpEBAMKfR7p$8qLGO zO#gWA3w{JPN=`}=F_iwIbc3ppk>~`hF1<-@zy)k|=?S_8bY5s%ml^=;Z1v<mg$G`% zX1=TV0`e)M4;{<m0X3Lcwthj{(SIp|!nX*p>eaPb1CsMkqd^=3u&?j$72PLaVk{v? zE%@?L#)P9@tlX}Ta!_TUTZfi|0{_v�xA8t2eXt5<enBlH0YLi_$Z_3JSol5ZuLE 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�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 diff --git a/core/src/main/resources/bedrock/block_palette.1_21_20.nbt b/core/src/main/resources/bedrock/block_palette.1_21_20.nbt deleted file mode 100644 index 521ea3cc6fdded8adda60e2a1ad1ff35ab826dc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178977 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ⅈ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�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 BS)%{| diff --git a/core/src/main/resources/bedrock/block_palette.1_21_30.nbt b/core/src/main/resources/bedrock/block_palette.1_21_30.nbt deleted file mode 100644 index bb19c11ca73fbdda905acbb35516ab0588dbac95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180490 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⪻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 diff --git a/core/src/main/resources/bedrock/block_palette.1_21_50.nbt b/core/src/main/resources/bedrock/block_palette.1_21_50.nbt new file mode 100644 index 0000000000000000000000000000000000000000..7bff9ce8e1d86052f67c62985efdbb8eb8c08efe GIT binary patch literal 192451 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¬s<=DdJ$c@*Rlr))#J(Ok@}k9DdHnXkKi| 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 literal 0 HcmV?d00001 diff --git a/core/src/main/resources/bedrock/creative_items.1_20_80.json b/core/src/main/resources/bedrock/creative_items.1_20_80.json deleted file mode 100644 index 02feea34b..000000000 --- a/core/src/main/resources/bedrock/creative_items.1_20_80.json +++ /dev/null @@ -1,5812 +0,0 @@ -{ - "items": [ - { - "id": "minecraft:oak_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19wbGFua3MECQBuYW1lX2hhc2ilMDLR92rQ4wMKAG5ldHdvcmtfaWS2GotyCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:spruce_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAwAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9wbGFua3MECQBuYW1lX2hhc2iumBkmFGFE8gMKAG5ldHdvcmtfaWSo8TFgCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:birch_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX3BsYW5rcwQJAG5hbWVfaGFzaLrrAKJqV2WFAwoAbmV0d29ya19pZL+e3ZAKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:jungle_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAwAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9wbGFua3MECQBuYW1lX2hhc2iBM3k4T3FAugMKAG5ldHdvcmtfaWSXUmBCCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:acacia_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAwAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9wbGFua3MECQBuYW1lX2hhc2g60edJxO5/aAMKAG5ldHdvcmtfaWTUXozECgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:dark_oak_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX3BsYW5rcwQJAG5hbWVfaGFzaAr64wkQ9cA7AwoAbmV0d29ya19pZFbMeR0KBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:mangrove_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX3BsYW5rcwQJAG5hbWVfaGFzaPvLtcEA0F8xAwoAbmV0d29ya19pZEvnlCYKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:cherry_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9wbGFua3MECQBuYW1lX2hhc2hNIvVh/lVW7gMKAG5ldHdvcmtfaWQTXpRoCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:bamboo_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT9AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19wbGFua3MECQBuYW1lX2hhc2gYnjNz7SCCjgMKAG5ldHdvcmtfaWTi8ySSCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:bamboo_mosaic", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT8AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19tb3NhaWMECQBuYW1lX2hhc2izSEgiMKOp/AMKAG5ldHdvcmtfaWQZ/p8xCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:crimson_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fcGxhbmtzBAkAbmFtZV9oYXNoJc5IKqNXJnwDCgBuZXR3b3JrX2lkwtJDdQoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:warped_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTyAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9wbGFua3MECQBuYW1lX2hhc2g3yGXEWhe6LgMKAG5ldHdvcmtfaWStTABvCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWSE4JosCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCwBjb2JibGVzdG9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWTUvV6XCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlEQBtb3NzeV9jb2JibGVzdG9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWT4opb2CgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlBwBncmFuaXRlCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWQAMQTVCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlBwBkaW9yaXRlCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWQIbDOcCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCABhbmRlc2l0ZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWSZKhusCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCQBzYW5kc3RvbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWSp4zgCCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlDQByZWRfc2FuZHN0b25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRbqVHTCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCwBzdG9uZV9icmljawgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRr0ZT/CgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlEQBtb3NzeV9zdG9uZV9icmljawgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRnLis3CgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlBQBicmljawgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWQNLzfSCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlDABuZXRoZXJfYnJpY2sIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWQ5h0xwCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlEAByZWRfbmV0aGVyX2JyaWNrCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWS9J0B2CgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCQBlbmRfYnJpY2sIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRPbkJeCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCgBwcmlzbWFyaW5lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:blackstone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsYWNrc3RvbmVfd2FsbAQJAG5hbWVfaGFzaMP8XppUSU1RAwoAbmV0d29ya19pZMbeBBsKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:polished_blackstone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfd2FsbAQJAG5hbWVfaGFzaP6SwV08YwzAAwoAbmV0d29ya19pZAJLsz8KBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:polished_blackstone_brick_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQVAgAACAQAbmFtZSgAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfd2FsbAQJAG5hbWVfaGFzaBBIDZbHxiEzAwoAbmV0d29ya19pZEbLV8cKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:cobbled_deepslate_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AgAACAQAbmFtZSAAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3dhbGwECQBuYW1lX2hhc2iECY5oKxeT+gMKAG5ldHdvcmtfaWRCnPrFCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:deepslate_tile_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3dhbGwECQBuYW1lX2hhc2jz7N+PeuEXgQMKAG5ldHdvcmtfaWTqw4s4CgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:polished_deepslate_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV93YWxsBAkAbmFtZV9oYXNoHxjTdj9pevMDCgBuZXR3b3JrX2lkIvBYYwoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:deepslate_brick_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSJAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja193YWxsBAkAbmFtZV9oYXNoEs3EQrjroyEDCgBuZXR3b3JrX2lkwlrCGwoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:mud_brick_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAgAACAQAbmFtZRgAbWluZWNyYWZ0Om11ZF9icmlja193YWxsBAkAbmFtZV9oYXNov9b98ATpUSwDCgBuZXR3b3JrX2lkH/1WZQoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:oak_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAAAACAQAbmFtZRMAbWluZWNyYWZ0Om9ha19mZW5jZQQJAG5hbWVfaGFzaGEmid7AaCWRAwoAbmV0d29ya19pZDvPEXcKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:spruce_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRCAwAACAQAbmFtZRYAbWluZWNyYWZ0OnNwcnVjZV9mZW5jZQQJAG5hbWVfaGFzaPQCm+aX1ZQeAwoAbmV0d29ya19pZD1QUEoKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:birch_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ/AwAACAQAbmFtZRUAbWluZWNyYWZ0OmJpcmNoX2ZlbmNlBAkAbmFtZV9oYXNo6CJ2ATpANfgDCgBuZXR3b3JrX2lkmCUV2QoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:jungle_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRBAwAACAQAbmFtZRYAbWluZWNyYWZ0Omp1bmdsZV9mZW5jZQQJAG5hbWVfaGFzaOX4cD9uAmsdAwoAbmV0d29ya19pZHz1VxkKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:acacia_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ+AwAACAQAbmFtZRYAbWluZWNyYWZ0OmFjYWNpYV9mZW5jZQQJAG5hbWVfaGFzaGjn+RlKVDH6AwoAbmV0d29ya19pZNVGubwKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:dark_oak_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRAAwAACAQAbmFtZRgAbWluZWNyYWZ0OmRhcmtfb2FrX2ZlbmNlBAkAbmFtZV9oYXNoGPj0gCgM0c0DCgBuZXR3b3JrX2lk2w+gEwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:mangrove_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hbmdyb3ZlX2ZlbmNlBAkAbmFtZV9oYXNowwAd7tPu9bsDCgBuZXR3b3JrX2lkKEcd0goGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:cherry_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAwAACAQAbmFtZRYAbWluZWNyYWZ0OmNoZXJyeV9mZW5jZQQJAG5hbWVfaGFzaFmtUfHfTxcxAwoAbmV0d29ya19pZPCBxAIKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:bamboo_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJhbWJvb19mZW5jZQQJAG5hbWVfaGFzaCKRbxfXsfkiAwoAbmV0d29ya19pZJNXKFcKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:nether_brick_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRxAAAACAQAbmFtZRwAbWluZWNyYWZ0Om5ldGhlcl9icmlja19mZW5jZQQJAG5hbWVfaGFzaA6030ngawxcAwoAbmV0d29ya19pZLnjLF4KBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:crimson_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT/AQAACAQAbmFtZRcAbWluZWNyYWZ0OmNyaW1zb25fZmVuY2UECQBuYW1lX2hhc2jhUhKv1HGj9AMKAG5ldHdvcmtfaWR3OH3OCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:warped_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQAAgAACAQAbmFtZRYAbWluZWNyYWZ0OndhcnBlZF9mZW5jZQQJAG5hbWVfaGFzaJfb3/YuKmOWAwoAbmV0d29ya19pZCpaGC8KBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAAAACAQAbmFtZRQAbWluZWNyYWZ0OmZlbmNlX2dhdGUECQBuYW1lX2hhc2hTxpjEDmRzAwMKAG5ldHdvcmtfaWR+T9kTCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:spruce_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS3AAAACAQAbmFtZRsAbWluZWNyYWZ0OnNwcnVjZV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoanTVB84HRbkDCgBuZXR3b3JrX2lkEnw5egoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:birch_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS4AAAACAQAbmFtZRoAbWluZWNyYWZ0OmJpcmNoX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2jmfPklI8azSwMKAG5ldHdvcmtfaWQL77/BCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:jungle_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS5AAAACAQAbmFtZRsAbWluZWNyYWZ0Omp1bmdsZV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNobYVQkfBomIcDCgBuZXR3b3JrX2lkA1zgtgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:acacia_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS7AAAACAQAbmFtZRsAbWluZWNyYWZ0OmFjYWNpYV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoZnrLUx/XSekDCgBuZXR3b3JrX2lkHg/kTgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:dark_oak_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS6AAAACAQAbmFtZR0AbWluZWNyYWZ0OmRhcmtfb2FrX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2j2PTvdJJHcVQMKAG5ldHdvcmtfaWTwjOCeCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:mangrove_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAgAACAQAbmFtZR0AbWluZWNyYWZ0Om1hbmdyb3ZlX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2i/kOhBKiI/dAMKAG5ldHdvcmtfaWSfweCSCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:cherry_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAwAACAQAbmFtZRsAbWluZWNyYWZ0OmNoZXJyeV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoKWLgCk0z+PsDCgBuZXR3b3JrX2lk/9bTZQoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:bamboo_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJhbWJvb19mZW5jZV9nYXRlBAkAbmFtZV9oYXNopH1JrUgwdIADCgBuZXR3b3JrX2lkzIpPywoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:crimson_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAgAACAQAbmFtZRwAbWluZWNyYWZ0OmNyaW1zb25fZmVuY2VfZ2F0ZQQJAG5hbWVfaGFzaHE3Gfd0Z2d2AwoAbmV0d29ya19pZDQzVbEKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQsAaW5fd2FsbF9iaXQAAQgAb3Blbl9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:warped_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAgAACAQAbmFtZRsAbWluZWNyYWZ0OndhcnBlZF9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoy0oIBjDIG4kDCgBuZXR3b3JrX2lkkf+/3QoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:normal_stone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAQAACAQAbmFtZR0AbWluZWNyYWZ0Om5vcm1hbF9zdG9uZV9zdGFpcnMECQBuYW1lX2hhc2hAEktZZOkGIwMKAG5ldHdvcmtfaWQeH1ALCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:stone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAAAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX3N0YWlycwQJAG5hbWVfaGFzaNRjqVC5GRVDAwoAbmV0d29ya19pZDcCv+MKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:mossy_cobblestone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSyAQAACAQAbmFtZSIAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lX3N0YWlycwQJAG5hbWVfaGFzaMVSTq5z9n1RAwoAbmV0d29ya19pZFIfrhkKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:oak_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ1AAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19zdGFpcnMECQBuYW1lX2hhc2jk/HFzdXy0FQMKAG5ldHdvcmtfaWQJjyzBCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:spruce_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAAAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9zdGFpcnMECQBuYW1lX2hhc2iznygw7uBPBQMKAG5ldHdvcmtfaWTv+is3CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:birch_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAAAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX3N0YWlycwQJAG5hbWVfaGFzaPfhbL619a3GAwoAbmV0d29ya19pZFyPlHAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:jungle_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAAAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9zdGFpcnMECQBuYW1lX2hhc2jodJsHUbOVxQMKAG5ldHdvcmtfaWR0z5d4CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:acacia_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAAAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9zdGFpcnMECQBuYW1lX2hhc2h3x1NmD43IqQMKAG5ldHdvcmtfaWS7Jwz6CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:dark_oak_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAAAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX3N0YWlycwQJAG5hbWVfaGFzaMfwkbYPbNmAAwoAbmV0d29ya19pZCmBYKAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:mangrove_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX3N0YWlycwQJAG5hbWVfaGFzaNpUDY+uGMpyAwoAbmV0d29ya19pZChzUAsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:cherry_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQcAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9zdGFpcnMECQBuYW1lX2hhc2jMtr0v9JY4zwMKAG5ldHdvcmtfaWRQwq31CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:bamboo_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT/AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19zdGFpcnMECQBuYW1lX2hhc2jFOzWL8PalKwMKAG5ldHdvcmtfaWTVPh42CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:bamboo_mosaic_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQKAwAACAQAbmFtZR4AbWluZWNyYWZ0OmJhbWJvb19tb3NhaWNfc3RhaXJzBAkAbmFtZV9oYXNoNLPiveSHPaoDCgBuZXR3b3JrX2lk44PHjgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:stone_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAAAACAQAbmFtZRwAbWluZWNyYWZ0OnN0b25lX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaN6tQViRo5cwAwoAbmV0d29ya19pZDMyMgIKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:mossy_stone_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAQAACAQAbmFtZSIAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaIB/Zv5YBPuYAwoAbmV0d29ya19pZANTOsMKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:sandstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAAAACAQAbmFtZRoAbWluZWNyYWZ0OnNhbmRzdG9uZV9zdGFpcnMECQBuYW1lX2hhc2hOyA0BoYUOPQMKAG5ldHdvcmtfaWSV/834CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:smooth_sandstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSwAQAACAQAbmFtZSEAbWluZWNyYWZ0OnNtb290aF9zYW5kc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNoB+CuCd8Ruz8DCgBuZXR3b3JrX2lksR+m8QoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:red_sandstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS0AAAACAQAbmFtZR4AbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNoPs0LpHPL24YDCgBuZXR3b3JrX2lkLYVt3woGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:smooth_red_sandstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAQAACAQAbmFtZSUAbWluZWNyYWZ0OnNtb290aF9yZWRfc2FuZHN0b25lX3N0YWlycwQJAG5hbWVfaGFzaBvjtQv5pf+MAwoAbmV0d29ya19pZMHNND8KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:granite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAQAACAQAbmFtZRgAbWluZWNyYWZ0OmdyYW5pdGVfc3RhaXJzBAkAbmFtZV9oYXNoGzpvtoqKQjgDCgBuZXR3b3JrX2lkPkcB1goGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:polished_granite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAQAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGVfc3RhaXJzBAkAbmFtZV9oYXNo3PvbSfEQklIDCgBuZXR3b3JrX2lkMmEm3AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:diorite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAQAACAQAbmFtZRgAbWluZWNyYWZ0OmRpb3JpdGVfc3RhaXJzBAkAbmFtZV9oYXNoi73T8VQuZmcDCgBuZXR3b3JrX2lk6i6nBQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:polished_diorite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAQAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGVfc3RhaXJzBAkAbmFtZV9oYXNoFKRJd5Wk5L0DCgBuZXR3b3JrX2lkbt2ioAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:andesite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAQAACAQAbmFtZRkAbWluZWNyYWZ0OmFuZGVzaXRlX3N0YWlycwQJAG5hbWVfaGFzaO5w2FKBw76EAwoAbmV0d29ya19pZKhXEgUKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:polished_andesite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWStAQAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlX3N0YWlycwQJAG5hbWVfaGFzaNcZZ/zmLInIAwoAbmV0d29ya19pZJTHrlEKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAAAACAQAbmFtZRYAbWluZWNyYWZ0OmJyaWNrX3N0YWlycwQJAG5hbWVfaGFzaMyt+cRDk5O2AwoAbmV0d29ya19pZNeMh58KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:nether_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRyAAAACAQAbmFtZR0AbWluZWNyYWZ0Om5ldGhlcl9icmlja19zdGFpcnMECQBuYW1lX2hhc2jRqIoOXgifBAMKAG5ldHdvcmtfaWQDiw5yCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:red_nether_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS3AQAACAQAbmFtZSEAbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNogQvosSbcj7kDCgBuZXR3b3JrX2lkx2IMtAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:end_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSxAQAACAQAbmFtZRoAbWluZWNyYWZ0OmVuZF9icmlja19zdGFpcnMECQBuYW1lX2hhc2hmlAk+QhsUsQMKAG5ldHdvcmtfaWTN7KFaCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:quartz_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWScAAAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9zdGFpcnMECQBuYW1lX2hhc2hmvpvOqGi6egMKAG5ldHdvcmtfaWRmUTh7CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:smooth_quartz_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS4AQAACAQAbmFtZR4AbWluZWNyYWZ0OnNtb290aF9xdWFydHpfc3RhaXJzBAkAbmFtZV9oYXNoNZZ9rX0qZOsDCgBuZXR3b3JrX2lkzsgQyQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:purpur_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAAAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnB1cl9zdGFpcnMECQBuYW1lX2hhc2ifwDxeezXD7gMKAG5ldHdvcmtfaWTT+rxiCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:prismarine_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAQAACAQAbmFtZRsAbWluZWNyYWZ0OnByaXNtYXJpbmVfc3RhaXJzBAkAbmFtZV9oYXNooTHSZ+IrYtcDCgBuZXR3b3JrX2lkxTJfeAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:dark_prismarine_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAQAACAQAbmFtZSAAbWluZWNyYWZ0OmRhcmtfcHJpc21hcmluZV9zdGFpcnMECQBuYW1lX2hhc2hIciLmam4o4AMKAG5ldHdvcmtfaWTVu7TCCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:prismarine_bricks_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAQAACAQAbmFtZSIAbWluZWNyYWZ0OnByaXNtYXJpbmVfYnJpY2tzX3N0YWlycwQJAG5hbWVfaGFzaNIjq1oBlZMMAwoAbmV0d29ya19pZGEFwLYKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:crimson_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT9AQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fc3RhaXJzBAkAbmFtZV9oYXNoZJqIzCBpCq4DCgBuZXR3b3JrX2lktXE00AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:warped_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT+AQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9zdGFpcnMECQBuYW1lX2hhc2hOkY27jLD4RQMKAG5ldHdvcmtfaWQ+E5VrCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:blackstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAgAACAQAbmFtZRsAbWluZWNyYWZ0OmJsYWNrc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNokdoUb76p9McDCgBuZXR3b3JrX2lk5fWI5goGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:polished_blackstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNolCFtFIE8MmADCgBuZXR3b3JrX2lkGTf7sgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:polished_blackstone_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQSAgAACAQAbmFtZSoAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNonks6UlfpOmkDCgBuZXR3b3JrX2lkgYeOdAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAgAACAQAbmFtZRsAbWluZWNyYWZ0OmN1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoHfoAXYq5G3MDCgBuZXR3b3JrX2lkeetf7woGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:exposed_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAgAACAQAbmFtZSMAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcl9zdGFpcnMECQBuYW1lX2hhc2howneQGtZ9cgMKAG5ldHdvcmtfaWSg73zdCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:weathered_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAgAACAQAbmFtZSUAbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyX3N0YWlycwQJAG5hbWVfaGFzaP+R5loXxrVgAwoAbmV0d29ya19pZOnbRf4KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:oxidized_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAgAACAQAbmFtZSQAbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNo6Jeoq5rsPxsDCgBuZXR3b3JrX2lkmRjDnQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:waxed_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAgAACAQAbmFtZSEAbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoh07CQj0/SR8DCgBuZXR3b3JrX2lkmYqoqAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:waxed_exposed_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcl9zdGFpcnMECQBuYW1lX2hhc2guVct1ilmxTwMKAG5ldHdvcmtfaWQgCPROCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:waxed_weathered_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRnAgAACAQAbmFtZSsAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyX3N0YWlycwQJAG5hbWVfaGFzaPXC8Sz/phCpAwoAbmV0d29ya19pZHlwHVsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:waxed_oxidized_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS/AgAACAQAbmFtZSoAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoaqGdkuhxVZUDCgBuZXR3b3JrX2lkYQXzzgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:cobbled_deepslate_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR8AgAACAQAbmFtZSIAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3N0YWlycwQJAG5hbWVfaGFzaPIfa+TpyJcIAwoAbmV0d29ya19pZJUvOYIKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:deepslate_tile_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3N0YWlycwQJAG5hbWVfaGFzaGFRFzB72mN2AwoAbmV0d29ya19pZJEOgIsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:polished_deepslate_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAgAACAQAbmFtZSMAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV9zdGFpcnMECQBuYW1lX2hhc2iNCYxVik9sGAMKAG5ldHdvcmtfaWSRVPnYCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:deepslate_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAgAACAQAbmFtZSAAbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja19zdGFpcnMECQBuYW1lX2hhc2hIasOahEf83wMKAG5ldHdvcmtfaWQ1qEDCCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:mud_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAgAACAQAbmFtZRoAbWluZWNyYWZ0Om11ZF9icmlja19zdGFpcnMECQBuYW1lX2hhc2gt3qxK1NWajAMKAG5ldHdvcmtfaWSm9N3MCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "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": "CgAAAwgAYmxvY2tfaWRgAAAACAQAbmFtZRIAbWluZWNyYWZ0OnRyYXBkb29yBAkAbmFtZV9oYXNotYiAJGtN0xADCgBuZXR3b3JrX2lkyTAWkAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:spruce_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAQAACAQAbmFtZRkAbWluZWNyYWZ0OnNwcnVjZV90cmFwZG9vcgQJAG5hbWVfaGFzaOwlfbgBkUW4AwoAbmV0d29ya19pZPHy1K0KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:birch_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAQAACAQAbmFtZRgAbWluZWNyYWZ0OmJpcmNoX3RyYXBkb29yBAkAbmFtZV9oYXNoSLtLweOLJ7wDCgBuZXR3b3JrX2lkeJWDfgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:jungle_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSTAQAACAQAbmFtZRkAbWluZWNyYWZ0Omp1bmdsZV90cmFwZG9vcgQJAG5hbWVfaGFzaDP/TnM9wyCIAwoAbmV0d29ya19pZEy2fJoKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:acacia_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAQAACAQAbmFtZRkAbWluZWNyYWZ0OmFjYWNpYV90cmFwZG9vcgQJAG5hbWVfaGFzaMj8xi3vmEKOAwoAbmV0d29ya19pZOHj8E8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:dark_oak_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAQAACAQAbmFtZRsAbWluZWNyYWZ0OmRhcmtfb2FrX3RyYXBkb29yBAkAbmFtZV9oYXNomB2GGJQ2aOMDCgBuZXR3b3JrX2lko5ZHTwoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:mangrove_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTvAgAACAQAbmFtZRsAbWluZWNyYWZ0Om1hbmdyb3ZlX3RyYXBkb29yBAkAbmFtZV9oYXNooV3kQsQUUmkDCgBuZXR3b3JrX2lkkF/mxAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:cherry_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAwAACAQAbmFtZRkAbWluZWNyYWZ0OmNoZXJyeV90cmFwZG9vcgQJAG5hbWVfaGFzaH/PefpfdHgtAwoAbmV0d29ya19pZOA7eNgKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:bamboo_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAwAACAQAbmFtZRkAbWluZWNyYWZ0OmJhbWJvb190cmFwZG9vcgQJAG5hbWVfaGFzaJrEOpsTwtKCAwoAbmV0d29ya19pZLvbPz8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:iron_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAAAACAQAbmFtZRcAbWluZWNyYWZ0Omlyb25fdHJhcGRvb3IECQBuYW1lX2hhc2gwA+IumsEiGQMKAG5ldHdvcmtfaWTvSVl/CgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:crimson_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT1AQAACAQAbmFtZRoAbWluZWNyYWZ0OmNyaW1zb25fdHJhcGRvb3IECQBuYW1lX2hhc2jHXufTnwUkYgMKAG5ldHdvcmtfaWQLjMYVCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:warped_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT2AQAACAQAbmFtZRkAbWluZWNyYWZ0OndhcnBlZF90cmFwZG9vcgQJAG5hbWVfaGFzaA20wG/+vkd6AwoAbmV0d29ya19pZHKR/hYKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:iron_bars", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAAAACAQAbmFtZRMAbWluZWNyYWZ0Omlyb25fYmFycwQJAG5hbWVfaGFzaPuefWSNAe56AwoAbmV0d29ya19pZN2LB5IKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmdsYXNzBAkAbmFtZV9oYXNowGJByfWff6gDCgBuZXR3b3JrX2lk0hdLNwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:white_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAAAACAQAbmFtZR0AbWluZWNyYWZ0OndoaXRlX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2iHubqoMbu9fAMKAG5ldHdvcmtfaWRndBrUCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:light_gray_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAwAACAQAbmFtZSIAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaKKa+LrRsHQhAwoAbmV0d29ya19pZEv2giYKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:gray_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSmAwAACAQAbmFtZRwAbWluZWNyYWZ0OmdyYXlfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaIETy7Y/HZREAwoAbmV0d29ya19pZDomVrUKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:black_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAwAACAQAbmFtZR0AbWluZWNyYWZ0OmJsYWNrX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2iV6BCwpfDMmwMKAG5ldHdvcmtfaWSV7doJCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:brown_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAwAACAQAbmFtZR0AbWluZWNyYWZ0OmJyb3duX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2igsEiq5np8JgMKAG5ldHdvcmtfaWRMzE/lCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:red_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWStAwAACAQAbmFtZRsAbWluZWNyYWZ0OnJlZF9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNoCa2J12/lQoIDCgBuZXR3b3JrX2lk283lWAoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:orange_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAwAACAQAbmFtZR4AbWluZWNyYWZ0Om9yYW5nZV9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNozgjAuvzhxGsDCgBuZXR3b3JrX2lkW5CkhQoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:yellow_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAwAACAQAbmFtZR4AbWluZWNyYWZ0OnllbGxvd19zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNo7EbHMd5WVugDCgBuZXR3b3JrX2lkkdDyXQoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:lime_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAwAACAQAbmFtZRwAbWluZWNyYWZ0OmxpbWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaBtZA1nZtwcFAwoAbmV0d29ya19pZDxX85UKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:green_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAwAACAQAbmFtZR0AbWluZWNyYWZ0OmdyZWVuX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2h91ptDgbehWwMKAG5ldHdvcmtfaWTlDhnECgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:cyan_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAwAACAQAbmFtZRwAbWluZWNyYWZ0OmN5YW5fc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaBkIYQ8nQLqbAwoAbmV0d29ya19pZOL1lHsKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:light_blue_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAwAACAQAbmFtZSIAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaLt05n1G0fiSAwoAbmV0d29ya19pZNbwulIKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:blue_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAwAACAQAbmFtZRwAbWluZWNyYWZ0OmJsdWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaPhLocSfzduRAwoAbmV0d29ya19pZENsjFwKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:purple_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAwAACAQAbmFtZR4AbWluZWNyYWZ0OnB1cnBsZV9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNoJk0DhRO0szUDCgBuZXR3b3JrX2lkD98ZxgoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:magenta_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAwAACAQAbmFtZR8AbWluZWNyYWZ0Om1hZ2VudGFfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaFEDeFiJj3zSAwoAbmV0d29ya19pZG+iFRoKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:pink_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAwAACAQAbmFtZRwAbWluZWNyYWZ0OnBpbmtfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaDijTX87ywxhAwoAbmV0d29ya19pZKdEricKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:tinted_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAgAACAQAbmFtZRYAbWluZWNyYWZ0OnRpbnRlZF9nbGFzcwQJAG5hbWVfaGFzaAFZWSamk6KdAwoAbmV0d29ya19pZGSvWX8KBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdsYXNzX3BhbmUECQBuYW1lX2hhc2gRSBHwNMQ4gQMKAG5ldHdvcmtfaWRGwixuCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:white_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAAAACAQAbmFtZSIAbWluZWNyYWZ0OndoaXRlX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaHgxQmgJVtRrAwoAbmV0d29ya19pZBEr/DYKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:light_gray_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSJAwAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNon0aQw9lNkSEDCgBuZXR3b3JrX2lk9dp5VgoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:gray_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAwAACAQAbmFtZSEAbWluZWNyYWZ0OmdyYXlfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNors74IIw+2MMDCgBuZXR3b3JrX2lkmrGO5woGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:black_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAwAACAQAbmFtZSIAbWluZWNyYWZ0OmJsYWNrX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaOK/5ZRRd+M1AwoAbmV0d29ya19pZDv++oQKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:brown_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSNAwAACAQAbmFtZSIAbWluZWNyYWZ0OmJyb3duX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLHeGJyRFTIWAwoAbmV0d29ya19pZMz9L0wKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:red_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAwAACAQAbmFtZSAAbWluZWNyYWZ0OnJlZF9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2gGr4x6JheAywMKAG5ldHdvcmtfaWQBjCTmCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:orange_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAwAACAQAbmFtZSMAbWluZWNyYWZ0Om9yYW5nZV9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2hbHxPD2gEbEAMKAG5ldHdvcmtfaWSt/7a5CgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:yellow_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAwAACAQAbmFtZSMAbWluZWNyYWZ0OnllbGxvd19zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2g9tl4aOCyZBwMKAG5ldHdvcmtfaWTXRAS7CgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:lime_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAwAACAQAbmFtZSEAbWluZWNyYWZ0OmxpbWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNo3CtUyLwoGegDCgBuZXR3b3JrX2lkYJDnggoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:green_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSOAwAACAQAbmFtZSIAbWluZWNyYWZ0OmdyZWVuX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaJo6YP7IMy9SAwoAbmV0d29ya19pZHOnixoKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:cyan_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAwAACAQAbmFtZSEAbWluZWNyYWZ0OmN5YW5fc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoti97c6QrbLQDCgBuZXR3b3JrX2lkUqFUeQoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:light_blue_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAwAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNovDg/gQle104DCgBuZXR3b3JrX2lkFuy4MQoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:blue_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSMAwAACAQAbmFtZSEAbWluZWNyYWZ0OmJsdWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoGc57tiexbQMDCgBuZXR3b3JrX2lk1eBLUAoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:purple_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAwAACAQAbmFtZSMAbWluZWNyYWZ0OnB1cnBsZV9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2hDJHYdd0FdfQMKAG5ldHdvcmtfaWSNsdK5CgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:magenta_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAwAACAQAbmFtZSQAbWluZWNyYWZ0Om1hZ2VudGFfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNo3pcOw5bs5XoDCgBuZXR3b3JrX2lkVbOR7AoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:pink_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAwAACAQAbmFtZSEAbWluZWNyYWZ0OnBpbmtfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoWRhSACMWgswDCgBuZXR3b3JrX2lkIR92xwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:ladder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRBAAAACAQAbmFtZRAAbWluZWNyYWZ0OmxhZGRlcgQJAG5hbWVfaGFzaKBhqheJVOz+AwoAbmV0d29ya19pZCgvzlsKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:scaffolding", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAQAACAQAbmFtZRUAbWluZWNyYWZ0OnNjYWZmb2xkaW5nBAkAbmFtZV9oYXNoYrkevrqcljwDCgBuZXR3b3JrX2lkD13mlAoGAHN0YXRlcwMJAHN0YWJpbGl0eQAAAAABDwBzdGFiaWxpdHlfY2hlY2sAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:stone_block_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWTkNl0JCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQwAc21vb3RoX3N0b25lAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:stone_block_slab4", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkQJoxlgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNAUAc3RvbmUAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:stone_block_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWRHh04KCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQsAY29iYmxlc3RvbmUAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkVRZB+woGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhEAbW9zc3lfY29iYmxlc3RvbmUAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:oak_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAAAACAQAbmFtZRIAbWluZWNyYWZ0Om9ha19zbGFiBAkAbmFtZV9oYXNoJp1Cp1M4jlwDCgBuZXR3b3JrX2lkZH6+owoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:spruce_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQjBAAACAQAbmFtZRUAbWluZWNyYWZ0OnNwcnVjZV9zbGFiBAkAbmFtZV9oYXNodQi70jB238cDCgBuZXR3b3JrX2lkrriOYQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:birch_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQkBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJpcmNoX3NsYWIECQBuYW1lX2hhc2gZPpfMxoOsTAMKAG5ldHdvcmtfaWThR9jyCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:jungle_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQlBAAACAQAbmFtZRUAbWluZWNyYWZ0Omp1bmdsZV9zbGFiBAkAbmFtZV9oYXNo6gLs79NXak4DCgBuZXR3b3JrX2lk5ZiKgwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:acacia_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQmBAAACAQAbmFtZRUAbWluZWNyYWZ0OmFjYWNpYV9zbGFiBAkAbmFtZV9oYXNomSdFmDnv4OUDCgBuZXR3b3JrX2lkHttaXAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:dark_oak_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQnBAAACAQAbmFtZRcAbWluZWNyYWZ0OmRhcmtfb2FrX3NsYWIECQBuYW1lX2hhc2hJjTohRFyhIQMKAG5ldHdvcmtfaWRMzDTyCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:mangrove_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWToAgAACAQAbmFtZRcAbWluZWNyYWZ0Om1hbmdyb3ZlX3NsYWIECQBuYW1lX2hhc2jYCcmhJPeNMwMKAG5ldHdvcmtfaWQx6U1yCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:cherry_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQaAwAACAQAbmFtZRUAbWluZWNyYWZ0OmNoZXJyeV9zbGFiBAkAbmFtZV9oYXNoTt0MmVn/mqoDCgBuZXR3b3JrX2lk2VVsZQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:bamboo_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQAAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJhbWJvb19zbGFiBAkAbmFtZV9oYXNoo1xuFqINeLYDCgBuZXR3b3JrX2lkVC+0twoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:bamboo_mosaic_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQLAwAACAQAbmFtZRwAbWluZWNyYWZ0OmJhbWJvb19tb3NhaWNfc2xhYgQJAG5hbWVfaGFzaNbVRBZ/ChI3AwoAbmV0d29ya19pZOLZHFMKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:stone_block_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWQSiInOCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQsAc3RvbmVfYnJpY2sAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:stone_block_slab4", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkoF89tgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNBEAbW9zc3lfc3RvbmVfYnJpY2sAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:stone_block_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWSkoAE4CgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQkAc2FuZHN0b25lAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:stone_block_slab4", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkWfF7pgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNA0AY3V0X3NhbmRzdG9uZQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkbKRChAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhAAc21vb3RoX3NhbmRzdG9uZQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkBlrvqAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMg0AcmVkX3NhbmRzdG9uZQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:stone_block_slab4", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkRWFXuwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNBEAY3V0X3JlZF9zYW5kc3RvbmUAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkom8neQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMxQAc21vb3RoX3JlZF9zYW5kc3RvbmUAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkd1ZaWgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMwcAZ3Jhbml0ZQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkISH4iwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMxAAcG9saXNoZWRfZ3Jhbml0ZQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkqxEDMwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMwcAZGlvcml0ZQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkSYs86QoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMxAAcG9saXNoZWRfZGlvcml0ZQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkq6BU6goGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMwgAYW5kZXNpdGUAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkTSXY8AoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMxEAcG9saXNoZWRfYW5kZXNpdGUAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:stone_block_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWQiYHKTCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQUAYnJpY2sAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:stone_block_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWTk/0LfCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQwAbmV0aGVyX2JyaWNrAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lk/hXQ7AoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhAAcmVkX25ldGhlcl9icmljawADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkYJNxrwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMw8AZW5kX3N0b25lX2JyaWNrAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:stone_block_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWRlj0/sCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQYAcXVhcnR6AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:stone_block_slab4", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkMae+2goGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNA0Ac21vb3RoX3F1YXJ0egADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lk+kMHGAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMgYAcHVycHVyAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkKOSOMAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhAAcHJpc21hcmluZV9yb3VnaAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lk8igLCQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMg8AcHJpc21hcmluZV9kYXJrAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkSFbyEwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhAAcHJpc21hcmluZV9icmljawADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:crimson_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAgAACAQAbmFtZRYAbWluZWNyYWZ0OmNyaW1zb25fc2xhYgQJAG5hbWVfaGFzaKZ+EfP0ZYOZAwoAbmV0d29ya19pZAxRUWAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:warped_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQIAgAACAQAbmFtZRUAbWluZWNyYWZ0OndhcnBlZF9zbGFiBAkAbmFtZV9oYXNo/AT0e/Z9W7UDCgBuZXR3b3JrX2lk1yq11AoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:blackstone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsYWNrc3RvbmVfc2xhYgQJAG5hbWVfaGFzaF/DD4ZUlNgtAwoAbmV0d29ya19pZGy1DjwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:polished_blackstone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQkAgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfc2xhYgQJAG5hbWVfaGFzaDYnuUs86EWfAwoAbmV0d29ya19pZJj2bXIKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:polished_blackstone_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQbAgAACAQAbmFtZSgAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaKySLqvHc4xXAwoAbmV0d29ya19pZOyWX94KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRoAgAACAQAbmFtZRkAbWluZWNyYWZ0OmN1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaDsNpb2qs4iBAwoAbmV0d29ya19pZOTm2nsKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:exposed_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRpAgAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcl9zbGFiBAkAbmFtZV9oYXNoahQ5OwIQb7kDCgBuZXR3b3JrX2lkrUlZLwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:weathered_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRqAgAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyX3NsYWIECQBuYW1lX2hhc2hBIuGIOVVXogMKAG5ldHdvcmtfaWQgnaDiCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:oxidized_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAgAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaOptj9ycfpaDAwoAbmV0d29ya19pZMzFSRgKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:waxed_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaAlx6DZOCTHzAwoAbmV0d29ya19pZFRBvDAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:waxed_exposed_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAgAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcl9zbGFiBAkAbmFtZV9oYXNo3KqS5OnhtRIDCgBuZXR3b3JrX2lkHTGcTgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:waxed_weathered_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyX3NsYWIECQBuYW1lX2hhc2gzZ1oX0HCFtwMKAG5ldHdvcmtfaWSgJR+XCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:waxed_oxidized_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTAAgAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaMjjTnLu1KcqAwoAbmV0d29ya19pZIxsnFYKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:cobbled_deepslate_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AgAACAQAbmFtZSAAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3NsYWIECQBuYW1lX2hhc2gwJIVWK1TM2QMKAG5ldHdvcmtfaWTYAoX5CgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:polished_deepslate_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR/AgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV9zbGFiBAkAbmFtZV9oYXNoC/Adiz8k6RYDCgBuZXR3b3JrX2lkuFYMAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:deepslate_tile_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3NsYWIECQBuYW1lX2hhc2hPydV6emzIXAMKAG5ldHdvcmtfaWQwlbFCCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:deepslate_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja19zbGFiBAkAbmFtZV9oYXNoSv62V7iw10UDCgBuZXR3b3JrX2lkWMoragoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:mud_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAgAACAQAbmFtZRgAbWluZWNyYWZ0Om11ZF9icmlja19zbGFiBAkAbmFtZV9oYXNoq/tGBQWkv08DCgBuZXR3b3JrX2lkl4nnMwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:brick_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAAAACAQAbmFtZRUAbWluZWNyYWZ0OmJyaWNrX2Jsb2NrBAkAbmFtZV9oYXNo5Qc2E005S3oDCgBuZXR3b3JrX2lkqeGWRgoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:chiseled_nether_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAgAACAQAbmFtZSAAbWluZWNyYWZ0OmNoaXNlbGVkX25ldGhlcl9icmlja3MECQBuYW1lX2hhc2g31SBPTcUK1QMKAG5ldHdvcmtfaWS8TJ+TCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:cracked_nether_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAgAACAQAbmFtZR8AbWluZWNyYWZ0OmNyYWNrZWRfbmV0aGVyX2JyaWNrcwQJAG5hbWVfaGFzaAdC6eKzXT5tAwoAbmV0d29ya19pZIUSejwKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:quartz_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAgAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9icmlja3MECQBuYW1lX2hhc2jSZO590dd8sAMKAG5ldHdvcmtfaWSc5xCLCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:stonebrick", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAAAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWQ5kni1CgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQcAZGVmYXVsdAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:stonebrick", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAAAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWTDw813CgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQUAbW9zc3kAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:stonebrick", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAAAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWSTvQGECgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQcAY3JhY2tlZAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:stonebrick", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAAAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWQIM0OwCgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQgAY2hpc2VsZWQAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:end_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTOAAAACAQAbmFtZRQAbWluZWNyYWZ0OmVuZF9icmlja3MECQBuYW1lX2hhc2hIUFfxNLZaFgMKAG5ldHdvcmtfaWQ/vDihCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:prismarine", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAAAACAQAbmFtZRQAbWluZWNyYWZ0OnByaXNtYXJpbmUECQBuYW1lX2hhc2jcnQCHi9CspQMKAG5ldHdvcmtfaWSH021WCgYAc3RhdGVzCBUAcHJpc21hcmluZV9ibG9ja190eXBlBgBicmlja3MAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:polished_blackstone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tzBAkAbmFtZV9oYXNoIHgsgIdzKXcDCgBuZXR3b3JrX2lkUw9b3woGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:cracked_polished_blackstone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAgAACAQAbmFtZSwAbWluZWNyYWZ0OmNyYWNrZWRfcG9saXNoZWRfYmxhY2tzdG9uZV9icmlja3MECQBuYW1lX2hhc2jQIO1GQDk80AMKAG5ldHdvcmtfaWQ3UlRYCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:gilded_blackstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAgAACAQAbmFtZRsAbWluZWNyYWZ0OmdpbGRlZF9ibGFja3N0b25lBAkAbmFtZV9oYXNoNoWt1ocG0HEDCgBuZXR3b3JrX2lktL8gUwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:chiseled_polished_blackstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAgAACAQAbmFtZSYAbWluZWNyYWZ0OmNoaXNlbGVkX3BvbGlzaGVkX2JsYWNrc3RvbmUECQBuYW1lX2hhc2gzFa+kEjCJgAMKAG5ldHdvcmtfaWR2NJX2CgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:deepslate_tiles", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAgAACAQAbmFtZRkAbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlcwQJAG5hbWVfaGFzaGcLLx3NXAFvAwoAbmV0d29ya19pZI/G/xYKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:cracked_deepslate_tiles", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSYAgAACAQAbmFtZSEAbWluZWNyYWZ0OmNyYWNrZWRfZGVlcHNsYXRlX3RpbGVzBAkAbmFtZV9oYXNo9zWgkFuMM1QDCgBuZXR3b3JrX2lkGwY6OgoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:deepslate_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAgAACAQAbmFtZRoAbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja3MECQBuYW1lX2hhc2gucvFmPdZxigMKAG5ldHdvcmtfaWSH4HDPCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:cracked_deepslate_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAgAACAQAbmFtZSIAbWluZWNyYWZ0OmNyYWNrZWRfZGVlcHNsYXRlX2JyaWNrcwQJAG5hbWVfaGFzaN40aqhh9WqHAwoAbmV0d29ya19pZO9GPBQKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:chiseled_deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAgAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaEU7/uRG8HSBAwoAbmV0d29ya19pZEqmI0EKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:cobblestone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAAAACAQAbmFtZRUAbWluZWNyYWZ0OmNvYmJsZXN0b25lBAkAbmFtZV9oYXNoPoK7mGlSUz4DCgBuZXR3b3JrX2lkLm7RZwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:mossy_cobblestone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQwAAAACAQAbmFtZRsAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lBAkAbmFtZV9oYXNoGJ67FCbkChMDCgBuZXR3b3JrX2lk/pYs1AoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:cobbled_deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AgAACAQAbmFtZRsAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlBAkAbmFtZV9oYXNoLUz9Y/ywmLwDCgBuZXR3b3JrX2lkNwzZ+AoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:smooth_stone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AQAACAQAbmFtZRYAbWluZWNyYWZ0OnNtb290aF9zdG9uZQQJAG5hbWVfaGFzaMwf87/JaTNvAwoAbmV0d29ya19pZLkZICEKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZB2wApMKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGUHAGRlZmF1bHQAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZB7E+eQKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGULAGhlaXJvZ2x5cGhzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZFQnDaEKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGUDAGN1dAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZPO4A3IKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGUGAHNtb290aAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:red_sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWRhNYiFCgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlBwBkZWZhdWx0AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:red_sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWTqXJr1CgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlCwBoZWlyb2dseXBocwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:red_sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWTQRGkFCgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlAwBjdXQAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:red_sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWTvAHWDCgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlBgBzbW9vdGgAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:coal_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWStAAAACAQAbmFtZRQAbWluZWNyYWZ0OmNvYWxfYmxvY2sECQBuYW1lX2hhc2jH8QQP3t5PiAMKAG5ldHdvcmtfaWRo+sR+CgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:dried_kelp_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAQAACAQAbmFtZRoAbWluZWNyYWZ0OmRyaWVkX2tlbHBfYmxvY2sECQBuYW1lX2hhc2iRoucexkrl8wMKAG5ldHdvcmtfaWQQCCrvCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:gold_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdvbGRfYmxvY2sECQBuYW1lX2hhc2iYLshvjtXzFwMKAG5ldHdvcmtfaWTDJGBcCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:iron_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAAAACAQAbmFtZRQAbWluZWNyYWZ0Omlyb25fYmxvY2sECQBuYW1lX2hhc2jYINmJQbvV/gMKAG5ldHdvcmtfaWRf7AbICgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:copper_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRTAgAACAQAbmFtZRYAbWluZWNyYWZ0OmNvcHBlcl9ibG9jawQJAG5hbWVfaGFzaDVxnehsGaZ1AwoAbmV0d29ya19pZIiUodwKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:exposed_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAgAACAQAbmFtZRgAbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoQH3Fukmu3CEDCgBuZXR3b3JrX2lk72jFIwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:weathered_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAgAACAQAbmFtZRoAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2hJCQXbvobv+gMKAG5ldHdvcmtfaWQwM0lJCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:oxidized_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAgAACAQAbmFtZRkAbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMDtJqR0G5Y7AwoAbmV0d29ya19pZGjN8bUKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:waxed_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAgAACAQAbmFtZRYAbWluZWNyYWZ0OndheGVkX2NvcHBlcgQJAG5hbWVfaGFzaPF+FG6Eh5fsAwoAbmV0d29ya19pZIjtz/0KBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:waxed_exposed_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAgAACAQAbmFtZR4AbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoig8IOc+SCikDCgBuZXR3b3JrX2lklz8yWQoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:waxed_weathered_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRZAgAACAQAbmFtZSAAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2gjtPq8MOdvKgMKAG5ldHdvcmtfaWSQ9Ln9CgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:waxed_oxidized_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS9AgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMaORhsO+LzjAwoAbmV0d29ya19pZJhGfLEKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRaAgAACAQAbmFtZRQAbWluZWNyYWZ0OmN1dF9jb3BwZXIECQBuYW1lX2hhc2hAfN3NGax3eAMKAG5ldHdvcmtfaWTnFBtYCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:exposed_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAgAACAQAbmFtZRwAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcgQJAG5hbWVfaGFzaA85G3yv/w6pAwoAbmV0d29ya19pZMQhr0QKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:weathered_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRcAgAACAQAbmFtZR4AbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyBAkAbmFtZV9oYXNoVgRV0fBaz88DCgBuZXR3b3JrX2lk/0cYugoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:oxidized_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRdAgAACAQAbmFtZR0AbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2iP8WmFWOkriwMKAG5ldHdvcmtfaWQPdce7CgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:waxed_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWReAgAACAQAbmFtZRoAbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2jumiwOZIqv2AMKAG5ldHdvcmtfaWQvuxx9CgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:waxed_exposed_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRfAgAACAQAbmFtZSIAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcgQJAG5hbWVfaGFzaPE/OfK6IoVMAwoAbmV0d29ya19pZHy5HkcKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:waxed_weathered_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRgAgAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyBAkAbmFtZV9oYXNoCA1xDp11bnwDCgBuZXR3b3JrX2lkDyEDVQoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:waxed_oxidized_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS+AgAACAQAbmFtZSMAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2i1pZAsZYHLDAMKAG5ldHdvcmtfaWQ/wSkCCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:emerald_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAAAACAQAbmFtZRcAbWluZWNyYWZ0OmVtZXJhbGRfYmxvY2sECQBuYW1lX2hhc2hK6QunqJznNAMKAG5ldHdvcmtfaWRk5+otCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:diamond_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5AAAACAQAbmFtZRcAbWluZWNyYWZ0OmRpYW1vbmRfYmxvY2sECQBuYW1lX2hhc2iGKrxuvkytFQMKAG5ldHdvcmtfaWQQeQZXCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:lapis_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAAAACAQAbmFtZRUAbWluZWNyYWZ0OmxhcGlzX2Jsb2NrBAkAbmFtZV9oYXNoDZ44xdb2zVoDCgBuZXR3b3JrX2lktVy0BAoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:raw_iron_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTCAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJhd19pcm9uX2Jsb2NrBAkAbmFtZV9oYXNo9XyzNIQXxvwDCgBuZXR3b3JrX2lknms1QAoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:raw_copper_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTDAgAACAQAbmFtZRoAbWluZWNyYWZ0OnJhd19jb3BwZXJfYmxvY2sECQBuYW1lX2hhc2hw1KG0TNUGgwMKAG5ldHdvcmtfaWS1vGo/CgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:raw_gold_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJhd19nb2xkX2Jsb2NrBAkAbmFtZV9oYXNo6YuwuLwfOBwDCgBuZXR3b3JrX2lkLiQ5gQoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:quartz_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAAAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZEupC1AKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQcAZGVmYXVsdAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:quartz_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAAAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZM97+l0KBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQUAbGluZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:quartz_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAAAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZCbTfssKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQgAY2hpc2VsZWQICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:quartz_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAAAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZJss8V0KBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQYAc21vb3RoCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:prismarine", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAAAACAQAbmFtZRQAbWluZWNyYWZ0OnByaXNtYXJpbmUECQBuYW1lX2hhc2jcnQCHi9CspQMKAG5ldHdvcmtfaWRFIsoGCgYAc3RhdGVzCBUAcHJpc21hcmluZV9ibG9ja190eXBlBwBkZWZhdWx0AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:prismarine", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAAAACAQAbmFtZRQAbWluZWNyYWZ0OnByaXNtYXJpbmUECQBuYW1lX2hhc2jcnQCHi9CspQMKAG5ldHdvcmtfaWTDNWOvCgYAc3RhdGVzCBUAcHJpc21hcmluZV9ibG9ja190eXBlBABkYXJrAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:slime", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnNsaW1lBAkAbmFtZV9oYXNoHJiEEJx+JlkDCgBuZXR3b3JrX2lkfgfVzAoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:honey_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAQAACAQAbmFtZRUAbWluZWNyYWZ0OmhvbmV5X2Jsb2NrBAkAbmFtZV9oYXNo9zLYSUlelywDCgBuZXR3b3JrX2lko+dyWgoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:honeycomb_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAQAACAQAbmFtZRkAbWluZWNyYWZ0OmhvbmV5Y29tYl9ibG9jawQJAG5hbWVfaGFzaASIPuOCYd1oAwoAbmV0d29ya19pZKys4n4KBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:hay_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAAAACAQAbmFtZRMAbWluZWNyYWZ0OmhheV9ibG9jawQJAG5hbWVfaGFzaIB2VxKxX8EpAwoAbmV0d29ya19pZKuQSloKBgBzdGF0ZXMDCgBkZXByZWNhdGVkAAAAAAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:bone_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAAAACAQAbmFtZRQAbWluZWNyYWZ0OmJvbmVfYmxvY2sECQBuYW1lX2hhc2i4ZX576W9AWgMKAG5ldHdvcmtfaWTWGacQCgYAc3RhdGVzAwoAZGVwcmVjYXRlZAAAAAAICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:nether_brick", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRwAAAACAQAbmFtZRYAbWluZWNyYWZ0Om5ldGhlcl9icmljawQJAG5hbWVfaGFzaMxcRiheU+nXAwoAbmV0d29ya19pZMkmzloKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:red_nether_brick", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAAAACAQAbmFtZRoAbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2sECQBuYW1lX2hhc2j8pRO4LfoECAMKAG5ldHdvcmtfaWRpdF0YCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:netherite_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAgAACAQAbmFtZRkAbWluZWNyYWZ0Om5ldGhlcml0ZV9ibG9jawQJAG5hbWVfaGFzaMghh6Zib/ZKAwoAbmV0d29ya19pZIz0mq0KBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:lodestone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAQAACAQAbmFtZRMAbWluZWNyYWZ0OmxvZGVzdG9uZQQJAG5hbWVfaGFzaJ2gmHOTlXv8AwoAbmV0d29ya19pZEfgB4wKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:white_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAAAACAQAbmFtZRQAbWluZWNyYWZ0OndoaXRlX3dvb2wECQBuYW1lX2hhc2jRWB7vaIEDiQMKAG5ldHdvcmtfaWSO8paQCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:light_gray_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQnAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfd29vbAQJAG5hbWVfaGFzaOpdQ1a2v4b3AwoAbmV0d29ya19pZIqZCYEKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:gray_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAwAACAQAbmFtZRMAbWluZWNyYWZ0OmdyYXlfd29vbAQJAG5hbWVfaGFzaLsc1Lp1xdIOAwoAbmV0d29ya19pZFUs+HgKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:black_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAwAACAQAbmFtZRQAbWluZWNyYWZ0OmJsYWNrX3dvb2wECQBuYW1lX2hhc2hP2HC6o0X4HAMKAG5ldHdvcmtfaWRUbORcCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:brown_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAwAACAQAbmFtZRQAbWluZWNyYWZ0OmJyb3duX3dvb2wECQBuYW1lX2hhc2ig5IW89PrREwMKAG5ldHdvcmtfaWRjT9j8CgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:red_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQrAwAACAQAbmFtZRIAbWluZWNyYWZ0OnJlZF93b29sBAkAbmFtZV9oYXNoY4TBDq+mFgUDCgBuZXR3b3JrX2lktn9lcAoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:orange_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAwAACAQAbmFtZRUAbWluZWNyYWZ0Om9yYW5nZV93b29sBAkAbmFtZV9oYXNoFstfrTZfSCgDCgBuZXR3b3JrX2lk+rqywwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:yellow_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAwAACAQAbmFtZRUAbWluZWNyYWZ0OnllbGxvd193b29sBAkAbmFtZV9oYXNoTFyus2RHegcDCgBuZXR3b3JrX2lkkKBhXAoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:lime_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAwAACAQAbmFtZRMAbWluZWNyYWZ0OmxpbWVfd29vbAQJAG5hbWVfaGFzaNVnnzKiMxmeAwoAbmV0d29ya19pZG9b32kKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:green_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAwAACAQAbmFtZRQAbWluZWNyYWZ0OmdyZWVuX3dvb2wECQBuYW1lX2hhc2i3mElRYHIcSQMKAG5ldHdvcmtfaWSssprwCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:cyan_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQwAwAACAQAbmFtZRMAbWluZWNyYWZ0OmN5YW5fd29vbAQJAG5hbWVfaGFzaBNDfvHn8dqFAwoAbmV0d29ya19pZK0hAbgKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:light_blue_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQxAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfd29vbAQJAG5hbWVfaGFzaLWFAUfyxFPNAwoAbmV0d29ya19pZL2oEugKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:blue_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQyAwAACAQAbmFtZRMAbWluZWNyYWZ0OmJsdWVfd29vbAQJAG5hbWVfaGFzaLjHyxxbTWCLAwoAbmV0d29ya19pZPaLdFQKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:purple_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQzAwAACAQAbmFtZRUAbWluZWNyYWZ0OnB1cnBsZV93b29sBAkAbmFtZV9oYXNojvFtqzjAf/4DCgBuZXR3b3JrX2lklqASNQoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:magenta_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ0AwAACAQAbmFtZRYAbWluZWNyYWZ0Om1hZ2VudGFfd29vbAQJAG5hbWVfaGFzaGuOHvf+Pd4yAwoAbmV0d29ya19pZI4UoDQKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:pink_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ1AwAACAQAbmFtZRMAbWluZWNyYWZ0OnBpbmtfd29vbAQJAG5hbWVfaGFzaPiVA2pFeoFLAwoAbmV0d29ya19pZOZRO6oKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:white_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAAAACAQAbmFtZRYAbWluZWNyYWZ0OndoaXRlX2NhcnBldAQJAG5hbWVfaGFzaNeMHTI1fWPXAwoAbmV0d29ya19pZEahDFcKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:light_gray_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAwAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FycGV0BAkAbmFtZV9oYXNoHPw6ArBAsP0DCgBuZXR3b3JrX2lkQoAeUAoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:gray_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRaAwAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXlfY2FycGV0BAkAbmFtZV9oYXNoZVR0OI+1VRADCgBuZXR3b3JrX2lkETF4WwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:black_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJsYWNrX2NhcnBldAQJAG5hbWVfaGFzaOk7LP9NptyhAwoAbmV0d29ya19pZFjmXtIKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:brown_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRfAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJyb3duX2NhcnBldAQJAG5hbWVfaGFzaNaXFyOsAvIvAwoAbmV0d29ya19pZHPjFuoKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:red_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAwAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9jYXJwZXQECQBuYW1lX2hhc2i9eSKBf6SO3wMKAG5ldHdvcmtfaWQuhI/KCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:orange_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAwAACAQAbmFtZRcAbWluZWNyYWZ0Om9yYW5nZV9jYXJwZXQECQBuYW1lX2hhc2hIUkO4HlAdygMKAG5ldHdvcmtfaWSyKV9OCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:yellow_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAwAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19jYXJwZXQECQBuYW1lX2hhc2hSDKX3scCamwMKAG5ldHdvcmtfaWT8nq+ECgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:lime_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAwAACAQAbmFtZRUAbWluZWNyYWZ0OmxpbWVfY2FycGV0BAkAbmFtZV9oYXNo+6KFOpzsib4DCgBuZXR3b3JrX2lkT+DS4woGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:green_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRgAwAACAQAbmFtZRYAbWluZWNyYWZ0OmdyZWVuX2NhcnBldAQJAG5hbWVfaGFzaCHPMP9ltqFJAwoAbmV0d29ya19pZBgwAvAKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:cyan_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRcAwAACAQAbmFtZRUAbWluZWNyYWZ0OmN5YW5fY2FycGV0BAkAbmFtZV9oYXNobXf62dQBJj8DCgBuZXR3b3JrX2lkKVppLgoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:light_blue_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAwAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FycGV0BAkAbmFtZV9oYXNo20l4oktdZ3sDCgBuZXR3b3JrX2lkjdeMiwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:blue_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWReAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfY2FycGV0BAkAbmFtZV9oYXNo3p3lsW0eQwsDCgBuZXR3b3JrX2lkAovdPQoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:purple_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRdAwAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnBsZV9jYXJwZXQECQBuYW1lX2hhc2jwIA9pW/qp7QMKAG5ldHdvcmtfaWTqJqhjCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:magenta_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAwAACAQAbmFtZRgAbWluZWNyYWZ0Om1hZ2VudGFfY2FycGV0BAkAbmFtZV9oYXNoFXT36YNNZhMDCgBuZXR3b3JrX2lk+tqsGAoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:pink_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRZAwAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfY2FycGV0BAkAbmFtZV9oYXNoHll72oqk+OoDCgBuZXR3b3JrX2lkrnBYDwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:white_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTtAAAACAQAbmFtZR8AbWluZWNyYWZ0OndoaXRlX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaFUk9iXVjwV8AwoAbmV0d29ya19pZJPZY8AKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:light_gray_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAwAACAQAbmFtZSQAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNo7EUk30hmUtYDCgBuZXR3b3JrX2lkh8jVIwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:gray_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAwAACAQAbmFtZR4AbWluZWNyYWZ0OmdyYXlfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoW77af6WihdwDCgBuZXR3b3JrX2lkSsqC1woGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:black_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTSAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJsYWNrX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaAfWYp0xtgcfAwoAbmV0d29ya19pZMWTC8EKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:brown_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTPAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJyb3duX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaB74EeiLO46XAwoAbmV0d29ya19pZEDHKqwKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:red_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTRAwAACAQAbmFtZR0AbWluZWNyYWZ0OnJlZF9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2gjFut6Z/VH1gMKAG5ldHdvcmtfaWSvcmwYCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:orange_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAwAACAQAbmFtZSAAbWluZWNyYWZ0Om9yYW5nZV9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2gADDj2IJiw+gMKAG5ldHdvcmtfaWTHph0FCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:yellow_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTHAwAACAQAbmFtZSAAbWluZWNyYWZ0OnllbGxvd19jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2iy6qKNn3ob5wMKAG5ldHdvcmtfaWQZAI39CgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:lime_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAwAACAQAbmFtZR4AbWluZWNyYWZ0OmxpbWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNo4dYIPslbXPUDCgBuZXR3b3JrX2lk2O8X0AoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:green_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTQAwAACAQAbmFtZR8AbWluZWNyYWZ0OmdyZWVuX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaM/c9x2aJh3HAwoAbmV0d29ya19pZA0VfBMKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:cyan_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTMAwAACAQAbmFtZR4AbWluZWNyYWZ0OmN5YW5fY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNok+xKAe7XXjoDCgBuZXR3b3JrX2lkmkn6uwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:light_blue_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTGAwAACAQAbmFtZSQAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNogScpIQceyAEDCgBuZXR3b3JrX2lkOmVSbgoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:blue_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTOAwAACAQAbmFtZR4AbWluZWNyYWZ0OmJsdWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoFp7mmeL86r0DCgBuZXR3b3JrX2lkS3b3RQoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:purple_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAwAACAQAbmFtZSAAbWluZWNyYWZ0OnB1cnBsZV9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2iYcVU04hoStwMKAG5ldHdvcmtfaWQXimEjCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:magenta_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAwAACAQAbmFtZSEAbWluZWNyYWZ0Om1hZ2VudGFfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoy/70q6VPsWgDCgBuZXR3b3JrX2lkf9mxQwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:pink_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAwAACAQAbmFtZR4AbWluZWNyYWZ0OnBpbmtfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoVikSAf8DwV0DCgBuZXR3b3JrX2lku2MivwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:white_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTsAAAACAQAbmFtZRgAbWluZWNyYWZ0OndoaXRlX2NvbmNyZXRlBAkAbmFtZV9oYXNo6zAp7lsLlvkDCgBuZXR3b3JrX2lk3MAYQAoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:light_gray_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AwAACAQAbmFtZR0AbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY29uY3JldGUECQBuYW1lX2hhc2hEtet5wuDIKAMKAG5ldHdvcmtfaWQISs02CgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:gray_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AwAACAQAbmFtZRcAbWluZWNyYWZ0OmdyYXlfY29uY3JldGUECQBuYW1lX2hhc2j92INnb0a83AMKAG5ldHdvcmtfaWQj8RHwCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:black_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAwAACAQAbmFtZRgAbWluZWNyYWZ0OmJsYWNrX2NvbmNyZXRlBAkAbmFtZV9oYXNo2X7NDIQmZ70DCgBuZXR3b3JrX2lk2uiVDQoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:brown_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AwAACAQAbmFtZRgAbWluZWNyYWZ0OmJyb3duX2NvbmNyZXRlBAkAbmFtZV9oYXNoeka02BwXf6oDCgBuZXR3b3JrX2lkYf+xDQoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:red_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAwAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZF9jb25jcmV0ZQQJAG5hbWVfaGFzaPWmNowLGubqAwoAbmV0d29ya19pZKwyx58KBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:orange_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRzAwAACAQAbmFtZRkAbWluZWNyYWZ0Om9yYW5nZV9jb25jcmV0ZQQJAG5hbWVfaGFzaAgE8XmaAi6+AwoAbmV0d29ya19pZMDQNz8KBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:yellow_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR2AwAACAQAbmFtZRkAbWluZWNyYWZ0OnllbGxvd19jb25jcmV0ZQQJAG5hbWVfaGFzaE6ONfJPBd0+AwoAbmV0d29ya19pZMarutwKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:lime_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR3AwAACAQAbmFtZRcAbWluZWNyYWZ0OmxpbWVfY29uY3JldGUECQBuYW1lX2hhc2gnd8JW6wmJcAMKAG5ldHdvcmtfaWTd47aoCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:green_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR/AwAACAQAbmFtZRgAbWluZWNyYWZ0OmdyZWVuX2NvbmNyZXRlBAkAbmFtZV9oYXNokbFxRKchQZkDCgBuZXR3b3JrX2lkmhZWUgoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:cyan_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AwAACAQAbmFtZRcAbWluZWNyYWZ0OmN5YW5fY29uY3JldGUECQBuYW1lX2hhc2hFRrWJ33qj1wMKAG5ldHdvcmtfaWQbi5b8CgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:light_blue_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR1AwAACAQAbmFtZR0AbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY29uY3JldGUECQBuYW1lX2hhc2gHAe0kl0SE4AMKAG5ldHdvcmtfaWRL/GbSCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:blue_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AwAACAQAbmFtZRcAbWluZWNyYWZ0OmJsdWVfY29uY3JldGUECQBuYW1lX2hhc2hiay301nnj1wMKAG5ldHdvcmtfaWRMvFXNCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:purple_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR8AwAACAQAbmFtZRkAbWluZWNyYWZ0OnB1cnBsZV9jb25jcmV0ZQQJAG5hbWVfaGFzaHBHflsPIwdXAwoAbmV0d29ya19pZCyKA5gKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:magenta_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR0AwAACAQAbmFtZRoAbWluZWNyYWZ0Om1hZ2VudGFfY29uY3JldGUECQBuYW1lX2hhc2gN7LuB/OvdZAMKAG5ldHdvcmtfaWTc6ZOdCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:pink_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AwAACAQAbmFtZRcAbWluZWNyYWZ0OnBpbmtfY29uY3JldGUECQBuYW1lX2hhc2ii2G5F0u3SOAMKAG5ldHdvcmtfaWSszGgrCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:clay", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRSAAAACAQAbmFtZQ4AbWluZWNyYWZ0OmNsYXkECQBuYW1lX2hhc2j/S6sKXRcpzwMKAG5ldHdvcmtfaWRmsb8nCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:hardened_clay", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAAAACAQAbmFtZRcAbWluZWNyYWZ0OmhhcmRlbmVkX2NsYXkECQBuYW1lX2hhc2jrnRwCJ0krJAMKAG5ldHdvcmtfaWRBCOrrCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:white_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSfAAAACAQAbmFtZRoAbWluZWNyYWZ0OndoaXRlX3RlcnJhY290dGEECQBuYW1lX2hhc2j3RSdgmnAIewMKAG5ldHdvcmtfaWSimKw+CgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:light_gray_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAwAACAQAbmFtZR8AbWluZWNyYWZ0OmxpZ2h0X2dyYXlfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAz1Ri3wIxomAwoAbmV0d29ya19pZH5qgOcKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:gray_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAwAACAQAbmFtZRkAbWluZWNyYWZ0OmdyYXlfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAXdSLAaNZ9vAwoAbmV0d29ya19pZM1QDV0KBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:black_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWThAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJsYWNrX3RlcnJhY290dGEECQBuYW1lX2hhc2jxssdv5vlbpgMKAG5ldHdvcmtfaWRE3Ru/CgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:brown_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJyb3duX3RlcnJhY290dGEECQBuYW1lX2hhc2gG4kPenmOF9gMKAG5ldHdvcmtfaWQ/i0iNCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:red_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAwAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNo7fX56HXFejEDCgBuZXR3b3JrX2lk8tTF8QoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:orange_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAwAACAQAbmFtZRsAbWluZWNyYWZ0Om9yYW5nZV90ZXJyYWNvdHRhBAkAbmFtZV9oYXNo0Hjmql3sruMDCgBuZXR3b3JrX2lklmqmkAoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:yellow_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAwAACAQAbmFtZRsAbWluZWNyYWZ0OnllbGxvd190ZXJyYWNvdHRhBAkAbmFtZV9oYXNoqkyKKrmA3VcDCgBuZXR3b3JrX2lkaM/orAoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:lime_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpbWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaANjADFOF9v7AwoAbmV0d29ya19pZJt0XsgKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:green_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAwAACAQAbmFtZRoAbWluZWNyYWZ0OmdyZWVuX3RlcnJhY290dGEECQBuYW1lX2hhc2j5Ybq36yYwRQMKAG5ldHdvcmtfaWQ8kGdHCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:cyan_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAwAACAQAbmFtZRkAbWluZWNyYWZ0OmN5YW5fdGVycmFjb3R0YQQJAG5hbWVfaGFzaN09COzMuHwAAwoAbmV0d29ya19pZIWPCzoKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:light_blue_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAwAACAQAbmFtZR8AbWluZWNyYWZ0OmxpZ2h0X2JsdWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaOMytez7cOZiAwoAbmV0d29ya19pZFHK1UsKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:blue_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAwAACAQAbmFtZRkAbWluZWNyYWZ0OmJsdWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaF6inyTK5RpAAwoAbmV0d29ya19pZF5mVZIKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:purple_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAwAACAQAbmFtZRsAbWluZWNyYWZ0OnB1cnBsZV90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoKF7YG61yTbEDCgBuZXR3b3JrX2lkhtRDlwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:magenta_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAwAACAQAbmFtZRwAbWluZWNyYWZ0Om1hZ2VudGFfdGVycmFjb3R0YQQJAG5hbWVfaGFzaLWvtpAVtztyAwoAbmV0d29ya19pZN5SoakKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:pink_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAwAACAQAbmFtZRkAbWluZWNyYWZ0OnBpbmtfdGVycmFjb3R0YQQJAG5hbWVfaGFzaJ7mzvyzSQZTAwoAbmV0d29ya19pZDJWe4YKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:white_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAAAACAQAbmFtZSEAbWluZWNyYWZ0OndoaXRlX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoiVzCdoHAJo0DCgBuZXR3b3JrX2lkIlj9AAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:silver_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAAAACAQAbmFtZSIAbWluZWNyYWZ0OnNpbHZlcl9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAVsA0CnhzA4AwoAbmV0d29ya19pZPnxtJEKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:gray_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAAAACAQAbmFtZSAAbWluZWNyYWZ0OmdyYXlfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2jvLZt9u/lF/AMKAG5ldHdvcmtfaWQVU8eFCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:black_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAAAACAQAbmFtZSEAbWluZWNyYWZ0OmJsYWNrX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoe8I4xAXbO5UDCgBuZXR3b3JrX2lk2Icb9AoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:brown_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWToAAAACAQAbmFtZSEAbWluZWNyYWZ0OmJyb3duX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoSiNZOobbpjoDCgBuZXR3b3JrX2lkJy0jwgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:red_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAAAACAQAbmFtZR8AbWluZWNyYWZ0OnJlZF9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaBdWFGLmCLFVAwoAbmV0d29ya19pZMYBJSEKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:orange_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAAAACAQAbmFtZSIAbWluZWNyYWZ0Om9yYW5nZV9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaMyJMrnPr7szAwoAbmV0d29ya19pZN6+7TUKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:yellow_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAAAACAQAbmFtZSIAbWluZWNyYWZ0OnllbGxvd19nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaN6NaIhf6m0uAwoAbmV0d29ya19pZKRHXeoKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:lime_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWThAAAACAQAbmFtZSAAbWluZWNyYWZ0OmxpbWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2iF3E68/rB2EAMKAG5ldHdvcmtfaWSP7qQWCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:green_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAAAACAQAbmFtZSEAbWluZWNyYWZ0OmdyZWVuX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNow5mo8aQDFboDCgBuZXR3b3JrX2lkoF11kgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:cyan_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAAAACAQAbmFtZSAAbWluZWNyYWZ0OmN5YW5fZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2gnNB+cCFRJhwMKAG5ldHdvcmtfaWT9buMtCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:light_blue_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAAAACAQAbmFtZSYAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2gladnCDBKCigMKAG5ldHdvcmtfaWS5CszFCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:blue_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAAAACAQAbmFtZSAAbWluZWNyYWZ0OmJsdWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2giOZK+2nB1igMKAG5ldHdvcmtfaWR+e22CCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:purple_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAAAACAQAbmFtZSIAbWluZWNyYWZ0OnB1cnBsZV9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaIQU03txeAfHAwoAbmV0d29ya19pZLKbSE4KBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:magenta_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAAAACAQAbmFtZSMAbWluZWNyYWZ0Om1hZ2VudGFfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2i/SNqDJbfjMgMKAG5ldHdvcmtfaWQKf9UvCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:pink_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAAAACAQAbmFtZSAAbWluZWNyYWZ0OnBpbmtfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2hik8DVt4g+twMKAG5ldHdvcmtfaWTKzav2CgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:purpur_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAAAACAQAbmFtZRYAbWluZWNyYWZ0OnB1cnB1cl9ibG9jawQJAG5hbWVfaGFzaAgLwnUZGlzsAwoAbmV0d29ya19pZLD8ox4KBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQcAZGVmYXVsdAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:purpur_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAAAACAQAbmFtZRYAbWluZWNyYWZ0OnB1cnB1cl9ibG9jawQJAG5hbWVfaGFzaAgLwnUZGlzsAwoAbmV0d29ya19pZPSAFFsKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQUAbGluZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:packed_mud", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAgAACAQAbmFtZRQAbWluZWNyYWZ0OnBhY2tlZF9tdWQECQBuYW1lX2hhc2gHOMa121h4FgMKAG5ldHdvcmtfaWTUb6LyCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:mud_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAgAACAQAbmFtZRQAbWluZWNyYWZ0Om11ZF9icmlja3MECQBuYW1lX2hhc2iDL/SVl/PewQMKAG5ldHdvcmtfaWSkBjaDCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:nether_wart_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAAAACAQAbmFtZRsAbWluZWNyYWZ0Om5ldGhlcl93YXJ0X2Jsb2NrBAkAbmFtZV9oYXNo9XGS4GNnlV4DCgBuZXR3b3JrX2lkh3apIgoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:warped_wart_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAQAACAQAbmFtZRsAbWluZWNyYWZ0OndhcnBlZF93YXJ0X2Jsb2NrBAkAbmFtZV9oYXNo9IqDS9yUPJoDCgBuZXR3b3JrX2lkMpKAbAoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:shroomlight", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAQAACAQAbmFtZRUAbWluZWNyYWZ0OnNocm9vbWxpZ2h0BAkAbmFtZV9oYXNoZHCHcHX/HYADCgBuZXR3b3JrX2lkLG2JiwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:crimson_nylium", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fbnlsaXVtBAkAbmFtZV9oYXNoOr6DJYW2bFYDCgBuZXR3b3JrX2lkuWpRDgoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:warped_nylium", - "block_state_b64": "CgAAAwgAYmxvY2tfaWToAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9ueWxpdW0ECQBuYW1lX2hhc2g0Zf89cfr3rwMKAG5ldHdvcmtfaWSu/kekCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:netherrack", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAAAACAQAbmFtZRQAbWluZWNyYWZ0Om5ldGhlcnJhY2sECQBuYW1lX2hhc2i/r5ZyRsvPyQMKAG5ldHdvcmtfaWTAiTOACgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:basalt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhc2FsdAQJAG5hbWVfaGFzaH+UQO2yWodiAwoAbmV0d29ya19pZBPNSV4KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:polished_basalt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAQAACAQAbmFtZRkAbWluZWNyYWZ0OnBvbGlzaGVkX2Jhc2FsdAQJAG5hbWVfaGFzaMS+L0gMnRcBAwoAbmV0d29ya19pZF+/mHwKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:smooth_basalt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AgAACAQAbmFtZRcAbWluZWNyYWZ0OnNtb290aF9iYXNhbHQECQBuYW1lX2hhc2jKPUdz89kuNAMKAG5ldHdvcmtfaWTkb/oVCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:soul_soil", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAQAACAQAbmFtZRMAbWluZWNyYWZ0OnNvdWxfc29pbAQJAG5hbWVfaGFzaC1/87ccutuTAwoAbmV0d29ya19pZKc63SMKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:dirt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAAAACAQAbmFtZQ4AbWluZWNyYWZ0OmRpcnQECQBuYW1lX2hhc2hXp6jnXAe+kQMKAG5ldHdvcmtfaWQmkQtoCgYAc3RhdGVzCAkAZGlydF90eXBlBgBub3JtYWwAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:dirt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAAAACAQAbmFtZQ4AbWluZWNyYWZ0OmRpcnQECQBuYW1lX2hhc2hXp6jnXAe+kQMKAG5ldHdvcmtfaWQId9pLCgYAc3RhdGVzCAkAZGlydF90eXBlBgBjb2Fyc2UAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:farmland", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AAAACAQAbmFtZRIAbWluZWNyYWZ0OmZhcm1sYW5kBAkAbmFtZV9oYXNoxyQ5ag7LolADCgBuZXR3b3JrX2lkX618FQoGAHN0YXRlcwMSAG1vaXN0dXJpemVkX2Ftb3VudAAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:grass_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAAAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXNzX2Jsb2NrBAkAbmFtZV9oYXNojPyGp3/CSZwDCgBuZXR3b3JrX2lktCgx3goGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:grass_path", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTGAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdyYXNzX3BhdGgECQBuYW1lX2hhc2i0/KZV8Qsy+gMKAG5ldHdvcmtfaWT7CcdzCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:podzol", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTzAAAACAQAbmFtZRAAbWluZWNyYWZ0OnBvZHpvbAQJAG5hbWVfaGFzaBzqokRjH4Z1AwoAbmV0d29ya19pZPPS/GUKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:mycelium", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAAAACAQAbmFtZRIAbWluZWNyYWZ0Om15Y2VsaXVtBAkAbmFtZV9oYXNojTN09cKickIDCgBuZXR3b3JrX2lkLNPxXQoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:mud", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAgAACAQAbmFtZQ0AbWluZWNyYWZ0Om11ZAQJAG5hbWVfaGFzaPb/3P+uLy+9AwoAbmV0d29ya19pZPIUlUkKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:stone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lkIQ4xgAoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:iron_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAAAACAQAbmFtZRIAbWluZWNyYWZ0Omlyb25fb3JlBAkAbmFtZV9oYXNoS7BYtLnfx3gDCgBuZXR3b3JrX2lk3loneQoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:gold_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAAAACAQAbmFtZRIAbWluZWNyYWZ0OmdvbGRfb3JlBAkAbmFtZV9oYXNoC5Y+DUGXLC4DCgBuZXR3b3JrX2lkNhvMfwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:diamond_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4AAAACAQAbmFtZRUAbWluZWNyYWZ0OmRpYW1vbmRfb3JlBAkAbmFtZV9oYXNokUOJ2wZZrGQDCgBuZXR3b3JrX2lk/dChVAoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:lapis_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQVAAAACAQAbmFtZRMAbWluZWNyYWZ0OmxhcGlzX29yZQQJAG5hbWVfaGFzaMrmrUrSzb7qAwoAbmV0d29ya19pZMg+qK4KBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:redstone_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAAAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZHN0b25lX29yZQQJAG5hbWVfaGFzaFHVnp8Wc4JbAwoAbmV0d29ya19pZKDYvQoKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:coal_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAAAACAQAbmFtZRIAbWluZWNyYWZ0OmNvYWxfb3JlBAkAbmFtZV9oYXNo1OjA+Iuy51oDCgBuZXR3b3JrX2lk+R/aKAoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:copper_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2AgAACAQAbmFtZRQAbWluZWNyYWZ0OmNvcHBlcl9vcmUECQBuYW1lX2hhc2iSZduSntOzOwMKAG5ldHdvcmtfaWQtIuCnCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:emerald_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAAAACAQAbmFtZRUAbWluZWNyYWZ0OmVtZXJhbGRfb3JlBAkAbmFtZV9oYXNoJTovr+VgINsDCgBuZXR3b3JrX2lknbkqCgoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:quartz_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAAAACAQAbmFtZRQAbWluZWNyYWZ0OnF1YXJ0el9vcmUECQBuYW1lX2hhc2g0yNHLMK9TaQMKAG5ldHdvcmtfaWSzN7nzCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:nether_gold_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQfAgAACAQAbmFtZRkAbWluZWNyYWZ0Om5ldGhlcl9nb2xkX29yZQQJAG5hbWVfaGFzaEJZ7segIBgBAwoAbmV0d29ya19pZNI9pDgKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:ancient_debris", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAgAACAQAbmFtZRgAbWluZWNyYWZ0OmFuY2llbnRfZGVicmlzBAkAbmFtZV9oYXNoNrbxMc9AwKcDCgBuZXR3b3JrX2lkrSNjEAoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:deepslate_iron_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9pcm9uX29yZQQJAG5hbWVfaGFzaB/fDL9pgvXXAwoAbmV0d29ya19pZFA0bz4KBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:deepslate_gold_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9nb2xkX29yZQQJAG5hbWVfaGFzaF9G7WYhKFinAwoAbmV0d29ya19pZHQTfBUKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:deepslate_diamond_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV9kaWFtb25kX29yZQQJAG5hbWVfaGFzaEUH5USh+iD3AwoAbmV0d29ya19pZHP6VzAKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:deepslate_lapis_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV9sYXBpc19vcmUECQBuYW1lX2hhc2j+yFxU/KZs1gMKAG5ldHdvcmtfaWRKINzICgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:deepslate_redstone_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAgAACAQAbmFtZSAAbWluZWNyYWZ0OmRlZXBzbGF0ZV9yZWRzdG9uZV9vcmUECQBuYW1lX2hhc2iVgM3wWWD6ugMKAG5ldHdvcmtfaWReBdYRCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:deepslate_emerald_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSWAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV9lbWVyYWxkX29yZQQJAG5hbWVfaGFzaNlfo5HTwS6wAwoAbmV0d29ya19pZNeie6sKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:deepslate_coal_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSVAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9jb2FsX29yZQQJAG5hbWVfaGFzaIjikmcbRrPPAwoAbmV0d29ya19pZD9TiygKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:deepslate_copper_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9jb3BwZXJfb3JlBAkAbmFtZV9oYXNottjV4Ev5LAQDCgBuZXR3b3JrX2lkP23rgQoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:gravel", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAAAACAQAbmFtZRAAbWluZWNyYWZ0OmdyYXZlbAQJAG5hbWVfaGFzaOFxz8XJd2r/AwoAbmV0d29ya19pZBpfI1sKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:granite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAwAACAQAbmFtZREAbWluZWNyYWZ0OmdyYW5pdGUECQBuYW1lX2hhc2iq+Dur2pw4AwMKAG5ldHdvcmtfaWT2NMfJCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:diorite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAwAACAQAbmFtZREAbWluZWNyYWZ0OmRpb3JpdGUECQBuYW1lX2hhc2iaFsq2iinZBQMKAG5ldHdvcmtfaWQqGE6XCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:andesite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAwAACAQAbmFtZRIAbWluZWNyYWZ0OmFuZGVzaXRlBAkAbmFtZV9oYXNosaLIEnQQoSYDCgBuZXR3b3JrX2lkEApRZAoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:blackstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAgAACAQAbmFtZRQAbWluZWNyYWZ0OmJsYWNrc3RvbmUECQBuYW1lX2hhc2iMFYziD80D6QMKAG5ldHdvcmtfaWSrUryHCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AgAACAQAbmFtZRMAbWluZWNyYWZ0OmRlZXBzbGF0ZQQJAG5hbWVfaGFzaKX5pAblxz8TAwoAbmV0d29ya19pZOJoQjsKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:polished_granite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWROAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGUECQBuYW1lX2hhc2iLiEfys8pFIAMKAG5ldHdvcmtfaWTCxxcHCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:polished_diorite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGUECQBuYW1lX2hhc2hTxY4fKmNmlAMKAG5ldHdvcmtfaWTmtjdRCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:polished_andesite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRSAwAACAQAbmFtZRsAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlBAkAbmFtZV9oYXNovl28uFk4HuQDCgBuZXR3b3JrX2lklFjuCwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:polished_blackstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQiAgAACAQAbmFtZR0AbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmUECQBuYW1lX2hhc2jT9fHCl6vWQQMKAG5ldHdvcmtfaWR/Ho6oCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:polished_deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AgAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaHC1edoaWF3uAwoAbmV0d29ya19pZCPeQsEKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:sand", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQMAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnNhbmQECQBuYW1lX2hhc2i6lthXXbAyWAMKAG5ldHdvcmtfaWTekU/mCgYAc3RhdGVzCAkAc2FuZF90eXBlBgBub3JtYWwAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:sand", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQMAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnNhbmQECQBuYW1lX2hhc2i6lthXXbAyWAMKAG5ldHdvcmtfaWSTgcqmCgYAc3RhdGVzCAkAc2FuZF90eXBlAwByZWQAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:cactus", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAAAACAQAbmFtZRAAbWluZWNyYWZ0OmNhY3R1cwQJAG5hbWVfaGFzaCG9zL0N4wvGAwoAbmV0d29ya19pZDeCERAKBgBzdGF0ZXMDAwBhZ2UAAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:oak_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAAAACAQAbmFtZREAbWluZWNyYWZ0Om9ha19sb2cECQBuYW1lX2hhc2ho6TS+K7PZFQMKAG5ldHdvcmtfaWQjfjoxCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:stripped_oak_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQJAQAACAQAbmFtZRoAbWluZWNyYWZ0OnN0cmlwcGVkX29ha19sb2cECQBuYW1lX2hhc2h8dqh+OOHU4wMKAG5ldHdvcmtfaWSYKjdrCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:spruce_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4AwAACAQAbmFtZRQAbWluZWNyYWZ0OnNwcnVjZV9sb2cECQBuYW1lX2hhc2hZ03qaLoF3WgMKAG5ldHdvcmtfaWRlFD8eCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:stripped_spruce_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX3NwcnVjZV9sb2cECQBuYW1lX2hhc2iNrhKjS5IyrgMKAG5ldHdvcmtfaWRQcEC3CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:birch_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5AwAACAQAbmFtZRMAbWluZWNyYWZ0OmJpcmNoX2xvZwQJAG5hbWVfaGFzaBUzT3NxsZAnAwoAbmV0d29ya19pZBKN3VQKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:stripped_birch_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAQAACAQAbmFtZRwAbWluZWNyYWZ0OnN0cmlwcGVkX2JpcmNoX2xvZwQJAG5hbWVfaGFzaCFKS4AeuSidAwoAbmV0d29ya19pZN0IONIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:jungle_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6AwAACAQAbmFtZRQAbWluZWNyYWZ0Omp1bmdsZV9sb2cECQBuYW1lX2hhc2gkwW0KNulqDgMKAG5ldHdvcmtfaWQaziU/CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:stripped_jungle_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2p1bmdsZV9sb2cECQBuYW1lX2hhc2hAwMsgOk02JAMKAG5ldHdvcmtfaWQvls0eCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:acacia_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAAAACAQAbmFtZRQAbWluZWNyYWZ0OmFjYWNpYV9sb2cECQBuYW1lX2hhc2iV48VpYhjoYQMKAG5ldHdvcmtfaWRxEqe0CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:stripped_acacia_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2FjYWNpYV9sb2cECQBuYW1lX2hhc2hJb0lQqnEqlgMKAG5ldHdvcmtfaWRg3IdRCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:dark_oak_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ7AwAACAQAbmFtZRYAbWluZWNyYWZ0OmRhcmtfb2FrX2xvZwQJAG5hbWVfaGFzaIWfVRd0XUo3AwoAbmV0d29ya19pZPMM7LYKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:stripped_dark_oak_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQIAQAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2Rhcmtfb2FrX2xvZwQJAG5hbWVfaGFzaPFTdxRdPwkOAwoAbmV0d29ya19pZDIzenIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:mangrove_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAgAACAQAbmFtZRYAbWluZWNyYWZ0Om1hbmdyb3ZlX2xvZwQJAG5hbWVfaGFzaHZe6DzPZBobAwoAbmV0d29ya19pZG6DuYkKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:stripped_mangrove_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX21hbmdyb3ZlX2xvZwQJAG5hbWVfaGFzaLqIBo4hwA//AwoAbmV0d29ya19pZPtRn7UKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:cherry_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAwAACAQAbmFtZRQAbWluZWNyYWZ0OmNoZXJyeV9sb2cECQBuYW1lX2hhc2hwFlaioppB1wMKAG5ldHdvcmtfaWS2sdXECgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:stripped_cherry_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAwAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2NoZXJyeV9sb2cECQBuYW1lX2hhc2i85H6G+WhXaAMKAG5ldHdvcmtfaWRjzoglCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:crimson_stem", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAQAACAQAbmFtZRYAbWluZWNyYWZ0OmNyaW1zb25fc3RlbQQJAG5hbWVfaGFzaM0FzfL0UTKZAwoAbmV0d29ya19pZKvzID0KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:stripped_crimson_stem", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTvAQAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2NyaW1zb25fc3RlbQQJAG5hbWVfaGFzaDlA6nood57EAwoAbmV0d29ya19pZHrIqjIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:warped_stem", - "block_state_b64": "CgAAAwgAYmxvY2tfaWThAQAACAQAbmFtZRUAbWluZWNyYWZ0OndhcnBlZF9zdGVtBAkAbmFtZV9oYXNon7cKfPZxdrUDCgBuZXR3b3JrX2lkerWyMwoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:stripped_warped_stem", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAQAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX3dhcnBlZF9zdGVtBAkAbmFtZV9oYXNoEw+y0dDPSd8DCgBuZXR3b3JrX2lkIQ9vBAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:oak_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAQAACAQAbmFtZRIAbWluZWNyYWZ0Om9ha193b29kBAkAbmFtZV9oYXNoqQIkuVPyJX0DCgBuZXR3b3JrX2lku2G1YAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:spruce_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQtBAAACAQAbmFtZRUAbWluZWNyYWZ0OnNwcnVjZV93b29kBAkAbmFtZV9oYXNoTrIJ5TAQ+OgDCgBuZXR3b3JrX2lkaXLxCwoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:birch_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQuBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJpcmNoX3dvb2QECQBuYW1lX2hhc2iqVjG4xt0cKQMKAG5ldHdvcmtfaWS06c5VCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:jungle_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQvBAAACAQAbmFtZRUAbWluZWNyYWZ0Omp1bmdsZV93b29kBAkAbmFtZV9oYXNo9bYW29ORWCoDCgBuZXR3b3JrX2lkyFyKLQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:acacia_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQwBAAACAQAbmFtZRUAbWluZWNyYWZ0OmFjYWNpYV93b29kBAkAbmFtZV9oYXNoKkDfgzlJUcIDCgBuZXR3b3JrX2lkuTWlcgoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:dark_oak_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQxBAAACAQAbmFtZRcAbWluZWNyYWZ0OmRhcmtfb2FrX3dvb2QECQBuYW1lX2hhc2jaKv4ORLadAAMKAG5ldHdvcmtfaWSDrNQ8CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:stripped_oak_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQyBAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0cmlwcGVkX29ha193b29kBAkAbmFtZV9oYXNovW6KCv+VZnsDCgBuZXR3b3JrX2lkkhWGegoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:stripped_spruce_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQzBAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX3NwcnVjZV93b29kBAkAbmFtZV9oYXNoMnuUk4Xo6icDCgBuZXR3b3JrX2lkes2ydAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:stripped_birch_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ0BAAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2JpcmNoX3dvb2QECQBuYW1lX2hhc2hm88R604TKbAMKAG5ldHdvcmtfaWRleEMJCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:stripped_jungle_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ1BAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2p1bmdsZV93b29kBAkAbmFtZV9oYXNoUVs6KsZQRBoDCgBuZXR3b3JrX2lk92k8HQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:stripped_acacia_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2BAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2FjYWNpYV93b29kBAkAbmFtZV9oYXNo/kOPN2bCJhUDCgBuZXR3b3JrX2lktl6LwQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:stripped_dark_oak_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ3BAAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX2Rhcmtfb2FrX3dvb2QECQBuYW1lX2hhc2h2jFDfKVFgfAMKAG5ldHdvcmtfaWTgZQ5VCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:mangrove_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAgAACAQAbmFtZRcAbWluZWNyYWZ0Om1hbmdyb3ZlX3dvb2QECQBuYW1lX2hhc2iXVxG0JG2fVAMKAG5ldHdvcmtfaWTok1JCCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:stripped_mangrove_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAgAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX21hbmdyb3ZlX3dvb2QECQBuYW1lX2hhc2h7CkbaBF7/WAMKAG5ldHdvcmtfaWQLAX88CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:cherry_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQhAwAACAQAbmFtZRUAbWluZWNyYWZ0OmNoZXJyeV93b29kBAkAbmFtZV9oYXNoAW8srlmpBM8DCgBuZXR3b3JrX2lkEALMfAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AQwAc3RyaXBwZWRfYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:stripped_cherry_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAwAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2NoZXJyeV93b29kBAkAbmFtZV9oYXNo/e7KXv+CB38DCgBuZXR3b3JrX2lkg5aVtQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:crimson_hyphae", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25faHlwaGFlBAkAbmFtZV9oYXNouRmKmfSqEWADCgBuZXR3b3JrX2lk+Tm5rQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:stripped_crimson_hyphae", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQrAgAACAQAbmFtZSEAbWluZWNyYWZ0OnN0cmlwcGVkX2NyaW1zb25faHlwaGFlBAkAbmFtZV9oYXNoFffwmABq4LUDCgBuZXR3b3JrX2lkZAlUbgoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:warped_hyphae", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9oeXBoYWUECQBuYW1lX2hhc2hn8plQUr6pmQMKAG5ldHdvcmtfaWRU2AIBCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:stripped_warped_hyphae", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAgAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX3dhcnBlZF9oeXBoYWUECQBuYW1lX2hhc2irKq+HYPSgjQMKAG5ldHdvcmtfaWSbrOPDCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:bamboo_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJhbWJvb19ibG9jawQJAG5hbWVfaGFzaAbDeur6stIBAwoAbmV0d29ya19pZCJAwn0KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:stripped_bamboo_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAwAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2JhbWJvb19ibG9jawQJAG5hbWVfaGFzaJpwytpZOZM9AwoAbmV0d29ya19pZKuRbNEKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:oak_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQSAAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19sZWF2ZXMECQBuYW1lX2hhc2h6O4xGqA2oKgMKAG5ldHdvcmtfaWT98c59CgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:spruce_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQfBAAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9sZWF2ZXMECQBuYW1lX2hhc2i9x1CtNAuqZwMKAG5ldHdvcmtfaWSzF7pTCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:birch_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQgBAAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX2xlYXZlcwQJAG5hbWVfaGFzaBlAGHaoaLZSAwoAbmV0d29ya19pZOjtvWcKBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:jungle_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQhBAAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9sZWF2ZXMECQBuYW1lX2hhc2iW1uAH07zGhgMKAG5ldHdvcmtfaWSA5KX0CgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:acacia_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAAAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9sZWF2ZXMECQBuYW1lX2hhc2iZJf8dAgDRNQMKAG5ldHdvcmtfaWQ/G7VuCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:dark_oak_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQiBAAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX2xlYXZlcwQJAG5hbWVfaGFzaCk7rDipWFSjAwoAbmV0d29ya19pZJ2AkbYKBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:mangrove_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX2xlYXZlcwQJAG5hbWVfaGFzaKyI/dWvhEG8AwoAbmV0d29ya19pZPQxCZ8KBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:cherry_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9sZWF2ZXMECQBuYW1lX2hhc2giTs9ChhYBlQMKAG5ldHdvcmtfaWR8bPpwCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:azalea_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAgAACAQAbmFtZRcAbWluZWNyYWZ0OmF6YWxlYV9sZWF2ZXMECQBuYW1lX2hhc2iXFhD57wFS7AMKAG5ldHdvcmtfaWTNB/9ECgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:azalea_leaves_flowered", - "block_state_b64": "CgAAAwgAYmxvY2tfaWREAgAACAQAbmFtZSAAbWluZWNyYWZ0OmF6YWxlYV9sZWF2ZXNfZmxvd2VyZWQECQBuYW1lX2hhc2gs8jxlS/pMrwMKAG5ldHdvcmtfaWQ7W4PyCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:oak_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAAAACAQAbmFtZRUAbWluZWNyYWZ0Om9ha19zYXBsaW5nBAkAbmFtZV9oYXNoogXcT9QfjiUDCgBuZXR3b3JrX2lkG22C+AoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:spruce_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4BAAACAQAbmFtZRgAbWluZWNyYWZ0OnNwcnVjZV9zYXBsaW5nBAkAbmFtZV9oYXNoe8hz4uYP0FcDCgBuZXR3b3JrX2lkUQmhaQoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:birch_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5BAAACAQAbmFtZRcAbWluZWNyYWZ0OmJpcmNoX3NhcGxpbmcECQBuYW1lX2hhc2h348iJQ/tK4wMKAG5ldHdvcmtfaWQ2Uh53CgYAc3RhdGVzAQcAYWdlX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:jungle_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6BAAACAQAbmFtZRgAbWluZWNyYWZ0Omp1bmdsZV9zYXBsaW5nBAkAbmFtZV9oYXNo7tyTOdSrxaADCgBuZXR3b3JrX2lkXmBAdAoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:acacia_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ7BAAACAQAbmFtZRgAbWluZWNyYWZ0OmFjYWNpYV9zYXBsaW5nBAkAbmFtZV9oYXNo99sg15uoX7ADCgBuZXR3b3JrX2lkPXX1KgoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:dark_oak_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8BAAACAQAbmFtZRoAbWluZWNyYWZ0OmRhcmtfb2FrX3NhcGxpbmcECQBuYW1lX2hhc2jnVzFplW7cHgMKAG5ldHdvcmtfaWTD4giHCgYAc3RhdGVzAQcAYWdlX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:mangrove_propagule", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAgAACAQAbmFtZRwAbWluZWNyYWZ0Om1hbmdyb3ZlX3Byb3BhZ3VsZQQJAG5hbWVfaGFzaJGeox6hkfLFAwoAbmV0d29ya19pZAIpvpYKBgBzdGF0ZXMBBwBoYW5naW5nAAMPAHByb3BhZ3VsZV9zdGFnZQAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:cherry_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQiAwAACAQAbmFtZRgAbWluZWNyYWZ0OmNoZXJyeV9zYXBsaW5nBAkAbmFtZV9oYXNoGrPpNMf1LtcDCgBuZXR3b3JrX2lkypakXQoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:bee_nest", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAQAACAQAbmFtZRIAbWluZWNyYWZ0OmJlZV9uZXN0BAkAbmFtZV9oYXNo2R2WBxUHEZIDCgBuZXR3b3JrX2lkiXWLEAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAADCwBob25leV9sZXZlbAAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "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": "CgAAAwgAYmxvY2tfaWRnAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1lbG9uX2Jsb2NrBAkAbmFtZV9oYXNoXxSm0iYpAx8DCgBuZXR3b3JrX2lkC9rqygoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:melon_slice" - }, - { - "id": "minecraft:glistering_melon_slice" - }, - { - "id": "minecraft:sweet_berries" - }, - { - "id": "minecraft:glow_berries" - }, - { - "id": "minecraft:pumpkin", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAAAACAQAbmFtZREAbWluZWNyYWZ0OnB1bXBraW4ECQBuYW1lX2hhc2gc8A3jaSzWbgMKAG5ldHdvcmtfaWRFGA+xCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:carved_pumpkin", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSaAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNhcnZlZF9wdW1wa2luBAkAbmFtZV9oYXNoPu1T0MJuG90DCgBuZXR3b3JrX2lkXNNn5QoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:lit_pumpkin", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAAAACAQAbmFtZRUAbWluZWNyYWZ0OmxpdF9wdW1wa2luBAkAbmFtZV9oYXNo7gWtEm2uPL0DCgBuZXR3b3JrX2lki8sU4AoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:honeycomb" - }, - { - "id": "minecraft:tallgrass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQfAAAACAQAbmFtZRMAbWluZWNyYWZ0OnRhbGxncmFzcwQJAG5hbWVfaGFzaC3PXpAXXYswAwoAbmV0d29ya19pZOh33DMKBgBzdGF0ZXMIDwB0YWxsX2dyYXNzX3R5cGUEAGZlcm4AAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:double_plant", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAAAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZMx1sfgKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQQAZmVybgEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:tallgrass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQfAAAACAQAbmFtZRMAbWluZWNyYWZ0OnRhbGxncmFzcwQJAG5hbWVfaGFzaC3PXpAXXYswAwoAbmV0d29ya19pZErptfIKBgBzdGF0ZXMIDwB0YWxsX2dyYXNzX3R5cGUEAHRhbGwAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:double_plant", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAAAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZAbadmIKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQUAZ3Jhc3MBDwB1cHBlcl9ibG9ja19iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:nether_sprouts" - }, - { - "id": "minecraft:fire_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAwAACAQAbmFtZRQAbWluZWNyYWZ0OmZpcmVfY29yYWwECQBuYW1lX2hhc2hOHyyECVQVJwMKAG5ldHdvcmtfaWS9vF0UCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:brain_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWREAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJyYWluX2NvcmFsBAkAbmFtZV9oYXNoRiWlLCwA2ycDCgBuZXR3b3JrX2lkrjAuhgoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:bubble_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbAQJAG5hbWVfaGFzaJz6rWnl+v2qAwoAbmV0d29ya19pZImIWy0KBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:tube_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAQAACAQAbmFtZRQAbWluZWNyYWZ0OnR1YmVfY29yYWwECQBuYW1lX2hhc2iYa8oO/tgk7wMKAG5ldHdvcmtfaWRTfND5CgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:horn_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRHAwAACAQAbmFtZRQAbWluZWNyYWZ0Omhvcm5fY29yYWwECQBuYW1lX2hhc2iZnRHjZbnLPgMKAG5ldHdvcmtfaWR+GGp8CgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:dead_fire_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRLAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbAQJAG5hbWVfaGFzaEPU6tFy/latAwoAbmV0d29ya19pZNMa7V4KBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:dead_brain_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAwAACAQAbmFtZRoAbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWwECQBuYW1lX2hhc2j5L6QJCISvzwMKAG5ldHdvcmtfaWQkKzeiCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:dead_bubble_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRKAwAACAQAbmFtZRsAbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsBAkAbmFtZV9oYXNoSTOZ/8wpeNYDCgBuZXR3b3JrX2lka6w9DAoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:dead_tube_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbAQJAG5hbWVfaGFzaJGjNWhlaIJeAwoAbmV0d29ya19pZO3Z0ygKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:dead_horn_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbAQJAG5hbWVfaGFzaJBkz3qt+g2cAwoAbmV0d29ya19pZBAN+eYKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:fire_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRJBAAACAQAbmFtZRgAbWluZWNyYWZ0OmZpcmVfY29yYWxfZmFuBAkAbmFtZV9oYXNosOTxYYxsDLgDCgBuZXR3b3JrX2lkFKxbEgoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:brain_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRHBAAACAQAbmFtZRkAbWluZWNyYWZ0OmJyYWluX2NvcmFsX2ZhbgQJAG5hbWVfaGFzaAi5uHizSNcqAwoAbmV0d29ya19pZFtLjNwKBgBzdGF0ZXMDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:bubble_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRIBAAACAQAbmFtZRoAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbF9mYW4ECQBuYW1lX2hhc2hy/rX2on17DgMKAG5ldHdvcmtfaWQof60VCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:tube_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAQAACAQAbmFtZRgAbWluZWNyYWZ0OnR1YmVfY29yYWxfZmFuBAkAbmFtZV9oYXNo9pbJbo+PphIDCgBuZXR3b3JrX2lkenDTYgoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:horn_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRKBAAACAQAbmFtZRgAbWluZWNyYWZ0Omhvcm5fY29yYWxfZmFuBAkAbmFtZV9oYXNoA+ri6NPDkbUDCgBuZXR3b3JrX2lkezoHNwoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:dead_fire_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRNBAAACAQAbmFtZR0AbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbF9mYW4ECQBuYW1lX2hhc2hpQO02NDxPvwMKAG5ldHdvcmtfaWTaOJgLCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:dead_brain_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRLBAAACAQAbmFtZR4AbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWxfZmFuBAkAbmFtZV9oYXNoI9/+Z4YqMhIDCgBuZXR3b3JrX2lkqYXxYgoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:dead_bubble_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRMBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsX2ZhbgQJAG5hbWVfaGFzaBNECtIM6VIOAwoAbmV0d29ya19pZLrNtBEKBgBzdGF0ZXMDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:dead_tube_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAQAACAQAbmFtZR0AbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbF9mYW4ECQBuYW1lX2hhc2hbBBM9jFKWvQMKAG5ldHdvcmtfaWSkJKUWCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:dead_horn_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWROBAAACAQAbmFtZR0AbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbF9mYW4ECQBuYW1lX2hhc2hObElFrHfPygMKAG5ldHdvcmtfaWQ1ZxvmCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:crimson_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAQAACAQAbmFtZRcAbWluZWNyYWZ0OmNyaW1zb25fcm9vdHMECQBuYW1lX2hhc2j1fWgQLViv5QMKAG5ldHdvcmtfaWRLh5DXCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:warped_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAQAACAQAbmFtZRYAbWluZWNyYWZ0OndhcnBlZF9yb290cwQJAG5hbWVfaGFzaBc3WvbJOLlkAwoAbmV0d29ya19pZNLgDnAKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:yellow_flower", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQlAAAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19mbG93ZXIECQBuYW1lX2hhc2jWbU1pF0OUGAMKAG5ldHdvcmtfaWQgO3hpCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:poppy", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnBvcHB5BAkAbmFtZV9oYXNocMF8pITMbkcDCgBuZXR3b3JrX2lk8im6ywoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:blue_orchid", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ9BAAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfb3JjaGlkBAkAbmFtZV9oYXNoBjz2MsgB21EDCgBuZXR3b3JrX2lk/iLsSwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:allium", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ+BAAACAQAbmFtZRAAbWluZWNyYWZ0OmFsbGl1bQQJAG5hbWVfaGFzaDCGQBHNDTkcAwoAbmV0d29ya19pZD9Dgr0KBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:azure_bluet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ/BAAACAQAbmFtZRUAbWluZWNyYWZ0OmF6dXJlX2JsdWV0BAkAbmFtZV9oYXNo9N5egqMT2QcDCgBuZXR3b3JrX2lkwIgDnwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:red_tulip", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRABAAACAQAbmFtZRMAbWluZWNyYWZ0OnJlZF90dWxpcAQJAG5hbWVfaGFzaAjMi9Rd+6rhAwoAbmV0d29ya19pZAZCnt8KBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:orange_tulip", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRBBAAACAQAbmFtZRYAbWluZWNyYWZ0Om9yYW5nZV90dWxpcAQJAG5hbWVfaGFzaP+NjxMBZ8vAAwoAbmV0d29ya19pZPYatsMKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:white_tulip", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRCBAAACAQAbmFtZRUAbWluZWNyYWZ0OndoaXRlX3R1bGlwBAkAbmFtZV9oYXNo5vbU4VRPh3ADCgBuZXR3b3JrX2lkok+4rQoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:pink_tulip", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRDBAAACAQAbmFtZRQAbWluZWNyYWZ0OnBpbmtfdHVsaXAECQBuYW1lX2hhc2hxDHZa6OaNXAMKAG5ldHdvcmtfaWTiOT+VCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:oxeye_daisy", - "block_state_b64": "CgAAAwgAYmxvY2tfaWREBAAACAQAbmFtZRUAbWluZWNyYWZ0Om94ZXllX2RhaXN5BAkAbmFtZV9oYXNoXwxsqNQTN9gDCgBuZXR3b3JrX2lkw7R7dwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:cornflower", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRFBAAACAQAbmFtZRQAbWluZWNyYWZ0OmNvcm5mbG93ZXIECQBuYW1lX2hhc2gnhyC3EeqHgAMKAG5ldHdvcmtfaWR4VrvACgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:lily_of_the_valley", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRGBAAACAQAbmFtZRwAbWluZWNyYWZ0OmxpbHlfb2ZfdGhlX3ZhbGxleQQJAG5hbWVfaGFzaI64TJSf9mgQAwoAbmV0d29ya19pZFE9+nwKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:double_plant", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAAAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZOemRt4KBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQkAc3VuZmxvd2VyAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:double_plant", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAAAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZOFugoEKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQcAc3lyaW5nYQEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:double_plant", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAAAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZN4O+/gKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQQAcm9zZQEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:double_plant", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAAAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZI3w4GMKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQcAcGFlb25pYQEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:pitcher_plant", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAwAACAQAbmFtZRcAbWluZWNyYWZ0OnBpdGNoZXJfcGxhbnQECQBuYW1lX2hhc2hRJHzsbDH+SQMKAG5ldHdvcmtfaWRnY76VCgYAc3RhdGVzAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:pink_petals", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQkAwAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfcGV0YWxzBAkAbmFtZV9oYXNo6DQwN9SwV3QDCgBuZXR3b3JrX2lkNWneGgoGAHN0YXRlcwMGAGdyb3d0aAAAAAAIHABtaW5lY3JhZnQ6Y2FyZGluYWxfZGlyZWN0aW9uBQBzb3V0aAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:wither_rose", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAQAACAQAbmFtZRUAbWluZWNyYWZ0OndpdGhlcl9yb3NlBAkAbmFtZV9oYXNoaSKxl3I516gDCgBuZXR3b3JrX2lkATXLPwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:torchflower", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ3AwAACAQAbmFtZRUAbWluZWNyYWZ0OnRvcmNoZmxvd2VyBAkAbmFtZV9oYXNoL+mHtElwbqQDCgBuZXR3b3JrX2lkI34O+AoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "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/XeXOLAMKAG5ldHdvcmtfaWSUkDtbCgYAc3RhdGVzAxMAdmluZV9kaXJlY3Rpb25fYml0cwAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:weeping_vines", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAQAACAQAbmFtZRcAbWluZWNyYWZ0OndlZXBpbmdfdmluZXMECQBuYW1lX2hhc2jrLgLHkQygiwMKAG5ldHdvcmtfaWQ8NHSJCgYAc3RhdGVzAxEAd2VlcGluZ192aW5lc19hZ2UAAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:twisting_vines", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAgAACAQAbmFtZRgAbWluZWNyYWZ0OnR3aXN0aW5nX3ZpbmVzBAkAbmFtZV9oYXNoDYR5QgVUQJADCgBuZXR3b3JrX2lk5kYVIQoGAHN0YXRlcwMSAHR3aXN0aW5nX3ZpbmVzX2FnZQAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:waterlily", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRvAAAACAQAbmFtZRMAbWluZWNyYWZ0OndhdGVybGlseQQJAG5hbWVfaGFzaEHgC4c1SXg0AwoAbmV0d29ya19pZOOerp8KBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:seagrass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAQAACAQAbmFtZRIAbWluZWNyYWZ0OnNlYWdyYXNzBAkAbmFtZV9oYXNoHSBFtoHdWxIDCgBuZXR3b3JrX2lkd3lhEAoGAHN0YXRlcwgOAHNlYV9ncmFzc190eXBlBwBkZWZhdWx0AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:kelp" - }, - { - "id": "minecraft:deadbush", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAAAACAQAbmFtZRIAbWluZWNyYWZ0OmRlYWRidXNoBAkAbmFtZV9oYXNoPFODe4IScnYDCgBuZXR3b3JrX2lkVfnl+goGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:bamboo", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhbWJvbwQJAG5hbWVfaGFzaBgpGmyzhedCAwoAbmV0d29ya19pZIZv1nYKBgBzdGF0ZXMBBwBhZ2VfYml0AAgQAGJhbWJvb19sZWFmX3NpemUJAG5vX2xlYXZlcwgWAGJhbWJvb19zdGFsa190aGlja25lc3MEAHRoaW4AAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:snow", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnNub3cECQBuYW1lX2hhc2gVHr5XXdETWAMKAG5ldHdvcmtfaWQ0zCeHCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:ice", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAAAACAQAbmFtZQ0AbWluZWNyYWZ0OmljZQQJAG5hbWVfaGFzaNF26f+uUT29AwoAbmV0d29ya19pZOUMaQYKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:packed_ice", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAAAACAQAbmFtZRQAbWluZWNyYWZ0OnBhY2tlZF9pY2UECQBuYW1lX2hhc2hk4bu123ZrFgMKAG5ldHdvcmtfaWTr/ooaCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:blue_ice", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQKAQAACAQAbmFtZRIAbWluZWNyYWZ0OmJsdWVfaWNlBAkAbmFtZV9oYXNo+EKxYgFhKcgDCgBuZXR3b3JrX2lkxfsA8goGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:snow_layer", - "block_state_b64": "CgAAAwgAYmxvY2tfaWROAAAACAQAbmFtZRQAbWluZWNyYWZ0OnNub3dfbGF5ZXIECQBuYW1lX2hhc2hXka6atMYUCQMKAG5ldHdvcmtfaWRCrIPcCgYAc3RhdGVzAQsAY292ZXJlZF9iaXQAAwYAaGVpZ2h0AAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:pointed_dripstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQzAgAACAQAbmFtZRsAbWluZWNyYWZ0OnBvaW50ZWRfZHJpcHN0b25lBAkAbmFtZV9oYXNoJMISzmHQgt8DCgBuZXR3b3JrX2lkbWrtYgoGAHN0YXRlcwgTAGRyaXBzdG9uZV90aGlja25lc3MDAHRpcAEHAGhhbmdpbmcBAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:dripstone_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AgAACAQAbmFtZRkAbWluZWNyYWZ0OmRyaXBzdG9uZV9ibG9jawQJAG5hbWVfaGFzaIIXnEqY77YsAwoAbmV0d29ya19pZMZi2kwKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:moss_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWROAgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vc3NfY2FycGV0BAkAbmFtZV9oYXNo/NEDxRPTshYDCgBuZXR3b3JrX2lkaGG3QwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:moss_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ/AgAACAQAbmFtZRQAbWluZWNyYWZ0Om1vc3NfYmxvY2sECQBuYW1lX2hhc2iovcsPUYX2tgMKAG5ldHdvcmtfaWT3JSbfCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:dirt_with_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ9AgAACAQAbmFtZRkAbWluZWNyYWZ0OmRpcnRfd2l0aF9yb290cwQJAG5hbWVfaGFzaLCNDYPviDCIAwoAbmV0d29ya19pZNCkwzoKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:hanging_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ+AgAACAQAbmFtZRcAbWluZWNyYWZ0Omhhbmdpbmdfcm9vdHMECQBuYW1lX2hhc2jaXn+Y5UZpDAMKAG5ldHdvcmtfaWRU4c2vCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:mangrove_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWThAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hbmdyb3ZlX3Jvb3RzBAkAbmFtZV9oYXNoa786PzQGZ6kDCgBuZXR3b3JrX2lklA0AHgoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:muddy_mangrove_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAgAACAQAbmFtZR4AbWluZWNyYWZ0Om11ZGR5X21hbmdyb3ZlX3Jvb3RzBAkAbmFtZV9oYXNo9YApdHpo1RkDCgBuZXR3b3JrX2lkH0Oc4woGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:big_dripleaf", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRCAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJpZ19kcmlwbGVhZgQJAG5hbWVfaGFzaGBEhXjo6qSdAwoAbmV0d29ya19pZMETsb8KBgBzdGF0ZXMBEQBiaWdfZHJpcGxlYWZfaGVhZAEIEQBiaWdfZHJpcGxlYWZfdGlsdAQAbm9uZQgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:small_dripleaf_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAgAACAQAbmFtZR4AbWluZWNyYWZ0OnNtYWxsX2RyaXBsZWFmX2Jsb2NrBAkAbmFtZV9oYXNojxRAgXP9uWADCgBuZXR3b3JrX2lkozbVPwoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24EAGVhc3QBDwB1cHBlcl9ibG9ja19iaXQBAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:spore_blossom", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRAAgAACAQAbmFtZRcAbWluZWNyYWZ0OnNwb3JlX2Jsb3Nzb20ECQBuYW1lX2hhc2il3U72Gbco2gMKAG5ldHdvcmtfaWSbbbgcCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:azalea", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAgAACAQAbmFtZRAAbWluZWNyYWZ0OmF6YWxlYQQJAG5hbWVfaGFzaNyUl+BW9JrBAwoAbmV0d29ya19pZO/XZtQKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:flowering_azalea", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAgAACAQAbmFtZRoAbWluZWNyYWZ0OmZsb3dlcmluZ19hemFsZWEECQBuYW1lX2hhc2ie9r33wz8kiwMKAG5ldHdvcmtfaWQ3ij0VCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:glow_lichen", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSaAgAACAQAbmFtZRUAbWluZWNyYWZ0Omdsb3dfbGljaGVuBAkAbmFtZV9oYXNobyPUrIYlo44DCgBuZXR3b3JrX2lkCh8lSAoGAHN0YXRlcwMZAG11bHRpX2ZhY2VfZGlyZWN0aW9uX2JpdHM/AAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:amethyst_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAgAACAQAbmFtZRgAbWluZWNyYWZ0OmFtZXRoeXN0X2Jsb2NrBAkAbmFtZV9oYXNob+JK1iiAthcDCgBuZXR3b3JrX2lk8HtpzgoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:budding_amethyst", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRHAgAACAQAbmFtZRoAbWluZWNyYWZ0OmJ1ZGRpbmdfYW1ldGh5c3QECQBuYW1lX2hhc2gJvAwfI14fxgMKAG5ldHdvcmtfaWTQYqfACgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:amethyst_cluster", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAgAACAQAbmFtZRoAbWluZWNyYWZ0OmFtZXRoeXN0X2NsdXN0ZXIECQBuYW1lX2hhc2jK82S88Jgm8wMKAG5ldHdvcmtfaWSCPMPGCgYAc3RhdGVzCBQAbWluZWNyYWZ0OmJsb2NrX2ZhY2UCAHVwAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:large_amethyst_bud", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAgAACAQAbmFtZRwAbWluZWNyYWZ0OmxhcmdlX2FtZXRoeXN0X2J1ZAQJAG5hbWVfaGFzaAHhdpWD+sd5AwoAbmV0d29ya19pZKkQxOcKBgBzdGF0ZXMIFABtaW5lY3JhZnQ6YmxvY2tfZmFjZQIAdXAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:medium_amethyst_bud", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRKAgAACAQAbmFtZR0AbWluZWNyYWZ0Om1lZGl1bV9hbWV0aHlzdF9idWQECQBuYW1lX2hhc2g5lBGtC0DzZQMKAG5ldHdvcmtfaWSYiP4gCgYAc3RhdGVzCBQAbWluZWNyYWZ0OmJsb2NrX2ZhY2UCAHVwAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:small_amethyst_bud", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRLAgAACAQAbmFtZRwAbWluZWNyYWZ0OnNtYWxsX2FtZXRoeXN0X2J1ZAQJAG5hbWVfaGFzaEnb4+q9PO4YAwoAbmV0d29ya19pZGWzxrQKBgBzdGF0ZXMIFABtaW5lY3JhZnQ6YmxvY2tfZmFjZQIAdXAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:tuff", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAgAACAQAbmFtZQ4AbWluZWNyYWZ0OnR1ZmYECQBuYW1lX2hhc2h1Rwc1XYsBGwMKAG5ldHdvcmtfaWRwQGn0CgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:calcite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAgAACAQAbmFtZREAbWluZWNyYWZ0OmNhbGNpdGUECQBuYW1lX2hhc2ixKLu8ZIdzDQMKAG5ldHdvcmtfaWQlSbJDCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "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/FO78WDoDCgBuZXR3b3JrX2lkLh1OXAoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:red_mushroom", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAAAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZF9tdXNocm9vbQQJAG5hbWVfaGFzaPpzJua7669xAwoAbmV0d29ya19pZCvWPYkKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:crimson_fungus", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fZnVuZ3VzBAkAbmFtZV9oYXNolIcCUuFM2u0DCgBuZXR3b3JrX2lkD2NN0QoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:warped_fungus", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9mdW5ndXMECQBuYW1lX2hhc2gq8bSnRVTAFgMKAG5ldHdvcmtfaWTkwS+rCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:brown_mushroom_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAAAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkdOMhDAoGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cw4AAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:red_mushroom_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAAAACAQAbmFtZRwAbWluZWNyYWZ0OnJlZF9tdXNocm9vbV9ibG9jawQJAG5hbWVfaGFzaJTTyJbth9M9AwoAbmV0d29ya19pZM+AyboKBgBzdGF0ZXMDEgBodWdlX211c2hyb29tX2JpdHMOAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:brown_mushroom_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAAAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkbdt3CAoGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cw8AAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:brown_mushroom_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAAAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkSrMl9goGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cwAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:egg" - }, - { - "id": "minecraft:sugar_cane" - }, - { - "id": "minecraft:sugar" - }, - { - "id": "minecraft:rotten_flesh" - }, - { - "id": "minecraft:bone" - }, - { - "id": "minecraft:web", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAAAACAQAbmFtZQ0AbWluZWNyYWZ0OndlYgQJAG5hbWVfaGFzaA4GKQCvG4i9AwoAbmV0d29ya19pZApt+jgKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:spider_eye" - }, - { - "id": "minecraft:mob_spawner", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ0AAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vYl9zcGF3bmVyBAkAbmFtZV9oYXNoNwGrCV/Fkh8DCgBuZXR3b3JrX2lkM1wTmgoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:end_portal_frame", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AAAACAQAbmFtZRoAbWluZWNyYWZ0OmVuZF9wb3J0YWxfZnJhbWUECQBuYW1lX2hhc2gqofyUIjGOpQMKAG5ldHdvcmtfaWRbGHf8CgYAc3RhdGVzARIAZW5kX3BvcnRhbF9leWVfYml0AAgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkqXH7RgoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGUFAHN0b25lAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkeIBb6QoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGULAGNvYmJsZXN0b25lAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkDZ2cFQoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGULAHN0b25lX2JyaWNrAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkOR/cTAoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGURAG1vc3N5X3N0b25lX2JyaWNrAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkqdwlHAoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGUTAGNyYWNrZWRfc3RvbmVfYnJpY2sAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkFqqPggoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGUUAGNoaXNlbGVkX3N0b25lX2JyaWNrAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:infested_deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAgAACAQAbmFtZRwAbWluZWNyYWZ0OmluZmVzdGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaICF2VYccxF1AwoAbmV0d29ya19pZDa/624KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:dragon_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AAAACAQAbmFtZRQAbWluZWNyYWZ0OmRyYWdvbl9lZ2cECQBuYW1lX2hhc2inMzXrV+/e1wMKAG5ldHdvcmtfaWTgO1yRCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:turtle_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAQAACAQAbmFtZRQAbWluZWNyYWZ0OnR1cnRsZV9lZ2cECQBuYW1lX2hhc2iwSRcxOJIJ9gMKAG5ldHdvcmtfaWSIRNUhCgYAc3RhdGVzCA0AY3JhY2tlZF9zdGF0ZQkAbm9fY3JhY2tzCBAAdHVydGxlX2VnZ19jb3VudAcAb25lX2VnZwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:sniffer_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRTAwAACAQAbmFtZRUAbWluZWNyYWZ0OnNuaWZmZXJfZWdnBAkAbmFtZV9oYXNoY1lozc8lPcYDCgBuZXR3b3JrX2lk7yb/2QoGAHN0YXRlcwgNAGNyYWNrZWRfc3RhdGUJAG5vX2NyYWNrcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:frog_spawn", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAgAACAQAbmFtZRQAbWluZWNyYWZ0OmZyb2dfc3Bhd24ECQBuYW1lX2hhc2iWmd7idp3ZZwMKAG5ldHdvcmtfaWRFzJudCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:pearlescent_froglight", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAgAACAQAbmFtZR8AbWluZWNyYWZ0OnBlYXJsZXNjZW50X2Zyb2dsaWdodAQJAG5hbWVfaGFzaKkcFRyycYGyAwoAbmV0d29ya19pZJqYakAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:verdant_froglight", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAgAACAQAbmFtZRsAbWluZWNyYWZ0OnZlcmRhbnRfZnJvZ2xpZ2h0BAkAbmFtZV9oYXNoA+eXuTBohrQDCgBuZXR3b3JrX2lkDIVnsQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:ochre_froglight", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAgAACAQAbmFtZRkAbWluZWNyYWZ0Om9jaHJlX2Zyb2dsaWdodAQJAG5hbWVfaGFzaMY59kjPe+c3AwoAbmV0d29ya19pZO2TD50KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "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:armadillo_spawn_egg" - }, - { - "id": "minecraft:obsidian", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQxAAAACAQAbmFtZRIAbWluZWNyYWZ0Om9ic2lkaWFuBAkAbmFtZV9oYXNoiz4qrb8QjyEDCgBuZXR3b3JrX2lkuqnPpQoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:crying_obsidian", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAgAACAQAbmFtZRkAbWluZWNyYWZ0OmNyeWluZ19vYnNpZGlhbgQJAG5hbWVfaGFzaKT0JlA7Z1K+AwoAbmV0d29ya19pZCjbPV4KBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:bedrock", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAAAACAQAbmFtZREAbWluZWNyYWZ0OmJlZHJvY2sECQBuYW1lX2hhc2hWfFrh4LVtxwMKAG5ldHdvcmtfaWT7fKz1CgYAc3RhdGVzAQ4AaW5maW5pYnVybl9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:soul_sand", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNvdWxfc2FuZAQJAG5hbWVfaGFzaMaf+bccu+KTAwoAbmV0d29ya19pZBQSHrMKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:magma", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAAAACAQAbmFtZQ8AbWluZWNyYWZ0Om1hZ21hBAkAbmFtZV9oYXNoqyTjKaIsWfYDCgBuZXR3b3JrX2lkyfWAZgoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:nether_wart" - }, - { - "id": "minecraft:end_stone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AAAACAQAbmFtZRMAbWluZWNyYWZ0OmVuZF9zdG9uZQQJAG5hbWVfaGFzaH1J9jA39GJNAwoAbmV0d29ya19pZFeFQ7UKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:chorus_flower", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAAAACAQAbmFtZRcAbWluZWNyYWZ0OmNob3J1c19mbG93ZXIECQBuYW1lX2hhc2iMpSodli5uawMKAG5ldHdvcmtfaWRnd1ZWCgYAc3RhdGVzAwMAYWdlAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:chorus_plant", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAAAACAQAbmFtZRYAbWluZWNyYWZ0OmNob3J1c19wbGFudAQJAG5hbWVfaGFzaJhSrmNGKwaMAwoAbmV0d29ya19pZA3uVqMKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:chorus_fruit" - }, - { - "id": "minecraft:popped_chorus_fruit" - }, - { - "id": "minecraft:sponge", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAAAACAQAbmFtZRAAbWluZWNyYWZ0OnNwb25nZQQJAG5hbWVfaGFzaLrd2ScYRDMiAwoAbmV0d29ya19pZF01rO0KBgBzdGF0ZXMICwBzcG9uZ2VfdHlwZQMAZHJ5AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:sponge", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAAAACAQAbmFtZRAAbWluZWNyYWZ0OnNwb25nZQQJAG5hbWVfaGFzaLrd2ScYRDMiAwoAbmV0d29ya19pZPiOc4QKBgBzdGF0ZXMICwBzcG9uZ2VfdHlwZQMAd2V0AAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkGnlaAwoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABibHVlAQgAZGVhZF9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkSnHuagoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABwaW5rAQgAZGVhZF9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkmkHyegoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgBwdXJwbGUBCABkZWFkX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkdpUDxgoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yAwByZWQBCABkZWFkX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkYNWvYgoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgB5ZWxsb3cBCABkZWFkX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkZSxBQgoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABibHVlAQgAZGVhZF9iaXQBAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lklSTVqQoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABwaW5rAQgAZGVhZF9iaXQBAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lk5fTYuQoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgBwdXJwbGUBCABkZWFkX2JpdAEAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkwUjqBAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yAwByZWQBCABkZWFkX2JpdAEAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkq4iWoQoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgB5ZWxsb3cBCABkZWFkX2JpdAEAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:sculk", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAgAACAQAbmFtZQ8AbWluZWNyYWZ0OnNjdWxrBAkAbmFtZV9oYXNo2Lq7T5yQF8kDCgBuZXR3b3JrX2lkyqUPPgoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:sculk_vein", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAgAACAQAbmFtZRQAbWluZWNyYWZ0OnNjdWxrX3ZlaW4ECQBuYW1lX2hhc2gJUdhVooV4zwMKAG5ldHdvcmtfaWSUfn1XCgYAc3RhdGVzAxkAbXVsdGlfZmFjZV9kaXJlY3Rpb25fYml0cwAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:sculk_catalyst", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAgAACAQAbmFtZRgAbWluZWNyYWZ0OnNjdWxrX2NhdGFseXN0BAkAbmFtZV9oYXNo+gCpbrCHST4DCgBuZXR3b3JrX2lkMJ2n/woGAHN0YXRlcwEFAGJsb29tAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:sculk_shrieker", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTMAgAACAQAbmFtZRgAbWluZWNyYWZ0OnNjdWxrX3Nocmlla2VyBAkAbmFtZV9oYXNo5OXtyObniQ4DCgBuZXR3b3JrX2lkxapoNAoGAHN0YXRlcwEGAGFjdGl2ZQABCgBjYW5fc3VtbW9uAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:sculk_sensor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQyAgAACAQAbmFtZRYAbWluZWNyYWZ0OnNjdWxrX3NlbnNvcgQJAG5hbWVfaGFzaCkmHreeTgNnAwoAbmV0d29ya19pZLj2WPcKBgBzdGF0ZXMDEgBzY3Vsa19zZW5zb3JfcGhhc2UAAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:calibrated_sculk_sensor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAwAACAQAbmFtZSEAbWluZWNyYWZ0OmNhbGlicmF0ZWRfc2N1bGtfc2Vuc29yBAkAbmFtZV9oYXNoffAcXXN/iJUDCgBuZXR3b3JrX2lkwOx3QQoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAxIAc2N1bGtfc2Vuc29yX3BoYXNlAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:reinforced_deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTRAgAACAQAbmFtZR4AbWluZWNyYWZ0OnJlaW5mb3JjZWRfZGVlcHNsYXRlBAkAbmFtZV9oYXNoldDmj91EapQDCgBuZXR3b3JrX2lkHIt+aQoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "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:wolf_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": "CgAAAwgAYmxvY2tfaWQyAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnRvcmNoBAkAbmFtZV9oYXNoagn7rmDBzisDCgBuZXR3b3JrX2lk+BwwuQoGAHN0YXRlcwgWAHRvcmNoX2ZhY2luZ19kaXJlY3Rpb24HAHVua25vd24AAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:soul_torch", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQLAgAACAQAbmFtZRQAbWluZWNyYWZ0OnNvdWxfdG9yY2gECQBuYW1lX2hhc2huixOT04BRdQMKAG5ldHdvcmtfaWShbFILCgYAc3RhdGVzCBYAdG9yY2hfZmFjaW5nX2RpcmVjdGlvbgcAdW5rbm93bgADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:sea_pickle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAQAACAQAbmFtZRQAbWluZWNyYWZ0OnNlYV9waWNrbGUECQBuYW1lX2hhc2iONEfZJB+glgMKAG5ldHdvcmtfaWSINWQyCgYAc3RhdGVzAw0AY2x1c3Rlcl9jb3VudAAAAAABCABkZWFkX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:lantern", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTPAQAACAQAbmFtZREAbWluZWNyYWZ0OmxhbnRlcm4ECQBuYW1lX2hhc2hMw44VI2HWygMKAG5ldHdvcmtfaWRkjQvzCgYAc3RhdGVzAQcAaGFuZ2luZwAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:soul_lantern", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQMAgAACAQAbmFtZRYAbWluZWNyYWZ0OnNvdWxfbGFudGVybgQJAG5hbWVfaGFzaGjIpjxk9z+RAwoAbmV0d29ya19pZGfoP8cKBgBzdGF0ZXMBBwBoYW5naW5nAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAgAACAQAbmFtZRAAbWluZWNyYWZ0OmNhbmRsZQQJAG5hbWVfaGFzaHPd+MsNdWTfAwoAbmV0d29ya19pZHsBMA0KBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:white_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWScAgAACAQAbmFtZRYAbWluZWNyYWZ0OndoaXRlX2NhbmRsZQQJAG5hbWVfaGFzaN1EG5Q1mHiEAwoAbmV0d29ya19pZKN1mmgKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:orange_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSdAgAACAQAbmFtZRcAbWluZWNyYWZ0Om9yYW5nZV9jYW5kbGUECQBuYW1lX2hhc2jySEVWHgUIHQMKAG5ldHdvcmtfaWSfVz82CgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:magenta_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hZ2VudGFfY2FuZGxlBAkAbmFtZV9oYXNoG0u6YIOoBSEDCgBuZXR3b3JrX2lk9xGNkQoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:light_blue_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSfAgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FuZGxlBAkAbmFtZV9oYXNocXGeK0zgrG0DCgBuZXR3b3JrX2lk2m1y8goGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:yellow_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAgAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19jYW5kbGUECQBuYW1lX2hhc2i00dtusU3CqQMKAG5ldHdvcmtfaWR9LTmpCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:lime_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAgAACAQAbmFtZRUAbWluZWNyYWZ0OmxpbWVfY2FuZGxlBAkAbmFtZV9oYXNokcmrw5xvz7ADCgBuZXR3b3JrX2lkIAUu6QoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:pink_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAgAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfY2FuZGxlBAkAbmFtZV9oYXNoQJdEY4sZ0dwDCgBuZXR3b3JrX2lk23Rn5AoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:gray_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAgAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXlfY2FuZGxlBAkAbmFtZV9oYXNoS5poSo9wBDEDCgBuZXR3b3JrX2lk3trRCAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:light_gray_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FuZGxlBAkAbmFtZV9oYXNo9ruTZLBNMasDCgBuZXR3b3JrX2lkb6DOegoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:cyan_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAgAACAQAbmFtZRUAbWluZWNyYWZ0OmN5YW5fY2FuZGxlBAkAbmFtZV9oYXNoc/M8PNVcjOwDCgBuZXR3b3JrX2lkZoIQOQoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:purple_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSmAgAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnBsZV9jYW5kbGUECQBuYW1lX2hhc2jaI3xUW0/myQMKAG5ldHdvcmtfaWSnLI2BCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:blue_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAgAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfY2FuZGxlBAkAbmFtZV9oYXNoAASSPW6TgQADCgBuZXR3b3JrX2lkrxrjQAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:brown_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJyb3duX2NhbmRsZQQJAG5hbWVfaGFzaDia0l6s1+WYAwoAbmV0d29ya19pZKSkBXYKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:green_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAgAACAQAbmFtZRYAbWluZWNyYWZ0OmdyZWVuX2NhbmRsZQQJAG5hbWVfaGFzaLeFPO1l+fIoAwoAbmV0d29ya19pZBkznDsKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:red_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9jYW5kbGUECQBuYW1lX2hhc2jjAQpGf59ZdwMKAG5ldHdvcmtfaWRbb88GCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:black_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJsYWNrX2NhbmRsZQQJAG5hbWVfaGFzaB+wRDpOqREKAwoAbmV0d29ya19pZNnOnuEKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:crafting_table", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6AAAACAQAbmFtZRgAbWluZWNyYWZ0OmNyYWZ0aW5nX3RhYmxlBAkAbmFtZV9oYXNoe76VAmjvbpYDCgBuZXR3b3JrX2lkwCxwaAoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:cartography_table", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTHAQAACAQAbmFtZRsAbWluZWNyYWZ0OmNhcnRvZ3JhcGh5X3RhYmxlBAkAbmFtZV9oYXNomaWiiD/znP8DCgBuZXR3b3JrX2lkI6FzMwoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:fletching_table", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAQAACAQAbmFtZRkAbWluZWNyYWZ0OmZsZXRjaGluZ190YWJsZQQJAG5hbWVfaGFzaPFibh8unKyUAwoAbmV0d29ya19pZJ2mW0oKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:smithing_table", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAQAACAQAbmFtZRgAbWluZWNyYWZ0OnNtaXRoaW5nX3RhYmxlBAkAbmFtZV9oYXNo4tFES2xOXEYDCgBuZXR3b3JrX2lkXWMBzQoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:beehive", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAQAACAQAbmFtZREAbWluZWNyYWZ0OmJlZWhpdmUECQBuYW1lX2hhc2hCcqn12UbNpwMKAG5ldHdvcmtfaWR/idcaCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAMLAGhvbmV5X2xldmVsAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:suspicious_sand", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAwAACAQAbmFtZRkAbWluZWNyYWZ0OnN1c3BpY2lvdXNfc2FuZAQJAG5hbWVfaGFzaL67QsuvLP00AwoAbmV0d29ya19pZKnkaIAKBgBzdGF0ZXMDEABicnVzaGVkX3Byb2dyZXNzAAAAAAEHAGhhbmdpbmcBAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:suspicious_gravel", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AwAACAQAbmFtZRsAbWluZWNyYWZ0OnN1c3BpY2lvdXNfZ3JhdmVsBAkAbmFtZV9oYXNoJSVbGNk7C3oDCgBuZXR3b3JrX2lkvIEJAAoGAHN0YXRlcwMQAGJydXNoZWRfcHJvZ3Jlc3MAAAAAAQcAaGFuZ2luZwEAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:campfire" - }, - { - "id": "minecraft:soul_campfire" - }, - { - "id": "minecraft:furnace", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ9AAAACAQAbmFtZREAbWluZWNyYWZ0OmZ1cm5hY2UECQBuYW1lX2hhc2ioOQrludYY8wMKAG5ldHdvcmtfaWRZxnDOCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:blast_furnace", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTDAQAACAQAbmFtZRcAbWluZWNyYWZ0OmJsYXN0X2Z1cm5hY2UECQBuYW1lX2hhc2ivDbnjkpGm5QMKAG5ldHdvcmtfaWTcEbV/CgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:smoker", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAQAACAQAbmFtZRAAbWluZWNyYWZ0OnNtb2tlcgQJAG5hbWVfaGFzaJd1rDMkRWomAwoAbmV0d29ya19pZGWswMwKBgBzdGF0ZXMIHABtaW5lY3JhZnQ6Y2FyZGluYWxfZGlyZWN0aW9uBQBzb3V0aAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:respawn_anchor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJlc3Bhd25fYW5jaG9yBAkAbmFtZV9oYXNoZOdcjW05qigDCgBuZXR3b3JrX2lkmhMcaQoGAHN0YXRlcwMVAHJlc3Bhd25fYW5jaG9yX2NoYXJnZQAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:brewing_stand" - }, - { - "id": "minecraft:anvil", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lk8Z3VowoGAHN0YXRlcwgGAGRhbWFnZQkAdW5kYW1hZ2VkCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:anvil", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lkpiv8BAoGAHN0YXRlcwgGAGRhbWFnZRAAc2xpZ2h0bHlfZGFtYWdlZAgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:anvil", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lkFu+pdwoGAHN0YXRlcwgGAGRhbWFnZQwAdmVyeV9kYW1hZ2VkCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:grindstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTCAQAACAQAbmFtZRQAbWluZWNyYWZ0OmdyaW5kc3RvbmUECQBuYW1lX2hhc2id56zc0nk99wMKAG5ldHdvcmtfaWS4Es07CgYAc3RhdGVzCAoAYXR0YWNobWVudAgAc3RhbmRpbmcDCQBkaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:enchanting_table", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR0AAAACAQAbmFtZRoAbWluZWNyYWZ0OmVuY2hhbnRpbmdfdGFibGUECQBuYW1lX2hhc2jgIx24VLvMvwMKAG5ldHdvcmtfaWRliFFJCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:bookshelf", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAAAACAQAbmFtZRMAbWluZWNyYWZ0OmJvb2tzaGVsZgQJAG5hbWVfaGFzaDU04DrgJCS9AwoAbmV0d29ya19pZBcWwIwKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:chiseled_bookshelf", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAwAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX2Jvb2tzaGVsZgQJAG5hbWVfaGFzaNXDBnsIsywYAwoAbmV0d29ya19pZIprt5IKBgBzdGF0ZXMDDABib29rc19zdG9yZWQAAAAAAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:lectern", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTBAQAACAQAbmFtZREAbWluZWNyYWZ0OmxlY3Rlcm4ECQBuYW1lX2hhc2j5Z4Mmi/1QxAMKAG5ldHdvcmtfaWR4JfDHCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgBCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:cauldron" - }, - { - "id": "minecraft:composter", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAQAACAQAbmFtZRMAbWluZWNyYWZ0OmNvbXBvc3RlcgQJAG5hbWVfaGFzaPAADHptzeWJAwoAbmV0d29ya19pZHIL6i4KBgBzdGF0ZXMDFABjb21wb3N0ZXJfZmlsbF9sZXZlbAAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:chest", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2AAAACAQAbmFtZQ8AbWluZWNyYWZ0OmNoZXN0BAkAbmFtZV9oYXNog9ozMxlcA88DCgBuZXR3b3JrX2lkDkOFvAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:trapped_chest", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAAAACAQAbmFtZRcAbWluZWNyYWZ0OnRyYXBwZWRfY2hlc3QECQBuYW1lX2hhc2g2qpF9stsEjgMKAG5ldHdvcmtfaWTjJWYxCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAbm9ydGgAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:ender_chest", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAAAACAQAbmFtZRUAbWluZWNyYWZ0OmVuZGVyX2NoZXN0BAkAbmFtZV9oYXNohEZzOFdg0WUDCgBuZXR3b3JrX2lkx4jiSQoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:barrel", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhcnJlbAQJAG5hbWVfaGFzaHDkRPGymiRqAwoAbmV0d29ya19pZPnxzgsKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:undyed_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAAAACAQAbmFtZRwAbWluZWNyYWZ0OnVuZHllZF9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaOC9mypm/MlBAwoAbmV0d29ya19pZJ8rxp0KBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:white_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAAAACAQAbmFtZRsAbWluZWNyYWZ0OndoaXRlX3NodWxrZXJfYm94BAkAbmFtZV9oYXNosK79m1rPUBwDCgBuZXR3b3JrX2lkjrET6goGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:light_gray_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAwAACAQAbmFtZSAAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2iBe5zq7PxHmgMKAG5ldHdvcmtfaWSCVJv0CgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:gray_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRqAwAACAQAbmFtZRoAbWluZWNyYWZ0OmdyYXlfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2ga2s8ctjHUhgMKAG5ldHdvcmtfaWS3WMsWCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:black_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRyAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJsYWNrX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoPm03OZphrp8DCgBuZXR3b3JrX2lkXHztNAoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:brown_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRvAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJyb3duX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoT3DD6qAL9cADCgBuZXR3b3JrX2lkaXxpYQoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:red_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRxAwAACAQAbmFtZRkAbWluZWNyYWZ0OnJlZF9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaMIlKSCzqSZoAwoAbmV0d29ya19pZNrf+icKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:orange_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAwAACAQAbmFtZRwAbWluZWNyYWZ0Om9yYW5nZV9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaG2MAXU67wGrAwoAbmV0d29ya19pZGoO05gKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:yellow_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRnAwAACAQAbmFtZRwAbWluZWNyYWZ0OnllbGxvd19zaHVsa2VyX2JveAQJAG5hbWVfaGFzaIsLwQHYjcIEAwoAbmV0d29ya19pZBCBSiYKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:lime_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRoAwAACAQAbmFtZRoAbWluZWNyYWZ0OmxpbWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2hUwBkg+faUGAMKAG5ldHdvcmtfaWRJeKqqCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:green_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRwAwAACAQAbmFtZRsAbWluZWNyYWZ0OmdyZWVuX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoZgUeT3LupLUDCgBuZXR3b3JrX2lkzJiohQoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:cyan_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAwAACAQAbmFtZRoAbWluZWNyYWZ0OmN5YW5fc2h1bGtlcl9ib3gECQBuYW1lX2hhc2gSfbjteXg5yAMKAG5ldHdvcmtfaWTHeliECgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:light_blue_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAwAACAQAbmFtZSAAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2h0VFCX0qsRxQMKAG5ldHdvcmtfaWQXD8U0CgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:blue_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJsdWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2hn9gS0XIe6rAMKAG5ldHdvcmtfaWTO4PJaCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:purple_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAwAACAQAbmFtZRwAbWluZWNyYWZ0OnB1cnBsZV9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaEV/lkNPxRDdAwoAbmV0d29ya19pZFK25GAKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:magenta_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAwAACAQAbmFtZR0AbWluZWNyYWZ0Om1hZ2VudGFfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2iqWM7IJHxcFgMKAG5ldHdvcmtfaWTyyudTCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:pink_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRpAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBpbmtfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2in1tkJ1GNcZgMKAG5ldHdvcmtfaWQOEGXjCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:armor_stand" - }, - { - "id": "minecraft:noteblock", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAAAACAQAbmFtZRMAbWluZWNyYWZ0Om5vdGVibG9jawQJAG5hbWVfaGFzaHPA8dBBH0UaAwoAbmV0d29ya19pZH1U5QkKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:jukebox", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAAAACAQAbmFtZREAbWluZWNyYWZ0Omp1a2Vib3gECQBuYW1lX2hhc2ieAIPExf/ZfgMKAG5ldHdvcmtfaWSmR7JfCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "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": "CgAAAwgAYmxvY2tfaWRZAAAACAQAbmFtZRMAbWluZWNyYWZ0Omdsb3dzdG9uZQQJAG5hbWVfaGFzaFYqXNkefIlPAwoAbmV0d29ya19pZGT7WYYKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:redstone_lamp", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZHN0b25lX2xhbXAECQBuYW1lX2hhc2hJ9V80caPvEgMKAG5ldHdvcmtfaWRvNPwnCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:sea_lantern", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAAAACAQAbmFtZRUAbWluZWNyYWZ0OnNlYV9sYW50ZXJuBAkAbmFtZV9oYXNoLPsv1TX9M+QDCgBuZXR3b3JrX2lk1PPVyAoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "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": "CgAAAwgAYmxvY2tfaWSKAAAACAQAbmFtZRAAbWluZWNyYWZ0OmJlYWNvbgQJAG5hbWVfaGFzaACwhhfSkdkHAwoAbmV0d29ya19pZF8jfiEKBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:bell", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAQAACAQAbmFtZQ4AbWluZWNyYWZ0OmJlbGwECQBuYW1lX2hhc2iPqsgDXRcsxAMKAG5ldHdvcmtfaWT7zhOoCgYAc3RhdGVzCAoAYXR0YWNobWVudAgAc3RhbmRpbmcDCQBkaXJlY3Rpb24AAAAAAQoAdG9nZ2xlX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:conduit", - "block_state_b64": "CgAAAwgAYmxvY2tfaWScAQAACAQAbmFtZREAbWluZWNyYWZ0OmNvbmR1aXQECQBuYW1lX2hhc2jqxKAxq2EaWQMKAG5ldHdvcmtfaWTWcBVnCgYAc3RhdGVzAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:stonecutter_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lY3V0dGVyX2Jsb2NrBAkAbmFtZV9oYXNoQAXTbAM3MeYDCgBuZXR3b3JrX2lkWS4RjAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "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:armadillo_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/q5cEA0hmQMKAG5ldHdvcmtfaWQ2eM8kCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:lightning_rod", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ3AgAACAQAbmFtZRcAbWluZWNyYWZ0OmxpZ2h0bmluZ19yb2QECQBuYW1lX2hhc2ioXQF1xvfHNQMKAG5ldHdvcmtfaWRLuHyACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "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": "CgAAAwgAYmxvY2tfaWRCAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnJhaWwECQBuYW1lX2hhc2hUzmhUXYJDUQMKAG5ldHdvcmtfaWR+Sp6YCgYAc3RhdGVzAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:golden_rail", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQbAAAACAQAbmFtZRUAbWluZWNyYWZ0OmdvbGRlbl9yYWlsBAkAbmFtZV9oYXNoOoV5MaKipoUDCgBuZXR3b3JrX2lkfAcxLwoGAHN0YXRlcwENAHJhaWxfZGF0YV9iaXQAAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:detector_rail", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQcAAAACAQAbmFtZRcAbWluZWNyYWZ0OmRldGVjdG9yX3JhaWwECQBuYW1lX2hhc2gVUk31qOysUQMKAG5ldHdvcmtfaWRVW/aICgYAc3RhdGVzAQ0AcmFpbF9kYXRhX2JpdAADDgByYWlsX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:activator_rail", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AAAACAQAbmFtZRgAbWluZWNyYWZ0OmFjdGl2YXRvcl9yYWlsBAkAbmFtZV9oYXNosIL91qriCRkDCgBuZXR3b3JrX2lkZfckmwoGAHN0YXRlcwENAHJhaWxfZGF0YV9iaXQAAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "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": "CgAAAwgAYmxvY2tfaWSYAAAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZHN0b25lX2Jsb2NrBAkAbmFtZV9oYXNoRhULL0r8o0sDCgBuZXR3b3JrX2lklayOHgoGAHN0YXRlcwADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:redstone_torch", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAAAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZHN0b25lX3RvcmNoBAkAbmFtZV9oYXNoizFRjpYMIDgDCgBuZXR3b3JrX2lkuHz7yAoGAHN0YXRlcwgWAHRvcmNoX2ZhY2luZ19kaXJlY3Rpb24HAHVua25vd24AAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:lever", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmxldmVyBAkAbmFtZV9oYXNoGMJeLJsUMLYDCgBuZXR3b3JrX2lkEF/GuAoGAHN0YXRlcwgPAGxldmVyX2RpcmVjdGlvbg4AZG93bl9lYXN0X3dlc3QBCABvcGVuX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:wooden_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAAAACAQAbmFtZRcAbWluZWNyYWZ0Ondvb2Rlbl9idXR0b24ECQBuYW1lX2hhc2hR7PgSTQt0sQMKAG5ldHdvcmtfaWSU07kYCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:spruce_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAQAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9idXR0b24ECQBuYW1lX2hhc2jBW9Z8aYE7YQMKAG5ldHdvcmtfaWTkUIGuCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:birch_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSMAQAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX2J1dHRvbgQJAG5hbWVfaGFzaJXYgGuSHbTwAwoAbmV0d29ya19pZGWp3yoKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:jungle_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSOAQAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9idXR0b24ECQBuYW1lX2hhc2iCgNANcJs+BQMKAG5ldHdvcmtfaWT9fImWCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:acacia_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAQAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9idXR0b24ECQBuYW1lX2hhc2gVvmcT7LTO0wMKAG5ldHdvcmtfaWRQnxIJCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:dark_oak_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSNAQAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX2J1dHRvbgQJAG5hbWVfaGFzaIV10ZGGrCIEAwoAbmV0d29ya19pZN5vAmIKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:mangrove_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX2J1dHRvbgQJAG5hbWVfaGFzaNzeYYKLgOzJAwoAbmV0d29ya19pZAFEGQ0KBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:cherry_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9idXR0b24ECQBuYW1lX2hhc2j2/IHjeAbUcwMKAG5ldHdvcmtfaWRJ1irQCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:bamboo_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT+AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19idXR0b24ECQBuYW1lX2hhc2j7AddMi+6nsgMKAG5ldHdvcmtfaWSa9w4/CgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:stone_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAAAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX2J1dHRvbgQJAG5hbWVfaGFzaM4ejMctmvohAwoAbmV0d29ya19pZMw+aC0KBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:crimson_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fYnV0dG9uBAkAbmFtZV9oYXNofnjYHaYIeWgDCgBuZXR3b3JrX2lk+n1vyQoGAHN0YXRlcwESAGJ1dHRvbl9wcmVzc2VkX2JpdAADEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:warped_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9idXR0b24ECQBuYW1lX2hhc2jwkV2EU6Cn1QMKAG5ldHdvcmtfaWTnHnk1CgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:polished_blackstone_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQnAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnV0dG9uBAkAbmFtZV9oYXNojmxzQKS0S/EDCgBuZXR3b3JrX2lkDtQ95woGAHN0YXRlcwESAGJ1dHRvbl9wcmVzc2VkX2JpdAADEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:tripwire_hook", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAAAACAQAbmFtZRcAbWluZWNyYWZ0OnRyaXB3aXJlX2hvb2sECQBuYW1lX2hhc2gQdp+oGZLNnAMKAG5ldHdvcmtfaWSy+1KJCgYAc3RhdGVzAQwAYXR0YWNoZWRfYml0AAMJAGRpcmVjdGlvbgAAAAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:wooden_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAAAACAQAbmFtZR8AbWluZWNyYWZ0Ondvb2Rlbl9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaGkGs5kCuA74AwoAbmV0d29ya19pZDRzPNwKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:spruce_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAQAACAQAbmFtZR8AbWluZWNyYWZ0OnNwcnVjZV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaNmwuq549fJKAwoAbmV0d29ya19pZLQMCw0KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:birch_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSWAQAACAQAbmFtZR4AbWluZWNyYWZ0OmJpcmNoX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNorQkT9kDdlTwDCgBuZXR3b3JrX2lkH0G97AoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:jungle_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSYAQAACAQAbmFtZR8AbWluZWNyYWZ0Omp1bmdsZV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaJ7DcteCkb8/AwoAbmV0d29ya19pZLdPBSAKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:acacia_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSVAQAACAQAbmFtZR8AbWluZWNyYWZ0OmFjYWNpYV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaC2frZtfoYqCAwoAbmV0d29ya19pZIDdI18KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:dark_oak_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAQAACAQAbmFtZSEAbWluZWNyYWZ0OmRhcmtfb2FrX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoHUCJsTy52pwDCgBuZXR3b3JrX2lkKpi8rAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:mangrove_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAgAACAQAbmFtZSEAbWluZWNyYWZ0Om1hbmdyb3ZlX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoiDsTfJaX100DCgBuZXR3b3JrX2lkuwWDyQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:cherry_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAwAACAQAbmFtZR8AbWluZWNyYWZ0OmNoZXJyeV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaALMqYEZDUQHAwoAbmV0d29ya19pZPNT+r0KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:bamboo_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJhbWJvb19wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaNvxJ7NIAaqlAwoAbmV0d29ya19pZIZ8XnYKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:crimson_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAgAACAQAbmFtZSAAbWluZWNyYWZ0OmNyaW1zb25fcHJlc3N1cmVfcGxhdGUECQBuYW1lX2hhc2hqBDVDAd31/gMKAG5ldHdvcmtfaWRmV18LCgYAc3RhdGVzAw8AcmVkc3RvbmVfc2lnbmFsAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:warped_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAgAACAQAbmFtZR8AbWluZWNyYWZ0OndhcnBlZF9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaBxFoQksWtYUAwoAbmV0d29ya19pZJVRoIcKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:stone_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0b25lX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNounJuTBUTrU8DCgBuZXR3b3JrX2lkjDydwQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:light_weighted_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSTAAAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X3dlaWdodGVkX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoOyOJkNxLtkEDCgBuZXR3b3JrX2lkrr2AjgoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:heavy_weighted_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAAAACAQAbmFtZScAbWluZWNyYWZ0OmhlYXZ5X3dlaWdodGVkX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoltgDmDvTajUDCgBuZXR3b3JrX2lkFxVKuQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:polished_blackstone_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAgAACAQAbmFtZSwAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfcHJlc3N1cmVfcGxhdGUECQBuYW1lX2hhc2h65Ci6/CeGqwMKAG5ldHdvcmtfaWTaSW5xCgYAc3RhdGVzAw8AcmVkc3RvbmVfc2lnbmFsAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:observer", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT7AAAACAQAbmFtZRIAbWluZWNyYWZ0Om9ic2VydmVyBAkAbmFtZV9oYXNoYhlh1lpmHTgDCgBuZXR3b3JrX2lkQEh55goGAHN0YXRlcwgaAG1pbmVjcmFmdDpmYWNpbmdfZGlyZWN0aW9uBABkb3duAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:daylight_detector", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAAAACAQAbmFtZRsAbWluZWNyYWZ0OmRheWxpZ2h0X2RldGVjdG9yBAkAbmFtZV9oYXNoV0F0s7B7PVgDCgBuZXR3b3JrX2lkri5afQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:repeater" - }, - { - "id": "minecraft:comparator" - }, - { - "id": "minecraft:hopper" - }, - { - "id": "minecraft:dropper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AAAACAQAbmFtZREAbWluZWNyYWZ0OmRyb3BwZXIECQBuYW1lX2hhc2joXP7XqU0l3QMKAG5ldHdvcmtfaWQfQN6zCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgMAAAABDQB0cmlnZ2VyZWRfYml0AAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:dispenser", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAAAACAQAbmFtZRMAbWluZWNyYWZ0OmRpc3BlbnNlcgQJAG5hbWVfaGFzaP1RR+zAbYP2AwoAbmV0d29ya19pZGAayD0KBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAwAAAAENAHRyaWdnZXJlZF9iaXQAAAMHAHZlcnNpb24DUBQBAA==" - }, - { - "id": "minecraft:piston", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQhAAAACAQAbmFtZRAAbWluZWNyYWZ0OnBpc3RvbgQJAG5hbWVfaGFzaDs3AFh1fL0uAwoAbmV0d29ya19pZLD/5XQKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAQAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:sticky_piston", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQdAAAACAQAbmFtZRcAbWluZWNyYWZ0OnN0aWNreV9waXN0b24ECQBuYW1lX2hhc2hPFJFJSiJ0ZQMKAG5ldHdvcmtfaWT/MzCJCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgEAAAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:tnt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAAAACAQAbmFtZQ0AbWluZWNyYWZ0OnRudAQJAG5hbWVfaGFzaEYOHwCvJH29AwoAbmV0d29ya19pZCGfjU4KBgBzdGF0ZXMBFABhbGxvd191bmRlcndhdGVyX2JpdAABCwBleHBsb2RlX2JpdAAAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:name_tag" - }, - { - "id": "minecraft:loom", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAQAACAQAbmFtZQ4AbWluZWNyYWZ0Omxvb20ECQBuYW1lX2hhc2i7DKjAXNq8TAMKAG5ldHdvcmtfaWR/49HXCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "id": "minecraft:banner", - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 8, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 7, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 15, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 12, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 14, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 1, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 4, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 5, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 13, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 9, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 3, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 11, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 10, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 2, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 6, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "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": "CgAAAwgAYmxvY2tfaWTuAQAACAQAbmFtZRAAbWluZWNyYWZ0OnRhcmdldAQJAG5hbWVfaGFzaJc66SVbYlaxAwoAbmV0d29ya19pZPBozs0KBgBzdGF0ZXMAAwcAdmVyc2lvbgNQFAEA" - }, - { - "id": "minecraft:decorated_pot", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAwAACAQAbmFtZRcAbWluZWNyYWZ0OmRlY29yYXRlZF9wb3QECQBuYW1lX2hhc2jjQgckn8VTvwMKAG5ldHdvcmtfaWRwvkUUCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uA1AUAQA=" - }, - { - "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_21_0.json b/core/src/main/resources/bedrock/creative_items.1_21_0.json deleted file mode 100644 index 4bd0ab60e..000000000 --- a/core/src/main/resources/bedrock/creative_items.1_21_0.json +++ /dev/null @@ -1,6214 +0,0 @@ -{ - "items": [ - { - "id": "minecraft:oak_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19wbGFua3MECQBuYW1lX2hhc2ilMDLR92rQ4wMKAG5ldHdvcmtfaWS2GotyCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:spruce_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAwAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9wbGFua3MECQBuYW1lX2hhc2iumBkmFGFE8gMKAG5ldHdvcmtfaWSo8TFgCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:birch_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX3BsYW5rcwQJAG5hbWVfaGFzaLrrAKJqV2WFAwoAbmV0d29ya19pZL+e3ZAKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:jungle_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAwAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9wbGFua3MECQBuYW1lX2hhc2iBM3k4T3FAugMKAG5ldHdvcmtfaWSXUmBCCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:acacia_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAwAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9wbGFua3MECQBuYW1lX2hhc2g60edJxO5/aAMKAG5ldHdvcmtfaWTUXozECgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:dark_oak_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX3BsYW5rcwQJAG5hbWVfaGFzaAr64wkQ9cA7AwoAbmV0d29ya19pZFbMeR0KBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:mangrove_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX3BsYW5rcwQJAG5hbWVfaGFzaPvLtcEA0F8xAwoAbmV0d29ya19pZEvnlCYKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:cherry_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9wbGFua3MECQBuYW1lX2hhc2hNIvVh/lVW7gMKAG5ldHdvcmtfaWQTXpRoCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:bamboo_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT9AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19wbGFua3MECQBuYW1lX2hhc2gYnjNz7SCCjgMKAG5ldHdvcmtfaWTi8ySSCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:bamboo_mosaic", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT8AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19tb3NhaWMECQBuYW1lX2hhc2izSEgiMKOp/AMKAG5ldHdvcmtfaWQZ/p8xCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:crimson_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fcGxhbmtzBAkAbmFtZV9oYXNoJc5IKqNXJnwDCgBuZXR3b3JrX2lkwtJDdQoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:warped_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTyAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9wbGFua3MECQBuYW1lX2hhc2g3yGXEWhe6LgMKAG5ldHdvcmtfaWStTABvCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWSE4JosCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCwBjb2JibGVzdG9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWTUvV6XCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlEQBtb3NzeV9jb2JibGVzdG9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWT4opb2CgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlBwBncmFuaXRlCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWQAMQTVCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlBwBkaW9yaXRlCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWQIbDOcCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCABhbmRlc2l0ZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWSZKhusCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCQBzYW5kc3RvbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWSp4zgCCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlDQByZWRfc2FuZHN0b25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRbqVHTCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCwBzdG9uZV9icmljawgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRr0ZT/CgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlEQBtb3NzeV9zdG9uZV9icmljawgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRnLis3CgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlBQBicmljawgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWQNLzfSCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlDABuZXRoZXJfYnJpY2sIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWQ5h0xwCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlEAByZWRfbmV0aGVyX2JyaWNrCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWS9J0B2CgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCQBlbmRfYnJpY2sIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRPbkJeCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCgBwcmlzbWFyaW5lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:blackstone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsYWNrc3RvbmVfd2FsbAQJAG5hbWVfaGFzaMP8XppUSU1RAwoAbmV0d29ya19pZMbeBBsKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:polished_blackstone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfd2FsbAQJAG5hbWVfaGFzaP6SwV08YwzAAwoAbmV0d29ya19pZAJLsz8KBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:polished_blackstone_brick_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQVAgAACAQAbmFtZSgAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfd2FsbAQJAG5hbWVfaGFzaBBIDZbHxiEzAwoAbmV0d29ya19pZEbLV8cKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:cobbled_deepslate_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AgAACAQAbmFtZSAAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3dhbGwECQBuYW1lX2hhc2iECY5oKxeT+gMKAG5ldHdvcmtfaWRCnPrFCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:deepslate_tile_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3dhbGwECQBuYW1lX2hhc2jz7N+PeuEXgQMKAG5ldHdvcmtfaWTqw4s4CgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:polished_deepslate_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV93YWxsBAkAbmFtZV9oYXNoHxjTdj9pevMDCgBuZXR3b3JrX2lkIvBYYwoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:deepslate_brick_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSJAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja193YWxsBAkAbmFtZV9oYXNoEs3EQrjroyEDCgBuZXR3b3JrX2lkwlrCGwoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:mud_brick_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAgAACAQAbmFtZRgAbWluZWNyYWZ0Om11ZF9icmlja193YWxsBAkAbmFtZV9oYXNov9b98ATpUSwDCgBuZXR3b3JrX2lkH/1WZQoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:oak_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAAAACAQAbmFtZRMAbWluZWNyYWZ0Om9ha19mZW5jZQQJAG5hbWVfaGFzaGEmid7AaCWRAwoAbmV0d29ya19pZDvPEXcKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:spruce_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRCAwAACAQAbmFtZRYAbWluZWNyYWZ0OnNwcnVjZV9mZW5jZQQJAG5hbWVfaGFzaPQCm+aX1ZQeAwoAbmV0d29ya19pZD1QUEoKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:birch_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ/AwAACAQAbmFtZRUAbWluZWNyYWZ0OmJpcmNoX2ZlbmNlBAkAbmFtZV9oYXNo6CJ2ATpANfgDCgBuZXR3b3JrX2lkmCUV2QoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:jungle_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRBAwAACAQAbmFtZRYAbWluZWNyYWZ0Omp1bmdsZV9mZW5jZQQJAG5hbWVfaGFzaOX4cD9uAmsdAwoAbmV0d29ya19pZHz1VxkKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:acacia_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ+AwAACAQAbmFtZRYAbWluZWNyYWZ0OmFjYWNpYV9mZW5jZQQJAG5hbWVfaGFzaGjn+RlKVDH6AwoAbmV0d29ya19pZNVGubwKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:dark_oak_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRAAwAACAQAbmFtZRgAbWluZWNyYWZ0OmRhcmtfb2FrX2ZlbmNlBAkAbmFtZV9oYXNoGPj0gCgM0c0DCgBuZXR3b3JrX2lk2w+gEwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:mangrove_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hbmdyb3ZlX2ZlbmNlBAkAbmFtZV9oYXNowwAd7tPu9bsDCgBuZXR3b3JrX2lkKEcd0goGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:cherry_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAwAACAQAbmFtZRYAbWluZWNyYWZ0OmNoZXJyeV9mZW5jZQQJAG5hbWVfaGFzaFmtUfHfTxcxAwoAbmV0d29ya19pZPCBxAIKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:bamboo_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJhbWJvb19mZW5jZQQJAG5hbWVfaGFzaCKRbxfXsfkiAwoAbmV0d29ya19pZJNXKFcKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:nether_brick_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRxAAAACAQAbmFtZRwAbWluZWNyYWZ0Om5ldGhlcl9icmlja19mZW5jZQQJAG5hbWVfaGFzaA6030ngawxcAwoAbmV0d29ya19pZLnjLF4KBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:crimson_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT/AQAACAQAbmFtZRcAbWluZWNyYWZ0OmNyaW1zb25fZmVuY2UECQBuYW1lX2hhc2jhUhKv1HGj9AMKAG5ldHdvcmtfaWR3OH3OCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:warped_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQAAgAACAQAbmFtZRYAbWluZWNyYWZ0OndhcnBlZF9mZW5jZQQJAG5hbWVfaGFzaJfb3/YuKmOWAwoAbmV0d29ya19pZCpaGC8KBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAAAACAQAbmFtZRQAbWluZWNyYWZ0OmZlbmNlX2dhdGUECQBuYW1lX2hhc2hTxpjEDmRzAwMKAG5ldHdvcmtfaWR+T9kTCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:spruce_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS3AAAACAQAbmFtZRsAbWluZWNyYWZ0OnNwcnVjZV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoanTVB84HRbkDCgBuZXR3b3JrX2lkEnw5egoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:birch_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS4AAAACAQAbmFtZRoAbWluZWNyYWZ0OmJpcmNoX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2jmfPklI8azSwMKAG5ldHdvcmtfaWQL77/BCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:jungle_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS5AAAACAQAbmFtZRsAbWluZWNyYWZ0Omp1bmdsZV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNobYVQkfBomIcDCgBuZXR3b3JrX2lkA1zgtgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:acacia_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS7AAAACAQAbmFtZRsAbWluZWNyYWZ0OmFjYWNpYV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoZnrLUx/XSekDCgBuZXR3b3JrX2lkHg/kTgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:dark_oak_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS6AAAACAQAbmFtZR0AbWluZWNyYWZ0OmRhcmtfb2FrX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2j2PTvdJJHcVQMKAG5ldHdvcmtfaWTwjOCeCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:mangrove_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAgAACAQAbmFtZR0AbWluZWNyYWZ0Om1hbmdyb3ZlX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2i/kOhBKiI/dAMKAG5ldHdvcmtfaWSfweCSCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:cherry_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAwAACAQAbmFtZRsAbWluZWNyYWZ0OmNoZXJyeV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoKWLgCk0z+PsDCgBuZXR3b3JrX2lk/9bTZQoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:bamboo_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJhbWJvb19mZW5jZV9nYXRlBAkAbmFtZV9oYXNopH1JrUgwdIADCgBuZXR3b3JrX2lkzIpPywoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:crimson_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAgAACAQAbmFtZRwAbWluZWNyYWZ0OmNyaW1zb25fZmVuY2VfZ2F0ZQQJAG5hbWVfaGFzaHE3Gfd0Z2d2AwoAbmV0d29ya19pZDQzVbEKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQsAaW5fd2FsbF9iaXQAAQgAb3Blbl9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:warped_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAgAACAQAbmFtZRsAbWluZWNyYWZ0OndhcnBlZF9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoy0oIBjDIG4kDCgBuZXR3b3JrX2lkkf+/3QoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:normal_stone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAQAACAQAbmFtZR0AbWluZWNyYWZ0Om5vcm1hbF9zdG9uZV9zdGFpcnMECQBuYW1lX2hhc2hAEktZZOkGIwMKAG5ldHdvcmtfaWQeH1ALCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:stone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAAAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX3N0YWlycwQJAG5hbWVfaGFzaNRjqVC5GRVDAwoAbmV0d29ya19pZDcCv+MKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:mossy_cobblestone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSyAQAACAQAbmFtZSIAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lX3N0YWlycwQJAG5hbWVfaGFzaMVSTq5z9n1RAwoAbmV0d29ya19pZFIfrhkKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:oak_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ1AAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19zdGFpcnMECQBuYW1lX2hhc2jk/HFzdXy0FQMKAG5ldHdvcmtfaWQJjyzBCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:spruce_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAAAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9zdGFpcnMECQBuYW1lX2hhc2iznygw7uBPBQMKAG5ldHdvcmtfaWTv+is3CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:birch_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAAAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX3N0YWlycwQJAG5hbWVfaGFzaPfhbL619a3GAwoAbmV0d29ya19pZFyPlHAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:jungle_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAAAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9zdGFpcnMECQBuYW1lX2hhc2jodJsHUbOVxQMKAG5ldHdvcmtfaWR0z5d4CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:acacia_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAAAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9zdGFpcnMECQBuYW1lX2hhc2h3x1NmD43IqQMKAG5ldHdvcmtfaWS7Jwz6CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:dark_oak_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAAAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX3N0YWlycwQJAG5hbWVfaGFzaMfwkbYPbNmAAwoAbmV0d29ya19pZCmBYKAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:mangrove_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX3N0YWlycwQJAG5hbWVfaGFzaNpUDY+uGMpyAwoAbmV0d29ya19pZChzUAsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:cherry_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQcAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9zdGFpcnMECQBuYW1lX2hhc2jMtr0v9JY4zwMKAG5ldHdvcmtfaWRQwq31CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:bamboo_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT/AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19zdGFpcnMECQBuYW1lX2hhc2jFOzWL8PalKwMKAG5ldHdvcmtfaWTVPh42CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:bamboo_mosaic_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQKAwAACAQAbmFtZR4AbWluZWNyYWZ0OmJhbWJvb19tb3NhaWNfc3RhaXJzBAkAbmFtZV9oYXNoNLPiveSHPaoDCgBuZXR3b3JrX2lk44PHjgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:stone_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAAAACAQAbmFtZRwAbWluZWNyYWZ0OnN0b25lX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaN6tQViRo5cwAwoAbmV0d29ya19pZDMyMgIKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:mossy_stone_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAQAACAQAbmFtZSIAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaIB/Zv5YBPuYAwoAbmV0d29ya19pZANTOsMKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:sandstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAAAACAQAbmFtZRoAbWluZWNyYWZ0OnNhbmRzdG9uZV9zdGFpcnMECQBuYW1lX2hhc2hOyA0BoYUOPQMKAG5ldHdvcmtfaWSV/834CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:smooth_sandstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSwAQAACAQAbmFtZSEAbWluZWNyYWZ0OnNtb290aF9zYW5kc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNoB+CuCd8Ruz8DCgBuZXR3b3JrX2lksR+m8QoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:red_sandstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS0AAAACAQAbmFtZR4AbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNoPs0LpHPL24YDCgBuZXR3b3JrX2lkLYVt3woGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:smooth_red_sandstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAQAACAQAbmFtZSUAbWluZWNyYWZ0OnNtb290aF9yZWRfc2FuZHN0b25lX3N0YWlycwQJAG5hbWVfaGFzaBvjtQv5pf+MAwoAbmV0d29ya19pZMHNND8KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:granite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAQAACAQAbmFtZRgAbWluZWNyYWZ0OmdyYW5pdGVfc3RhaXJzBAkAbmFtZV9oYXNoGzpvtoqKQjgDCgBuZXR3b3JrX2lkPkcB1goGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:polished_granite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAQAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGVfc3RhaXJzBAkAbmFtZV9oYXNo3PvbSfEQklIDCgBuZXR3b3JrX2lkMmEm3AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:diorite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAQAACAQAbmFtZRgAbWluZWNyYWZ0OmRpb3JpdGVfc3RhaXJzBAkAbmFtZV9oYXNoi73T8VQuZmcDCgBuZXR3b3JrX2lk6i6nBQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:polished_diorite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAQAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGVfc3RhaXJzBAkAbmFtZV9oYXNoFKRJd5Wk5L0DCgBuZXR3b3JrX2lkbt2ioAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:andesite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAQAACAQAbmFtZRkAbWluZWNyYWZ0OmFuZGVzaXRlX3N0YWlycwQJAG5hbWVfaGFzaO5w2FKBw76EAwoAbmV0d29ya19pZKhXEgUKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:polished_andesite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWStAQAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlX3N0YWlycwQJAG5hbWVfaGFzaNcZZ/zmLInIAwoAbmV0d29ya19pZJTHrlEKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAAAACAQAbmFtZRYAbWluZWNyYWZ0OmJyaWNrX3N0YWlycwQJAG5hbWVfaGFzaMyt+cRDk5O2AwoAbmV0d29ya19pZNeMh58KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:nether_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRyAAAACAQAbmFtZR0AbWluZWNyYWZ0Om5ldGhlcl9icmlja19zdGFpcnMECQBuYW1lX2hhc2jRqIoOXgifBAMKAG5ldHdvcmtfaWQDiw5yCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:red_nether_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS3AQAACAQAbmFtZSEAbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNogQvosSbcj7kDCgBuZXR3b3JrX2lkx2IMtAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:end_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSxAQAACAQAbmFtZRoAbWluZWNyYWZ0OmVuZF9icmlja19zdGFpcnMECQBuYW1lX2hhc2hmlAk+QhsUsQMKAG5ldHdvcmtfaWTN7KFaCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:quartz_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWScAAAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9zdGFpcnMECQBuYW1lX2hhc2hmvpvOqGi6egMKAG5ldHdvcmtfaWRmUTh7CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:smooth_quartz_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS4AQAACAQAbmFtZR4AbWluZWNyYWZ0OnNtb290aF9xdWFydHpfc3RhaXJzBAkAbmFtZV9oYXNoNZZ9rX0qZOsDCgBuZXR3b3JrX2lkzsgQyQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:purpur_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAAAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnB1cl9zdGFpcnMECQBuYW1lX2hhc2ifwDxeezXD7gMKAG5ldHdvcmtfaWTT+rxiCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:prismarine_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAQAACAQAbmFtZRsAbWluZWNyYWZ0OnByaXNtYXJpbmVfc3RhaXJzBAkAbmFtZV9oYXNooTHSZ+IrYtcDCgBuZXR3b3JrX2lkxTJfeAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:dark_prismarine_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAQAACAQAbmFtZSAAbWluZWNyYWZ0OmRhcmtfcHJpc21hcmluZV9zdGFpcnMECQBuYW1lX2hhc2hIciLmam4o4AMKAG5ldHdvcmtfaWTVu7TCCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:prismarine_bricks_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAQAACAQAbmFtZSIAbWluZWNyYWZ0OnByaXNtYXJpbmVfYnJpY2tzX3N0YWlycwQJAG5hbWVfaGFzaNIjq1oBlZMMAwoAbmV0d29ya19pZGEFwLYKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:crimson_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT9AQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fc3RhaXJzBAkAbmFtZV9oYXNoZJqIzCBpCq4DCgBuZXR3b3JrX2lktXE00AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:warped_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT+AQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9zdGFpcnMECQBuYW1lX2hhc2hOkY27jLD4RQMKAG5ldHdvcmtfaWQ+E5VrCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:blackstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAgAACAQAbmFtZRsAbWluZWNyYWZ0OmJsYWNrc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNokdoUb76p9McDCgBuZXR3b3JrX2lk5fWI5goGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:polished_blackstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNolCFtFIE8MmADCgBuZXR3b3JrX2lkGTf7sgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:polished_blackstone_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQSAgAACAQAbmFtZSoAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNonks6UlfpOmkDCgBuZXR3b3JrX2lkgYeOdAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAgAACAQAbmFtZRsAbWluZWNyYWZ0OmN1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoHfoAXYq5G3MDCgBuZXR3b3JrX2lkeetf7woGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:exposed_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAgAACAQAbmFtZSMAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcl9zdGFpcnMECQBuYW1lX2hhc2howneQGtZ9cgMKAG5ldHdvcmtfaWSg73zdCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:weathered_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAgAACAQAbmFtZSUAbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyX3N0YWlycwQJAG5hbWVfaGFzaP+R5loXxrVgAwoAbmV0d29ya19pZOnbRf4KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:oxidized_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAgAACAQAbmFtZSQAbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNo6Jeoq5rsPxsDCgBuZXR3b3JrX2lkmRjDnQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:waxed_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAgAACAQAbmFtZSEAbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoh07CQj0/SR8DCgBuZXR3b3JrX2lkmYqoqAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:waxed_exposed_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcl9zdGFpcnMECQBuYW1lX2hhc2guVct1ilmxTwMKAG5ldHdvcmtfaWQgCPROCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:waxed_weathered_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRnAgAACAQAbmFtZSsAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyX3N0YWlycwQJAG5hbWVfaGFzaPXC8Sz/phCpAwoAbmV0d29ya19pZHlwHVsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:waxed_oxidized_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS/AgAACAQAbmFtZSoAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoaqGdkuhxVZUDCgBuZXR3b3JrX2lkYQXzzgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:cobbled_deepslate_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR8AgAACAQAbmFtZSIAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3N0YWlycwQJAG5hbWVfaGFzaPIfa+TpyJcIAwoAbmV0d29ya19pZJUvOYIKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:deepslate_tile_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3N0YWlycwQJAG5hbWVfaGFzaGFRFzB72mN2AwoAbmV0d29ya19pZJEOgIsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:polished_deepslate_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAgAACAQAbmFtZSMAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV9zdGFpcnMECQBuYW1lX2hhc2iNCYxVik9sGAMKAG5ldHdvcmtfaWSRVPnYCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:deepslate_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAgAACAQAbmFtZSAAbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja19zdGFpcnMECQBuYW1lX2hhc2hIasOahEf83wMKAG5ldHdvcmtfaWQ1qEDCCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:mud_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAgAACAQAbmFtZRoAbWluZWNyYWZ0Om11ZF9icmlja19zdGFpcnMECQBuYW1lX2hhc2gt3qxK1NWajAMKAG5ldHdvcmtfaWSm9N3MCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "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": "CgAAAwgAYmxvY2tfaWRgAAAACAQAbmFtZRIAbWluZWNyYWZ0OnRyYXBkb29yBAkAbmFtZV9oYXNotYiAJGtN0xADCgBuZXR3b3JrX2lkyTAWkAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:spruce_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAQAACAQAbmFtZRkAbWluZWNyYWZ0OnNwcnVjZV90cmFwZG9vcgQJAG5hbWVfaGFzaOwlfbgBkUW4AwoAbmV0d29ya19pZPHy1K0KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:birch_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAQAACAQAbmFtZRgAbWluZWNyYWZ0OmJpcmNoX3RyYXBkb29yBAkAbmFtZV9oYXNoSLtLweOLJ7wDCgBuZXR3b3JrX2lkeJWDfgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:jungle_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSTAQAACAQAbmFtZRkAbWluZWNyYWZ0Omp1bmdsZV90cmFwZG9vcgQJAG5hbWVfaGFzaDP/TnM9wyCIAwoAbmV0d29ya19pZEy2fJoKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:acacia_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAQAACAQAbmFtZRkAbWluZWNyYWZ0OmFjYWNpYV90cmFwZG9vcgQJAG5hbWVfaGFzaMj8xi3vmEKOAwoAbmV0d29ya19pZOHj8E8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:dark_oak_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAQAACAQAbmFtZRsAbWluZWNyYWZ0OmRhcmtfb2FrX3RyYXBkb29yBAkAbmFtZV9oYXNomB2GGJQ2aOMDCgBuZXR3b3JrX2lko5ZHTwoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:mangrove_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTvAgAACAQAbmFtZRsAbWluZWNyYWZ0Om1hbmdyb3ZlX3RyYXBkb29yBAkAbmFtZV9oYXNooV3kQsQUUmkDCgBuZXR3b3JrX2lkkF/mxAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:cherry_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAwAACAQAbmFtZRkAbWluZWNyYWZ0OmNoZXJyeV90cmFwZG9vcgQJAG5hbWVfaGFzaH/PefpfdHgtAwoAbmV0d29ya19pZOA7eNgKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:bamboo_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAwAACAQAbmFtZRkAbWluZWNyYWZ0OmJhbWJvb190cmFwZG9vcgQJAG5hbWVfaGFzaJrEOpsTwtKCAwoAbmV0d29ya19pZLvbPz8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:iron_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAAAACAQAbmFtZRcAbWluZWNyYWZ0Omlyb25fdHJhcGRvb3IECQBuYW1lX2hhc2gwA+IumsEiGQMKAG5ldHdvcmtfaWTvSVl/CgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:crimson_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT1AQAACAQAbmFtZRoAbWluZWNyYWZ0OmNyaW1zb25fdHJhcGRvb3IECQBuYW1lX2hhc2jHXufTnwUkYgMKAG5ldHdvcmtfaWQLjMYVCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:warped_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT2AQAACAQAbmFtZRkAbWluZWNyYWZ0OndhcnBlZF90cmFwZG9vcgQJAG5hbWVfaGFzaA20wG/+vkd6AwoAbmV0d29ya19pZHKR/hYKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:iron_bars", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAAAACAQAbmFtZRMAbWluZWNyYWZ0Omlyb25fYmFycwQJAG5hbWVfaGFzaPuefWSNAe56AwoAbmV0d29ya19pZN2LB5IKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmdsYXNzBAkAbmFtZV9oYXNowGJByfWff6gDCgBuZXR3b3JrX2lk0hdLNwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:white_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAAAACAQAbmFtZR0AbWluZWNyYWZ0OndoaXRlX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2iHubqoMbu9fAMKAG5ldHdvcmtfaWRndBrUCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:light_gray_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAwAACAQAbmFtZSIAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaKKa+LrRsHQhAwoAbmV0d29ya19pZEv2giYKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:gray_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSmAwAACAQAbmFtZRwAbWluZWNyYWZ0OmdyYXlfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaIETy7Y/HZREAwoAbmV0d29ya19pZDomVrUKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:black_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAwAACAQAbmFtZR0AbWluZWNyYWZ0OmJsYWNrX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2iV6BCwpfDMmwMKAG5ldHdvcmtfaWSV7doJCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:brown_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAwAACAQAbmFtZR0AbWluZWNyYWZ0OmJyb3duX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2igsEiq5np8JgMKAG5ldHdvcmtfaWRMzE/lCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:red_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWStAwAACAQAbmFtZRsAbWluZWNyYWZ0OnJlZF9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNoCa2J12/lQoIDCgBuZXR3b3JrX2lk283lWAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:orange_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAwAACAQAbmFtZR4AbWluZWNyYWZ0Om9yYW5nZV9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNozgjAuvzhxGsDCgBuZXR3b3JrX2lkW5CkhQoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:yellow_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAwAACAQAbmFtZR4AbWluZWNyYWZ0OnllbGxvd19zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNo7EbHMd5WVugDCgBuZXR3b3JrX2lkkdDyXQoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:lime_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAwAACAQAbmFtZRwAbWluZWNyYWZ0OmxpbWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaBtZA1nZtwcFAwoAbmV0d29ya19pZDxX85UKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:green_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAwAACAQAbmFtZR0AbWluZWNyYWZ0OmdyZWVuX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2h91ptDgbehWwMKAG5ldHdvcmtfaWTlDhnECgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:cyan_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAwAACAQAbmFtZRwAbWluZWNyYWZ0OmN5YW5fc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaBkIYQ8nQLqbAwoAbmV0d29ya19pZOL1lHsKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:light_blue_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAwAACAQAbmFtZSIAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaLt05n1G0fiSAwoAbmV0d29ya19pZNbwulIKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:blue_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAwAACAQAbmFtZRwAbWluZWNyYWZ0OmJsdWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaPhLocSfzduRAwoAbmV0d29ya19pZENsjFwKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:purple_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAwAACAQAbmFtZR4AbWluZWNyYWZ0OnB1cnBsZV9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNoJk0DhRO0szUDCgBuZXR3b3JrX2lkD98ZxgoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:magenta_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAwAACAQAbmFtZR8AbWluZWNyYWZ0Om1hZ2VudGFfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaFEDeFiJj3zSAwoAbmV0d29ya19pZG+iFRoKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:pink_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAwAACAQAbmFtZRwAbWluZWNyYWZ0OnBpbmtfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaDijTX87ywxhAwoAbmV0d29ya19pZKdEricKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:tinted_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAgAACAQAbmFtZRYAbWluZWNyYWZ0OnRpbnRlZF9nbGFzcwQJAG5hbWVfaGFzaAFZWSamk6KdAwoAbmV0d29ya19pZGSvWX8KBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdsYXNzX3BhbmUECQBuYW1lX2hhc2gRSBHwNMQ4gQMKAG5ldHdvcmtfaWRGwixuCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:white_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAAAACAQAbmFtZSIAbWluZWNyYWZ0OndoaXRlX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaHgxQmgJVtRrAwoAbmV0d29ya19pZBEr/DYKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:light_gray_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSJAwAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNon0aQw9lNkSEDCgBuZXR3b3JrX2lk9dp5VgoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:gray_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAwAACAQAbmFtZSEAbWluZWNyYWZ0OmdyYXlfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNors74IIw+2MMDCgBuZXR3b3JrX2lkmrGO5woGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:black_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAwAACAQAbmFtZSIAbWluZWNyYWZ0OmJsYWNrX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaOK/5ZRRd+M1AwoAbmV0d29ya19pZDv++oQKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:brown_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSNAwAACAQAbmFtZSIAbWluZWNyYWZ0OmJyb3duX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLHeGJyRFTIWAwoAbmV0d29ya19pZMz9L0wKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:red_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAwAACAQAbmFtZSAAbWluZWNyYWZ0OnJlZF9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2gGr4x6JheAywMKAG5ldHdvcmtfaWQBjCTmCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:orange_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAwAACAQAbmFtZSMAbWluZWNyYWZ0Om9yYW5nZV9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2hbHxPD2gEbEAMKAG5ldHdvcmtfaWSt/7a5CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:yellow_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAwAACAQAbmFtZSMAbWluZWNyYWZ0OnllbGxvd19zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2g9tl4aOCyZBwMKAG5ldHdvcmtfaWTXRAS7CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:lime_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAwAACAQAbmFtZSEAbWluZWNyYWZ0OmxpbWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNo3CtUyLwoGegDCgBuZXR3b3JrX2lkYJDnggoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:green_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSOAwAACAQAbmFtZSIAbWluZWNyYWZ0OmdyZWVuX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaJo6YP7IMy9SAwoAbmV0d29ya19pZHOnixoKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:cyan_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAwAACAQAbmFtZSEAbWluZWNyYWZ0OmN5YW5fc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoti97c6QrbLQDCgBuZXR3b3JrX2lkUqFUeQoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:light_blue_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAwAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNovDg/gQle104DCgBuZXR3b3JrX2lkFuy4MQoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:blue_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSMAwAACAQAbmFtZSEAbWluZWNyYWZ0OmJsdWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoGc57tiexbQMDCgBuZXR3b3JrX2lk1eBLUAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:purple_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAwAACAQAbmFtZSMAbWluZWNyYWZ0OnB1cnBsZV9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2hDJHYdd0FdfQMKAG5ldHdvcmtfaWSNsdK5CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:magenta_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAwAACAQAbmFtZSQAbWluZWNyYWZ0Om1hZ2VudGFfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNo3pcOw5bs5XoDCgBuZXR3b3JrX2lkVbOR7AoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:pink_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAwAACAQAbmFtZSEAbWluZWNyYWZ0OnBpbmtfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoWRhSACMWgswDCgBuZXR3b3JrX2lkIR92xwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:ladder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRBAAAACAQAbmFtZRAAbWluZWNyYWZ0OmxhZGRlcgQJAG5hbWVfaGFzaKBhqheJVOz+AwoAbmV0d29ya19pZCgvzlsKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:scaffolding", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAQAACAQAbmFtZRUAbWluZWNyYWZ0OnNjYWZmb2xkaW5nBAkAbmFtZV9oYXNoYrkevrqcljwDCgBuZXR3b3JrX2lkD13mlAoGAHN0YXRlcwMJAHN0YWJpbGl0eQAAAAABDwBzdGFiaWxpdHlfY2hlY2sAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:smooth_stone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAAAACAQAbmFtZRsAbWluZWNyYWZ0OnNtb290aF9zdG9uZV9zbGFiBAkAbmFtZV9oYXNon5I1yVw74uMDCgBuZXR3b3JrX2lkqvjcBQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:stone_block_slab4", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkQJoxlgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNAUAc3RvbmUAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:cobblestone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRoBAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3NsYWIECQBuYW1lX2hhc2h5CXtW7vlQVgMKAG5ldHdvcmtfaWRDGyj2CgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkVRZB+woGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhEAbW9zc3lfY29iYmxlc3RvbmUAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:oak_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAAAACAQAbmFtZRIAbWluZWNyYWZ0Om9ha19zbGFiBAkAbmFtZV9oYXNoJp1Cp1M4jlwDCgBuZXR3b3JrX2lkZH6+owoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:spruce_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQjBAAACAQAbmFtZRUAbWluZWNyYWZ0OnNwcnVjZV9zbGFiBAkAbmFtZV9oYXNodQi70jB238cDCgBuZXR3b3JrX2lkrriOYQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:birch_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQkBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJpcmNoX3NsYWIECQBuYW1lX2hhc2gZPpfMxoOsTAMKAG5ldHdvcmtfaWThR9jyCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:jungle_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQlBAAACAQAbmFtZRUAbWluZWNyYWZ0Omp1bmdsZV9zbGFiBAkAbmFtZV9oYXNo6gLs79NXak4DCgBuZXR3b3JrX2lk5ZiKgwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:acacia_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQmBAAACAQAbmFtZRUAbWluZWNyYWZ0OmFjYWNpYV9zbGFiBAkAbmFtZV9oYXNomSdFmDnv4OUDCgBuZXR3b3JrX2lkHttaXAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:dark_oak_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQnBAAACAQAbmFtZRcAbWluZWNyYWZ0OmRhcmtfb2FrX3NsYWIECQBuYW1lX2hhc2hJjTohRFyhIQMKAG5ldHdvcmtfaWRMzDTyCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:mangrove_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWToAgAACAQAbmFtZRcAbWluZWNyYWZ0Om1hbmdyb3ZlX3NsYWIECQBuYW1lX2hhc2jYCcmhJPeNMwMKAG5ldHdvcmtfaWQx6U1yCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:cherry_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQaAwAACAQAbmFtZRUAbWluZWNyYWZ0OmNoZXJyeV9zbGFiBAkAbmFtZV9oYXNoTt0MmVn/mqoDCgBuZXR3b3JrX2lk2VVsZQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:bamboo_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQAAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJhbWJvb19zbGFiBAkAbmFtZV9oYXNoo1xuFqINeLYDCgBuZXR3b3JrX2lkVC+0twoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:bamboo_mosaic_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQLAwAACAQAbmFtZRwAbWluZWNyYWZ0OmJhbWJvb19tb3NhaWNfc2xhYgQJAG5hbWVfaGFzaNbVRBZ/ChI3AwoAbmV0d29ya19pZOLZHFMKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:stone_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRqBAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2JyaWNrX3NsYWIECQBuYW1lX2hhc2js6EexuKuzrQMKAG5ldHdvcmtfaWRSsMxaCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:stone_block_slab4", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkoF89tgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNBEAbW9zc3lfc3RvbmVfYnJpY2sAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:sandstone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRnBAAACAQAbmFtZRgAbWluZWNyYWZ0OnNhbmRzdG9uZV9zbGFiBAkAbmFtZV9oYXNo/GMI0MZnrhsDCgBuZXR3b3JrX2lkFP8WmwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:stone_block_slab4", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkWfF7pgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNA0AY3V0X3NhbmRzdG9uZQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkbKRChAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhAAc21vb3RoX3NhbmRzdG9uZQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkBlrvqAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMg0AcmVkX3NhbmRzdG9uZQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:stone_block_slab4", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkRWFXuwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNBEAY3V0X3JlZF9zYW5kc3RvbmUAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkom8neQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMxQAc21vb3RoX3JlZF9zYW5kc3RvbmUAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkd1ZaWgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMwcAZ3Jhbml0ZQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkISH4iwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMxAAcG9saXNoZWRfZ3Jhbml0ZQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkqxEDMwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMwcAZGlvcml0ZQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkSYs86QoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMxAAcG9saXNoZWRfZGlvcml0ZQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkq6BU6goGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMwgAYW5kZXNpdGUAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkTSXY8AoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMxEAcG9saXNoZWRfYW5kZXNpdGUAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRpBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJyaWNrX3NsYWIECQBuYW1lX2hhc2hO/Da4jU2v4wMKAG5ldHdvcmtfaWRG/qphCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:nether_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRsBAAACAQAbmFtZRsAbWluZWNyYWZ0Om5ldGhlcl9icmlja19zbGFiBAkAbmFtZV9oYXNonymoa2zbbqMDCgBuZXR3b3JrX2lkquvR1QoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lk/hXQ7AoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhAAcmVkX25ldGhlcl9icmljawADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkYJNxrwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMw8AZW5kX3N0b25lX2JyaWNrAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:quartz_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRrBAAACAQAbmFtZRUAbWluZWNyYWZ0OnF1YXJ0el9zbGFiBAkAbmFtZV9oYXNo9JMj3upfsbwDCgBuZXR3b3JrX2lkn2g2VAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:stone_block_slab4", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkMae+2goGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNA0Ac21vb3RoX3F1YXJ0egADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lk+kMHGAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMgYAcHVycHVyAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkKOSOMAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhAAcHJpc21hcmluZV9yb3VnaAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lk8igLCQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMg8AcHJpc21hcmluZV9kYXJrAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkSFbyEwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhAAcHJpc21hcmluZV9icmljawADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:crimson_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAgAACAQAbmFtZRYAbWluZWNyYWZ0OmNyaW1zb25fc2xhYgQJAG5hbWVfaGFzaKZ+EfP0ZYOZAwoAbmV0d29ya19pZAxRUWAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:warped_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQIAgAACAQAbmFtZRUAbWluZWNyYWZ0OndhcnBlZF9zbGFiBAkAbmFtZV9oYXNo/AT0e/Z9W7UDCgBuZXR3b3JrX2lk1yq11AoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:blackstone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsYWNrc3RvbmVfc2xhYgQJAG5hbWVfaGFzaF/DD4ZUlNgtAwoAbmV0d29ya19pZGy1DjwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:polished_blackstone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQkAgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfc2xhYgQJAG5hbWVfaGFzaDYnuUs86EWfAwoAbmV0d29ya19pZJj2bXIKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:polished_blackstone_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQbAgAACAQAbmFtZSgAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaKySLqvHc4xXAwoAbmV0d29ya19pZOyWX94KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRoAgAACAQAbmFtZRkAbWluZWNyYWZ0OmN1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaDsNpb2qs4iBAwoAbmV0d29ya19pZOTm2nsKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:exposed_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRpAgAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcl9zbGFiBAkAbmFtZV9oYXNoahQ5OwIQb7kDCgBuZXR3b3JrX2lkrUlZLwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:weathered_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRqAgAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyX3NsYWIECQBuYW1lX2hhc2hBIuGIOVVXogMKAG5ldHdvcmtfaWQgnaDiCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:oxidized_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAgAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaOptj9ycfpaDAwoAbmV0d29ya19pZMzFSRgKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:waxed_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaAlx6DZOCTHzAwoAbmV0d29ya19pZFRBvDAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:waxed_exposed_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAgAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcl9zbGFiBAkAbmFtZV9oYXNo3KqS5OnhtRIDCgBuZXR3b3JrX2lkHTGcTgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:waxed_weathered_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyX3NsYWIECQBuYW1lX2hhc2gzZ1oX0HCFtwMKAG5ldHdvcmtfaWSgJR+XCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:waxed_oxidized_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTAAgAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaMjjTnLu1KcqAwoAbmV0d29ya19pZIxsnFYKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:cobbled_deepslate_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AgAACAQAbmFtZSAAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3NsYWIECQBuYW1lX2hhc2gwJIVWK1TM2QMKAG5ldHdvcmtfaWTYAoX5CgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:polished_deepslate_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR/AgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV9zbGFiBAkAbmFtZV9oYXNoC/Adiz8k6RYDCgBuZXR3b3JrX2lkuFYMAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:deepslate_tile_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3NsYWIECQBuYW1lX2hhc2hPydV6emzIXAMKAG5ldHdvcmtfaWQwlbFCCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:deepslate_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja19zbGFiBAkAbmFtZV9oYXNoSv62V7iw10UDCgBuZXR3b3JrX2lkWMoragoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:mud_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAgAACAQAbmFtZRgAbWluZWNyYWZ0Om11ZF9icmlja19zbGFiBAkAbmFtZV9oYXNoq/tGBQWkv08DCgBuZXR3b3JrX2lkl4nnMwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:brick_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAAAACAQAbmFtZRUAbWluZWNyYWZ0OmJyaWNrX2Jsb2NrBAkAbmFtZV9oYXNo5Qc2E005S3oDCgBuZXR3b3JrX2lkqeGWRgoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:chiseled_nether_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAgAACAQAbmFtZSAAbWluZWNyYWZ0OmNoaXNlbGVkX25ldGhlcl9icmlja3MECQBuYW1lX2hhc2g31SBPTcUK1QMKAG5ldHdvcmtfaWS8TJ+TCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:cracked_nether_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAgAACAQAbmFtZR8AbWluZWNyYWZ0OmNyYWNrZWRfbmV0aGVyX2JyaWNrcwQJAG5hbWVfaGFzaAdC6eKzXT5tAwoAbmV0d29ya19pZIUSejwKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:quartz_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAgAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9icmlja3MECQBuYW1lX2hhc2jSZO590dd8sAMKAG5ldHdvcmtfaWSc5xCLCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:stonebrick", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAAAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWQ5kni1CgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQcAZGVmYXVsdAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:stonebrick", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAAAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWTDw813CgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQUAbW9zc3kAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:stonebrick", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAAAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWSTvQGECgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQcAY3JhY2tlZAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:stonebrick", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAAAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWQIM0OwCgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQgAY2hpc2VsZWQAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:end_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTOAAAACAQAbmFtZRQAbWluZWNyYWZ0OmVuZF9icmlja3MECQBuYW1lX2hhc2hIUFfxNLZaFgMKAG5ldHdvcmtfaWQ/vDihCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:prismarine", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAAAACAQAbmFtZRQAbWluZWNyYWZ0OnByaXNtYXJpbmUECQBuYW1lX2hhc2jcnQCHi9CspQMKAG5ldHdvcmtfaWSH021WCgYAc3RhdGVzCBUAcHJpc21hcmluZV9ibG9ja190eXBlBgBicmlja3MAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:polished_blackstone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tzBAkAbmFtZV9oYXNoIHgsgIdzKXcDCgBuZXR3b3JrX2lkUw9b3woGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:cracked_polished_blackstone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAgAACAQAbmFtZSwAbWluZWNyYWZ0OmNyYWNrZWRfcG9saXNoZWRfYmxhY2tzdG9uZV9icmlja3MECQBuYW1lX2hhc2jQIO1GQDk80AMKAG5ldHdvcmtfaWQ3UlRYCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:gilded_blackstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAgAACAQAbmFtZRsAbWluZWNyYWZ0OmdpbGRlZF9ibGFja3N0b25lBAkAbmFtZV9oYXNoNoWt1ocG0HEDCgBuZXR3b3JrX2lktL8gUwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:chiseled_polished_blackstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAgAACAQAbmFtZSYAbWluZWNyYWZ0OmNoaXNlbGVkX3BvbGlzaGVkX2JsYWNrc3RvbmUECQBuYW1lX2hhc2gzFa+kEjCJgAMKAG5ldHdvcmtfaWR2NJX2CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:deepslate_tiles", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAgAACAQAbmFtZRkAbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlcwQJAG5hbWVfaGFzaGcLLx3NXAFvAwoAbmV0d29ya19pZI/G/xYKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:cracked_deepslate_tiles", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSYAgAACAQAbmFtZSEAbWluZWNyYWZ0OmNyYWNrZWRfZGVlcHNsYXRlX3RpbGVzBAkAbmFtZV9oYXNo9zWgkFuMM1QDCgBuZXR3b3JrX2lkGwY6OgoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:deepslate_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAgAACAQAbmFtZRoAbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja3MECQBuYW1lX2hhc2gucvFmPdZxigMKAG5ldHdvcmtfaWSH4HDPCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:cracked_deepslate_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAgAACAQAbmFtZSIAbWluZWNyYWZ0OmNyYWNrZWRfZGVlcHNsYXRlX2JyaWNrcwQJAG5hbWVfaGFzaN40aqhh9WqHAwoAbmV0d29ya19pZO9GPBQKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:chiseled_deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAgAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaEU7/uRG8HSBAwoAbmV0d29ya19pZEqmI0EKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:cobblestone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAAAACAQAbmFtZRUAbWluZWNyYWZ0OmNvYmJsZXN0b25lBAkAbmFtZV9oYXNoPoK7mGlSUz4DCgBuZXR3b3JrX2lkLm7RZwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:mossy_cobblestone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQwAAAACAQAbmFtZRsAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lBAkAbmFtZV9oYXNoGJ67FCbkChMDCgBuZXR3b3JrX2lk/pYs1AoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:cobbled_deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AgAACAQAbmFtZRsAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlBAkAbmFtZV9oYXNoLUz9Y/ywmLwDCgBuZXR3b3JrX2lkNwzZ+AoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:smooth_stone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AQAACAQAbmFtZRYAbWluZWNyYWZ0OnNtb290aF9zdG9uZQQJAG5hbWVfaGFzaMwf87/JaTNvAwoAbmV0d29ya19pZLkZICEKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZB2wApMKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGUHAGRlZmF1bHQAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZB7E+eQKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGULAGhlaXJvZ2x5cGhzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZFQnDaEKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGUDAGN1dAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZPO4A3IKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGUGAHNtb290aAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:red_sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWRhNYiFCgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlBwBkZWZhdWx0AAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:red_sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWTqXJr1CgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlCwBoZWlyb2dseXBocwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:red_sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWTQRGkFCgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlAwBjdXQAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:red_sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWTvAHWDCgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlBgBzbW9vdGgAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:coal_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWStAAAACAQAbmFtZRQAbWluZWNyYWZ0OmNvYWxfYmxvY2sECQBuYW1lX2hhc2jH8QQP3t5PiAMKAG5ldHdvcmtfaWRo+sR+CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:dried_kelp_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAQAACAQAbmFtZRoAbWluZWNyYWZ0OmRyaWVkX2tlbHBfYmxvY2sECQBuYW1lX2hhc2iRoucexkrl8wMKAG5ldHdvcmtfaWQQCCrvCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:gold_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdvbGRfYmxvY2sECQBuYW1lX2hhc2iYLshvjtXzFwMKAG5ldHdvcmtfaWTDJGBcCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:iron_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAAAACAQAbmFtZRQAbWluZWNyYWZ0Omlyb25fYmxvY2sECQBuYW1lX2hhc2jYINmJQbvV/gMKAG5ldHdvcmtfaWRf7AbICgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:copper_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRTAgAACAQAbmFtZRYAbWluZWNyYWZ0OmNvcHBlcl9ibG9jawQJAG5hbWVfaGFzaDVxnehsGaZ1AwoAbmV0d29ya19pZIiUodwKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:copper_door" - }, - { - "id": "minecraft:copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQXBAAACAQAbmFtZRkAbWluZWNyYWZ0OmNvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaO9fXio+svKVAwoAbmV0d29ya19pZMCoRjEKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT/AwAACAQAbmFtZRYAbWluZWNyYWZ0OmNvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaC/JEFOWnmEcAwoAbmV0d29ya19pZC6YiiMKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:exposed_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAgAACAQAbmFtZRgAbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoQH3Fukmu3CEDCgBuZXR3b3JrX2lk72jFIwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:exposed_copper_door" - }, - { - "id": "minecraft:exposed_copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQYBAAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyX3RyYXBkb29yBAkAbmFtZV9oYXNoYhDFUysN7qUDCgBuZXR3b3JrX2lkMzwGJgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:exposed_copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQABAAACAQAbmFtZR4AbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyX2dyYXRlBAkAbmFtZV9oYXNolFIBYLYU0IcDCgBuZXR3b3JrX2lk4UqptAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:weathered_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAgAACAQAbmFtZRoAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2hJCQXbvobv+gMKAG5ldHdvcmtfaWQwM0lJCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:weathered_copper_door" - }, - { - "id": "minecraft:weathered_copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQZBAAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXJfdHJhcGRvb3IECQBuYW1lX2hhc2hFnEC282a1tgMKAG5ldHdvcmtfaWTk70oiCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:weathered_copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQBBAAACAQAbmFtZSAAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXJfZ3JhdGUECQBuYW1lX2hhc2jB3o8enlv1RgMKAG5ldHdvcmtfaWRih2pOCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:oxidized_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAgAACAQAbmFtZRkAbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMDtJqR0G5Y7AwoAbmV0d29ya19pZGjN8bUKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:oxidized_copper_door" - }, - { - "id": "minecraft:oxidized_copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQaBAAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaOJpG/XFexVwAwoAbmV0d29ya19pZPhi0J4KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:oxidized_copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQCBAAACAQAbmFtZR8AbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaBRfNhyndve7AwoAbmV0d29ya19pZKY2cnEKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:waxed_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAgAACAQAbmFtZRYAbWluZWNyYWZ0OndheGVkX2NvcHBlcgQJAG5hbWVfaGFzaPF+FG6Eh5fsAwoAbmV0d29ya19pZIjtz/0KBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:waxed_copper_door" - }, - { - "id": "minecraft:waxed_copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQbBAAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2NvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaO0JUKUHqNU6AwoAbmV0d29ya19pZJC3ZuMKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:waxed_copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQDBAAACAQAbmFtZRwAbWluZWNyYWZ0OndheGVkX2NvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaDmC92M2RO+HAwoAbmV0d29ya19pZH4og2AKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:waxed_exposed_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAgAACAQAbmFtZR4AbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoig8IOc+SCikDCgBuZXR3b3JrX2lklz8yWQoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:waxed_exposed_copper_door" - }, - { - "id": "minecraft:waxed_exposed_copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQcBAAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyX3RyYXBkb29yBAkAbmFtZV9oYXNoBHHxCpkUzpgDCgBuZXR3b3JrX2lkw2XBGQoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:waxed_exposed_copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQEBAAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyX2dyYXRlBAkAbmFtZV9oYXNoWmd6B+hWwiEDCgBuZXR3b3JrX2lk8d4ZQwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:waxed_weathered_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRZAgAACAQAbmFtZSAAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2gjtPq8MOdvKgMKAG5ldHdvcmtfaWSQ9Ln9CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:waxed_weathered_copper_door" - }, - { - "id": "minecraft:waxed_weathered_copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQdBAAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXJfdHJhcGRvb3IECQBuYW1lX2hhc2gH9Fi3JCF4egMKAG5ldHdvcmtfaWRkGU6TCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:waxed_weathered_copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQFBAAACAQAbmFtZSYAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXJfZ3JhdGUECQBuYW1lX2hhc2hXfilVFDAiYQMKAG5ldHdvcmtfaWQqTGC1CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:waxed_oxidized_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS9AgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMaORhsO+LzjAwoAbmV0d29ya19pZJhGfLEKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:waxed_oxidized_copper_door" - }, - { - "id": "minecraft:waxed_oxidized_copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQeBAAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaNA/q9qAy6Z9AwoAbmV0d29ya19pZDgExS8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:waxed_oxidized_copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQGBAAACAQAbmFtZSUAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaEbeMT605GP4AwoAbmV0d29ya19pZOZjpkkKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRaAgAACAQAbmFtZRQAbWluZWNyYWZ0OmN1dF9jb3BwZXIECQBuYW1lX2hhc2hAfN3NGax3eAMKAG5ldHdvcmtfaWTnFBtYCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:exposed_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAgAACAQAbmFtZRwAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcgQJAG5hbWVfaGFzaA85G3yv/w6pAwoAbmV0d29ya19pZMQhr0QKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:weathered_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRcAgAACAQAbmFtZR4AbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyBAkAbmFtZV9oYXNoVgRV0fBaz88DCgBuZXR3b3JrX2lk/0cYugoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:oxidized_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRdAgAACAQAbmFtZR0AbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2iP8WmFWOkriwMKAG5ldHdvcmtfaWQPdce7CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:waxed_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWReAgAACAQAbmFtZRoAbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2jumiwOZIqv2AMKAG5ldHdvcmtfaWQvuxx9CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:waxed_exposed_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRfAgAACAQAbmFtZSIAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcgQJAG5hbWVfaGFzaPE/OfK6IoVMAwoAbmV0d29ya19pZHy5HkcKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:waxed_weathered_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRgAgAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyBAkAbmFtZV9oYXNoCA1xDp11bnwDCgBuZXR3b3JrX2lkDyEDVQoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:waxed_oxidized_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS+AgAACAQAbmFtZSMAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2i1pZAsZYHLDAMKAG5ldHdvcmtfaWQ/wSkCCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT3AwAACAQAbmFtZRkAbWluZWNyYWZ0OmNoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaIsW5pmpJEuQAwoAbmV0d29ya19pZHetwrkKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:exposed_chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT4AwAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY2hpc2VsZWRfY29wcGVyBAkAbmFtZV9oYXNoOvrLJ0UowbgDCgBuZXR3b3JrX2lkZj7cPwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:weathered_chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT5AwAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jaGlzZWxlZF9jb3BwZXIECQBuYW1lX2hhc2hh+42XlsWvGAMKAG5ldHdvcmtfaWS7Cy59CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:oxidized_chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT6AwAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2NoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaLpTIsnfluiCAwoAbmV0d29ya19pZB9/jS8KBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:waxed_chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT7AwAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2NoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaFnXvXY5OinzAwoAbmV0d29ya19pZAcKtHsKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:waxed_exposed_chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT8AwAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY2hpc2VsZWRfY29wcGVyBAkAbmFtZV9oYXNoHJdq+Pph6hMDCgBuZXR3b3JrX2lkdge7IAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:waxed_oxidized_chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT9AwAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaMj49OvlTpgCAwoAbmV0d29ya19pZN/r+roKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:waxed_weathered_chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT+AwAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jaGlzZWxlZF9jb3BwZXIECQBuYW1lX2hhc2hzuO+Sg9LYQwMKAG5ldHdvcmtfaWQ7AN7iCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQHBAAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcHBlcl9idWxiBAkAbmFtZV9oYXNo41TimHOsMWcDCgBuZXR3b3JrX2lkJnZvAgoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:exposed_copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQIBAAACAQAbmFtZR0AbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyX2J1bGIECQBuYW1lX2hhc2g++f1wYLLCrAMKAG5ldHdvcmtfaWRLdMmGCgYAc3RhdGVzAQMAbGl0AAELAHBvd2VyZWRfYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:weathered_copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQJBAAACAQAbmFtZR8AbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXJfYnVsYgQJAG5hbWVfaGFzaMEtsYfwRTXlAwoAbmV0d29ya19pZAp51LQKBgBzdGF0ZXMBAwBsaXQAAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:oxidized_copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQKBAAACAQAbmFtZR4AbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcl9idWxiBAkAbmFtZV9oYXNovnrBQZs8nDIDCgBuZXR3b3JrX2lkPsj0AAoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:waxed_copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQLBAAACAQAbmFtZRsAbWluZWNyYWZ0OndheGVkX2NvcHBlcl9idWxiBAkAbmFtZV9oYXNoGTg6TYllMiIDCgBuZXR3b3JrX2lk9m0WhgoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:waxed_exposed_copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQMBAAACAQAbmFtZSMAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyX2J1bGIECQBuYW1lX2hhc2gI6xkPcvBDVwMKAG5ldHdvcmtfaWR7BRcACgYAc3RhdGVzAQMAbGl0AAELAHBvd2VyZWRfYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:waxed_weathered_copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQNBAAACAQAbmFtZSUAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXJfYnVsYgQJAG5hbWVfaGFzaMsUnmp3/VqVAwoAbmV0d29ya19pZEoworoKBgBzdGF0ZXMBAwBsaXQAAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:waxed_oxidized_copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQOBAAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcl9idWxiBAkAbmFtZV9oYXNoBFKxY3fjVq4DCgBuZXR3b3JrX2lkzrJ6aAoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:emerald_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAAAACAQAbmFtZRcAbWluZWNyYWZ0OmVtZXJhbGRfYmxvY2sECQBuYW1lX2hhc2hK6QunqJznNAMKAG5ldHdvcmtfaWRk5+otCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:diamond_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5AAAACAQAbmFtZRcAbWluZWNyYWZ0OmRpYW1vbmRfYmxvY2sECQBuYW1lX2hhc2iGKrxuvkytFQMKAG5ldHdvcmtfaWQQeQZXCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:lapis_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAAAACAQAbmFtZRUAbWluZWNyYWZ0OmxhcGlzX2Jsb2NrBAkAbmFtZV9oYXNoDZ44xdb2zVoDCgBuZXR3b3JrX2lktVy0BAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:raw_iron_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTCAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJhd19pcm9uX2Jsb2NrBAkAbmFtZV9oYXNo9XyzNIQXxvwDCgBuZXR3b3JrX2lknms1QAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:raw_copper_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTDAgAACAQAbmFtZRoAbWluZWNyYWZ0OnJhd19jb3BwZXJfYmxvY2sECQBuYW1lX2hhc2hw1KG0TNUGgwMKAG5ldHdvcmtfaWS1vGo/CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:raw_gold_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJhd19nb2xkX2Jsb2NrBAkAbmFtZV9oYXNo6YuwuLwfOBwDCgBuZXR3b3JrX2lkLiQ5gQoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:quartz_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAAAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZEupC1AKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQcAZGVmYXVsdAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:quartz_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAAAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZM97+l0KBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQUAbGluZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:quartz_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAAAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZCbTfssKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQgAY2hpc2VsZWQICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:quartz_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAAAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZJss8V0KBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQYAc21vb3RoCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:prismarine", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAAAACAQAbmFtZRQAbWluZWNyYWZ0OnByaXNtYXJpbmUECQBuYW1lX2hhc2jcnQCHi9CspQMKAG5ldHdvcmtfaWRFIsoGCgYAc3RhdGVzCBUAcHJpc21hcmluZV9ibG9ja190eXBlBwBkZWZhdWx0AAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:prismarine", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAAAACAQAbmFtZRQAbWluZWNyYWZ0OnByaXNtYXJpbmUECQBuYW1lX2hhc2jcnQCHi9CspQMKAG5ldHdvcmtfaWTDNWOvCgYAc3RhdGVzCBUAcHJpc21hcmluZV9ibG9ja190eXBlBABkYXJrAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:slime", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnNsaW1lBAkAbmFtZV9oYXNoHJiEEJx+JlkDCgBuZXR3b3JrX2lkfgfVzAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:honey_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAQAACAQAbmFtZRUAbWluZWNyYWZ0OmhvbmV5X2Jsb2NrBAkAbmFtZV9oYXNo9zLYSUlelywDCgBuZXR3b3JrX2lko+dyWgoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:honeycomb_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAQAACAQAbmFtZRkAbWluZWNyYWZ0OmhvbmV5Y29tYl9ibG9jawQJAG5hbWVfaGFzaASIPuOCYd1oAwoAbmV0d29ya19pZKys4n4KBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:hay_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAAAACAQAbmFtZRMAbWluZWNyYWZ0OmhheV9ibG9jawQJAG5hbWVfaGFzaIB2VxKxX8EpAwoAbmV0d29ya19pZKuQSloKBgBzdGF0ZXMDCgBkZXByZWNhdGVkAAAAAAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:bone_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAAAACAQAbmFtZRQAbWluZWNyYWZ0OmJvbmVfYmxvY2sECQBuYW1lX2hhc2i4ZX576W9AWgMKAG5ldHdvcmtfaWTWGacQCgYAc3RhdGVzAwoAZGVwcmVjYXRlZAAAAAAICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:nether_brick", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRwAAAACAQAbmFtZRYAbWluZWNyYWZ0Om5ldGhlcl9icmljawQJAG5hbWVfaGFzaMxcRiheU+nXAwoAbmV0d29ya19pZMkmzloKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:red_nether_brick", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAAAACAQAbmFtZRoAbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2sECQBuYW1lX2hhc2j8pRO4LfoECAMKAG5ldHdvcmtfaWRpdF0YCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:netherite_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAgAACAQAbmFtZRkAbWluZWNyYWZ0Om5ldGhlcml0ZV9ibG9jawQJAG5hbWVfaGFzaMghh6Zib/ZKAwoAbmV0d29ya19pZIz0mq0KBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:lodestone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAQAACAQAbmFtZRMAbWluZWNyYWZ0OmxvZGVzdG9uZQQJAG5hbWVfaGFzaJ2gmHOTlXv8AwoAbmV0d29ya19pZEfgB4wKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:white_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAAAACAQAbmFtZRQAbWluZWNyYWZ0OndoaXRlX3dvb2wECQBuYW1lX2hhc2jRWB7vaIEDiQMKAG5ldHdvcmtfaWSO8paQCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:light_gray_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQnAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfd29vbAQJAG5hbWVfaGFzaOpdQ1a2v4b3AwoAbmV0d29ya19pZIqZCYEKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:gray_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAwAACAQAbmFtZRMAbWluZWNyYWZ0OmdyYXlfd29vbAQJAG5hbWVfaGFzaLsc1Lp1xdIOAwoAbmV0d29ya19pZFUs+HgKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:black_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAwAACAQAbmFtZRQAbWluZWNyYWZ0OmJsYWNrX3dvb2wECQBuYW1lX2hhc2hP2HC6o0X4HAMKAG5ldHdvcmtfaWRUbORcCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:brown_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAwAACAQAbmFtZRQAbWluZWNyYWZ0OmJyb3duX3dvb2wECQBuYW1lX2hhc2ig5IW89PrREwMKAG5ldHdvcmtfaWRjT9j8CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:red_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQrAwAACAQAbmFtZRIAbWluZWNyYWZ0OnJlZF93b29sBAkAbmFtZV9oYXNoY4TBDq+mFgUDCgBuZXR3b3JrX2lktn9lcAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:orange_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAwAACAQAbmFtZRUAbWluZWNyYWZ0Om9yYW5nZV93b29sBAkAbmFtZV9oYXNoFstfrTZfSCgDCgBuZXR3b3JrX2lk+rqywwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:yellow_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAwAACAQAbmFtZRUAbWluZWNyYWZ0OnllbGxvd193b29sBAkAbmFtZV9oYXNoTFyus2RHegcDCgBuZXR3b3JrX2lkkKBhXAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:lime_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAwAACAQAbmFtZRMAbWluZWNyYWZ0OmxpbWVfd29vbAQJAG5hbWVfaGFzaNVnnzKiMxmeAwoAbmV0d29ya19pZG9b32kKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:green_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAwAACAQAbmFtZRQAbWluZWNyYWZ0OmdyZWVuX3dvb2wECQBuYW1lX2hhc2i3mElRYHIcSQMKAG5ldHdvcmtfaWSssprwCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:cyan_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQwAwAACAQAbmFtZRMAbWluZWNyYWZ0OmN5YW5fd29vbAQJAG5hbWVfaGFzaBNDfvHn8dqFAwoAbmV0d29ya19pZK0hAbgKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:light_blue_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQxAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfd29vbAQJAG5hbWVfaGFzaLWFAUfyxFPNAwoAbmV0d29ya19pZL2oEugKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:blue_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQyAwAACAQAbmFtZRMAbWluZWNyYWZ0OmJsdWVfd29vbAQJAG5hbWVfaGFzaLjHyxxbTWCLAwoAbmV0d29ya19pZPaLdFQKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:purple_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQzAwAACAQAbmFtZRUAbWluZWNyYWZ0OnB1cnBsZV93b29sBAkAbmFtZV9oYXNojvFtqzjAf/4DCgBuZXR3b3JrX2lklqASNQoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:magenta_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ0AwAACAQAbmFtZRYAbWluZWNyYWZ0Om1hZ2VudGFfd29vbAQJAG5hbWVfaGFzaGuOHvf+Pd4yAwoAbmV0d29ya19pZI4UoDQKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:pink_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ1AwAACAQAbmFtZRMAbWluZWNyYWZ0OnBpbmtfd29vbAQJAG5hbWVfaGFzaPiVA2pFeoFLAwoAbmV0d29ya19pZOZRO6oKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:white_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAAAACAQAbmFtZRYAbWluZWNyYWZ0OndoaXRlX2NhcnBldAQJAG5hbWVfaGFzaNeMHTI1fWPXAwoAbmV0d29ya19pZEahDFcKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:light_gray_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAwAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FycGV0BAkAbmFtZV9oYXNoHPw6ArBAsP0DCgBuZXR3b3JrX2lkQoAeUAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:gray_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRaAwAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXlfY2FycGV0BAkAbmFtZV9oYXNoZVR0OI+1VRADCgBuZXR3b3JrX2lkETF4WwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:black_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJsYWNrX2NhcnBldAQJAG5hbWVfaGFzaOk7LP9NptyhAwoAbmV0d29ya19pZFjmXtIKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:brown_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRfAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJyb3duX2NhcnBldAQJAG5hbWVfaGFzaNaXFyOsAvIvAwoAbmV0d29ya19pZHPjFuoKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:red_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAwAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9jYXJwZXQECQBuYW1lX2hhc2i9eSKBf6SO3wMKAG5ldHdvcmtfaWQuhI/KCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:orange_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAwAACAQAbmFtZRcAbWluZWNyYWZ0Om9yYW5nZV9jYXJwZXQECQBuYW1lX2hhc2hIUkO4HlAdygMKAG5ldHdvcmtfaWSyKV9OCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:yellow_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAwAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19jYXJwZXQECQBuYW1lX2hhc2hSDKX3scCamwMKAG5ldHdvcmtfaWT8nq+ECgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:lime_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAwAACAQAbmFtZRUAbWluZWNyYWZ0OmxpbWVfY2FycGV0BAkAbmFtZV9oYXNo+6KFOpzsib4DCgBuZXR3b3JrX2lkT+DS4woGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:green_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRgAwAACAQAbmFtZRYAbWluZWNyYWZ0OmdyZWVuX2NhcnBldAQJAG5hbWVfaGFzaCHPMP9ltqFJAwoAbmV0d29ya19pZBgwAvAKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:cyan_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRcAwAACAQAbmFtZRUAbWluZWNyYWZ0OmN5YW5fY2FycGV0BAkAbmFtZV9oYXNobXf62dQBJj8DCgBuZXR3b3JrX2lkKVppLgoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:light_blue_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAwAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FycGV0BAkAbmFtZV9oYXNo20l4oktdZ3sDCgBuZXR3b3JrX2lkjdeMiwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:blue_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWReAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfY2FycGV0BAkAbmFtZV9oYXNo3p3lsW0eQwsDCgBuZXR3b3JrX2lkAovdPQoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:purple_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRdAwAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnBsZV9jYXJwZXQECQBuYW1lX2hhc2jwIA9pW/qp7QMKAG5ldHdvcmtfaWTqJqhjCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:magenta_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAwAACAQAbmFtZRgAbWluZWNyYWZ0Om1hZ2VudGFfY2FycGV0BAkAbmFtZV9oYXNoFXT36YNNZhMDCgBuZXR3b3JrX2lk+tqsGAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:pink_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRZAwAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfY2FycGV0BAkAbmFtZV9oYXNoHll72oqk+OoDCgBuZXR3b3JrX2lkrnBYDwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:white_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTtAAAACAQAbmFtZR8AbWluZWNyYWZ0OndoaXRlX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaFUk9iXVjwV8AwoAbmV0d29ya19pZJPZY8AKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:light_gray_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAwAACAQAbmFtZSQAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNo7EUk30hmUtYDCgBuZXR3b3JrX2lkh8jVIwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:gray_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAwAACAQAbmFtZR4AbWluZWNyYWZ0OmdyYXlfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoW77af6WihdwDCgBuZXR3b3JrX2lkSsqC1woGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:black_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTSAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJsYWNrX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaAfWYp0xtgcfAwoAbmV0d29ya19pZMWTC8EKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:brown_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTPAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJyb3duX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaB74EeiLO46XAwoAbmV0d29ya19pZEDHKqwKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:red_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTRAwAACAQAbmFtZR0AbWluZWNyYWZ0OnJlZF9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2gjFut6Z/VH1gMKAG5ldHdvcmtfaWSvcmwYCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:orange_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAwAACAQAbmFtZSAAbWluZWNyYWZ0Om9yYW5nZV9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2gADDj2IJiw+gMKAG5ldHdvcmtfaWTHph0FCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:yellow_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTHAwAACAQAbmFtZSAAbWluZWNyYWZ0OnllbGxvd19jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2iy6qKNn3ob5wMKAG5ldHdvcmtfaWQZAI39CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:lime_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAwAACAQAbmFtZR4AbWluZWNyYWZ0OmxpbWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNo4dYIPslbXPUDCgBuZXR3b3JrX2lk2O8X0AoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:green_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTQAwAACAQAbmFtZR8AbWluZWNyYWZ0OmdyZWVuX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaM/c9x2aJh3HAwoAbmV0d29ya19pZA0VfBMKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:cyan_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTMAwAACAQAbmFtZR4AbWluZWNyYWZ0OmN5YW5fY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNok+xKAe7XXjoDCgBuZXR3b3JrX2lkmkn6uwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:light_blue_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTGAwAACAQAbmFtZSQAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNogScpIQceyAEDCgBuZXR3b3JrX2lkOmVSbgoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:blue_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTOAwAACAQAbmFtZR4AbWluZWNyYWZ0OmJsdWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoFp7mmeL86r0DCgBuZXR3b3JrX2lkS3b3RQoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:purple_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAwAACAQAbmFtZSAAbWluZWNyYWZ0OnB1cnBsZV9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2iYcVU04hoStwMKAG5ldHdvcmtfaWQXimEjCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:magenta_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAwAACAQAbmFtZSEAbWluZWNyYWZ0Om1hZ2VudGFfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoy/70q6VPsWgDCgBuZXR3b3JrX2lkf9mxQwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:pink_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAwAACAQAbmFtZR4AbWluZWNyYWZ0OnBpbmtfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoVikSAf8DwV0DCgBuZXR3b3JrX2lku2MivwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:white_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTsAAAACAQAbmFtZRgAbWluZWNyYWZ0OndoaXRlX2NvbmNyZXRlBAkAbmFtZV9oYXNo6zAp7lsLlvkDCgBuZXR3b3JrX2lk3MAYQAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:light_gray_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AwAACAQAbmFtZR0AbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY29uY3JldGUECQBuYW1lX2hhc2hEtet5wuDIKAMKAG5ldHdvcmtfaWQISs02CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:gray_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AwAACAQAbmFtZRcAbWluZWNyYWZ0OmdyYXlfY29uY3JldGUECQBuYW1lX2hhc2j92INnb0a83AMKAG5ldHdvcmtfaWQj8RHwCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:black_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAwAACAQAbmFtZRgAbWluZWNyYWZ0OmJsYWNrX2NvbmNyZXRlBAkAbmFtZV9oYXNo2X7NDIQmZ70DCgBuZXR3b3JrX2lk2uiVDQoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:brown_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AwAACAQAbmFtZRgAbWluZWNyYWZ0OmJyb3duX2NvbmNyZXRlBAkAbmFtZV9oYXNoeka02BwXf6oDCgBuZXR3b3JrX2lkYf+xDQoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:red_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAwAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZF9jb25jcmV0ZQQJAG5hbWVfaGFzaPWmNowLGubqAwoAbmV0d29ya19pZKwyx58KBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:orange_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRzAwAACAQAbmFtZRkAbWluZWNyYWZ0Om9yYW5nZV9jb25jcmV0ZQQJAG5hbWVfaGFzaAgE8XmaAi6+AwoAbmV0d29ya19pZMDQNz8KBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:yellow_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR2AwAACAQAbmFtZRkAbWluZWNyYWZ0OnllbGxvd19jb25jcmV0ZQQJAG5hbWVfaGFzaE6ONfJPBd0+AwoAbmV0d29ya19pZMarutwKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:lime_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR3AwAACAQAbmFtZRcAbWluZWNyYWZ0OmxpbWVfY29uY3JldGUECQBuYW1lX2hhc2gnd8JW6wmJcAMKAG5ldHdvcmtfaWTd47aoCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:green_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR/AwAACAQAbmFtZRgAbWluZWNyYWZ0OmdyZWVuX2NvbmNyZXRlBAkAbmFtZV9oYXNokbFxRKchQZkDCgBuZXR3b3JrX2lkmhZWUgoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:cyan_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AwAACAQAbmFtZRcAbWluZWNyYWZ0OmN5YW5fY29uY3JldGUECQBuYW1lX2hhc2hFRrWJ33qj1wMKAG5ldHdvcmtfaWQbi5b8CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:light_blue_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR1AwAACAQAbmFtZR0AbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY29uY3JldGUECQBuYW1lX2hhc2gHAe0kl0SE4AMKAG5ldHdvcmtfaWRL/GbSCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:blue_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AwAACAQAbmFtZRcAbWluZWNyYWZ0OmJsdWVfY29uY3JldGUECQBuYW1lX2hhc2hiay301nnj1wMKAG5ldHdvcmtfaWRMvFXNCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:purple_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR8AwAACAQAbmFtZRkAbWluZWNyYWZ0OnB1cnBsZV9jb25jcmV0ZQQJAG5hbWVfaGFzaHBHflsPIwdXAwoAbmV0d29ya19pZCyKA5gKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:magenta_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR0AwAACAQAbmFtZRoAbWluZWNyYWZ0Om1hZ2VudGFfY29uY3JldGUECQBuYW1lX2hhc2gN7LuB/OvdZAMKAG5ldHdvcmtfaWTc6ZOdCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:pink_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AwAACAQAbmFtZRcAbWluZWNyYWZ0OnBpbmtfY29uY3JldGUECQBuYW1lX2hhc2ii2G5F0u3SOAMKAG5ldHdvcmtfaWSszGgrCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:clay", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRSAAAACAQAbmFtZQ4AbWluZWNyYWZ0OmNsYXkECQBuYW1lX2hhc2j/S6sKXRcpzwMKAG5ldHdvcmtfaWRmsb8nCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:hardened_clay", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAAAACAQAbmFtZRcAbWluZWNyYWZ0OmhhcmRlbmVkX2NsYXkECQBuYW1lX2hhc2jrnRwCJ0krJAMKAG5ldHdvcmtfaWRBCOrrCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:white_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSfAAAACAQAbmFtZRoAbWluZWNyYWZ0OndoaXRlX3RlcnJhY290dGEECQBuYW1lX2hhc2j3RSdgmnAIewMKAG5ldHdvcmtfaWSimKw+CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:light_gray_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAwAACAQAbmFtZR8AbWluZWNyYWZ0OmxpZ2h0X2dyYXlfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAz1Ri3wIxomAwoAbmV0d29ya19pZH5qgOcKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:gray_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAwAACAQAbmFtZRkAbWluZWNyYWZ0OmdyYXlfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAXdSLAaNZ9vAwoAbmV0d29ya19pZM1QDV0KBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:black_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWThAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJsYWNrX3RlcnJhY290dGEECQBuYW1lX2hhc2jxssdv5vlbpgMKAG5ldHdvcmtfaWRE3Ru/CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:brown_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJyb3duX3RlcnJhY290dGEECQBuYW1lX2hhc2gG4kPenmOF9gMKAG5ldHdvcmtfaWQ/i0iNCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:red_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAwAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNo7fX56HXFejEDCgBuZXR3b3JrX2lk8tTF8QoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:orange_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAwAACAQAbmFtZRsAbWluZWNyYWZ0Om9yYW5nZV90ZXJyYWNvdHRhBAkAbmFtZV9oYXNo0Hjmql3sruMDCgBuZXR3b3JrX2lklmqmkAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:yellow_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAwAACAQAbmFtZRsAbWluZWNyYWZ0OnllbGxvd190ZXJyYWNvdHRhBAkAbmFtZV9oYXNoqkyKKrmA3VcDCgBuZXR3b3JrX2lkaM/orAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:lime_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpbWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaANjADFOF9v7AwoAbmV0d29ya19pZJt0XsgKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:green_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAwAACAQAbmFtZRoAbWluZWNyYWZ0OmdyZWVuX3RlcnJhY290dGEECQBuYW1lX2hhc2j5Ybq36yYwRQMKAG5ldHdvcmtfaWQ8kGdHCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:cyan_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAwAACAQAbmFtZRkAbWluZWNyYWZ0OmN5YW5fdGVycmFjb3R0YQQJAG5hbWVfaGFzaN09COzMuHwAAwoAbmV0d29ya19pZIWPCzoKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:light_blue_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAwAACAQAbmFtZR8AbWluZWNyYWZ0OmxpZ2h0X2JsdWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaOMytez7cOZiAwoAbmV0d29ya19pZFHK1UsKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:blue_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAwAACAQAbmFtZRkAbWluZWNyYWZ0OmJsdWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaF6inyTK5RpAAwoAbmV0d29ya19pZF5mVZIKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:purple_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAwAACAQAbmFtZRsAbWluZWNyYWZ0OnB1cnBsZV90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoKF7YG61yTbEDCgBuZXR3b3JrX2lkhtRDlwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:magenta_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAwAACAQAbmFtZRwAbWluZWNyYWZ0Om1hZ2VudGFfdGVycmFjb3R0YQQJAG5hbWVfaGFzaLWvtpAVtztyAwoAbmV0d29ya19pZN5SoakKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:pink_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAwAACAQAbmFtZRkAbWluZWNyYWZ0OnBpbmtfdGVycmFjb3R0YQQJAG5hbWVfaGFzaJ7mzvyzSQZTAwoAbmV0d29ya19pZDJWe4YKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:white_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAAAACAQAbmFtZSEAbWluZWNyYWZ0OndoaXRlX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoiVzCdoHAJo0DCgBuZXR3b3JrX2lkIlj9AAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:silver_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAAAACAQAbmFtZSIAbWluZWNyYWZ0OnNpbHZlcl9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAVsA0CnhzA4AwoAbmV0d29ya19pZPnxtJEKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:gray_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAAAACAQAbmFtZSAAbWluZWNyYWZ0OmdyYXlfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2jvLZt9u/lF/AMKAG5ldHdvcmtfaWQVU8eFCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:black_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAAAACAQAbmFtZSEAbWluZWNyYWZ0OmJsYWNrX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoe8I4xAXbO5UDCgBuZXR3b3JrX2lk2Icb9AoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:brown_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWToAAAACAQAbmFtZSEAbWluZWNyYWZ0OmJyb3duX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoSiNZOobbpjoDCgBuZXR3b3JrX2lkJy0jwgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:red_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAAAACAQAbmFtZR8AbWluZWNyYWZ0OnJlZF9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaBdWFGLmCLFVAwoAbmV0d29ya19pZMYBJSEKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:orange_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAAAACAQAbmFtZSIAbWluZWNyYWZ0Om9yYW5nZV9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaMyJMrnPr7szAwoAbmV0d29ya19pZN6+7TUKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:yellow_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAAAACAQAbmFtZSIAbWluZWNyYWZ0OnllbGxvd19nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaN6NaIhf6m0uAwoAbmV0d29ya19pZKRHXeoKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:lime_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWThAAAACAQAbmFtZSAAbWluZWNyYWZ0OmxpbWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2iF3E68/rB2EAMKAG5ldHdvcmtfaWSP7qQWCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:green_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAAAACAQAbmFtZSEAbWluZWNyYWZ0OmdyZWVuX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNow5mo8aQDFboDCgBuZXR3b3JrX2lkoF11kgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:cyan_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAAAACAQAbmFtZSAAbWluZWNyYWZ0OmN5YW5fZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2gnNB+cCFRJhwMKAG5ldHdvcmtfaWT9buMtCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:light_blue_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAAAACAQAbmFtZSYAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2gladnCDBKCigMKAG5ldHdvcmtfaWS5CszFCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:blue_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAAAACAQAbmFtZSAAbWluZWNyYWZ0OmJsdWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2giOZK+2nB1igMKAG5ldHdvcmtfaWR+e22CCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:purple_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAAAACAQAbmFtZSIAbWluZWNyYWZ0OnB1cnBsZV9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaIQU03txeAfHAwoAbmV0d29ya19pZLKbSE4KBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:magenta_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAAAACAQAbmFtZSMAbWluZWNyYWZ0Om1hZ2VudGFfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2i/SNqDJbfjMgMKAG5ldHdvcmtfaWQKf9UvCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:pink_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAAAACAQAbmFtZSAAbWluZWNyYWZ0OnBpbmtfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2hik8DVt4g+twMKAG5ldHdvcmtfaWTKzav2CgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:purpur_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAAAACAQAbmFtZRYAbWluZWNyYWZ0OnB1cnB1cl9ibG9jawQJAG5hbWVfaGFzaAgLwnUZGlzsAwoAbmV0d29ya19pZLD8ox4KBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQcAZGVmYXVsdAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:purpur_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAAAACAQAbmFtZRYAbWluZWNyYWZ0OnB1cnB1cl9ibG9jawQJAG5hbWVfaGFzaAgLwnUZGlzsAwoAbmV0d29ya19pZPSAFFsKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQUAbGluZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:packed_mud", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAgAACAQAbmFtZRQAbWluZWNyYWZ0OnBhY2tlZF9tdWQECQBuYW1lX2hhc2gHOMa121h4FgMKAG5ldHdvcmtfaWTUb6LyCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:mud_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAgAACAQAbmFtZRQAbWluZWNyYWZ0Om11ZF9icmlja3MECQBuYW1lX2hhc2iDL/SVl/PewQMKAG5ldHdvcmtfaWSkBjaDCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:nether_wart_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAAAACAQAbmFtZRsAbWluZWNyYWZ0Om5ldGhlcl93YXJ0X2Jsb2NrBAkAbmFtZV9oYXNo9XGS4GNnlV4DCgBuZXR3b3JrX2lkh3apIgoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:warped_wart_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAQAACAQAbmFtZRsAbWluZWNyYWZ0OndhcnBlZF93YXJ0X2Jsb2NrBAkAbmFtZV9oYXNo9IqDS9yUPJoDCgBuZXR3b3JrX2lkMpKAbAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:shroomlight", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAQAACAQAbmFtZRUAbWluZWNyYWZ0OnNocm9vbWxpZ2h0BAkAbmFtZV9oYXNoZHCHcHX/HYADCgBuZXR3b3JrX2lkLG2JiwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:crimson_nylium", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fbnlsaXVtBAkAbmFtZV9oYXNoOr6DJYW2bFYDCgBuZXR3b3JrX2lkuWpRDgoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:warped_nylium", - "block_state_b64": "CgAAAwgAYmxvY2tfaWToAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9ueWxpdW0ECQBuYW1lX2hhc2g0Zf89cfr3rwMKAG5ldHdvcmtfaWSu/kekCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:netherrack", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAAAACAQAbmFtZRQAbWluZWNyYWZ0Om5ldGhlcnJhY2sECQBuYW1lX2hhc2i/r5ZyRsvPyQMKAG5ldHdvcmtfaWTAiTOACgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:basalt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhc2FsdAQJAG5hbWVfaGFzaH+UQO2yWodiAwoAbmV0d29ya19pZBPNSV4KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:polished_basalt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAQAACAQAbmFtZRkAbWluZWNyYWZ0OnBvbGlzaGVkX2Jhc2FsdAQJAG5hbWVfaGFzaMS+L0gMnRcBAwoAbmV0d29ya19pZF+/mHwKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:smooth_basalt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AgAACAQAbmFtZRcAbWluZWNyYWZ0OnNtb290aF9iYXNhbHQECQBuYW1lX2hhc2jKPUdz89kuNAMKAG5ldHdvcmtfaWTkb/oVCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:soul_soil", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAQAACAQAbmFtZRMAbWluZWNyYWZ0OnNvdWxfc29pbAQJAG5hbWVfaGFzaC1/87ccutuTAwoAbmV0d29ya19pZKc63SMKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:dirt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAAAACAQAbmFtZQ4AbWluZWNyYWZ0OmRpcnQECQBuYW1lX2hhc2hXp6jnXAe+kQMKAG5ldHdvcmtfaWQmkQtoCgYAc3RhdGVzCAkAZGlydF90eXBlBgBub3JtYWwAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:dirt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAAAACAQAbmFtZQ4AbWluZWNyYWZ0OmRpcnQECQBuYW1lX2hhc2hXp6jnXAe+kQMKAG5ldHdvcmtfaWQId9pLCgYAc3RhdGVzCAkAZGlydF90eXBlBgBjb2Fyc2UAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:farmland", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AAAACAQAbmFtZRIAbWluZWNyYWZ0OmZhcm1sYW5kBAkAbmFtZV9oYXNoxyQ5ag7LolADCgBuZXR3b3JrX2lkX618FQoGAHN0YXRlcwMSAG1vaXN0dXJpemVkX2Ftb3VudAAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:grass_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAAAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXNzX2Jsb2NrBAkAbmFtZV9oYXNojPyGp3/CSZwDCgBuZXR3b3JrX2lktCgx3goGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:grass_path", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTGAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdyYXNzX3BhdGgECQBuYW1lX2hhc2i0/KZV8Qsy+gMKAG5ldHdvcmtfaWT7CcdzCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:podzol", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTzAAAACAQAbmFtZRAAbWluZWNyYWZ0OnBvZHpvbAQJAG5hbWVfaGFzaBzqokRjH4Z1AwoAbmV0d29ya19pZPPS/GUKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:mycelium", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAAAACAQAbmFtZRIAbWluZWNyYWZ0Om15Y2VsaXVtBAkAbmFtZV9oYXNojTN09cKickIDCgBuZXR3b3JrX2lkLNPxXQoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:mud", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAgAACAQAbmFtZQ0AbWluZWNyYWZ0Om11ZAQJAG5hbWVfaGFzaPb/3P+uLy+9AwoAbmV0d29ya19pZPIUlUkKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:stone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lkIQ4xgAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:iron_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAAAACAQAbmFtZRIAbWluZWNyYWZ0Omlyb25fb3JlBAkAbmFtZV9oYXNoS7BYtLnfx3gDCgBuZXR3b3JrX2lk3loneQoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:gold_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAAAACAQAbmFtZRIAbWluZWNyYWZ0OmdvbGRfb3JlBAkAbmFtZV9oYXNoC5Y+DUGXLC4DCgBuZXR3b3JrX2lkNhvMfwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:diamond_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4AAAACAQAbmFtZRUAbWluZWNyYWZ0OmRpYW1vbmRfb3JlBAkAbmFtZV9oYXNokUOJ2wZZrGQDCgBuZXR3b3JrX2lk/dChVAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:lapis_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQVAAAACAQAbmFtZRMAbWluZWNyYWZ0OmxhcGlzX29yZQQJAG5hbWVfaGFzaMrmrUrSzb7qAwoAbmV0d29ya19pZMg+qK4KBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:redstone_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAAAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZHN0b25lX29yZQQJAG5hbWVfaGFzaFHVnp8Wc4JbAwoAbmV0d29ya19pZKDYvQoKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:coal_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAAAACAQAbmFtZRIAbWluZWNyYWZ0OmNvYWxfb3JlBAkAbmFtZV9oYXNo1OjA+Iuy51oDCgBuZXR3b3JrX2lk+R/aKAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:copper_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2AgAACAQAbmFtZRQAbWluZWNyYWZ0OmNvcHBlcl9vcmUECQBuYW1lX2hhc2iSZduSntOzOwMKAG5ldHdvcmtfaWQtIuCnCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:emerald_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAAAACAQAbmFtZRUAbWluZWNyYWZ0OmVtZXJhbGRfb3JlBAkAbmFtZV9oYXNoJTovr+VgINsDCgBuZXR3b3JrX2lknbkqCgoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:quartz_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAAAACAQAbmFtZRQAbWluZWNyYWZ0OnF1YXJ0el9vcmUECQBuYW1lX2hhc2g0yNHLMK9TaQMKAG5ldHdvcmtfaWSzN7nzCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:nether_gold_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQfAgAACAQAbmFtZRkAbWluZWNyYWZ0Om5ldGhlcl9nb2xkX29yZQQJAG5hbWVfaGFzaEJZ7segIBgBAwoAbmV0d29ya19pZNI9pDgKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:ancient_debris", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAgAACAQAbmFtZRgAbWluZWNyYWZ0OmFuY2llbnRfZGVicmlzBAkAbmFtZV9oYXNoNrbxMc9AwKcDCgBuZXR3b3JrX2lkrSNjEAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:deepslate_iron_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9pcm9uX29yZQQJAG5hbWVfaGFzaB/fDL9pgvXXAwoAbmV0d29ya19pZFA0bz4KBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:deepslate_gold_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9nb2xkX29yZQQJAG5hbWVfaGFzaF9G7WYhKFinAwoAbmV0d29ya19pZHQTfBUKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:deepslate_diamond_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV9kaWFtb25kX29yZQQJAG5hbWVfaGFzaEUH5USh+iD3AwoAbmV0d29ya19pZHP6VzAKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:deepslate_lapis_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV9sYXBpc19vcmUECQBuYW1lX2hhc2j+yFxU/KZs1gMKAG5ldHdvcmtfaWRKINzICgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:deepslate_redstone_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAgAACAQAbmFtZSAAbWluZWNyYWZ0OmRlZXBzbGF0ZV9yZWRzdG9uZV9vcmUECQBuYW1lX2hhc2iVgM3wWWD6ugMKAG5ldHdvcmtfaWReBdYRCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:deepslate_emerald_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSWAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV9lbWVyYWxkX29yZQQJAG5hbWVfaGFzaNlfo5HTwS6wAwoAbmV0d29ya19pZNeie6sKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:deepslate_coal_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSVAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9jb2FsX29yZQQJAG5hbWVfaGFzaIjikmcbRrPPAwoAbmV0d29ya19pZD9TiygKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:deepslate_copper_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9jb3BwZXJfb3JlBAkAbmFtZV9oYXNottjV4Ev5LAQDCgBuZXR3b3JrX2lkP23rgQoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:gravel", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAAAACAQAbmFtZRAAbWluZWNyYWZ0OmdyYXZlbAQJAG5hbWVfaGFzaOFxz8XJd2r/AwoAbmV0d29ya19pZBpfI1sKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:granite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAwAACAQAbmFtZREAbWluZWNyYWZ0OmdyYW5pdGUECQBuYW1lX2hhc2iq+Dur2pw4AwMKAG5ldHdvcmtfaWT2NMfJCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:diorite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAwAACAQAbmFtZREAbWluZWNyYWZ0OmRpb3JpdGUECQBuYW1lX2hhc2iaFsq2iinZBQMKAG5ldHdvcmtfaWQqGE6XCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:andesite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAwAACAQAbmFtZRIAbWluZWNyYWZ0OmFuZGVzaXRlBAkAbmFtZV9oYXNosaLIEnQQoSYDCgBuZXR3b3JrX2lkEApRZAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:blackstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAgAACAQAbmFtZRQAbWluZWNyYWZ0OmJsYWNrc3RvbmUECQBuYW1lX2hhc2iMFYziD80D6QMKAG5ldHdvcmtfaWSrUryHCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AgAACAQAbmFtZRMAbWluZWNyYWZ0OmRlZXBzbGF0ZQQJAG5hbWVfaGFzaKX5pAblxz8TAwoAbmV0d29ya19pZOJoQjsKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:polished_granite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWROAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGUECQBuYW1lX2hhc2iLiEfys8pFIAMKAG5ldHdvcmtfaWTCxxcHCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:polished_diorite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGUECQBuYW1lX2hhc2hTxY4fKmNmlAMKAG5ldHdvcmtfaWTmtjdRCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:polished_andesite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRSAwAACAQAbmFtZRsAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlBAkAbmFtZV9oYXNovl28uFk4HuQDCgBuZXR3b3JrX2lklFjuCwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:polished_blackstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQiAgAACAQAbmFtZR0AbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmUECQBuYW1lX2hhc2jT9fHCl6vWQQMKAG5ldHdvcmtfaWR/Ho6oCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:polished_deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AgAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaHC1edoaWF3uAwoAbmV0d29ya19pZCPeQsEKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:sand", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQMAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnNhbmQECQBuYW1lX2hhc2i6lthXXbAyWAMKAG5ldHdvcmtfaWTekU/mCgYAc3RhdGVzCAkAc2FuZF90eXBlBgBub3JtYWwAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:sand", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQMAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnNhbmQECQBuYW1lX2hhc2i6lthXXbAyWAMKAG5ldHdvcmtfaWSTgcqmCgYAc3RhdGVzCAkAc2FuZF90eXBlAwByZWQAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:cactus", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAAAACAQAbmFtZRAAbWluZWNyYWZ0OmNhY3R1cwQJAG5hbWVfaGFzaCG9zL0N4wvGAwoAbmV0d29ya19pZDeCERAKBgBzdGF0ZXMDAwBhZ2UAAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:oak_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAAAACAQAbmFtZREAbWluZWNyYWZ0Om9ha19sb2cECQBuYW1lX2hhc2ho6TS+K7PZFQMKAG5ldHdvcmtfaWQjfjoxCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:stripped_oak_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQJAQAACAQAbmFtZRoAbWluZWNyYWZ0OnN0cmlwcGVkX29ha19sb2cECQBuYW1lX2hhc2h8dqh+OOHU4wMKAG5ldHdvcmtfaWSYKjdrCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:spruce_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4AwAACAQAbmFtZRQAbWluZWNyYWZ0OnNwcnVjZV9sb2cECQBuYW1lX2hhc2hZ03qaLoF3WgMKAG5ldHdvcmtfaWRlFD8eCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:stripped_spruce_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX3NwcnVjZV9sb2cECQBuYW1lX2hhc2iNrhKjS5IyrgMKAG5ldHdvcmtfaWRQcEC3CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:birch_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5AwAACAQAbmFtZRMAbWluZWNyYWZ0OmJpcmNoX2xvZwQJAG5hbWVfaGFzaBUzT3NxsZAnAwoAbmV0d29ya19pZBKN3VQKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:stripped_birch_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAQAACAQAbmFtZRwAbWluZWNyYWZ0OnN0cmlwcGVkX2JpcmNoX2xvZwQJAG5hbWVfaGFzaCFKS4AeuSidAwoAbmV0d29ya19pZN0IONIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:jungle_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6AwAACAQAbmFtZRQAbWluZWNyYWZ0Omp1bmdsZV9sb2cECQBuYW1lX2hhc2gkwW0KNulqDgMKAG5ldHdvcmtfaWQaziU/CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:stripped_jungle_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2p1bmdsZV9sb2cECQBuYW1lX2hhc2hAwMsgOk02JAMKAG5ldHdvcmtfaWQvls0eCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:acacia_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAAAACAQAbmFtZRQAbWluZWNyYWZ0OmFjYWNpYV9sb2cECQBuYW1lX2hhc2iV48VpYhjoYQMKAG5ldHdvcmtfaWRxEqe0CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:stripped_acacia_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2FjYWNpYV9sb2cECQBuYW1lX2hhc2hJb0lQqnEqlgMKAG5ldHdvcmtfaWRg3IdRCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:dark_oak_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ7AwAACAQAbmFtZRYAbWluZWNyYWZ0OmRhcmtfb2FrX2xvZwQJAG5hbWVfaGFzaIWfVRd0XUo3AwoAbmV0d29ya19pZPMM7LYKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:stripped_dark_oak_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQIAQAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2Rhcmtfb2FrX2xvZwQJAG5hbWVfaGFzaPFTdxRdPwkOAwoAbmV0d29ya19pZDIzenIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:mangrove_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAgAACAQAbmFtZRYAbWluZWNyYWZ0Om1hbmdyb3ZlX2xvZwQJAG5hbWVfaGFzaHZe6DzPZBobAwoAbmV0d29ya19pZG6DuYkKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:stripped_mangrove_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX21hbmdyb3ZlX2xvZwQJAG5hbWVfaGFzaLqIBo4hwA//AwoAbmV0d29ya19pZPtRn7UKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:cherry_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAwAACAQAbmFtZRQAbWluZWNyYWZ0OmNoZXJyeV9sb2cECQBuYW1lX2hhc2hwFlaioppB1wMKAG5ldHdvcmtfaWS2sdXECgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:stripped_cherry_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAwAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2NoZXJyeV9sb2cECQBuYW1lX2hhc2i85H6G+WhXaAMKAG5ldHdvcmtfaWRjzoglCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:crimson_stem", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAQAACAQAbmFtZRYAbWluZWNyYWZ0OmNyaW1zb25fc3RlbQQJAG5hbWVfaGFzaM0FzfL0UTKZAwoAbmV0d29ya19pZKvzID0KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:stripped_crimson_stem", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTvAQAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2NyaW1zb25fc3RlbQQJAG5hbWVfaGFzaDlA6nood57EAwoAbmV0d29ya19pZHrIqjIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:warped_stem", - "block_state_b64": "CgAAAwgAYmxvY2tfaWThAQAACAQAbmFtZRUAbWluZWNyYWZ0OndhcnBlZF9zdGVtBAkAbmFtZV9oYXNon7cKfPZxdrUDCgBuZXR3b3JrX2lkerWyMwoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:stripped_warped_stem", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAQAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX3dhcnBlZF9zdGVtBAkAbmFtZV9oYXNoEw+y0dDPSd8DCgBuZXR3b3JrX2lkIQ9vBAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:oak_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAQAACAQAbmFtZRIAbWluZWNyYWZ0Om9ha193b29kBAkAbmFtZV9oYXNoqQIkuVPyJX0DCgBuZXR3b3JrX2lku2G1YAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:spruce_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQtBAAACAQAbmFtZRUAbWluZWNyYWZ0OnNwcnVjZV93b29kBAkAbmFtZV9oYXNoTrIJ5TAQ+OgDCgBuZXR3b3JrX2lkaXLxCwoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:birch_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQuBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJpcmNoX3dvb2QECQBuYW1lX2hhc2iqVjG4xt0cKQMKAG5ldHdvcmtfaWS06c5VCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:jungle_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQvBAAACAQAbmFtZRUAbWluZWNyYWZ0Omp1bmdsZV93b29kBAkAbmFtZV9oYXNo9bYW29ORWCoDCgBuZXR3b3JrX2lkyFyKLQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:acacia_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQwBAAACAQAbmFtZRUAbWluZWNyYWZ0OmFjYWNpYV93b29kBAkAbmFtZV9oYXNoKkDfgzlJUcIDCgBuZXR3b3JrX2lkuTWlcgoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:dark_oak_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQxBAAACAQAbmFtZRcAbWluZWNyYWZ0OmRhcmtfb2FrX3dvb2QECQBuYW1lX2hhc2jaKv4ORLadAAMKAG5ldHdvcmtfaWSDrNQ8CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:stripped_oak_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQyBAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0cmlwcGVkX29ha193b29kBAkAbmFtZV9oYXNovW6KCv+VZnsDCgBuZXR3b3JrX2lkkhWGegoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:stripped_spruce_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQzBAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX3NwcnVjZV93b29kBAkAbmFtZV9oYXNoMnuUk4Xo6icDCgBuZXR3b3JrX2lkes2ydAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:stripped_birch_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ0BAAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2JpcmNoX3dvb2QECQBuYW1lX2hhc2hm88R604TKbAMKAG5ldHdvcmtfaWRleEMJCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:stripped_jungle_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ1BAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2p1bmdsZV93b29kBAkAbmFtZV9oYXNoUVs6KsZQRBoDCgBuZXR3b3JrX2lk92k8HQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:stripped_acacia_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2BAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2FjYWNpYV93b29kBAkAbmFtZV9oYXNo/kOPN2bCJhUDCgBuZXR3b3JrX2lktl6LwQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:stripped_dark_oak_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ3BAAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX2Rhcmtfb2FrX3dvb2QECQBuYW1lX2hhc2h2jFDfKVFgfAMKAG5ldHdvcmtfaWTgZQ5VCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:mangrove_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAgAACAQAbmFtZRcAbWluZWNyYWZ0Om1hbmdyb3ZlX3dvb2QECQBuYW1lX2hhc2iXVxG0JG2fVAMKAG5ldHdvcmtfaWTok1JCCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:stripped_mangrove_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAgAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX21hbmdyb3ZlX3dvb2QECQBuYW1lX2hhc2h7CkbaBF7/WAMKAG5ldHdvcmtfaWQLAX88CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:cherry_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQhAwAACAQAbmFtZRUAbWluZWNyYWZ0OmNoZXJyeV93b29kBAkAbmFtZV9oYXNoAW8srlmpBM8DCgBuZXR3b3JrX2lkEALMfAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AQwAc3RyaXBwZWRfYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:stripped_cherry_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAwAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2NoZXJyeV93b29kBAkAbmFtZV9oYXNo/e7KXv+CB38DCgBuZXR3b3JrX2lkg5aVtQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:crimson_hyphae", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25faHlwaGFlBAkAbmFtZV9oYXNouRmKmfSqEWADCgBuZXR3b3JrX2lk+Tm5rQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:stripped_crimson_hyphae", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQrAgAACAQAbmFtZSEAbWluZWNyYWZ0OnN0cmlwcGVkX2NyaW1zb25faHlwaGFlBAkAbmFtZV9oYXNoFffwmABq4LUDCgBuZXR3b3JrX2lkZAlUbgoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:warped_hyphae", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9oeXBoYWUECQBuYW1lX2hhc2hn8plQUr6pmQMKAG5ldHdvcmtfaWRU2AIBCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:stripped_warped_hyphae", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAgAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX3dhcnBlZF9oeXBoYWUECQBuYW1lX2hhc2irKq+HYPSgjQMKAG5ldHdvcmtfaWSbrOPDCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:bamboo_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJhbWJvb19ibG9jawQJAG5hbWVfaGFzaAbDeur6stIBAwoAbmV0d29ya19pZCJAwn0KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:stripped_bamboo_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAwAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2JhbWJvb19ibG9jawQJAG5hbWVfaGFzaJpwytpZOZM9AwoAbmV0d29ya19pZKuRbNEKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:oak_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQSAAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19sZWF2ZXMECQBuYW1lX2hhc2h6O4xGqA2oKgMKAG5ldHdvcmtfaWT98c59CgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:spruce_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQfBAAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9sZWF2ZXMECQBuYW1lX2hhc2i9x1CtNAuqZwMKAG5ldHdvcmtfaWSzF7pTCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:birch_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQgBAAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX2xlYXZlcwQJAG5hbWVfaGFzaBlAGHaoaLZSAwoAbmV0d29ya19pZOjtvWcKBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:jungle_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQhBAAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9sZWF2ZXMECQBuYW1lX2hhc2iW1uAH07zGhgMKAG5ldHdvcmtfaWSA5KX0CgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:acacia_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAAAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9sZWF2ZXMECQBuYW1lX2hhc2iZJf8dAgDRNQMKAG5ldHdvcmtfaWQ/G7VuCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:dark_oak_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQiBAAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX2xlYXZlcwQJAG5hbWVfaGFzaCk7rDipWFSjAwoAbmV0d29ya19pZJ2AkbYKBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:mangrove_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX2xlYXZlcwQJAG5hbWVfaGFzaKyI/dWvhEG8AwoAbmV0d29ya19pZPQxCZ8KBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:cherry_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9sZWF2ZXMECQBuYW1lX2hhc2giTs9ChhYBlQMKAG5ldHdvcmtfaWR8bPpwCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:azalea_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAgAACAQAbmFtZRcAbWluZWNyYWZ0OmF6YWxlYV9sZWF2ZXMECQBuYW1lX2hhc2iXFhD57wFS7AMKAG5ldHdvcmtfaWTNB/9ECgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:azalea_leaves_flowered", - "block_state_b64": "CgAAAwgAYmxvY2tfaWREAgAACAQAbmFtZSAAbWluZWNyYWZ0OmF6YWxlYV9sZWF2ZXNfZmxvd2VyZWQECQBuYW1lX2hhc2gs8jxlS/pMrwMKAG5ldHdvcmtfaWQ7W4PyCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:oak_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAAAACAQAbmFtZRUAbWluZWNyYWZ0Om9ha19zYXBsaW5nBAkAbmFtZV9oYXNoogXcT9QfjiUDCgBuZXR3b3JrX2lkG22C+AoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:spruce_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4BAAACAQAbmFtZRgAbWluZWNyYWZ0OnNwcnVjZV9zYXBsaW5nBAkAbmFtZV9oYXNoe8hz4uYP0FcDCgBuZXR3b3JrX2lkUQmhaQoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:birch_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5BAAACAQAbmFtZRcAbWluZWNyYWZ0OmJpcmNoX3NhcGxpbmcECQBuYW1lX2hhc2h348iJQ/tK4wMKAG5ldHdvcmtfaWQ2Uh53CgYAc3RhdGVzAQcAYWdlX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:jungle_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6BAAACAQAbmFtZRgAbWluZWNyYWZ0Omp1bmdsZV9zYXBsaW5nBAkAbmFtZV9oYXNo7tyTOdSrxaADCgBuZXR3b3JrX2lkXmBAdAoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:acacia_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ7BAAACAQAbmFtZRgAbWluZWNyYWZ0OmFjYWNpYV9zYXBsaW5nBAkAbmFtZV9oYXNo99sg15uoX7ADCgBuZXR3b3JrX2lkPXX1KgoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:dark_oak_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8BAAACAQAbmFtZRoAbWluZWNyYWZ0OmRhcmtfb2FrX3NhcGxpbmcECQBuYW1lX2hhc2jnVzFplW7cHgMKAG5ldHdvcmtfaWTD4giHCgYAc3RhdGVzAQcAYWdlX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:mangrove_propagule", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAgAACAQAbmFtZRwAbWluZWNyYWZ0Om1hbmdyb3ZlX3Byb3BhZ3VsZQQJAG5hbWVfaGFzaJGeox6hkfLFAwoAbmV0d29ya19pZAIpvpYKBgBzdGF0ZXMBBwBoYW5naW5nAAMPAHByb3BhZ3VsZV9zdGFnZQAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:cherry_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQiAwAACAQAbmFtZRgAbWluZWNyYWZ0OmNoZXJyeV9zYXBsaW5nBAkAbmFtZV9oYXNoGrPpNMf1LtcDCgBuZXR3b3JrX2lkypakXQoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:bee_nest", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAQAACAQAbmFtZRIAbWluZWNyYWZ0OmJlZV9uZXN0BAkAbmFtZV9oYXNo2R2WBxUHEZIDCgBuZXR3b3JrX2lkiXWLEAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAADCwBob25leV9sZXZlbAAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "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": "CgAAAwgAYmxvY2tfaWRnAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1lbG9uX2Jsb2NrBAkAbmFtZV9oYXNoXxSm0iYpAx8DCgBuZXR3b3JrX2lkC9rqygoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:melon_slice" - }, - { - "id": "minecraft:glistering_melon_slice" - }, - { - "id": "minecraft:sweet_berries" - }, - { - "id": "minecraft:glow_berries" - }, - { - "id": "minecraft:pumpkin", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAAAACAQAbmFtZREAbWluZWNyYWZ0OnB1bXBraW4ECQBuYW1lX2hhc2gc8A3jaSzWbgMKAG5ldHdvcmtfaWRFGA+xCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:carved_pumpkin", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSaAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNhcnZlZF9wdW1wa2luBAkAbmFtZV9oYXNoPu1T0MJuG90DCgBuZXR3b3JrX2lkXNNn5QoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:lit_pumpkin", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAAAACAQAbmFtZRUAbWluZWNyYWZ0OmxpdF9wdW1wa2luBAkAbmFtZV9oYXNo7gWtEm2uPL0DCgBuZXR3b3JrX2lki8sU4AoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:honeycomb" - }, - { - "id": "minecraft:fern", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRPBAAACAQAbmFtZQ4AbWluZWNyYWZ0OmZlcm4ECQBuYW1lX2hhc2iHbj3yXFn4owMKAG5ldHdvcmtfaWQKC6u7CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:large_fern", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRgBAAACAQAbmFtZRQAbWluZWNyYWZ0OmxhcmdlX2Zlcm4ECQBuYW1lX2hhc2gnE9sd0LzHtQMKAG5ldHdvcmtfaWTS9hG4CgYAc3RhdGVzAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:short_grass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQfAAAACAQAbmFtZRUAbWluZWNyYWZ0OnNob3J0X2dyYXNzBAkAbmFtZV9oYXNobWQghLH0bLcDCgBuZXR3b3JrX2lkJWOOqAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:tall_grass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRfBAAACAQAbmFtZRQAbWluZWNyYWZ0OnRhbGxfZ3Jhc3MECQBuYW1lX2hhc2ii5MyZJpv4sgMKAG5ldHdvcmtfaWRRfeH4CgYAc3RhdGVzAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:nether_sprouts" - }, - { - "id": "minecraft:fire_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAwAACAQAbmFtZRQAbWluZWNyYWZ0OmZpcmVfY29yYWwECQBuYW1lX2hhc2hOHyyECVQVJwMKAG5ldHdvcmtfaWS9vF0UCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:brain_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWREAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJyYWluX2NvcmFsBAkAbmFtZV9oYXNoRiWlLCwA2ycDCgBuZXR3b3JrX2lkrjAuhgoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:bubble_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbAQJAG5hbWVfaGFzaJz6rWnl+v2qAwoAbmV0d29ya19pZImIWy0KBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:tube_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAQAACAQAbmFtZRQAbWluZWNyYWZ0OnR1YmVfY29yYWwECQBuYW1lX2hhc2iYa8oO/tgk7wMKAG5ldHdvcmtfaWRTfND5CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:horn_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRHAwAACAQAbmFtZRQAbWluZWNyYWZ0Omhvcm5fY29yYWwECQBuYW1lX2hhc2iZnRHjZbnLPgMKAG5ldHdvcmtfaWR+GGp8CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:dead_fire_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRLAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbAQJAG5hbWVfaGFzaEPU6tFy/latAwoAbmV0d29ya19pZNMa7V4KBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:dead_brain_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAwAACAQAbmFtZRoAbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWwECQBuYW1lX2hhc2j5L6QJCISvzwMKAG5ldHdvcmtfaWQkKzeiCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:dead_bubble_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRKAwAACAQAbmFtZRsAbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsBAkAbmFtZV9oYXNoSTOZ/8wpeNYDCgBuZXR3b3JrX2lka6w9DAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:dead_tube_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbAQJAG5hbWVfaGFzaJGjNWhlaIJeAwoAbmV0d29ya19pZO3Z0ygKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:dead_horn_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbAQJAG5hbWVfaGFzaJBkz3qt+g2cAwoAbmV0d29ya19pZBAN+eYKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:fire_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRJBAAACAQAbmFtZRgAbWluZWNyYWZ0OmZpcmVfY29yYWxfZmFuBAkAbmFtZV9oYXNosOTxYYxsDLgDCgBuZXR3b3JrX2lkFKxbEgoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:brain_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRHBAAACAQAbmFtZRkAbWluZWNyYWZ0OmJyYWluX2NvcmFsX2ZhbgQJAG5hbWVfaGFzaAi5uHizSNcqAwoAbmV0d29ya19pZFtLjNwKBgBzdGF0ZXMDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:bubble_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRIBAAACAQAbmFtZRoAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbF9mYW4ECQBuYW1lX2hhc2hy/rX2on17DgMKAG5ldHdvcmtfaWQof60VCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:tube_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAQAACAQAbmFtZRgAbWluZWNyYWZ0OnR1YmVfY29yYWxfZmFuBAkAbmFtZV9oYXNo9pbJbo+PphIDCgBuZXR3b3JrX2lkenDTYgoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:horn_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRKBAAACAQAbmFtZRgAbWluZWNyYWZ0Omhvcm5fY29yYWxfZmFuBAkAbmFtZV9oYXNoA+ri6NPDkbUDCgBuZXR3b3JrX2lkezoHNwoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:dead_fire_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRNBAAACAQAbmFtZR0AbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbF9mYW4ECQBuYW1lX2hhc2hpQO02NDxPvwMKAG5ldHdvcmtfaWTaOJgLCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:dead_brain_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRLBAAACAQAbmFtZR4AbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWxfZmFuBAkAbmFtZV9oYXNoI9/+Z4YqMhIDCgBuZXR3b3JrX2lkqYXxYgoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:dead_bubble_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRMBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsX2ZhbgQJAG5hbWVfaGFzaBNECtIM6VIOAwoAbmV0d29ya19pZLrNtBEKBgBzdGF0ZXMDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:dead_tube_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAQAACAQAbmFtZR0AbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbF9mYW4ECQBuYW1lX2hhc2hbBBM9jFKWvQMKAG5ldHdvcmtfaWSkJKUWCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:dead_horn_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWROBAAACAQAbmFtZR0AbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbF9mYW4ECQBuYW1lX2hhc2hObElFrHfPygMKAG5ldHdvcmtfaWQ1ZxvmCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:crimson_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAQAACAQAbmFtZRcAbWluZWNyYWZ0OmNyaW1zb25fcm9vdHMECQBuYW1lX2hhc2j1fWgQLViv5QMKAG5ldHdvcmtfaWRLh5DXCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:warped_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAQAACAQAbmFtZRYAbWluZWNyYWZ0OndhcnBlZF9yb290cwQJAG5hbWVfaGFzaBc3WvbJOLlkAwoAbmV0d29ya19pZNLgDnAKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:yellow_flower", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQlAAAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19mbG93ZXIECQBuYW1lX2hhc2jWbU1pF0OUGAMKAG5ldHdvcmtfaWQgO3hpCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:poppy", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnBvcHB5BAkAbmFtZV9oYXNocMF8pITMbkcDCgBuZXR3b3JrX2lk8im6ywoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:blue_orchid", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ9BAAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfb3JjaGlkBAkAbmFtZV9oYXNoBjz2MsgB21EDCgBuZXR3b3JrX2lk/iLsSwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:allium", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ+BAAACAQAbmFtZRAAbWluZWNyYWZ0OmFsbGl1bQQJAG5hbWVfaGFzaDCGQBHNDTkcAwoAbmV0d29ya19pZD9Dgr0KBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:azure_bluet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ/BAAACAQAbmFtZRUAbWluZWNyYWZ0OmF6dXJlX2JsdWV0BAkAbmFtZV9oYXNo9N5egqMT2QcDCgBuZXR3b3JrX2lkwIgDnwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:red_tulip", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRABAAACAQAbmFtZRMAbWluZWNyYWZ0OnJlZF90dWxpcAQJAG5hbWVfaGFzaAjMi9Rd+6rhAwoAbmV0d29ya19pZAZCnt8KBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:orange_tulip", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRBBAAACAQAbmFtZRYAbWluZWNyYWZ0Om9yYW5nZV90dWxpcAQJAG5hbWVfaGFzaP+NjxMBZ8vAAwoAbmV0d29ya19pZPYatsMKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:white_tulip", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRCBAAACAQAbmFtZRUAbWluZWNyYWZ0OndoaXRlX3R1bGlwBAkAbmFtZV9oYXNo5vbU4VRPh3ADCgBuZXR3b3JrX2lkok+4rQoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:pink_tulip", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRDBAAACAQAbmFtZRQAbWluZWNyYWZ0OnBpbmtfdHVsaXAECQBuYW1lX2hhc2hxDHZa6OaNXAMKAG5ldHdvcmtfaWTiOT+VCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:oxeye_daisy", - "block_state_b64": "CgAAAwgAYmxvY2tfaWREBAAACAQAbmFtZRUAbWluZWNyYWZ0Om94ZXllX2RhaXN5BAkAbmFtZV9oYXNoXwxsqNQTN9gDCgBuZXR3b3JrX2lkw7R7dwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:cornflower", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRFBAAACAQAbmFtZRQAbWluZWNyYWZ0OmNvcm5mbG93ZXIECQBuYW1lX2hhc2gnhyC3EeqHgAMKAG5ldHdvcmtfaWR4VrvACgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:lily_of_the_valley", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRGBAAACAQAbmFtZRwAbWluZWNyYWZ0OmxpbHlfb2ZfdGhlX3ZhbGxleQQJAG5hbWVfaGFzaI64TJSf9mgQAwoAbmV0d29ya19pZFE9+nwKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:sunflower", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAAAACAQAbmFtZRMAbWluZWNyYWZ0OnN1bmZsb3dlcgQJAG5hbWVfaGFzaAMxYQLoqlZ0AwoAbmV0d29ya19pZA10iSoKBgBzdGF0ZXMBDwB1cHBlcl9ibG9ja19iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:lilac", - "block_state_b64": "CgAAAwgAYmxvY2tfaWReBAAACAQAbmFtZQ8AbWluZWNyYWZ0OmxpbGFjBAkAbmFtZV9oYXNoD3nrQJuo7NkDCgBuZXR3b3JrX2lk5W+uFAoGAHN0YXRlcwEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:rose_bush", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhBAAACAQAbmFtZRMAbWluZWNyYWZ0OnJvc2VfYnVzaAQJAG5hbWVfaGFzaLoiFk8LVpGKAwoAbmV0d29ya19pZMZPv48KBgBzdGF0ZXMBDwB1cHBlcl9ibG9ja19iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:peony", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRiBAAACAQAbmFtZQ8AbWluZWNyYWZ0OnBlb255BAkAbmFtZV9oYXNoR4dYc4QquPADCgBuZXR3b3JrX2lkrTe7RwoGAHN0YXRlcwEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:pitcher_plant", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAwAACAQAbmFtZRcAbWluZWNyYWZ0OnBpdGNoZXJfcGxhbnQECQBuYW1lX2hhc2hRJHzsbDH+SQMKAG5ldHdvcmtfaWRnY76VCgYAc3RhdGVzAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:pink_petals", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQkAwAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfcGV0YWxzBAkAbmFtZV9oYXNo6DQwN9SwV3QDCgBuZXR3b3JrX2lkNWneGgoGAHN0YXRlcwMGAGdyb3d0aAAAAAAIHABtaW5lY3JhZnQ6Y2FyZGluYWxfZGlyZWN0aW9uBQBzb3V0aAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:wither_rose", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAQAACAQAbmFtZRUAbWluZWNyYWZ0OndpdGhlcl9yb3NlBAkAbmFtZV9oYXNoaSKxl3I516gDCgBuZXR3b3JrX2lkATXLPwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:torchflower", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ3AwAACAQAbmFtZRUAbWluZWNyYWZ0OnRvcmNoZmxvd2VyBAkAbmFtZV9oYXNoL+mHtElwbqQDCgBuZXR3b3JrX2lkI34O+AoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "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/XeXOLAMKAG5ldHdvcmtfaWSUkDtbCgYAc3RhdGVzAxMAdmluZV9kaXJlY3Rpb25fYml0cwAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:weeping_vines", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAQAACAQAbmFtZRcAbWluZWNyYWZ0OndlZXBpbmdfdmluZXMECQBuYW1lX2hhc2jrLgLHkQygiwMKAG5ldHdvcmtfaWQ8NHSJCgYAc3RhdGVzAxEAd2VlcGluZ192aW5lc19hZ2UAAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:twisting_vines", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAgAACAQAbmFtZRgAbWluZWNyYWZ0OnR3aXN0aW5nX3ZpbmVzBAkAbmFtZV9oYXNoDYR5QgVUQJADCgBuZXR3b3JrX2lk5kYVIQoGAHN0YXRlcwMSAHR3aXN0aW5nX3ZpbmVzX2FnZQAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:waterlily", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRvAAAACAQAbmFtZRMAbWluZWNyYWZ0OndhdGVybGlseQQJAG5hbWVfaGFzaEHgC4c1SXg0AwoAbmV0d29ya19pZOOerp8KBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:seagrass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAQAACAQAbmFtZRIAbWluZWNyYWZ0OnNlYWdyYXNzBAkAbmFtZV9oYXNoHSBFtoHdWxIDCgBuZXR3b3JrX2lkd3lhEAoGAHN0YXRlcwgOAHNlYV9ncmFzc190eXBlBwBkZWZhdWx0AAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:kelp" - }, - { - "id": "minecraft:deadbush", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAAAACAQAbmFtZRIAbWluZWNyYWZ0OmRlYWRidXNoBAkAbmFtZV9oYXNoPFODe4IScnYDCgBuZXR3b3JrX2lkVfnl+goGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:bamboo", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhbWJvbwQJAG5hbWVfaGFzaBgpGmyzhedCAwoAbmV0d29ya19pZIZv1nYKBgBzdGF0ZXMBBwBhZ2VfYml0AAgQAGJhbWJvb19sZWFmX3NpemUJAG5vX2xlYXZlcwgWAGJhbWJvb19zdGFsa190aGlja25lc3MEAHRoaW4AAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:snow", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnNub3cECQBuYW1lX2hhc2gVHr5XXdETWAMKAG5ldHdvcmtfaWQ0zCeHCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:ice", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAAAACAQAbmFtZQ0AbWluZWNyYWZ0OmljZQQJAG5hbWVfaGFzaNF26f+uUT29AwoAbmV0d29ya19pZOUMaQYKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:packed_ice", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAAAACAQAbmFtZRQAbWluZWNyYWZ0OnBhY2tlZF9pY2UECQBuYW1lX2hhc2hk4bu123ZrFgMKAG5ldHdvcmtfaWTr/ooaCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:blue_ice", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQKAQAACAQAbmFtZRIAbWluZWNyYWZ0OmJsdWVfaWNlBAkAbmFtZV9oYXNo+EKxYgFhKcgDCgBuZXR3b3JrX2lkxfsA8goGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:snow_layer", - "block_state_b64": "CgAAAwgAYmxvY2tfaWROAAAACAQAbmFtZRQAbWluZWNyYWZ0OnNub3dfbGF5ZXIECQBuYW1lX2hhc2hXka6atMYUCQMKAG5ldHdvcmtfaWRCrIPcCgYAc3RhdGVzAQsAY292ZXJlZF9iaXQAAwYAaGVpZ2h0AAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:pointed_dripstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQzAgAACAQAbmFtZRsAbWluZWNyYWZ0OnBvaW50ZWRfZHJpcHN0b25lBAkAbmFtZV9oYXNoJMISzmHQgt8DCgBuZXR3b3JrX2lkbWrtYgoGAHN0YXRlcwgTAGRyaXBzdG9uZV90aGlja25lc3MDAHRpcAEHAGhhbmdpbmcBAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:dripstone_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AgAACAQAbmFtZRkAbWluZWNyYWZ0OmRyaXBzdG9uZV9ibG9jawQJAG5hbWVfaGFzaIIXnEqY77YsAwoAbmV0d29ya19pZMZi2kwKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:moss_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWROAgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vc3NfY2FycGV0BAkAbmFtZV9oYXNo/NEDxRPTshYDCgBuZXR3b3JrX2lkaGG3QwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:moss_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ/AgAACAQAbmFtZRQAbWluZWNyYWZ0Om1vc3NfYmxvY2sECQBuYW1lX2hhc2iovcsPUYX2tgMKAG5ldHdvcmtfaWT3JSbfCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:dirt_with_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ9AgAACAQAbmFtZRkAbWluZWNyYWZ0OmRpcnRfd2l0aF9yb290cwQJAG5hbWVfaGFzaLCNDYPviDCIAwoAbmV0d29ya19pZNCkwzoKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:hanging_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ+AgAACAQAbmFtZRcAbWluZWNyYWZ0Omhhbmdpbmdfcm9vdHMECQBuYW1lX2hhc2jaXn+Y5UZpDAMKAG5ldHdvcmtfaWRU4c2vCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:mangrove_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWThAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hbmdyb3ZlX3Jvb3RzBAkAbmFtZV9oYXNoa786PzQGZ6kDCgBuZXR3b3JrX2lklA0AHgoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:muddy_mangrove_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAgAACAQAbmFtZR4AbWluZWNyYWZ0Om11ZGR5X21hbmdyb3ZlX3Jvb3RzBAkAbmFtZV9oYXNo9YApdHpo1RkDCgBuZXR3b3JrX2lkH0Oc4woGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:big_dripleaf", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRCAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJpZ19kcmlwbGVhZgQJAG5hbWVfaGFzaGBEhXjo6qSdAwoAbmV0d29ya19pZMETsb8KBgBzdGF0ZXMBEQBiaWdfZHJpcGxlYWZfaGVhZAEIEQBiaWdfZHJpcGxlYWZfdGlsdAQAbm9uZQgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:small_dripleaf_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAgAACAQAbmFtZR4AbWluZWNyYWZ0OnNtYWxsX2RyaXBsZWFmX2Jsb2NrBAkAbmFtZV9oYXNojxRAgXP9uWADCgBuZXR3b3JrX2lkozbVPwoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24EAGVhc3QBDwB1cHBlcl9ibG9ja19iaXQBAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:spore_blossom", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRAAgAACAQAbmFtZRcAbWluZWNyYWZ0OnNwb3JlX2Jsb3Nzb20ECQBuYW1lX2hhc2il3U72Gbco2gMKAG5ldHdvcmtfaWSbbbgcCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:azalea", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAgAACAQAbmFtZRAAbWluZWNyYWZ0OmF6YWxlYQQJAG5hbWVfaGFzaNyUl+BW9JrBAwoAbmV0d29ya19pZO/XZtQKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:flowering_azalea", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAgAACAQAbmFtZRoAbWluZWNyYWZ0OmZsb3dlcmluZ19hemFsZWEECQBuYW1lX2hhc2ie9r33wz8kiwMKAG5ldHdvcmtfaWQ3ij0VCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:glow_lichen", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSaAgAACAQAbmFtZRUAbWluZWNyYWZ0Omdsb3dfbGljaGVuBAkAbmFtZV9oYXNobyPUrIYlo44DCgBuZXR3b3JrX2lkCh8lSAoGAHN0YXRlcwMZAG11bHRpX2ZhY2VfZGlyZWN0aW9uX2JpdHM/AAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:amethyst_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAgAACAQAbmFtZRgAbWluZWNyYWZ0OmFtZXRoeXN0X2Jsb2NrBAkAbmFtZV9oYXNob+JK1iiAthcDCgBuZXR3b3JrX2lk8HtpzgoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:budding_amethyst", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRHAgAACAQAbmFtZRoAbWluZWNyYWZ0OmJ1ZGRpbmdfYW1ldGh5c3QECQBuYW1lX2hhc2gJvAwfI14fxgMKAG5ldHdvcmtfaWTQYqfACgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:amethyst_cluster", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAgAACAQAbmFtZRoAbWluZWNyYWZ0OmFtZXRoeXN0X2NsdXN0ZXIECQBuYW1lX2hhc2jK82S88Jgm8wMKAG5ldHdvcmtfaWSCPMPGCgYAc3RhdGVzCBQAbWluZWNyYWZ0OmJsb2NrX2ZhY2UCAHVwAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:large_amethyst_bud", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAgAACAQAbmFtZRwAbWluZWNyYWZ0OmxhcmdlX2FtZXRoeXN0X2J1ZAQJAG5hbWVfaGFzaAHhdpWD+sd5AwoAbmV0d29ya19pZKkQxOcKBgBzdGF0ZXMIFABtaW5lY3JhZnQ6YmxvY2tfZmFjZQIAdXAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:medium_amethyst_bud", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRKAgAACAQAbmFtZR0AbWluZWNyYWZ0Om1lZGl1bV9hbWV0aHlzdF9idWQECQBuYW1lX2hhc2g5lBGtC0DzZQMKAG5ldHdvcmtfaWSYiP4gCgYAc3RhdGVzCBQAbWluZWNyYWZ0OmJsb2NrX2ZhY2UCAHVwAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:small_amethyst_bud", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRLAgAACAQAbmFtZRwAbWluZWNyYWZ0OnNtYWxsX2FtZXRoeXN0X2J1ZAQJAG5hbWVfaGFzaEnb4+q9PO4YAwoAbmV0d29ya19pZGWzxrQKBgBzdGF0ZXMIFABtaW5lY3JhZnQ6YmxvY2tfZmFjZQIAdXAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:tuff", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAgAACAQAbmFtZQ4AbWluZWNyYWZ0OnR1ZmYECQBuYW1lX2hhc2h1Rwc1XYsBGwMKAG5ldHdvcmtfaWRwQGn0CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:tuff_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAwAACAQAbmFtZRUAbWluZWNyYWZ0OnR1ZmZfc3RhaXJzBAkAbmFtZV9oYXNoKjyNUBjcfZsDCgBuZXR3b3JrX2lk+LsycgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:tuff_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAwAACAQAbmFtZRMAbWluZWNyYWZ0OnR1ZmZfc2xhYgQJAG5hbWVfaGFzaIhCGdlIsnMUAwoAbmV0d29ya19pZN1dUL4KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:tuff_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAwAACAQAbmFtZRMAbWluZWNyYWZ0OnR1ZmZfd2FsbAQJAG5hbWVfaGFzaMyeeu1IRf03AwoAbmV0d29ya19pZDkIrosKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:chiseled_tuff", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoaXNlbGVkX3R1ZmYECQBuYW1lX2hhc2iVliOT8OTQ9AMKAG5ldHdvcmtfaWTLNKOiCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:polished_tuff", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAwAACAQAbmFtZRcAbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmYECQBuYW1lX2hhc2hyaLe/KEVZ0gMKAG5ldHdvcmtfaWTcX3NrCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:polished_tuff_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTuAwAACAQAbmFtZR4AbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmZfc3RhaXJzBAkAbmFtZV9oYXNo8yuah8QI1dcDCgBuZXR3b3JrX2lkjLoU4AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:polished_tuff_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTsAwAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmZfc2xhYgQJAG5hbWVfaGFzaLXdb48YvAsHAwoAbmV0d29ya19pZAnJ7W0KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:polished_tuff_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTvAwAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmZfd2FsbAQJAG5hbWVfaGFzaJVZj6QYWXUrAwoAbmV0d29ya19pZLU7dooKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:tuff_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAwAACAQAbmFtZRUAbWluZWNyYWZ0OnR1ZmZfYnJpY2tzBAkAbmFtZV9oYXNo/hbQ+mXSK7wDCgBuZXR3b3JrX2lk6gmIwQoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:tuff_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT0AwAACAQAbmFtZRsAbWluZWNyYWZ0OnR1ZmZfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNoWJpkAurUfKwDCgBuZXR3b3JrX2lkUMcjiwoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:tuff_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTyAwAACAQAbmFtZRkAbWluZWNyYWZ0OnR1ZmZfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaLqPMjVCv5dIAwoAbmV0d29ya19pZOmeRhcKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:tuff_brick_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT1AwAACAQAbmFtZRkAbWluZWNyYWZ0OnR1ZmZfYnJpY2tfd2FsbAQJAG5hbWVfaGFzaIL0IyNCOsonAwoAbmV0d29ya19pZJW4T5UKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:chiseled_tuff_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT2AwAACAQAbmFtZR4AbWluZWNyYWZ0OmNoaXNlbGVkX3R1ZmZfYnJpY2tzBAkAbmFtZV9oYXNo3oQw6gmxYuADCgBuZXR3b3JrX2lkm3D8AgoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:calcite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAgAACAQAbmFtZREAbWluZWNyYWZ0OmNhbGNpdGUECQBuYW1lX2hhc2ixKLu8ZIdzDQMKAG5ldHdvcmtfaWQlSbJDCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "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/FO78WDoDCgBuZXR3b3JrX2lkLh1OXAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:red_mushroom", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAAAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZF9tdXNocm9vbQQJAG5hbWVfaGFzaPpzJua7669xAwoAbmV0d29ya19pZCvWPYkKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:crimson_fungus", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fZnVuZ3VzBAkAbmFtZV9oYXNolIcCUuFM2u0DCgBuZXR3b3JrX2lkD2NN0QoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:warped_fungus", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9mdW5ndXMECQBuYW1lX2hhc2gq8bSnRVTAFgMKAG5ldHdvcmtfaWTkwS+rCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:brown_mushroom_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAAAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkdOMhDAoGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cw4AAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:red_mushroom_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAAAACAQAbmFtZRwAbWluZWNyYWZ0OnJlZF9tdXNocm9vbV9ibG9jawQJAG5hbWVfaGFzaJTTyJbth9M9AwoAbmV0d29ya19pZM+AyboKBgBzdGF0ZXMDEgBodWdlX211c2hyb29tX2JpdHMOAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:brown_mushroom_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAAAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkbdt3CAoGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cw8AAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:brown_mushroom_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAAAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkSrMl9goGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cwAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:egg" - }, - { - "id": "minecraft:sugar_cane" - }, - { - "id": "minecraft:sugar" - }, - { - "id": "minecraft:rotten_flesh" - }, - { - "id": "minecraft:bone" - }, - { - "id": "minecraft:web", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAAAACAQAbmFtZQ0AbWluZWNyYWZ0OndlYgQJAG5hbWVfaGFzaA4GKQCvG4i9AwoAbmV0d29ya19pZApt+jgKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:spider_eye" - }, - { - "id": "minecraft:mob_spawner", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ0AAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vYl9zcGF3bmVyBAkAbmFtZV9oYXNoNwGrCV/Fkh8DCgBuZXR3b3JrX2lkM1wTmgoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:trial_spawner", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6AgAACAQAbmFtZRcAbWluZWNyYWZ0OnRyaWFsX3NwYXduZXIECQBuYW1lX2hhc2iNLRPB4ACz+QMKAG5ldHdvcmtfaWTWFYHGCgYAc3RhdGVzAQcAb21pbm91cwADEwB0cmlhbF9zcGF3bmVyX3N0YXRlAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:vault", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5AgAACAQAbmFtZQ8AbWluZWNyYWZ0OnZhdWx0BAkAbmFtZV9oYXNoCAp9n3IAyqcDCgBuZXR3b3JrX2lk6/P+vwoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAQcAb21pbm91cwAICwB2YXVsdF9zdGF0ZQgAaW5hY3RpdmUAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:end_portal_frame", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AAAACAQAbmFtZRoAbWluZWNyYWZ0OmVuZF9wb3J0YWxfZnJhbWUECQBuYW1lX2hhc2gqofyUIjGOpQMKAG5ldHdvcmtfaWRbGHf8CgYAc3RhdGVzARIAZW5kX3BvcnRhbF9leWVfYml0AAgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkqXH7RgoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGUFAHN0b25lAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkeIBb6QoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGULAGNvYmJsZXN0b25lAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkDZ2cFQoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGULAHN0b25lX2JyaWNrAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkOR/cTAoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGURAG1vc3N5X3N0b25lX2JyaWNrAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkqdwlHAoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGUTAGNyYWNrZWRfc3RvbmVfYnJpY2sAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkFqqPggoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGUUAGNoaXNlbGVkX3N0b25lX2JyaWNrAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:infested_deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAgAACAQAbmFtZRwAbWluZWNyYWZ0OmluZmVzdGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaICF2VYccxF1AwoAbmV0d29ya19pZDa/624KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:dragon_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AAAACAQAbmFtZRQAbWluZWNyYWZ0OmRyYWdvbl9lZ2cECQBuYW1lX2hhc2inMzXrV+/e1wMKAG5ldHdvcmtfaWTgO1yRCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:turtle_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAQAACAQAbmFtZRQAbWluZWNyYWZ0OnR1cnRsZV9lZ2cECQBuYW1lX2hhc2iwSRcxOJIJ9gMKAG5ldHdvcmtfaWSIRNUhCgYAc3RhdGVzCA0AY3JhY2tlZF9zdGF0ZQkAbm9fY3JhY2tzCBAAdHVydGxlX2VnZ19jb3VudAcAb25lX2VnZwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:sniffer_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRTAwAACAQAbmFtZRUAbWluZWNyYWZ0OnNuaWZmZXJfZWdnBAkAbmFtZV9oYXNoY1lozc8lPcYDCgBuZXR3b3JrX2lk7yb/2QoGAHN0YXRlcwgNAGNyYWNrZWRfc3RhdGUJAG5vX2NyYWNrcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:frog_spawn", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAgAACAQAbmFtZRQAbWluZWNyYWZ0OmZyb2dfc3Bhd24ECQBuYW1lX2hhc2iWmd7idp3ZZwMKAG5ldHdvcmtfaWRFzJudCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:pearlescent_froglight", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAgAACAQAbmFtZR8AbWluZWNyYWZ0OnBlYXJsZXNjZW50X2Zyb2dsaWdodAQJAG5hbWVfaGFzaKkcFRyycYGyAwoAbmV0d29ya19pZJqYakAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:verdant_froglight", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAgAACAQAbmFtZRsAbWluZWNyYWZ0OnZlcmRhbnRfZnJvZ2xpZ2h0BAkAbmFtZV9oYXNoA+eXuTBohrQDCgBuZXR3b3JrX2lkDIVnsQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:ochre_froglight", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAgAACAQAbmFtZRkAbWluZWNyYWZ0Om9jaHJlX2Zyb2dsaWdodAQJAG5hbWVfaGFzaMY59kjPe+c3AwoAbmV0d29ya19pZO2TD50KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "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:breeze_spawn_egg" - }, - { - "id": "minecraft:armadillo_spawn_egg" - }, - { - "id": "minecraft:bogged_spawn_egg" - }, - { - "id": "minecraft:obsidian", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQxAAAACAQAbmFtZRIAbWluZWNyYWZ0Om9ic2lkaWFuBAkAbmFtZV9oYXNoiz4qrb8QjyEDCgBuZXR3b3JrX2lkuqnPpQoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:crying_obsidian", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAgAACAQAbmFtZRkAbWluZWNyYWZ0OmNyeWluZ19vYnNpZGlhbgQJAG5hbWVfaGFzaKT0JlA7Z1K+AwoAbmV0d29ya19pZCjbPV4KBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:bedrock", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAAAACAQAbmFtZREAbWluZWNyYWZ0OmJlZHJvY2sECQBuYW1lX2hhc2hWfFrh4LVtxwMKAG5ldHdvcmtfaWT7fKz1CgYAc3RhdGVzAQ4AaW5maW5pYnVybl9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:soul_sand", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNvdWxfc2FuZAQJAG5hbWVfaGFzaMaf+bccu+KTAwoAbmV0d29ya19pZBQSHrMKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:magma", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAAAACAQAbmFtZQ8AbWluZWNyYWZ0Om1hZ21hBAkAbmFtZV9oYXNoqyTjKaIsWfYDCgBuZXR3b3JrX2lkyfWAZgoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:nether_wart" - }, - { - "id": "minecraft:end_stone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AAAACAQAbmFtZRMAbWluZWNyYWZ0OmVuZF9zdG9uZQQJAG5hbWVfaGFzaH1J9jA39GJNAwoAbmV0d29ya19pZFeFQ7UKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:chorus_flower", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAAAACAQAbmFtZRcAbWluZWNyYWZ0OmNob3J1c19mbG93ZXIECQBuYW1lX2hhc2iMpSodli5uawMKAG5ldHdvcmtfaWRnd1ZWCgYAc3RhdGVzAwMAYWdlAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:chorus_plant", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAAAACAQAbmFtZRYAbWluZWNyYWZ0OmNob3J1c19wbGFudAQJAG5hbWVfaGFzaJhSrmNGKwaMAwoAbmV0d29ya19pZA3uVqMKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:chorus_fruit" - }, - { - "id": "minecraft:popped_chorus_fruit" - }, - { - "id": "minecraft:sponge", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAAAACAQAbmFtZRAAbWluZWNyYWZ0OnNwb25nZQQJAG5hbWVfaGFzaLrd2ScYRDMiAwoAbmV0d29ya19pZF01rO0KBgBzdGF0ZXMICwBzcG9uZ2VfdHlwZQMAZHJ5AAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:sponge", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAAAACAQAbmFtZRAAbWluZWNyYWZ0OnNwb25nZQQJAG5hbWVfaGFzaLrd2ScYRDMiAwoAbmV0d29ya19pZPiOc4QKBgBzdGF0ZXMICwBzcG9uZ2VfdHlwZQMAd2V0AAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:tube_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRoAbWluZWNyYWZ0OnR1YmVfY29yYWxfYmxvY2sECQBuYW1lX2hhc2iGkaiR7Eot4wMKAG5ldHdvcmtfaWQPNJ6sCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:brain_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRQBAAACAQAbmFtZRsAbWluZWNyYWZ0OmJyYWluX2NvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoeDNAK18yUo4DCgBuZXR3b3JrX2lkloN1vgoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:bubble_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRRBAAACAQAbmFtZRwAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaAI2mwMlvcNbAwoAbmV0d29ya19pZBlkxKIKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:fire_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRSBAAACAQAbmFtZRoAbWluZWNyYWZ0OmZpcmVfY29yYWxfYmxvY2sECQBuYW1lX2hhc2gg1gLeXLmKaAMKAG5ldHdvcmtfaWSp3W57CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:horn_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRTBAAACAQAbmFtZRoAbWluZWNyYWZ0Omhvcm5fY29yYWxfYmxvY2sECQBuYW1lX2hhc2hnZSLRWUwGhAMKAG5ldHdvcmtfaWRSK6ccCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:dead_tube_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRUBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaB9+lY3hAkNNAwoAbmV0d29ya19pZF0hKKYKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:dead_brain_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRVBAAACAQAbmFtZSAAbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWxfYmxvY2sECQBuYW1lX2hhc2iHyDn52AO8uwMKAG5ldHdvcmtfaWQw7yCaCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:dead_bubble_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRWBAAACAQAbmFtZSEAbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsX2Jsb2NrBAkAbmFtZV9oYXNotwkk/ITrsjADCgBuZXR3b3JrX2lk56mXUgoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:dead_fire_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRXBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaG0qHxbIrBEyAwoAbmV0d29ya19pZFvnH88KBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:dead_horn_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRYBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaL7D8bu4Fm+0AwoAbmV0d29ya19pZEALRLoKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:sculk", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAgAACAQAbmFtZQ8AbWluZWNyYWZ0OnNjdWxrBAkAbmFtZV9oYXNo2Lq7T5yQF8kDCgBuZXR3b3JrX2lkyqUPPgoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:sculk_vein", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAgAACAQAbmFtZRQAbWluZWNyYWZ0OnNjdWxrX3ZlaW4ECQBuYW1lX2hhc2gJUdhVooV4zwMKAG5ldHdvcmtfaWSUfn1XCgYAc3RhdGVzAxkAbXVsdGlfZmFjZV9kaXJlY3Rpb25fYml0cwAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:sculk_catalyst", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAgAACAQAbmFtZRgAbWluZWNyYWZ0OnNjdWxrX2NhdGFseXN0BAkAbmFtZV9oYXNo+gCpbrCHST4DCgBuZXR3b3JrX2lkMJ2n/woGAHN0YXRlcwEFAGJsb29tAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:sculk_shrieker", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTMAgAACAQAbmFtZRgAbWluZWNyYWZ0OnNjdWxrX3Nocmlla2VyBAkAbmFtZV9oYXNo5OXtyObniQ4DCgBuZXR3b3JrX2lkxapoNAoGAHN0YXRlcwEGAGFjdGl2ZQABCgBjYW5fc3VtbW9uAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:sculk_sensor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQyAgAACAQAbmFtZRYAbWluZWNyYWZ0OnNjdWxrX3NlbnNvcgQJAG5hbWVfaGFzaCkmHreeTgNnAwoAbmV0d29ya19pZLj2WPcKBgBzdGF0ZXMDEgBzY3Vsa19zZW5zb3JfcGhhc2UAAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:calibrated_sculk_sensor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAwAACAQAbmFtZSEAbWluZWNyYWZ0OmNhbGlicmF0ZWRfc2N1bGtfc2Vuc29yBAkAbmFtZV9oYXNoffAcXXN/iJUDCgBuZXR3b3JrX2lkwOx3QQoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAxIAc2N1bGtfc2Vuc29yX3BoYXNlAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:reinforced_deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTRAgAACAQAbmFtZR4AbWluZWNyYWZ0OnJlaW5mb3JjZWRfZGVlcHNsYXRlBAkAbmFtZV9oYXNoldDmj91EapQDCgBuZXR3b3JrX2lkHIt+aQoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "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:mace" - }, - { - "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:arrow", - "damage": 44 - }, - { - "id": "minecraft:arrow", - "damage": 45 - }, - { - "id": "minecraft:arrow", - "damage": 46 - }, - { - "id": "minecraft:arrow", - "damage": 47 - }, - { - "id": "minecraft:ominous_bottle" - }, - { - "id": "minecraft:ominous_bottle", - "damage": 1 - }, - { - "id": "minecraft:ominous_bottle", - "damage": 2 - }, - { - "id": "minecraft:ominous_bottle", - "damage": 3 - }, - { - "id": "minecraft:ominous_bottle", - "damage": 4 - }, - { - "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:wind_charge" - }, - { - "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:wolf_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:potion", - "damage": 43 - }, - { - "id": "minecraft:potion", - "damage": 44 - }, - { - "id": "minecraft:potion", - "damage": 45 - }, - { - "id": "minecraft:potion", - "damage": 46 - }, - { - "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:splash_potion", - "damage": 43 - }, - { - "id": "minecraft:splash_potion", - "damage": 44 - }, - { - "id": "minecraft:splash_potion", - "damage": 45 - }, - { - "id": "minecraft:splash_potion", - "damage": 46 - }, - { - "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:lingering_potion", - "damage": 43 - }, - { - "id": "minecraft:lingering_potion", - "damage": 44 - }, - { - "id": "minecraft:lingering_potion", - "damage": 45 - }, - { - "id": "minecraft:lingering_potion", - "damage": 46 - }, - { - "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": "CgAAAwgAYmxvY2tfaWQyAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnRvcmNoBAkAbmFtZV9oYXNoagn7rmDBzisDCgBuZXR3b3JrX2lk+BwwuQoGAHN0YXRlcwgWAHRvcmNoX2ZhY2luZ19kaXJlY3Rpb24HAHVua25vd24AAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:soul_torch", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQLAgAACAQAbmFtZRQAbWluZWNyYWZ0OnNvdWxfdG9yY2gECQBuYW1lX2hhc2huixOT04BRdQMKAG5ldHdvcmtfaWShbFILCgYAc3RhdGVzCBYAdG9yY2hfZmFjaW5nX2RpcmVjdGlvbgcAdW5rbm93bgADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:sea_pickle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAQAACAQAbmFtZRQAbWluZWNyYWZ0OnNlYV9waWNrbGUECQBuYW1lX2hhc2iONEfZJB+glgMKAG5ldHdvcmtfaWSINWQyCgYAc3RhdGVzAw0AY2x1c3Rlcl9jb3VudAAAAAABCABkZWFkX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:lantern", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTPAQAACAQAbmFtZREAbWluZWNyYWZ0OmxhbnRlcm4ECQBuYW1lX2hhc2hMw44VI2HWygMKAG5ldHdvcmtfaWRkjQvzCgYAc3RhdGVzAQcAaGFuZ2luZwAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:soul_lantern", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQMAgAACAQAbmFtZRYAbWluZWNyYWZ0OnNvdWxfbGFudGVybgQJAG5hbWVfaGFzaGjIpjxk9z+RAwoAbmV0d29ya19pZGfoP8cKBgBzdGF0ZXMBBwBoYW5naW5nAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAgAACAQAbmFtZRAAbWluZWNyYWZ0OmNhbmRsZQQJAG5hbWVfaGFzaHPd+MsNdWTfAwoAbmV0d29ya19pZHsBMA0KBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:white_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWScAgAACAQAbmFtZRYAbWluZWNyYWZ0OndoaXRlX2NhbmRsZQQJAG5hbWVfaGFzaN1EG5Q1mHiEAwoAbmV0d29ya19pZKN1mmgKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:orange_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSdAgAACAQAbmFtZRcAbWluZWNyYWZ0Om9yYW5nZV9jYW5kbGUECQBuYW1lX2hhc2jySEVWHgUIHQMKAG5ldHdvcmtfaWSfVz82CgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:magenta_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hZ2VudGFfY2FuZGxlBAkAbmFtZV9oYXNoG0u6YIOoBSEDCgBuZXR3b3JrX2lk9xGNkQoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:light_blue_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSfAgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FuZGxlBAkAbmFtZV9oYXNocXGeK0zgrG0DCgBuZXR3b3JrX2lk2m1y8goGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:yellow_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAgAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19jYW5kbGUECQBuYW1lX2hhc2i00dtusU3CqQMKAG5ldHdvcmtfaWR9LTmpCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:lime_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAgAACAQAbmFtZRUAbWluZWNyYWZ0OmxpbWVfY2FuZGxlBAkAbmFtZV9oYXNokcmrw5xvz7ADCgBuZXR3b3JrX2lkIAUu6QoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:pink_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAgAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfY2FuZGxlBAkAbmFtZV9oYXNoQJdEY4sZ0dwDCgBuZXR3b3JrX2lk23Rn5AoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:gray_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAgAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXlfY2FuZGxlBAkAbmFtZV9oYXNoS5poSo9wBDEDCgBuZXR3b3JrX2lk3trRCAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:light_gray_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FuZGxlBAkAbmFtZV9oYXNo9ruTZLBNMasDCgBuZXR3b3JrX2lkb6DOegoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:cyan_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAgAACAQAbmFtZRUAbWluZWNyYWZ0OmN5YW5fY2FuZGxlBAkAbmFtZV9oYXNoc/M8PNVcjOwDCgBuZXR3b3JrX2lkZoIQOQoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:purple_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSmAgAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnBsZV9jYW5kbGUECQBuYW1lX2hhc2jaI3xUW0/myQMKAG5ldHdvcmtfaWSnLI2BCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:blue_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAgAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfY2FuZGxlBAkAbmFtZV9oYXNoAASSPW6TgQADCgBuZXR3b3JrX2lkrxrjQAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:brown_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJyb3duX2NhbmRsZQQJAG5hbWVfaGFzaDia0l6s1+WYAwoAbmV0d29ya19pZKSkBXYKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:green_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAgAACAQAbmFtZRYAbWluZWNyYWZ0OmdyZWVuX2NhbmRsZQQJAG5hbWVfaGFzaLeFPO1l+fIoAwoAbmV0d29ya19pZBkznDsKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:red_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9jYW5kbGUECQBuYW1lX2hhc2jjAQpGf59ZdwMKAG5ldHdvcmtfaWRbb88GCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:black_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJsYWNrX2NhbmRsZQQJAG5hbWVfaGFzaB+wRDpOqREKAwoAbmV0d29ya19pZNnOnuEKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:crafting_table", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6AAAACAQAbmFtZRgAbWluZWNyYWZ0OmNyYWZ0aW5nX3RhYmxlBAkAbmFtZV9oYXNoe76VAmjvbpYDCgBuZXR3b3JrX2lkwCxwaAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:cartography_table", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTHAQAACAQAbmFtZRsAbWluZWNyYWZ0OmNhcnRvZ3JhcGh5X3RhYmxlBAkAbmFtZV9oYXNomaWiiD/znP8DCgBuZXR3b3JrX2lkI6FzMwoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:fletching_table", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAQAACAQAbmFtZRkAbWluZWNyYWZ0OmZsZXRjaGluZ190YWJsZQQJAG5hbWVfaGFzaPFibh8unKyUAwoAbmV0d29ya19pZJ2mW0oKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:smithing_table", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAQAACAQAbmFtZRgAbWluZWNyYWZ0OnNtaXRoaW5nX3RhYmxlBAkAbmFtZV9oYXNo4tFES2xOXEYDCgBuZXR3b3JrX2lkXWMBzQoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:beehive", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAQAACAQAbmFtZREAbWluZWNyYWZ0OmJlZWhpdmUECQBuYW1lX2hhc2hCcqn12UbNpwMKAG5ldHdvcmtfaWR/idcaCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAMLAGhvbmV5X2xldmVsAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:suspicious_sand", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAwAACAQAbmFtZRkAbWluZWNyYWZ0OnN1c3BpY2lvdXNfc2FuZAQJAG5hbWVfaGFzaL67QsuvLP00AwoAbmV0d29ya19pZKnkaIAKBgBzdGF0ZXMDEABicnVzaGVkX3Byb2dyZXNzAAAAAAEHAGhhbmdpbmcBAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:suspicious_gravel", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AwAACAQAbmFtZRsAbWluZWNyYWZ0OnN1c3BpY2lvdXNfZ3JhdmVsBAkAbmFtZV9oYXNoJSVbGNk7C3oDCgBuZXR3b3JrX2lkvIEJAAoGAHN0YXRlcwMQAGJydXNoZWRfcHJvZ3Jlc3MAAAAAAQcAaGFuZ2luZwEAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:campfire" - }, - { - "id": "minecraft:soul_campfire" - }, - { - "id": "minecraft:furnace", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ9AAAACAQAbmFtZREAbWluZWNyYWZ0OmZ1cm5hY2UECQBuYW1lX2hhc2ioOQrludYY8wMKAG5ldHdvcmtfaWRZxnDOCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:blast_furnace", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTDAQAACAQAbmFtZRcAbWluZWNyYWZ0OmJsYXN0X2Z1cm5hY2UECQBuYW1lX2hhc2ivDbnjkpGm5QMKAG5ldHdvcmtfaWTcEbV/CgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:smoker", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAQAACAQAbmFtZRAAbWluZWNyYWZ0OnNtb2tlcgQJAG5hbWVfaGFzaJd1rDMkRWomAwoAbmV0d29ya19pZGWswMwKBgBzdGF0ZXMIHABtaW5lY3JhZnQ6Y2FyZGluYWxfZGlyZWN0aW9uBQBzb3V0aAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:respawn_anchor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJlc3Bhd25fYW5jaG9yBAkAbmFtZV9oYXNoZOdcjW05qigDCgBuZXR3b3JrX2lkmhMcaQoGAHN0YXRlcwMVAHJlc3Bhd25fYW5jaG9yX2NoYXJnZQAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:brewing_stand" - }, - { - "id": "minecraft:anvil", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lk8Z3VowoGAHN0YXRlcwgGAGRhbWFnZQkAdW5kYW1hZ2VkCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:anvil", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lkpiv8BAoGAHN0YXRlcwgGAGRhbWFnZRAAc2xpZ2h0bHlfZGFtYWdlZAgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:anvil", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lkFu+pdwoGAHN0YXRlcwgGAGRhbWFnZQwAdmVyeV9kYW1hZ2VkCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:grindstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTCAQAACAQAbmFtZRQAbWluZWNyYWZ0OmdyaW5kc3RvbmUECQBuYW1lX2hhc2id56zc0nk99wMKAG5ldHdvcmtfaWS4Es07CgYAc3RhdGVzCAoAYXR0YWNobWVudAgAc3RhbmRpbmcDCQBkaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:enchanting_table", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR0AAAACAQAbmFtZRoAbWluZWNyYWZ0OmVuY2hhbnRpbmdfdGFibGUECQBuYW1lX2hhc2jgIx24VLvMvwMKAG5ldHdvcmtfaWRliFFJCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:bookshelf", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAAAACAQAbmFtZRMAbWluZWNyYWZ0OmJvb2tzaGVsZgQJAG5hbWVfaGFzaDU04DrgJCS9AwoAbmV0d29ya19pZBcWwIwKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:chiseled_bookshelf", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAwAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX2Jvb2tzaGVsZgQJAG5hbWVfaGFzaNXDBnsIsywYAwoAbmV0d29ya19pZIprt5IKBgBzdGF0ZXMDDABib29rc19zdG9yZWQAAAAAAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:lectern", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTBAQAACAQAbmFtZREAbWluZWNyYWZ0OmxlY3Rlcm4ECQBuYW1lX2hhc2j5Z4Mmi/1QxAMKAG5ldHdvcmtfaWR4JfDHCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgBCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:cauldron" - }, - { - "id": "minecraft:composter", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAQAACAQAbmFtZRMAbWluZWNyYWZ0OmNvbXBvc3RlcgQJAG5hbWVfaGFzaPAADHptzeWJAwoAbmV0d29ya19pZHIL6i4KBgBzdGF0ZXMDFABjb21wb3N0ZXJfZmlsbF9sZXZlbAAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:chest", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2AAAACAQAbmFtZQ8AbWluZWNyYWZ0OmNoZXN0BAkAbmFtZV9oYXNog9ozMxlcA88DCgBuZXR3b3JrX2lkDkOFvAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:trapped_chest", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAAAACAQAbmFtZRcAbWluZWNyYWZ0OnRyYXBwZWRfY2hlc3QECQBuYW1lX2hhc2g2qpF9stsEjgMKAG5ldHdvcmtfaWTjJWYxCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAbm9ydGgAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:ender_chest", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAAAACAQAbmFtZRUAbWluZWNyYWZ0OmVuZGVyX2NoZXN0BAkAbmFtZV9oYXNohEZzOFdg0WUDCgBuZXR3b3JrX2lkx4jiSQoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:barrel", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhcnJlbAQJAG5hbWVfaGFzaHDkRPGymiRqAwoAbmV0d29ya19pZPnxzgsKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:undyed_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAAAACAQAbmFtZRwAbWluZWNyYWZ0OnVuZHllZF9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaOC9mypm/MlBAwoAbmV0d29ya19pZJ8rxp0KBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:white_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAAAACAQAbmFtZRsAbWluZWNyYWZ0OndoaXRlX3NodWxrZXJfYm94BAkAbmFtZV9oYXNosK79m1rPUBwDCgBuZXR3b3JrX2lkjrET6goGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:light_gray_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAwAACAQAbmFtZSAAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2iBe5zq7PxHmgMKAG5ldHdvcmtfaWSCVJv0CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:gray_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRqAwAACAQAbmFtZRoAbWluZWNyYWZ0OmdyYXlfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2ga2s8ctjHUhgMKAG5ldHdvcmtfaWS3WMsWCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:black_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRyAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJsYWNrX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoPm03OZphrp8DCgBuZXR3b3JrX2lkXHztNAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:brown_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRvAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJyb3duX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoT3DD6qAL9cADCgBuZXR3b3JrX2lkaXxpYQoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:red_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRxAwAACAQAbmFtZRkAbWluZWNyYWZ0OnJlZF9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaMIlKSCzqSZoAwoAbmV0d29ya19pZNrf+icKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:orange_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAwAACAQAbmFtZRwAbWluZWNyYWZ0Om9yYW5nZV9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaG2MAXU67wGrAwoAbmV0d29ya19pZGoO05gKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:yellow_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRnAwAACAQAbmFtZRwAbWluZWNyYWZ0OnllbGxvd19zaHVsa2VyX2JveAQJAG5hbWVfaGFzaIsLwQHYjcIEAwoAbmV0d29ya19pZBCBSiYKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:lime_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRoAwAACAQAbmFtZRoAbWluZWNyYWZ0OmxpbWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2hUwBkg+faUGAMKAG5ldHdvcmtfaWRJeKqqCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:green_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRwAwAACAQAbmFtZRsAbWluZWNyYWZ0OmdyZWVuX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoZgUeT3LupLUDCgBuZXR3b3JrX2lkzJiohQoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:cyan_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAwAACAQAbmFtZRoAbWluZWNyYWZ0OmN5YW5fc2h1bGtlcl9ib3gECQBuYW1lX2hhc2gSfbjteXg5yAMKAG5ldHdvcmtfaWTHeliECgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:light_blue_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAwAACAQAbmFtZSAAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2h0VFCX0qsRxQMKAG5ldHdvcmtfaWQXD8U0CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:blue_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJsdWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2hn9gS0XIe6rAMKAG5ldHdvcmtfaWTO4PJaCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:purple_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAwAACAQAbmFtZRwAbWluZWNyYWZ0OnB1cnBsZV9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaEV/lkNPxRDdAwoAbmV0d29ya19pZFK25GAKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:magenta_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAwAACAQAbmFtZR0AbWluZWNyYWZ0Om1hZ2VudGFfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2iqWM7IJHxcFgMKAG5ldHdvcmtfaWTyyudTCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:pink_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRpAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBpbmtfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2in1tkJ1GNcZgMKAG5ldHdvcmtfaWQOEGXjCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:armor_stand" - }, - { - "id": "minecraft:noteblock", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAAAACAQAbmFtZRMAbWluZWNyYWZ0Om5vdGVibG9jawQJAG5hbWVfaGFzaHPA8dBBH0UaAwoAbmV0d29ya19pZH1U5QkKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:jukebox", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAAAACAQAbmFtZREAbWluZWNyYWZ0Omp1a2Vib3gECQBuYW1lX2hhc2ieAIPExf/ZfgMKAG5ldHdvcmtfaWSmR7JfCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "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:music_disc_creator" - }, - { - "id": "minecraft:music_disc_creator_music_box" - }, - { - "id": "minecraft:music_disc_precipice" - }, - { - "id": "minecraft:disc_fragment_5" - }, - { - "id": "minecraft:glowstone_dust" - }, - { - "id": "minecraft:glowstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRZAAAACAQAbmFtZRMAbWluZWNyYWZ0Omdsb3dzdG9uZQQJAG5hbWVfaGFzaFYqXNkefIlPAwoAbmV0d29ya19pZGT7WYYKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:redstone_lamp", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZHN0b25lX2xhbXAECQBuYW1lX2hhc2hJ9V80caPvEgMKAG5ldHdvcmtfaWRvNPwnCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:sea_lantern", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAAAACAQAbmFtZRUAbWluZWNyYWZ0OnNlYV9sYW50ZXJuBAkAbmFtZV9oYXNoLPsv1TX9M+QDCgBuZXR3b3JrX2lk1PPVyAoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "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": "CgAAAwgAYmxvY2tfaWSKAAAACAQAbmFtZRAAbWluZWNyYWZ0OmJlYWNvbgQJAG5hbWVfaGFzaACwhhfSkdkHAwoAbmV0d29ya19pZF8jfiEKBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:bell", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAQAACAQAbmFtZQ4AbWluZWNyYWZ0OmJlbGwECQBuYW1lX2hhc2iPqsgDXRcsxAMKAG5ldHdvcmtfaWT7zhOoCgYAc3RhdGVzCAoAYXR0YWNobWVudAgAc3RhbmRpbmcDCQBkaXJlY3Rpb24AAAAAAQoAdG9nZ2xlX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:conduit", - "block_state_b64": "CgAAAwgAYmxvY2tfaWScAQAACAQAbmFtZREAbWluZWNyYWZ0OmNvbmR1aXQECQBuYW1lX2hhc2jqxKAxq2EaWQMKAG5ldHdvcmtfaWTWcBVnCgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:stonecutter_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lY3V0dGVyX2Jsb2NrBAkAbmFtZV9oYXNoQAXTbAM3MeYDCgBuZXR3b3JrX2lkWS4RjAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24DABUBAA==" - }, - { - "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:armadillo_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:breeze_rod" - }, - { - "id": "minecraft:heavy_core", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ7AgAACAQAbmFtZRQAbWluZWNyYWZ0OmhlYXZ5X2NvcmUECQBuYW1lX2hhc2hhz/uNCtrC2QMKAG5ldHdvcmtfaWRaFu+8CgYAc3RhdGVzAAMHAHZlcnNpb24DABUBAA==" - }, - { - "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/q5cEA0hmQMKAG5ldHdvcmtfaWQ2eM8kCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:lightning_rod", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ3AgAACAQAbmFtZRcAbWluZWNyYWZ0OmxpZ2h0bmluZ19yb2QECQBuYW1lX2hhc2ioXQF1xvfHNQMKAG5ldHdvcmtfaWRLuHyACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:end_crystal" - }, - { - "id": "minecraft:paper" - }, - { - "id": "minecraft:book" - }, - { - "id": "minecraft:writable_book" - }, - { - "id": "minecraft:trial_key" - }, - { - "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:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQmAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQmAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQmAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQnAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQnAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQnAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQnAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQnAAIDAGx2bAUAAAA=" - }, - { - "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": "CgAACQQAZW5jaAoBAAAAAgIAaWQoAAIDAGx2bAQAAAA=" - }, - { - "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": "CgAAAwgAYmxvY2tfaWRCAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnJhaWwECQBuYW1lX2hhc2hUzmhUXYJDUQMKAG5ldHdvcmtfaWR+Sp6YCgYAc3RhdGVzAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:golden_rail", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQbAAAACAQAbmFtZRUAbWluZWNyYWZ0OmdvbGRlbl9yYWlsBAkAbmFtZV9oYXNoOoV5MaKipoUDCgBuZXR3b3JrX2lkfAcxLwoGAHN0YXRlcwENAHJhaWxfZGF0YV9iaXQAAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:detector_rail", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQcAAAACAQAbmFtZRcAbWluZWNyYWZ0OmRldGVjdG9yX3JhaWwECQBuYW1lX2hhc2gVUk31qOysUQMKAG5ldHdvcmtfaWRVW/aICgYAc3RhdGVzAQ0AcmFpbF9kYXRhX2JpdAADDgByYWlsX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:activator_rail", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AAAACAQAbmFtZRgAbWluZWNyYWZ0OmFjdGl2YXRvcl9yYWlsBAkAbmFtZV9oYXNosIL91qriCRkDCgBuZXR3b3JrX2lkZfckmwoGAHN0YXRlcwENAHJhaWxfZGF0YV9iaXQAAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "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": "CgAAAwgAYmxvY2tfaWSYAAAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZHN0b25lX2Jsb2NrBAkAbmFtZV9oYXNoRhULL0r8o0sDCgBuZXR3b3JrX2lklayOHgoGAHN0YXRlcwADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:redstone_torch", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAAAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZHN0b25lX3RvcmNoBAkAbmFtZV9oYXNoizFRjpYMIDgDCgBuZXR3b3JrX2lkuHz7yAoGAHN0YXRlcwgWAHRvcmNoX2ZhY2luZ19kaXJlY3Rpb24HAHVua25vd24AAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:lever", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmxldmVyBAkAbmFtZV9oYXNoGMJeLJsUMLYDCgBuZXR3b3JrX2lkEF/GuAoGAHN0YXRlcwgPAGxldmVyX2RpcmVjdGlvbg4AZG93bl9lYXN0X3dlc3QBCABvcGVuX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:wooden_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAAAACAQAbmFtZRcAbWluZWNyYWZ0Ondvb2Rlbl9idXR0b24ECQBuYW1lX2hhc2hR7PgSTQt0sQMKAG5ldHdvcmtfaWSU07kYCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:spruce_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAQAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9idXR0b24ECQBuYW1lX2hhc2jBW9Z8aYE7YQMKAG5ldHdvcmtfaWTkUIGuCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:birch_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSMAQAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX2J1dHRvbgQJAG5hbWVfaGFzaJXYgGuSHbTwAwoAbmV0d29ya19pZGWp3yoKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:jungle_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSOAQAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9idXR0b24ECQBuYW1lX2hhc2iCgNANcJs+BQMKAG5ldHdvcmtfaWT9fImWCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:acacia_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAQAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9idXR0b24ECQBuYW1lX2hhc2gVvmcT7LTO0wMKAG5ldHdvcmtfaWRQnxIJCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:dark_oak_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSNAQAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX2J1dHRvbgQJAG5hbWVfaGFzaIV10ZGGrCIEAwoAbmV0d29ya19pZN5vAmIKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:mangrove_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX2J1dHRvbgQJAG5hbWVfaGFzaNzeYYKLgOzJAwoAbmV0d29ya19pZAFEGQ0KBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:cherry_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9idXR0b24ECQBuYW1lX2hhc2j2/IHjeAbUcwMKAG5ldHdvcmtfaWRJ1irQCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:bamboo_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT+AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19idXR0b24ECQBuYW1lX2hhc2j7AddMi+6nsgMKAG5ldHdvcmtfaWSa9w4/CgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:stone_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAAAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX2J1dHRvbgQJAG5hbWVfaGFzaM4ejMctmvohAwoAbmV0d29ya19pZMw+aC0KBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:crimson_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fYnV0dG9uBAkAbmFtZV9oYXNofnjYHaYIeWgDCgBuZXR3b3JrX2lk+n1vyQoGAHN0YXRlcwESAGJ1dHRvbl9wcmVzc2VkX2JpdAADEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:warped_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9idXR0b24ECQBuYW1lX2hhc2jwkV2EU6Cn1QMKAG5ldHdvcmtfaWTnHnk1CgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:polished_blackstone_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQnAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnV0dG9uBAkAbmFtZV9oYXNojmxzQKS0S/EDCgBuZXR3b3JrX2lkDtQ95woGAHN0YXRlcwESAGJ1dHRvbl9wcmVzc2VkX2JpdAADEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:tripwire_hook", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAAAACAQAbmFtZRcAbWluZWNyYWZ0OnRyaXB3aXJlX2hvb2sECQBuYW1lX2hhc2gQdp+oGZLNnAMKAG5ldHdvcmtfaWSy+1KJCgYAc3RhdGVzAQwAYXR0YWNoZWRfYml0AAMJAGRpcmVjdGlvbgAAAAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:wooden_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAAAACAQAbmFtZR8AbWluZWNyYWZ0Ondvb2Rlbl9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaGkGs5kCuA74AwoAbmV0d29ya19pZDRzPNwKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:spruce_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAQAACAQAbmFtZR8AbWluZWNyYWZ0OnNwcnVjZV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaNmwuq549fJKAwoAbmV0d29ya19pZLQMCw0KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:birch_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSWAQAACAQAbmFtZR4AbWluZWNyYWZ0OmJpcmNoX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNorQkT9kDdlTwDCgBuZXR3b3JrX2lkH0G97AoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:jungle_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSYAQAACAQAbmFtZR8AbWluZWNyYWZ0Omp1bmdsZV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaJ7DcteCkb8/AwoAbmV0d29ya19pZLdPBSAKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:acacia_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSVAQAACAQAbmFtZR8AbWluZWNyYWZ0OmFjYWNpYV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaC2frZtfoYqCAwoAbmV0d29ya19pZIDdI18KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:dark_oak_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAQAACAQAbmFtZSEAbWluZWNyYWZ0OmRhcmtfb2FrX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoHUCJsTy52pwDCgBuZXR3b3JrX2lkKpi8rAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:mangrove_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAgAACAQAbmFtZSEAbWluZWNyYWZ0Om1hbmdyb3ZlX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoiDsTfJaX100DCgBuZXR3b3JrX2lkuwWDyQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:cherry_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAwAACAQAbmFtZR8AbWluZWNyYWZ0OmNoZXJyeV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaALMqYEZDUQHAwoAbmV0d29ya19pZPNT+r0KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:bamboo_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJhbWJvb19wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaNvxJ7NIAaqlAwoAbmV0d29ya19pZIZ8XnYKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:crimson_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAgAACAQAbmFtZSAAbWluZWNyYWZ0OmNyaW1zb25fcHJlc3N1cmVfcGxhdGUECQBuYW1lX2hhc2hqBDVDAd31/gMKAG5ldHdvcmtfaWRmV18LCgYAc3RhdGVzAw8AcmVkc3RvbmVfc2lnbmFsAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:warped_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAgAACAQAbmFtZR8AbWluZWNyYWZ0OndhcnBlZF9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaBxFoQksWtYUAwoAbmV0d29ya19pZJVRoIcKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:stone_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0b25lX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNounJuTBUTrU8DCgBuZXR3b3JrX2lkjDydwQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:light_weighted_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSTAAAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X3dlaWdodGVkX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoOyOJkNxLtkEDCgBuZXR3b3JrX2lkrr2AjgoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:heavy_weighted_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAAAACAQAbmFtZScAbWluZWNyYWZ0OmhlYXZ5X3dlaWdodGVkX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoltgDmDvTajUDCgBuZXR3b3JrX2lkFxVKuQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:polished_blackstone_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAgAACAQAbmFtZSwAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfcHJlc3N1cmVfcGxhdGUECQBuYW1lX2hhc2h65Ci6/CeGqwMKAG5ldHdvcmtfaWTaSW5xCgYAc3RhdGVzAw8AcmVkc3RvbmVfc2lnbmFsAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:observer", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT7AAAACAQAbmFtZRIAbWluZWNyYWZ0Om9ic2VydmVyBAkAbmFtZV9oYXNoYhlh1lpmHTgDCgBuZXR3b3JrX2lkQEh55goGAHN0YXRlcwgaAG1pbmVjcmFmdDpmYWNpbmdfZGlyZWN0aW9uBABkb3duAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:daylight_detector", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAAAACAQAbmFtZRsAbWluZWNyYWZ0OmRheWxpZ2h0X2RldGVjdG9yBAkAbmFtZV9oYXNoV0F0s7B7PVgDCgBuZXR3b3JrX2lkri5afQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:repeater" - }, - { - "id": "minecraft:comparator" - }, - { - "id": "minecraft:hopper" - }, - { - "id": "minecraft:dropper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AAAACAQAbmFtZREAbWluZWNyYWZ0OmRyb3BwZXIECQBuYW1lX2hhc2joXP7XqU0l3QMKAG5ldHdvcmtfaWQfQN6zCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgMAAAABDQB0cmlnZ2VyZWRfYml0AAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:dispenser", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAAAACAQAbmFtZRMAbWluZWNyYWZ0OmRpc3BlbnNlcgQJAG5hbWVfaGFzaP1RR+zAbYP2AwoAbmV0d29ya19pZGAayD0KBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAwAAAAENAHRyaWdnZXJlZF9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:crafter", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4AgAACAQAbmFtZREAbWluZWNyYWZ0OmNyYWZ0ZXIECQBuYW1lX2hhc2iLCT/rJmRN8QMKAG5ldHdvcmtfaWTPTbvrCgYAc3RhdGVzAQgAY3JhZnRpbmcACAsAb3JpZW50YXRpb24JAGRvd25fZWFzdAENAHRyaWdnZXJlZF9iaXQAAAMHAHZlcnNpb24DABUBAA==" - }, - { - "id": "minecraft:piston", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQhAAAACAQAbmFtZRAAbWluZWNyYWZ0OnBpc3RvbgQJAG5hbWVfaGFzaDs3AFh1fL0uAwoAbmV0d29ya19pZLD/5XQKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAQAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:sticky_piston", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQdAAAACAQAbmFtZRcAbWluZWNyYWZ0OnN0aWNreV9waXN0b24ECQBuYW1lX2hhc2hPFJFJSiJ0ZQMKAG5ldHdvcmtfaWT/MzCJCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgEAAAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:tnt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAAAACAQAbmFtZQ0AbWluZWNyYWZ0OnRudAQJAG5hbWVfaGFzaEYOHwCvJH29AwoAbmV0d29ya19pZCGfjU4KBgBzdGF0ZXMBFABhbGxvd191bmRlcndhdGVyX2JpdAABCwBleHBsb2RlX2JpdAAAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:name_tag" - }, - { - "id": "minecraft:loom", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAQAACAQAbmFtZQ4AbWluZWNyYWZ0Omxvb20ECQBuYW1lX2hhc2i7DKjAXNq8TAMKAG5ldHdvcmtfaWR/49HXCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:banner", - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 8, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 7, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 15, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 12, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 14, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 1, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 4, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 5, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 13, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 9, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 3, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 11, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 10, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 2, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 6, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "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:flow_banner_pattern" - }, - { - "id": "minecraft:guster_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:flow_pottery_sherd" - }, - { - "id": "minecraft:friend_pottery_sherd" - }, - { - "id": "minecraft:guster_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:scrape_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:flow_armor_trim_smithing_template" - }, - { - "id": "minecraft:bolt_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": "CgAAAwgAYmxvY2tfaWTuAQAACAQAbmFtZRAAbWluZWNyYWZ0OnRhcmdldAQJAG5hbWVfaGFzaJc66SVbYlaxAwoAbmV0d29ya19pZPBozs0KBgBzdGF0ZXMAAwcAdmVyc2lvbgMAFQEA" - }, - { - "id": "minecraft:decorated_pot", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAwAACAQAbmFtZRcAbWluZWNyYWZ0OmRlY29yYXRlZF9wb3QECQBuYW1lX2hhc2jjQgckn8VTvwMKAG5ldHdvcmtfaWRwvkUUCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAwAVAQA=" - }, - { - "id": "minecraft:lodestone_compass" - }, - { - "id": "minecraft:wither_spawn_egg" - }, - { - "id": "minecraft:ender_dragon_spawn_egg" - }, - { - "id": "minecraft:ominous_trial_key" - } - ] -} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/creative_items.1_21_20.json b/core/src/main/resources/bedrock/creative_items.1_21_20.json deleted file mode 100644 index ce008aa44..000000000 --- a/core/src/main/resources/bedrock/creative_items.1_21_20.json +++ /dev/null @@ -1,6214 +0,0 @@ -{ - "items": [ - { - "id": "minecraft:oak_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19wbGFua3MECQBuYW1lX2hhc2ilMDLR92rQ4wMKAG5ldHdvcmtfaWS2GotyCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:spruce_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAwAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9wbGFua3MECQBuYW1lX2hhc2iumBkmFGFE8gMKAG5ldHdvcmtfaWSo8TFgCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:birch_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX3BsYW5rcwQJAG5hbWVfaGFzaLrrAKJqV2WFAwoAbmV0d29ya19pZL+e3ZAKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:jungle_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAwAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9wbGFua3MECQBuYW1lX2hhc2iBM3k4T3FAugMKAG5ldHdvcmtfaWSXUmBCCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:acacia_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAwAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9wbGFua3MECQBuYW1lX2hhc2g60edJxO5/aAMKAG5ldHdvcmtfaWTUXozECgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:dark_oak_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX3BsYW5rcwQJAG5hbWVfaGFzaAr64wkQ9cA7AwoAbmV0d29ya19pZFbMeR0KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:mangrove_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX3BsYW5rcwQJAG5hbWVfaGFzaPvLtcEA0F8xAwoAbmV0d29ya19pZEvnlCYKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:cherry_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9wbGFua3MECQBuYW1lX2hhc2hNIvVh/lVW7gMKAG5ldHdvcmtfaWQTXpRoCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:bamboo_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT9AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19wbGFua3MECQBuYW1lX2hhc2gYnjNz7SCCjgMKAG5ldHdvcmtfaWTi8ySSCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:bamboo_mosaic", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT8AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19tb3NhaWMECQBuYW1lX2hhc2izSEgiMKOp/AMKAG5ldHdvcmtfaWQZ/p8xCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:crimson_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fcGxhbmtzBAkAbmFtZV9oYXNoJc5IKqNXJnwDCgBuZXR3b3JrX2lkwtJDdQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:warped_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTyAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9wbGFua3MECQBuYW1lX2hhc2g3yGXEWhe6LgMKAG5ldHdvcmtfaWStTABvCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWSE4JosCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCwBjb2JibGVzdG9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWTUvV6XCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlEQBtb3NzeV9jb2JibGVzdG9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWT4opb2CgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlBwBncmFuaXRlCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWQAMQTVCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlBwBkaW9yaXRlCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWQIbDOcCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCABhbmRlc2l0ZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWSZKhusCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCQBzYW5kc3RvbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWSp4zgCCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlDQByZWRfc2FuZHN0b25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRbqVHTCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCwBzdG9uZV9icmljawgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRr0ZT/CgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlEQBtb3NzeV9zdG9uZV9icmljawgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRnLis3CgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlBQBicmljawgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWQNLzfSCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlDABuZXRoZXJfYnJpY2sIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWQ5h0xwCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlEAByZWRfbmV0aGVyX2JyaWNrCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWS9J0B2CgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCQBlbmRfYnJpY2sIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRPbkJeCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCgBwcmlzbWFyaW5lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:blackstone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsYWNrc3RvbmVfd2FsbAQJAG5hbWVfaGFzaMP8XppUSU1RAwoAbmV0d29ya19pZMbeBBsKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:polished_blackstone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfd2FsbAQJAG5hbWVfaGFzaP6SwV08YwzAAwoAbmV0d29ya19pZAJLsz8KBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:polished_blackstone_brick_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQVAgAACAQAbmFtZSgAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfd2FsbAQJAG5hbWVfaGFzaBBIDZbHxiEzAwoAbmV0d29ya19pZEbLV8cKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:cobbled_deepslate_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AgAACAQAbmFtZSAAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3dhbGwECQBuYW1lX2hhc2iECY5oKxeT+gMKAG5ldHdvcmtfaWRCnPrFCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:deepslate_tile_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3dhbGwECQBuYW1lX2hhc2jz7N+PeuEXgQMKAG5ldHdvcmtfaWTqw4s4CgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:polished_deepslate_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV93YWxsBAkAbmFtZV9oYXNoHxjTdj9pevMDCgBuZXR3b3JrX2lkIvBYYwoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:deepslate_brick_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSJAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja193YWxsBAkAbmFtZV9oYXNoEs3EQrjroyEDCgBuZXR3b3JrX2lkwlrCGwoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:mud_brick_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAgAACAQAbmFtZRgAbWluZWNyYWZ0Om11ZF9icmlja193YWxsBAkAbmFtZV9oYXNov9b98ATpUSwDCgBuZXR3b3JrX2lkH/1WZQoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:oak_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAAAACAQAbmFtZRMAbWluZWNyYWZ0Om9ha19mZW5jZQQJAG5hbWVfaGFzaGEmid7AaCWRAwoAbmV0d29ya19pZDvPEXcKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:spruce_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRCAwAACAQAbmFtZRYAbWluZWNyYWZ0OnNwcnVjZV9mZW5jZQQJAG5hbWVfaGFzaPQCm+aX1ZQeAwoAbmV0d29ya19pZD1QUEoKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:birch_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ/AwAACAQAbmFtZRUAbWluZWNyYWZ0OmJpcmNoX2ZlbmNlBAkAbmFtZV9oYXNo6CJ2ATpANfgDCgBuZXR3b3JrX2lkmCUV2QoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:jungle_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRBAwAACAQAbmFtZRYAbWluZWNyYWZ0Omp1bmdsZV9mZW5jZQQJAG5hbWVfaGFzaOX4cD9uAmsdAwoAbmV0d29ya19pZHz1VxkKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:acacia_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ+AwAACAQAbmFtZRYAbWluZWNyYWZ0OmFjYWNpYV9mZW5jZQQJAG5hbWVfaGFzaGjn+RlKVDH6AwoAbmV0d29ya19pZNVGubwKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:dark_oak_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRAAwAACAQAbmFtZRgAbWluZWNyYWZ0OmRhcmtfb2FrX2ZlbmNlBAkAbmFtZV9oYXNoGPj0gCgM0c0DCgBuZXR3b3JrX2lk2w+gEwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:mangrove_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hbmdyb3ZlX2ZlbmNlBAkAbmFtZV9oYXNowwAd7tPu9bsDCgBuZXR3b3JrX2lkKEcd0goGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:cherry_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAwAACAQAbmFtZRYAbWluZWNyYWZ0OmNoZXJyeV9mZW5jZQQJAG5hbWVfaGFzaFmtUfHfTxcxAwoAbmV0d29ya19pZPCBxAIKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:bamboo_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJhbWJvb19mZW5jZQQJAG5hbWVfaGFzaCKRbxfXsfkiAwoAbmV0d29ya19pZJNXKFcKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:nether_brick_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRxAAAACAQAbmFtZRwAbWluZWNyYWZ0Om5ldGhlcl9icmlja19mZW5jZQQJAG5hbWVfaGFzaA6030ngawxcAwoAbmV0d29ya19pZLnjLF4KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:crimson_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT/AQAACAQAbmFtZRcAbWluZWNyYWZ0OmNyaW1zb25fZmVuY2UECQBuYW1lX2hhc2jhUhKv1HGj9AMKAG5ldHdvcmtfaWR3OH3OCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:warped_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQAAgAACAQAbmFtZRYAbWluZWNyYWZ0OndhcnBlZF9mZW5jZQQJAG5hbWVfaGFzaJfb3/YuKmOWAwoAbmV0d29ya19pZCpaGC8KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAAAACAQAbmFtZRQAbWluZWNyYWZ0OmZlbmNlX2dhdGUECQBuYW1lX2hhc2hTxpjEDmRzAwMKAG5ldHdvcmtfaWR+T9kTCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:spruce_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS3AAAACAQAbmFtZRsAbWluZWNyYWZ0OnNwcnVjZV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoanTVB84HRbkDCgBuZXR3b3JrX2lkEnw5egoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:birch_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS4AAAACAQAbmFtZRoAbWluZWNyYWZ0OmJpcmNoX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2jmfPklI8azSwMKAG5ldHdvcmtfaWQL77/BCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:jungle_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS5AAAACAQAbmFtZRsAbWluZWNyYWZ0Omp1bmdsZV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNobYVQkfBomIcDCgBuZXR3b3JrX2lkA1zgtgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:acacia_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS7AAAACAQAbmFtZRsAbWluZWNyYWZ0OmFjYWNpYV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoZnrLUx/XSekDCgBuZXR3b3JrX2lkHg/kTgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:dark_oak_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS6AAAACAQAbmFtZR0AbWluZWNyYWZ0OmRhcmtfb2FrX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2j2PTvdJJHcVQMKAG5ldHdvcmtfaWTwjOCeCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:mangrove_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAgAACAQAbmFtZR0AbWluZWNyYWZ0Om1hbmdyb3ZlX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2i/kOhBKiI/dAMKAG5ldHdvcmtfaWSfweCSCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:cherry_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAwAACAQAbmFtZRsAbWluZWNyYWZ0OmNoZXJyeV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoKWLgCk0z+PsDCgBuZXR3b3JrX2lk/9bTZQoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:bamboo_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJhbWJvb19mZW5jZV9nYXRlBAkAbmFtZV9oYXNopH1JrUgwdIADCgBuZXR3b3JrX2lkzIpPywoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:crimson_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAgAACAQAbmFtZRwAbWluZWNyYWZ0OmNyaW1zb25fZmVuY2VfZ2F0ZQQJAG5hbWVfaGFzaHE3Gfd0Z2d2AwoAbmV0d29ya19pZDQzVbEKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQsAaW5fd2FsbF9iaXQAAQgAb3Blbl9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:warped_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAgAACAQAbmFtZRsAbWluZWNyYWZ0OndhcnBlZF9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoy0oIBjDIG4kDCgBuZXR3b3JrX2lkkf+/3QoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:normal_stone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAQAACAQAbmFtZR0AbWluZWNyYWZ0Om5vcm1hbF9zdG9uZV9zdGFpcnMECQBuYW1lX2hhc2hAEktZZOkGIwMKAG5ldHdvcmtfaWQeH1ALCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:stone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAAAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX3N0YWlycwQJAG5hbWVfaGFzaNRjqVC5GRVDAwoAbmV0d29ya19pZDcCv+MKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:mossy_cobblestone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSyAQAACAQAbmFtZSIAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lX3N0YWlycwQJAG5hbWVfaGFzaMVSTq5z9n1RAwoAbmV0d29ya19pZFIfrhkKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:oak_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ1AAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19zdGFpcnMECQBuYW1lX2hhc2jk/HFzdXy0FQMKAG5ldHdvcmtfaWQJjyzBCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:spruce_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAAAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9zdGFpcnMECQBuYW1lX2hhc2iznygw7uBPBQMKAG5ldHdvcmtfaWTv+is3CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:birch_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAAAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX3N0YWlycwQJAG5hbWVfaGFzaPfhbL619a3GAwoAbmV0d29ya19pZFyPlHAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:jungle_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAAAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9zdGFpcnMECQBuYW1lX2hhc2jodJsHUbOVxQMKAG5ldHdvcmtfaWR0z5d4CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:acacia_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAAAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9zdGFpcnMECQBuYW1lX2hhc2h3x1NmD43IqQMKAG5ldHdvcmtfaWS7Jwz6CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:dark_oak_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAAAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX3N0YWlycwQJAG5hbWVfaGFzaMfwkbYPbNmAAwoAbmV0d29ya19pZCmBYKAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:mangrove_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX3N0YWlycwQJAG5hbWVfaGFzaNpUDY+uGMpyAwoAbmV0d29ya19pZChzUAsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:cherry_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQcAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9zdGFpcnMECQBuYW1lX2hhc2jMtr0v9JY4zwMKAG5ldHdvcmtfaWRQwq31CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:bamboo_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT/AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19zdGFpcnMECQBuYW1lX2hhc2jFOzWL8PalKwMKAG5ldHdvcmtfaWTVPh42CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:bamboo_mosaic_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQKAwAACAQAbmFtZR4AbWluZWNyYWZ0OmJhbWJvb19tb3NhaWNfc3RhaXJzBAkAbmFtZV9oYXNoNLPiveSHPaoDCgBuZXR3b3JrX2lk44PHjgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:stone_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAAAACAQAbmFtZRwAbWluZWNyYWZ0OnN0b25lX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaN6tQViRo5cwAwoAbmV0d29ya19pZDMyMgIKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:mossy_stone_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAQAACAQAbmFtZSIAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaIB/Zv5YBPuYAwoAbmV0d29ya19pZANTOsMKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:sandstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAAAACAQAbmFtZRoAbWluZWNyYWZ0OnNhbmRzdG9uZV9zdGFpcnMECQBuYW1lX2hhc2hOyA0BoYUOPQMKAG5ldHdvcmtfaWSV/834CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:smooth_sandstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSwAQAACAQAbmFtZSEAbWluZWNyYWZ0OnNtb290aF9zYW5kc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNoB+CuCd8Ruz8DCgBuZXR3b3JrX2lksR+m8QoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:red_sandstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS0AAAACAQAbmFtZR4AbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNoPs0LpHPL24YDCgBuZXR3b3JrX2lkLYVt3woGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:smooth_red_sandstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAQAACAQAbmFtZSUAbWluZWNyYWZ0OnNtb290aF9yZWRfc2FuZHN0b25lX3N0YWlycwQJAG5hbWVfaGFzaBvjtQv5pf+MAwoAbmV0d29ya19pZMHNND8KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:granite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAQAACAQAbmFtZRgAbWluZWNyYWZ0OmdyYW5pdGVfc3RhaXJzBAkAbmFtZV9oYXNoGzpvtoqKQjgDCgBuZXR3b3JrX2lkPkcB1goGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:polished_granite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAQAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGVfc3RhaXJzBAkAbmFtZV9oYXNo3PvbSfEQklIDCgBuZXR3b3JrX2lkMmEm3AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:diorite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAQAACAQAbmFtZRgAbWluZWNyYWZ0OmRpb3JpdGVfc3RhaXJzBAkAbmFtZV9oYXNoi73T8VQuZmcDCgBuZXR3b3JrX2lk6i6nBQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:polished_diorite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAQAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGVfc3RhaXJzBAkAbmFtZV9oYXNoFKRJd5Wk5L0DCgBuZXR3b3JrX2lkbt2ioAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:andesite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAQAACAQAbmFtZRkAbWluZWNyYWZ0OmFuZGVzaXRlX3N0YWlycwQJAG5hbWVfaGFzaO5w2FKBw76EAwoAbmV0d29ya19pZKhXEgUKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:polished_andesite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWStAQAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlX3N0YWlycwQJAG5hbWVfaGFzaNcZZ/zmLInIAwoAbmV0d29ya19pZJTHrlEKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAAAACAQAbmFtZRYAbWluZWNyYWZ0OmJyaWNrX3N0YWlycwQJAG5hbWVfaGFzaMyt+cRDk5O2AwoAbmV0d29ya19pZNeMh58KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:nether_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRyAAAACAQAbmFtZR0AbWluZWNyYWZ0Om5ldGhlcl9icmlja19zdGFpcnMECQBuYW1lX2hhc2jRqIoOXgifBAMKAG5ldHdvcmtfaWQDiw5yCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:red_nether_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS3AQAACAQAbmFtZSEAbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNogQvosSbcj7kDCgBuZXR3b3JrX2lkx2IMtAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:end_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSxAQAACAQAbmFtZRoAbWluZWNyYWZ0OmVuZF9icmlja19zdGFpcnMECQBuYW1lX2hhc2hmlAk+QhsUsQMKAG5ldHdvcmtfaWTN7KFaCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:quartz_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWScAAAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9zdGFpcnMECQBuYW1lX2hhc2hmvpvOqGi6egMKAG5ldHdvcmtfaWRmUTh7CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:smooth_quartz_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS4AQAACAQAbmFtZR4AbWluZWNyYWZ0OnNtb290aF9xdWFydHpfc3RhaXJzBAkAbmFtZV9oYXNoNZZ9rX0qZOsDCgBuZXR3b3JrX2lkzsgQyQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:purpur_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAAAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnB1cl9zdGFpcnMECQBuYW1lX2hhc2ifwDxeezXD7gMKAG5ldHdvcmtfaWTT+rxiCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:prismarine_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAQAACAQAbmFtZRsAbWluZWNyYWZ0OnByaXNtYXJpbmVfc3RhaXJzBAkAbmFtZV9oYXNooTHSZ+IrYtcDCgBuZXR3b3JrX2lkxTJfeAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:dark_prismarine_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAQAACAQAbmFtZSAAbWluZWNyYWZ0OmRhcmtfcHJpc21hcmluZV9zdGFpcnMECQBuYW1lX2hhc2hIciLmam4o4AMKAG5ldHdvcmtfaWTVu7TCCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:prismarine_bricks_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAQAACAQAbmFtZSIAbWluZWNyYWZ0OnByaXNtYXJpbmVfYnJpY2tzX3N0YWlycwQJAG5hbWVfaGFzaNIjq1oBlZMMAwoAbmV0d29ya19pZGEFwLYKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:crimson_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT9AQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fc3RhaXJzBAkAbmFtZV9oYXNoZJqIzCBpCq4DCgBuZXR3b3JrX2lktXE00AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:warped_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT+AQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9zdGFpcnMECQBuYW1lX2hhc2hOkY27jLD4RQMKAG5ldHdvcmtfaWQ+E5VrCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:blackstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAgAACAQAbmFtZRsAbWluZWNyYWZ0OmJsYWNrc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNokdoUb76p9McDCgBuZXR3b3JrX2lk5fWI5goGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:polished_blackstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNolCFtFIE8MmADCgBuZXR3b3JrX2lkGTf7sgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:polished_blackstone_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQSAgAACAQAbmFtZSoAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNonks6UlfpOmkDCgBuZXR3b3JrX2lkgYeOdAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAgAACAQAbmFtZRsAbWluZWNyYWZ0OmN1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoHfoAXYq5G3MDCgBuZXR3b3JrX2lkeetf7woGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:exposed_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAgAACAQAbmFtZSMAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcl9zdGFpcnMECQBuYW1lX2hhc2howneQGtZ9cgMKAG5ldHdvcmtfaWSg73zdCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:weathered_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAgAACAQAbmFtZSUAbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyX3N0YWlycwQJAG5hbWVfaGFzaP+R5loXxrVgAwoAbmV0d29ya19pZOnbRf4KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:oxidized_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAgAACAQAbmFtZSQAbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNo6Jeoq5rsPxsDCgBuZXR3b3JrX2lkmRjDnQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:waxed_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAgAACAQAbmFtZSEAbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoh07CQj0/SR8DCgBuZXR3b3JrX2lkmYqoqAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:waxed_exposed_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcl9zdGFpcnMECQBuYW1lX2hhc2guVct1ilmxTwMKAG5ldHdvcmtfaWQgCPROCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:waxed_weathered_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRnAgAACAQAbmFtZSsAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyX3N0YWlycwQJAG5hbWVfaGFzaPXC8Sz/phCpAwoAbmV0d29ya19pZHlwHVsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:waxed_oxidized_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS/AgAACAQAbmFtZSoAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoaqGdkuhxVZUDCgBuZXR3b3JrX2lkYQXzzgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:cobbled_deepslate_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR8AgAACAQAbmFtZSIAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3N0YWlycwQJAG5hbWVfaGFzaPIfa+TpyJcIAwoAbmV0d29ya19pZJUvOYIKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:deepslate_tile_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3N0YWlycwQJAG5hbWVfaGFzaGFRFzB72mN2AwoAbmV0d29ya19pZJEOgIsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:polished_deepslate_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAgAACAQAbmFtZSMAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV9zdGFpcnMECQBuYW1lX2hhc2iNCYxVik9sGAMKAG5ldHdvcmtfaWSRVPnYCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:deepslate_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAgAACAQAbmFtZSAAbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja19zdGFpcnMECQBuYW1lX2hhc2hIasOahEf83wMKAG5ldHdvcmtfaWQ1qEDCCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:mud_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAgAACAQAbmFtZRoAbWluZWNyYWZ0Om11ZF9icmlja19zdGFpcnMECQBuYW1lX2hhc2gt3qxK1NWajAMKAG5ldHdvcmtfaWSm9N3MCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "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": "CgAAAwgAYmxvY2tfaWRgAAAACAQAbmFtZRIAbWluZWNyYWZ0OnRyYXBkb29yBAkAbmFtZV9oYXNotYiAJGtN0xADCgBuZXR3b3JrX2lkyTAWkAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:spruce_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAQAACAQAbmFtZRkAbWluZWNyYWZ0OnNwcnVjZV90cmFwZG9vcgQJAG5hbWVfaGFzaOwlfbgBkUW4AwoAbmV0d29ya19pZPHy1K0KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:birch_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAQAACAQAbmFtZRgAbWluZWNyYWZ0OmJpcmNoX3RyYXBkb29yBAkAbmFtZV9oYXNoSLtLweOLJ7wDCgBuZXR3b3JrX2lkeJWDfgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:jungle_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSTAQAACAQAbmFtZRkAbWluZWNyYWZ0Omp1bmdsZV90cmFwZG9vcgQJAG5hbWVfaGFzaDP/TnM9wyCIAwoAbmV0d29ya19pZEy2fJoKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:acacia_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAQAACAQAbmFtZRkAbWluZWNyYWZ0OmFjYWNpYV90cmFwZG9vcgQJAG5hbWVfaGFzaMj8xi3vmEKOAwoAbmV0d29ya19pZOHj8E8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:dark_oak_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAQAACAQAbmFtZRsAbWluZWNyYWZ0OmRhcmtfb2FrX3RyYXBkb29yBAkAbmFtZV9oYXNomB2GGJQ2aOMDCgBuZXR3b3JrX2lko5ZHTwoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:mangrove_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTvAgAACAQAbmFtZRsAbWluZWNyYWZ0Om1hbmdyb3ZlX3RyYXBkb29yBAkAbmFtZV9oYXNooV3kQsQUUmkDCgBuZXR3b3JrX2lkkF/mxAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:cherry_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAwAACAQAbmFtZRkAbWluZWNyYWZ0OmNoZXJyeV90cmFwZG9vcgQJAG5hbWVfaGFzaH/PefpfdHgtAwoAbmV0d29ya19pZOA7eNgKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:bamboo_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAwAACAQAbmFtZRkAbWluZWNyYWZ0OmJhbWJvb190cmFwZG9vcgQJAG5hbWVfaGFzaJrEOpsTwtKCAwoAbmV0d29ya19pZLvbPz8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:iron_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAAAACAQAbmFtZRcAbWluZWNyYWZ0Omlyb25fdHJhcGRvb3IECQBuYW1lX2hhc2gwA+IumsEiGQMKAG5ldHdvcmtfaWTvSVl/CgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:crimson_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT1AQAACAQAbmFtZRoAbWluZWNyYWZ0OmNyaW1zb25fdHJhcGRvb3IECQBuYW1lX2hhc2jHXufTnwUkYgMKAG5ldHdvcmtfaWQLjMYVCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:warped_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT2AQAACAQAbmFtZRkAbWluZWNyYWZ0OndhcnBlZF90cmFwZG9vcgQJAG5hbWVfaGFzaA20wG/+vkd6AwoAbmV0d29ya19pZHKR/hYKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:iron_bars", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAAAACAQAbmFtZRMAbWluZWNyYWZ0Omlyb25fYmFycwQJAG5hbWVfaGFzaPuefWSNAe56AwoAbmV0d29ya19pZN2LB5IKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmdsYXNzBAkAbmFtZV9oYXNowGJByfWff6gDCgBuZXR3b3JrX2lk0hdLNwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:white_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAAAACAQAbmFtZR0AbWluZWNyYWZ0OndoaXRlX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2iHubqoMbu9fAMKAG5ldHdvcmtfaWRndBrUCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:light_gray_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAwAACAQAbmFtZSIAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaKKa+LrRsHQhAwoAbmV0d29ya19pZEv2giYKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:gray_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSmAwAACAQAbmFtZRwAbWluZWNyYWZ0OmdyYXlfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaIETy7Y/HZREAwoAbmV0d29ya19pZDomVrUKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:black_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAwAACAQAbmFtZR0AbWluZWNyYWZ0OmJsYWNrX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2iV6BCwpfDMmwMKAG5ldHdvcmtfaWSV7doJCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:brown_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAwAACAQAbmFtZR0AbWluZWNyYWZ0OmJyb3duX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2igsEiq5np8JgMKAG5ldHdvcmtfaWRMzE/lCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:red_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWStAwAACAQAbmFtZRsAbWluZWNyYWZ0OnJlZF9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNoCa2J12/lQoIDCgBuZXR3b3JrX2lk283lWAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:orange_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAwAACAQAbmFtZR4AbWluZWNyYWZ0Om9yYW5nZV9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNozgjAuvzhxGsDCgBuZXR3b3JrX2lkW5CkhQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:yellow_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAwAACAQAbmFtZR4AbWluZWNyYWZ0OnllbGxvd19zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNo7EbHMd5WVugDCgBuZXR3b3JrX2lkkdDyXQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:lime_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAwAACAQAbmFtZRwAbWluZWNyYWZ0OmxpbWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaBtZA1nZtwcFAwoAbmV0d29ya19pZDxX85UKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:green_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAwAACAQAbmFtZR0AbWluZWNyYWZ0OmdyZWVuX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2h91ptDgbehWwMKAG5ldHdvcmtfaWTlDhnECgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:cyan_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAwAACAQAbmFtZRwAbWluZWNyYWZ0OmN5YW5fc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaBkIYQ8nQLqbAwoAbmV0d29ya19pZOL1lHsKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:light_blue_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAwAACAQAbmFtZSIAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaLt05n1G0fiSAwoAbmV0d29ya19pZNbwulIKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:blue_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAwAACAQAbmFtZRwAbWluZWNyYWZ0OmJsdWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaPhLocSfzduRAwoAbmV0d29ya19pZENsjFwKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:purple_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAwAACAQAbmFtZR4AbWluZWNyYWZ0OnB1cnBsZV9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNoJk0DhRO0szUDCgBuZXR3b3JrX2lkD98ZxgoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:magenta_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAwAACAQAbmFtZR8AbWluZWNyYWZ0Om1hZ2VudGFfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaFEDeFiJj3zSAwoAbmV0d29ya19pZG+iFRoKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:pink_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAwAACAQAbmFtZRwAbWluZWNyYWZ0OnBpbmtfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaDijTX87ywxhAwoAbmV0d29ya19pZKdEricKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:tinted_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAgAACAQAbmFtZRYAbWluZWNyYWZ0OnRpbnRlZF9nbGFzcwQJAG5hbWVfaGFzaAFZWSamk6KdAwoAbmV0d29ya19pZGSvWX8KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdsYXNzX3BhbmUECQBuYW1lX2hhc2gRSBHwNMQ4gQMKAG5ldHdvcmtfaWRGwixuCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:white_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAAAACAQAbmFtZSIAbWluZWNyYWZ0OndoaXRlX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaHgxQmgJVtRrAwoAbmV0d29ya19pZBEr/DYKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:light_gray_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSJAwAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNon0aQw9lNkSEDCgBuZXR3b3JrX2lk9dp5VgoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:gray_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAwAACAQAbmFtZSEAbWluZWNyYWZ0OmdyYXlfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNors74IIw+2MMDCgBuZXR3b3JrX2lkmrGO5woGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:black_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAwAACAQAbmFtZSIAbWluZWNyYWZ0OmJsYWNrX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaOK/5ZRRd+M1AwoAbmV0d29ya19pZDv++oQKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:brown_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSNAwAACAQAbmFtZSIAbWluZWNyYWZ0OmJyb3duX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLHeGJyRFTIWAwoAbmV0d29ya19pZMz9L0wKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:red_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAwAACAQAbmFtZSAAbWluZWNyYWZ0OnJlZF9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2gGr4x6JheAywMKAG5ldHdvcmtfaWQBjCTmCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:orange_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAwAACAQAbmFtZSMAbWluZWNyYWZ0Om9yYW5nZV9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2hbHxPD2gEbEAMKAG5ldHdvcmtfaWSt/7a5CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:yellow_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAwAACAQAbmFtZSMAbWluZWNyYWZ0OnllbGxvd19zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2g9tl4aOCyZBwMKAG5ldHdvcmtfaWTXRAS7CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:lime_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAwAACAQAbmFtZSEAbWluZWNyYWZ0OmxpbWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNo3CtUyLwoGegDCgBuZXR3b3JrX2lkYJDnggoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:green_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSOAwAACAQAbmFtZSIAbWluZWNyYWZ0OmdyZWVuX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaJo6YP7IMy9SAwoAbmV0d29ya19pZHOnixoKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:cyan_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAwAACAQAbmFtZSEAbWluZWNyYWZ0OmN5YW5fc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoti97c6QrbLQDCgBuZXR3b3JrX2lkUqFUeQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:light_blue_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAwAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNovDg/gQle104DCgBuZXR3b3JrX2lkFuy4MQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:blue_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSMAwAACAQAbmFtZSEAbWluZWNyYWZ0OmJsdWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoGc57tiexbQMDCgBuZXR3b3JrX2lk1eBLUAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:purple_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAwAACAQAbmFtZSMAbWluZWNyYWZ0OnB1cnBsZV9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2hDJHYdd0FdfQMKAG5ldHdvcmtfaWSNsdK5CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:magenta_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAwAACAQAbmFtZSQAbWluZWNyYWZ0Om1hZ2VudGFfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNo3pcOw5bs5XoDCgBuZXR3b3JrX2lkVbOR7AoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:pink_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAwAACAQAbmFtZSEAbWluZWNyYWZ0OnBpbmtfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoWRhSACMWgswDCgBuZXR3b3JrX2lkIR92xwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:ladder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRBAAAACAQAbmFtZRAAbWluZWNyYWZ0OmxhZGRlcgQJAG5hbWVfaGFzaKBhqheJVOz+AwoAbmV0d29ya19pZCgvzlsKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:scaffolding", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAQAACAQAbmFtZRUAbWluZWNyYWZ0OnNjYWZmb2xkaW5nBAkAbmFtZV9oYXNoYrkevrqcljwDCgBuZXR3b3JrX2lkD13mlAoGAHN0YXRlcwMJAHN0YWJpbGl0eQAAAAABDwBzdGFiaWxpdHlfY2hlY2sAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:smooth_stone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAAAACAQAbmFtZRsAbWluZWNyYWZ0OnNtb290aF9zdG9uZV9zbGFiBAkAbmFtZV9oYXNon5I1yVw74uMDCgBuZXR3b3JrX2lkqvjcBQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:normal_stone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSCBAAACAQAbmFtZRsAbWluZWNyYWZ0Om5vcm1hbF9zdG9uZV9zbGFiBAkAbmFtZV9oYXNoIvsjJLQdolcDCgBuZXR3b3JrX2lkC1zqRQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:cobblestone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRoBAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3NsYWIECQBuYW1lX2hhc2h5CXtW7vlQVgMKAG5ldHdvcmtfaWRDGyj2CgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:mossy_cobblestone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR3BAAACAQAbmFtZSAAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lX3NsYWIECQBuYW1lX2hhc2ijm1BCwB82VgMKAG5ldHdvcmtfaWR7ByMGCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:oak_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAAAACAQAbmFtZRIAbWluZWNyYWZ0Om9ha19zbGFiBAkAbmFtZV9oYXNoJp1Cp1M4jlwDCgBuZXR3b3JrX2lkZH6+owoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:spruce_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQjBAAACAQAbmFtZRUAbWluZWNyYWZ0OnNwcnVjZV9zbGFiBAkAbmFtZV9oYXNodQi70jB238cDCgBuZXR3b3JrX2lkrriOYQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:birch_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQkBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJpcmNoX3NsYWIECQBuYW1lX2hhc2gZPpfMxoOsTAMKAG5ldHdvcmtfaWThR9jyCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:jungle_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQlBAAACAQAbmFtZRUAbWluZWNyYWZ0Omp1bmdsZV9zbGFiBAkAbmFtZV9oYXNo6gLs79NXak4DCgBuZXR3b3JrX2lk5ZiKgwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:acacia_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQmBAAACAQAbmFtZRUAbWluZWNyYWZ0OmFjYWNpYV9zbGFiBAkAbmFtZV9oYXNomSdFmDnv4OUDCgBuZXR3b3JrX2lkHttaXAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:dark_oak_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQnBAAACAQAbmFtZRcAbWluZWNyYWZ0OmRhcmtfb2FrX3NsYWIECQBuYW1lX2hhc2hJjTohRFyhIQMKAG5ldHdvcmtfaWRMzDTyCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:mangrove_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWToAgAACAQAbmFtZRcAbWluZWNyYWZ0Om1hbmdyb3ZlX3NsYWIECQBuYW1lX2hhc2jYCcmhJPeNMwMKAG5ldHdvcmtfaWQx6U1yCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:cherry_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQaAwAACAQAbmFtZRUAbWluZWNyYWZ0OmNoZXJyeV9zbGFiBAkAbmFtZV9oYXNoTt0MmVn/mqoDCgBuZXR3b3JrX2lk2VVsZQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:bamboo_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQAAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJhbWJvb19zbGFiBAkAbmFtZV9oYXNoo1xuFqINeLYDCgBuZXR3b3JrX2lkVC+0twoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:bamboo_mosaic_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQLAwAACAQAbmFtZRwAbWluZWNyYWZ0OmJhbWJvb19tb3NhaWNfc2xhYgQJAG5hbWVfaGFzaNbVRBZ/ChI3AwoAbmV0d29ya19pZOLZHFMKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:stone_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRqBAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2JyaWNrX3NsYWIECQBuYW1lX2hhc2js6EexuKuzrQMKAG5ldHdvcmtfaWRSsMxaCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:mossy_stone_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAQAACAQAbmFtZSAAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrX3NsYWIECQBuYW1lX2hhc2hiA4kFUl4tHAMKAG5ldHdvcmtfaWS6joSOCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:sandstone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRnBAAACAQAbmFtZRgAbWluZWNyYWZ0OnNhbmRzdG9uZV9zbGFiBAkAbmFtZV9oYXNo/GMI0MZnrhsDCgBuZXR3b3JrX2lkFP8WmwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:cut_sandstone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDBAAACAQAbmFtZRwAbWluZWNyYWZ0OmN1dF9zYW5kc3RvbmVfc2xhYgQJAG5hbWVfaGFzaE+zxVQweViJAwoAbmV0d29ya19pZHsu74YKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:smooth_sandstone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR4BAAACAQAbmFtZR8AbWluZWNyYWZ0OnNtb290aF9zYW5kc3RvbmVfc2xhYgQJAG5hbWVfaGFzaIkmsO1gw3gnAwoAbmV0d29ya19pZFSiwP0KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:red_sandstone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRwAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmVfc2xhYgQJAG5hbWVfaGFzaEyDjeWlUHItAwoAbmV0d29ya19pZIT4rmwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:cut_red_sandstone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSEBAAACAQAbmFtZSAAbWluZWNyYWZ0OmN1dF9yZWRfc2FuZHN0b25lX3NsYWIECQBuYW1lX2hhc2hTVRS++snU3wMKAG5ldHdvcmtfaWSvIAviCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:smooth_red_sandstone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR6BAAACAQAbmFtZSMAbWluZWNyYWZ0OnNtb290aF9yZWRfc2FuZHN0b25lX3NsYWIECQBuYW1lX2hhc2i9iN2UK272tgMKAG5ldHdvcmtfaWRUZrwJCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:granite_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR/BAAACAQAbmFtZRYAbWluZWNyYWZ0OmdyYW5pdGVfc2xhYgQJAG5hbWVfaGFzaL0HprlAhhZwAwoAbmV0d29ya19pZIcIdc8KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:polished_granite_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSABAAACAQAbmFtZR8AbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGVfc2xhYgQJAG5hbWVfaGFzaP6bXk5w2dGrAwoAbmV0d29ya19pZCsRy1cKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:diorite_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR9BAAACAQAbmFtZRYAbWluZWNyYWZ0OmRpb3JpdGVfc2xhYgQJAG5hbWVfaGFzaM3ppS8v55sNAwoAbmV0d29ya19pZB+Pv9oKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:polished_diorite_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR+BAAACAQAbmFtZR8AbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGVfc2xhYgQJAG5hbWVfaGFzaLZlyJLkMPhyAwoAbmV0d29ya19pZFM0HYwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:andesite_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR8BAAACAQAbmFtZRcAbWluZWNyYWZ0OmFuZGVzaXRlX3NsYWIECQBuYW1lX2hhc2icIrtuy/aosAMKAG5ldHdvcmtfaWTtXTtYCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:polished_andesite_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR7BAAACAQAbmFtZSAAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlX3NsYWIECQBuYW1lX2hhc2j56zJOfCF+3wMKAG5ldHdvcmtfaWRBs69FCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRpBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJyaWNrX3NsYWIECQBuYW1lX2hhc2hO/Da4jU2v4wMKAG5ldHdvcmtfaWRG/qphCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:nether_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRsBAAACAQAbmFtZRsAbWluZWNyYWZ0Om5ldGhlcl9icmlja19zbGFiBAkAbmFtZV9oYXNonymoa2zbbqMDCgBuZXR3b3JrX2lkquvR1QoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:red_nether_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR5BAAACAQAbmFtZR8AbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaG89ujUk3Y64AwoAbmV0d29ya19pZEZIunAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:end_stone_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZR4AbWluZWNyYWZ0OmVuZF9zdG9uZV9icmlja19zbGFiBAkAbmFtZV9oYXNo4tkxQtl+IyQDCgBuZXR3b3JrX2lkhByH/woGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:quartz_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRrBAAACAQAbmFtZRUAbWluZWNyYWZ0OnF1YXJ0el9zbGFiBAkAbmFtZV9oYXNo9JMj3upfsbwDCgBuZXR3b3JrX2lkn2g2VAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:smooth_quartz_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSBBAAACAQAbmFtZRwAbWluZWNyYWZ0OnNtb290aF9xdWFydHpfc2xhYgQJAG5hbWVfaGFzaHOSJv8ve0nmAwoAbmV0d29ya19pZFMk/JsKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:purpur_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRzBAAACAQAbmFtZRUAbWluZWNyYWZ0OnB1cnB1cl9zbGFiBAkAbmFtZV9oYXNo4XeWbKpx2ScDCgBuZXR3b3JrX2lkRkga5goGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:prismarine_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR0BAAACAQAbmFtZRkAbWluZWNyYWZ0OnByaXNtYXJpbmVfc2xhYgQJAG5hbWVfaGFzaI9x+1fY8QRfAwoAbmV0d29ya19pZBTUZhwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:dark_prismarine_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR1BAAACAQAbmFtZR4AbWluZWNyYWZ0OmRhcmtfcHJpc21hcmluZV9zbGFiBAkAbmFtZV9oYXNoSsZGDkEL5ZUDCgBuZXR3b3JrX2lkNLQ8VwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:prismarine_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR2BAAACAQAbmFtZR8AbWluZWNyYWZ0OnByaXNtYXJpbmVfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaB1FSbVi97xJAwoAbmV0d29ya19pZEBwwFMKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:crimson_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAgAACAQAbmFtZRYAbWluZWNyYWZ0OmNyaW1zb25fc2xhYgQJAG5hbWVfaGFzaKZ+EfP0ZYOZAwoAbmV0d29ya19pZAxRUWAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:warped_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQIAgAACAQAbmFtZRUAbWluZWNyYWZ0OndhcnBlZF9zbGFiBAkAbmFtZV9oYXNo/AT0e/Z9W7UDCgBuZXR3b3JrX2lk1yq11AoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:blackstone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsYWNrc3RvbmVfc2xhYgQJAG5hbWVfaGFzaF/DD4ZUlNgtAwoAbmV0d29ya19pZGy1DjwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:polished_blackstone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQkAgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfc2xhYgQJAG5hbWVfaGFzaDYnuUs86EWfAwoAbmV0d29ya19pZJj2bXIKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:polished_blackstone_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQbAgAACAQAbmFtZSgAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaKySLqvHc4xXAwoAbmV0d29ya19pZOyWX94KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRoAgAACAQAbmFtZRkAbWluZWNyYWZ0OmN1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaDsNpb2qs4iBAwoAbmV0d29ya19pZOTm2nsKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:exposed_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRpAgAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcl9zbGFiBAkAbmFtZV9oYXNoahQ5OwIQb7kDCgBuZXR3b3JrX2lkrUlZLwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:weathered_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRqAgAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyX3NsYWIECQBuYW1lX2hhc2hBIuGIOVVXogMKAG5ldHdvcmtfaWQgnaDiCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:oxidized_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAgAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaOptj9ycfpaDAwoAbmV0d29ya19pZMzFSRgKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:waxed_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaAlx6DZOCTHzAwoAbmV0d29ya19pZFRBvDAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:waxed_exposed_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAgAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcl9zbGFiBAkAbmFtZV9oYXNo3KqS5OnhtRIDCgBuZXR3b3JrX2lkHTGcTgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:waxed_weathered_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyX3NsYWIECQBuYW1lX2hhc2gzZ1oX0HCFtwMKAG5ldHdvcmtfaWSgJR+XCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:waxed_oxidized_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTAAgAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaMjjTnLu1KcqAwoAbmV0d29ya19pZIxsnFYKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:cobbled_deepslate_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AgAACAQAbmFtZSAAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3NsYWIECQBuYW1lX2hhc2gwJIVWK1TM2QMKAG5ldHdvcmtfaWTYAoX5CgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:polished_deepslate_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR/AgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV9zbGFiBAkAbmFtZV9oYXNoC/Adiz8k6RYDCgBuZXR3b3JrX2lkuFYMAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:deepslate_tile_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3NsYWIECQBuYW1lX2hhc2hPydV6emzIXAMKAG5ldHdvcmtfaWQwlbFCCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:deepslate_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja19zbGFiBAkAbmFtZV9oYXNoSv62V7iw10UDCgBuZXR3b3JrX2lkWMoragoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:mud_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAgAACAQAbmFtZRgAbWluZWNyYWZ0Om11ZF9icmlja19zbGFiBAkAbmFtZV9oYXNoq/tGBQWkv08DCgBuZXR3b3JrX2lkl4nnMwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:brick_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAAAACAQAbmFtZRUAbWluZWNyYWZ0OmJyaWNrX2Jsb2NrBAkAbmFtZV9oYXNo5Qc2E005S3oDCgBuZXR3b3JrX2lkqeGWRgoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:chiseled_nether_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAgAACAQAbmFtZSAAbWluZWNyYWZ0OmNoaXNlbGVkX25ldGhlcl9icmlja3MECQBuYW1lX2hhc2g31SBPTcUK1QMKAG5ldHdvcmtfaWS8TJ+TCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:cracked_nether_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAgAACAQAbmFtZR8AbWluZWNyYWZ0OmNyYWNrZWRfbmV0aGVyX2JyaWNrcwQJAG5hbWVfaGFzaAdC6eKzXT5tAwoAbmV0d29ya19pZIUSejwKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:quartz_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAgAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9icmlja3MECQBuYW1lX2hhc2jSZO590dd8sAMKAG5ldHdvcmtfaWSc5xCLCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:stone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAAAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX2JyaWNrcwQJAG5hbWVfaGFzaGAiQu8VWVJRAwoAbmV0d29ya19pZH2DjXUKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:mossy_stone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRjBAAACAQAbmFtZRwAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaIZBO00MONRIAwoAbmV0d29ya19pZL2WDrAKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:cracked_stone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRkBAAACAQAbmFtZR4AbWluZWNyYWZ0OmNyYWNrZWRfc3RvbmVfYnJpY2tzBAkAbmFtZV9oYXNocIkAp6riMz4DCgBuZXR3b3JrX2lkTWGeCwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:chiseled_stone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRlBAAACAQAbmFtZR8AbWluZWNyYWZ0OmNoaXNlbGVkX3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaMB2FPLLADkEAwoAbmV0d29ya19pZOIPn0IKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:end_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTOAAAACAQAbmFtZRQAbWluZWNyYWZ0OmVuZF9icmlja3MECQBuYW1lX2hhc2hIUFfxNLZaFgMKAG5ldHdvcmtfaWQ/vDihCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:prismarine_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSzBAAACAQAbmFtZRsAbWluZWNyYWZ0OnByaXNtYXJpbmVfYnJpY2tzBAkAbmFtZV9oYXNozeGe3/7s5fcDCgBuZXR3b3JrX2lkj/iBnAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:polished_blackstone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tzBAkAbmFtZV9oYXNoIHgsgIdzKXcDCgBuZXR3b3JrX2lkUw9b3woGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:cracked_polished_blackstone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAgAACAQAbmFtZSwAbWluZWNyYWZ0OmNyYWNrZWRfcG9saXNoZWRfYmxhY2tzdG9uZV9icmlja3MECQBuYW1lX2hhc2jQIO1GQDk80AMKAG5ldHdvcmtfaWQ3UlRYCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:gilded_blackstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAgAACAQAbmFtZRsAbWluZWNyYWZ0OmdpbGRlZF9ibGFja3N0b25lBAkAbmFtZV9oYXNoNoWt1ocG0HEDCgBuZXR3b3JrX2lktL8gUwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:chiseled_polished_blackstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAgAACAQAbmFtZSYAbWluZWNyYWZ0OmNoaXNlbGVkX3BvbGlzaGVkX2JsYWNrc3RvbmUECQBuYW1lX2hhc2gzFa+kEjCJgAMKAG5ldHdvcmtfaWR2NJX2CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:deepslate_tiles", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAgAACAQAbmFtZRkAbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlcwQJAG5hbWVfaGFzaGcLLx3NXAFvAwoAbmV0d29ya19pZI/G/xYKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:cracked_deepslate_tiles", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSYAgAACAQAbmFtZSEAbWluZWNyYWZ0OmNyYWNrZWRfZGVlcHNsYXRlX3RpbGVzBAkAbmFtZV9oYXNo9zWgkFuMM1QDCgBuZXR3b3JrX2lkGwY6OgoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:deepslate_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAgAACAQAbmFtZRoAbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja3MECQBuYW1lX2hhc2gucvFmPdZxigMKAG5ldHdvcmtfaWSH4HDPCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:cracked_deepslate_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAgAACAQAbmFtZSIAbWluZWNyYWZ0OmNyYWNrZWRfZGVlcHNsYXRlX2JyaWNrcwQJAG5hbWVfaGFzaN40aqhh9WqHAwoAbmV0d29ya19pZO9GPBQKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:chiseled_deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAgAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaEU7/uRG8HSBAwoAbmV0d29ya19pZEqmI0EKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:cobblestone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAAAACAQAbmFtZRUAbWluZWNyYWZ0OmNvYmJsZXN0b25lBAkAbmFtZV9oYXNoPoK7mGlSUz4DCgBuZXR3b3JrX2lkLm7RZwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:mossy_cobblestone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQwAAAACAQAbmFtZRsAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lBAkAbmFtZV9oYXNoGJ67FCbkChMDCgBuZXR3b3JrX2lk/pYs1AoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:cobbled_deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AgAACAQAbmFtZRsAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlBAkAbmFtZV9oYXNoLUz9Y/ywmLwDCgBuZXR3b3JrX2lkNwzZ+AoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:smooth_stone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AQAACAQAbmFtZRYAbWluZWNyYWZ0OnNtb290aF9zdG9uZQQJAG5hbWVfaGFzaMwf87/JaTNvAwoAbmV0d29ya19pZLkZICEKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZPsXMaQKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:chiseled_sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSvBAAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX3NhbmRzdG9uZQQJAG5hbWVfaGFzaPEkxMvZmemgAwoAbmV0d29ya19pZGI5NB4KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:cut_sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSwBAAACAQAbmFtZRcAbWluZWNyYWZ0OmN1dF9zYW5kc3RvbmUECQBuYW1lX2hhc2ichLQc71njnQMKAG5ldHdvcmtfaWSmBLkRCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:smooth_sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSxBAAACAQAbmFtZRoAbWluZWNyYWZ0OnNtb290aF9zYW5kc3RvbmUECQBuYW1lX2hhc2huR7XTwISyCAMKAG5ldHdvcmtfaWSzWj3UCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:red_sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWRXRYxZCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:chiseled_red_sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS7BAAACAQAbmFtZSAAbWluZWNyYWZ0OmNoaXNlbGVkX3JlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2gh5sX+ON054wMKAG5ldHdvcmtfaWT6Pw1PCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:cut_red_sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS8BAAACAQAbmFtZRsAbWluZWNyYWZ0OmN1dF9yZWRfc2FuZHN0b25lBAkAbmFtZV9oYXNoaOtka4NrQ1EDCgBuZXR3b3JrX2lk3r/JPAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:smooth_red_sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS9BAAACAQAbmFtZR4AbWluZWNyYWZ0OnNtb290aF9yZWRfc2FuZHN0b25lBAkAbmFtZV9oYXNoqsNl8x36ju4DCgBuZXR3b3JrX2lk7x5DTwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:coal_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWStAAAACAQAbmFtZRQAbWluZWNyYWZ0OmNvYWxfYmxvY2sECQBuYW1lX2hhc2jH8QQP3t5PiAMKAG5ldHdvcmtfaWRo+sR+CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:dried_kelp_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAQAACAQAbmFtZRoAbWluZWNyYWZ0OmRyaWVkX2tlbHBfYmxvY2sECQBuYW1lX2hhc2iRoucexkrl8wMKAG5ldHdvcmtfaWQQCCrvCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:gold_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdvbGRfYmxvY2sECQBuYW1lX2hhc2iYLshvjtXzFwMKAG5ldHdvcmtfaWTDJGBcCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:iron_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAAAACAQAbmFtZRQAbWluZWNyYWZ0Omlyb25fYmxvY2sECQBuYW1lX2hhc2jYINmJQbvV/gMKAG5ldHdvcmtfaWRf7AbICgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:copper_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRTAgAACAQAbmFtZRYAbWluZWNyYWZ0OmNvcHBlcl9ibG9jawQJAG5hbWVfaGFzaDVxnehsGaZ1AwoAbmV0d29ya19pZIiUodwKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:copper_door" - }, - { - "id": "minecraft:copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQXBAAACAQAbmFtZRkAbWluZWNyYWZ0OmNvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaO9fXio+svKVAwoAbmV0d29ya19pZMCoRjEKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT/AwAACAQAbmFtZRYAbWluZWNyYWZ0OmNvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaC/JEFOWnmEcAwoAbmV0d29ya19pZC6YiiMKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:exposed_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAgAACAQAbmFtZRgAbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoQH3Fukmu3CEDCgBuZXR3b3JrX2lk72jFIwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:exposed_copper_door" - }, - { - "id": "minecraft:exposed_copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQYBAAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyX3RyYXBkb29yBAkAbmFtZV9oYXNoYhDFUysN7qUDCgBuZXR3b3JrX2lkMzwGJgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:exposed_copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQABAAACAQAbmFtZR4AbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyX2dyYXRlBAkAbmFtZV9oYXNolFIBYLYU0IcDCgBuZXR3b3JrX2lk4UqptAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:weathered_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAgAACAQAbmFtZRoAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2hJCQXbvobv+gMKAG5ldHdvcmtfaWQwM0lJCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:weathered_copper_door" - }, - { - "id": "minecraft:weathered_copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQZBAAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXJfdHJhcGRvb3IECQBuYW1lX2hhc2hFnEC282a1tgMKAG5ldHdvcmtfaWTk70oiCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:weathered_copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQBBAAACAQAbmFtZSAAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXJfZ3JhdGUECQBuYW1lX2hhc2jB3o8enlv1RgMKAG5ldHdvcmtfaWRih2pOCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:oxidized_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAgAACAQAbmFtZRkAbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMDtJqR0G5Y7AwoAbmV0d29ya19pZGjN8bUKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:oxidized_copper_door" - }, - { - "id": "minecraft:oxidized_copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQaBAAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaOJpG/XFexVwAwoAbmV0d29ya19pZPhi0J4KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:oxidized_copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQCBAAACAQAbmFtZR8AbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaBRfNhyndve7AwoAbmV0d29ya19pZKY2cnEKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:waxed_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAgAACAQAbmFtZRYAbWluZWNyYWZ0OndheGVkX2NvcHBlcgQJAG5hbWVfaGFzaPF+FG6Eh5fsAwoAbmV0d29ya19pZIjtz/0KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:waxed_copper_door" - }, - { - "id": "minecraft:waxed_copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQbBAAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2NvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaO0JUKUHqNU6AwoAbmV0d29ya19pZJC3ZuMKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:waxed_copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQDBAAACAQAbmFtZRwAbWluZWNyYWZ0OndheGVkX2NvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaDmC92M2RO+HAwoAbmV0d29ya19pZH4og2AKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:waxed_exposed_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAgAACAQAbmFtZR4AbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoig8IOc+SCikDCgBuZXR3b3JrX2lklz8yWQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:waxed_exposed_copper_door" - }, - { - "id": "minecraft:waxed_exposed_copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQcBAAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyX3RyYXBkb29yBAkAbmFtZV9oYXNoBHHxCpkUzpgDCgBuZXR3b3JrX2lkw2XBGQoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:waxed_exposed_copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQEBAAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyX2dyYXRlBAkAbmFtZV9oYXNoWmd6B+hWwiEDCgBuZXR3b3JrX2lk8d4ZQwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:waxed_weathered_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRZAgAACAQAbmFtZSAAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2gjtPq8MOdvKgMKAG5ldHdvcmtfaWSQ9Ln9CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:waxed_weathered_copper_door" - }, - { - "id": "minecraft:waxed_weathered_copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQdBAAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXJfdHJhcGRvb3IECQBuYW1lX2hhc2gH9Fi3JCF4egMKAG5ldHdvcmtfaWRkGU6TCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:waxed_weathered_copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQFBAAACAQAbmFtZSYAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXJfZ3JhdGUECQBuYW1lX2hhc2hXfilVFDAiYQMKAG5ldHdvcmtfaWQqTGC1CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:waxed_oxidized_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS9AgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMaORhsO+LzjAwoAbmV0d29ya19pZJhGfLEKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:waxed_oxidized_copper_door" - }, - { - "id": "minecraft:waxed_oxidized_copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQeBAAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaNA/q9qAy6Z9AwoAbmV0d29ya19pZDgExS8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:waxed_oxidized_copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQGBAAACAQAbmFtZSUAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaEbeMT605GP4AwoAbmV0d29ya19pZOZjpkkKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRaAgAACAQAbmFtZRQAbWluZWNyYWZ0OmN1dF9jb3BwZXIECQBuYW1lX2hhc2hAfN3NGax3eAMKAG5ldHdvcmtfaWTnFBtYCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:exposed_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAgAACAQAbmFtZRwAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcgQJAG5hbWVfaGFzaA85G3yv/w6pAwoAbmV0d29ya19pZMQhr0QKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:weathered_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRcAgAACAQAbmFtZR4AbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyBAkAbmFtZV9oYXNoVgRV0fBaz88DCgBuZXR3b3JrX2lk/0cYugoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:oxidized_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRdAgAACAQAbmFtZR0AbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2iP8WmFWOkriwMKAG5ldHdvcmtfaWQPdce7CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:waxed_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWReAgAACAQAbmFtZRoAbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2jumiwOZIqv2AMKAG5ldHdvcmtfaWQvuxx9CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:waxed_exposed_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRfAgAACAQAbmFtZSIAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcgQJAG5hbWVfaGFzaPE/OfK6IoVMAwoAbmV0d29ya19pZHy5HkcKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:waxed_weathered_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRgAgAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyBAkAbmFtZV9oYXNoCA1xDp11bnwDCgBuZXR3b3JrX2lkDyEDVQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:waxed_oxidized_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS+AgAACAQAbmFtZSMAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2i1pZAsZYHLDAMKAG5ldHdvcmtfaWQ/wSkCCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT3AwAACAQAbmFtZRkAbWluZWNyYWZ0OmNoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaIsW5pmpJEuQAwoAbmV0d29ya19pZHetwrkKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:exposed_chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT4AwAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY2hpc2VsZWRfY29wcGVyBAkAbmFtZV9oYXNoOvrLJ0UowbgDCgBuZXR3b3JrX2lkZj7cPwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:weathered_chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT5AwAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jaGlzZWxlZF9jb3BwZXIECQBuYW1lX2hhc2hh+42XlsWvGAMKAG5ldHdvcmtfaWS7Cy59CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:oxidized_chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT6AwAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2NoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaLpTIsnfluiCAwoAbmV0d29ya19pZB9/jS8KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:waxed_chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT7AwAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2NoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaFnXvXY5OinzAwoAbmV0d29ya19pZAcKtHsKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:waxed_exposed_chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT8AwAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY2hpc2VsZWRfY29wcGVyBAkAbmFtZV9oYXNoHJdq+Pph6hMDCgBuZXR3b3JrX2lkdge7IAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:waxed_oxidized_chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT9AwAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaMj49OvlTpgCAwoAbmV0d29ya19pZN/r+roKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:waxed_weathered_chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT+AwAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jaGlzZWxlZF9jb3BwZXIECQBuYW1lX2hhc2hzuO+Sg9LYQwMKAG5ldHdvcmtfaWQ7AN7iCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQHBAAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcHBlcl9idWxiBAkAbmFtZV9oYXNo41TimHOsMWcDCgBuZXR3b3JrX2lkJnZvAgoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:exposed_copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQIBAAACAQAbmFtZR0AbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyX2J1bGIECQBuYW1lX2hhc2g++f1wYLLCrAMKAG5ldHdvcmtfaWRLdMmGCgYAc3RhdGVzAQMAbGl0AAELAHBvd2VyZWRfYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:weathered_copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQJBAAACAQAbmFtZR8AbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXJfYnVsYgQJAG5hbWVfaGFzaMEtsYfwRTXlAwoAbmV0d29ya19pZAp51LQKBgBzdGF0ZXMBAwBsaXQAAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:oxidized_copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQKBAAACAQAbmFtZR4AbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcl9idWxiBAkAbmFtZV9oYXNovnrBQZs8nDIDCgBuZXR3b3JrX2lkPsj0AAoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:waxed_copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQLBAAACAQAbmFtZRsAbWluZWNyYWZ0OndheGVkX2NvcHBlcl9idWxiBAkAbmFtZV9oYXNoGTg6TYllMiIDCgBuZXR3b3JrX2lk9m0WhgoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:waxed_exposed_copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQMBAAACAQAbmFtZSMAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyX2J1bGIECQBuYW1lX2hhc2gI6xkPcvBDVwMKAG5ldHdvcmtfaWR7BRcACgYAc3RhdGVzAQMAbGl0AAELAHBvd2VyZWRfYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:waxed_weathered_copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQNBAAACAQAbmFtZSUAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXJfYnVsYgQJAG5hbWVfaGFzaMsUnmp3/VqVAwoAbmV0d29ya19pZEoworoKBgBzdGF0ZXMBAwBsaXQAAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:waxed_oxidized_copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQOBAAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcl9idWxiBAkAbmFtZV9oYXNoBFKxY3fjVq4DCgBuZXR3b3JrX2lkzrJ6aAoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:emerald_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAAAACAQAbmFtZRcAbWluZWNyYWZ0OmVtZXJhbGRfYmxvY2sECQBuYW1lX2hhc2hK6QunqJznNAMKAG5ldHdvcmtfaWRk5+otCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:diamond_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5AAAACAQAbmFtZRcAbWluZWNyYWZ0OmRpYW1vbmRfYmxvY2sECQBuYW1lX2hhc2iGKrxuvkytFQMKAG5ldHdvcmtfaWQQeQZXCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:lapis_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAAAACAQAbmFtZRUAbWluZWNyYWZ0OmxhcGlzX2Jsb2NrBAkAbmFtZV9oYXNoDZ44xdb2zVoDCgBuZXR3b3JrX2lktVy0BAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:raw_iron_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTCAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJhd19pcm9uX2Jsb2NrBAkAbmFtZV9oYXNo9XyzNIQXxvwDCgBuZXR3b3JrX2lknms1QAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:raw_copper_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTDAgAACAQAbmFtZRoAbWluZWNyYWZ0OnJhd19jb3BwZXJfYmxvY2sECQBuYW1lX2hhc2hw1KG0TNUGgwMKAG5ldHdvcmtfaWS1vGo/CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:raw_gold_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJhd19nb2xkX2Jsb2NrBAkAbmFtZV9oYXNo6YuwuLwfOBwDCgBuZXR3b3JrX2lkLiQ5gQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:quartz_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAAAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZE2axGsKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:quartz_pillar", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS5BAAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9waWxsYXIECQBuYW1lX2hhc2igp62HI+PuSwMKAG5ldHdvcmtfaWS9SGXLCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:chiseled_quartz_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS4BAAACAQAbmFtZR8AbWluZWNyYWZ0OmNoaXNlbGVkX3F1YXJ0el9ibG9jawQJAG5hbWVfaGFzaAftJM9mCAvaAwoAbmV0d29ya19pZFwy0s0KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:smooth_quartz", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS6BAAACAQAbmFtZRcAbWluZWNyYWZ0OnNtb290aF9xdWFydHoECQBuYW1lX2hhc2hIVzzgiItGagMKAG5ldHdvcmtfaWTVWgU2CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:prismarine", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAAAACAQAbmFtZRQAbWluZWNyYWZ0OnByaXNtYXJpbmUECQBuYW1lX2hhc2jcnQCHi9CspQMKAG5ldHdvcmtfaWQnuuW1CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:dark_prismarine", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSyBAAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfcHJpc21hcmluZQQJAG5hbWVfaGFzaK+rhxsgkzplAwoAbmV0d29ya19pZIdA0I0KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:slime", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnNsaW1lBAkAbmFtZV9oYXNoHJiEEJx+JlkDCgBuZXR3b3JrX2lkfgfVzAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:honey_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAQAACAQAbmFtZRUAbWluZWNyYWZ0OmhvbmV5X2Jsb2NrBAkAbmFtZV9oYXNo9zLYSUlelywDCgBuZXR3b3JrX2lko+dyWgoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:honeycomb_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAQAACAQAbmFtZRkAbWluZWNyYWZ0OmhvbmV5Y29tYl9ibG9jawQJAG5hbWVfaGFzaASIPuOCYd1oAwoAbmV0d29ya19pZKys4n4KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:hay_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAAAACAQAbmFtZRMAbWluZWNyYWZ0OmhheV9ibG9jawQJAG5hbWVfaGFzaIB2VxKxX8EpAwoAbmV0d29ya19pZKuQSloKBgBzdGF0ZXMDCgBkZXByZWNhdGVkAAAAAAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:bone_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAAAACAQAbmFtZRQAbWluZWNyYWZ0OmJvbmVfYmxvY2sECQBuYW1lX2hhc2i4ZX576W9AWgMKAG5ldHdvcmtfaWTWGacQCgYAc3RhdGVzAwoAZGVwcmVjYXRlZAAAAAAICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:nether_brick", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRwAAAACAQAbmFtZRYAbWluZWNyYWZ0Om5ldGhlcl9icmljawQJAG5hbWVfaGFzaMxcRiheU+nXAwoAbmV0d29ya19pZMkmzloKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:red_nether_brick", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAAAACAQAbmFtZRoAbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2sECQBuYW1lX2hhc2j8pRO4LfoECAMKAG5ldHdvcmtfaWRpdF0YCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:netherite_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAgAACAQAbmFtZRkAbWluZWNyYWZ0Om5ldGhlcml0ZV9ibG9jawQJAG5hbWVfaGFzaMghh6Zib/ZKAwoAbmV0d29ya19pZIz0mq0KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:lodestone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAQAACAQAbmFtZRMAbWluZWNyYWZ0OmxvZGVzdG9uZQQJAG5hbWVfaGFzaJ2gmHOTlXv8AwoAbmV0d29ya19pZEfgB4wKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:white_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAAAACAQAbmFtZRQAbWluZWNyYWZ0OndoaXRlX3dvb2wECQBuYW1lX2hhc2jRWB7vaIEDiQMKAG5ldHdvcmtfaWSO8paQCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:light_gray_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQnAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfd29vbAQJAG5hbWVfaGFzaOpdQ1a2v4b3AwoAbmV0d29ya19pZIqZCYEKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:gray_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAwAACAQAbmFtZRMAbWluZWNyYWZ0OmdyYXlfd29vbAQJAG5hbWVfaGFzaLsc1Lp1xdIOAwoAbmV0d29ya19pZFUs+HgKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:black_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAwAACAQAbmFtZRQAbWluZWNyYWZ0OmJsYWNrX3dvb2wECQBuYW1lX2hhc2hP2HC6o0X4HAMKAG5ldHdvcmtfaWRUbORcCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:brown_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAwAACAQAbmFtZRQAbWluZWNyYWZ0OmJyb3duX3dvb2wECQBuYW1lX2hhc2ig5IW89PrREwMKAG5ldHdvcmtfaWRjT9j8CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:red_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQrAwAACAQAbmFtZRIAbWluZWNyYWZ0OnJlZF93b29sBAkAbmFtZV9oYXNoY4TBDq+mFgUDCgBuZXR3b3JrX2lktn9lcAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:orange_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAwAACAQAbmFtZRUAbWluZWNyYWZ0Om9yYW5nZV93b29sBAkAbmFtZV9oYXNoFstfrTZfSCgDCgBuZXR3b3JrX2lk+rqywwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:yellow_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAwAACAQAbmFtZRUAbWluZWNyYWZ0OnllbGxvd193b29sBAkAbmFtZV9oYXNoTFyus2RHegcDCgBuZXR3b3JrX2lkkKBhXAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:lime_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAwAACAQAbmFtZRMAbWluZWNyYWZ0OmxpbWVfd29vbAQJAG5hbWVfaGFzaNVnnzKiMxmeAwoAbmV0d29ya19pZG9b32kKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:green_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAwAACAQAbmFtZRQAbWluZWNyYWZ0OmdyZWVuX3dvb2wECQBuYW1lX2hhc2i3mElRYHIcSQMKAG5ldHdvcmtfaWSssprwCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:cyan_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQwAwAACAQAbmFtZRMAbWluZWNyYWZ0OmN5YW5fd29vbAQJAG5hbWVfaGFzaBNDfvHn8dqFAwoAbmV0d29ya19pZK0hAbgKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:light_blue_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQxAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfd29vbAQJAG5hbWVfaGFzaLWFAUfyxFPNAwoAbmV0d29ya19pZL2oEugKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:blue_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQyAwAACAQAbmFtZRMAbWluZWNyYWZ0OmJsdWVfd29vbAQJAG5hbWVfaGFzaLjHyxxbTWCLAwoAbmV0d29ya19pZPaLdFQKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:purple_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQzAwAACAQAbmFtZRUAbWluZWNyYWZ0OnB1cnBsZV93b29sBAkAbmFtZV9oYXNojvFtqzjAf/4DCgBuZXR3b3JrX2lklqASNQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:magenta_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ0AwAACAQAbmFtZRYAbWluZWNyYWZ0Om1hZ2VudGFfd29vbAQJAG5hbWVfaGFzaGuOHvf+Pd4yAwoAbmV0d29ya19pZI4UoDQKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:pink_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ1AwAACAQAbmFtZRMAbWluZWNyYWZ0OnBpbmtfd29vbAQJAG5hbWVfaGFzaPiVA2pFeoFLAwoAbmV0d29ya19pZOZRO6oKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:white_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAAAACAQAbmFtZRYAbWluZWNyYWZ0OndoaXRlX2NhcnBldAQJAG5hbWVfaGFzaNeMHTI1fWPXAwoAbmV0d29ya19pZEahDFcKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:light_gray_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAwAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FycGV0BAkAbmFtZV9oYXNoHPw6ArBAsP0DCgBuZXR3b3JrX2lkQoAeUAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:gray_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRaAwAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXlfY2FycGV0BAkAbmFtZV9oYXNoZVR0OI+1VRADCgBuZXR3b3JrX2lkETF4WwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:black_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJsYWNrX2NhcnBldAQJAG5hbWVfaGFzaOk7LP9NptyhAwoAbmV0d29ya19pZFjmXtIKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:brown_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRfAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJyb3duX2NhcnBldAQJAG5hbWVfaGFzaNaXFyOsAvIvAwoAbmV0d29ya19pZHPjFuoKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:red_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAwAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9jYXJwZXQECQBuYW1lX2hhc2i9eSKBf6SO3wMKAG5ldHdvcmtfaWQuhI/KCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:orange_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAwAACAQAbmFtZRcAbWluZWNyYWZ0Om9yYW5nZV9jYXJwZXQECQBuYW1lX2hhc2hIUkO4HlAdygMKAG5ldHdvcmtfaWSyKV9OCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:yellow_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAwAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19jYXJwZXQECQBuYW1lX2hhc2hSDKX3scCamwMKAG5ldHdvcmtfaWT8nq+ECgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:lime_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAwAACAQAbmFtZRUAbWluZWNyYWZ0OmxpbWVfY2FycGV0BAkAbmFtZV9oYXNo+6KFOpzsib4DCgBuZXR3b3JrX2lkT+DS4woGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:green_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRgAwAACAQAbmFtZRYAbWluZWNyYWZ0OmdyZWVuX2NhcnBldAQJAG5hbWVfaGFzaCHPMP9ltqFJAwoAbmV0d29ya19pZBgwAvAKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:cyan_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRcAwAACAQAbmFtZRUAbWluZWNyYWZ0OmN5YW5fY2FycGV0BAkAbmFtZV9oYXNobXf62dQBJj8DCgBuZXR3b3JrX2lkKVppLgoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:light_blue_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAwAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FycGV0BAkAbmFtZV9oYXNo20l4oktdZ3sDCgBuZXR3b3JrX2lkjdeMiwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:blue_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWReAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfY2FycGV0BAkAbmFtZV9oYXNo3p3lsW0eQwsDCgBuZXR3b3JrX2lkAovdPQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:purple_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRdAwAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnBsZV9jYXJwZXQECQBuYW1lX2hhc2jwIA9pW/qp7QMKAG5ldHdvcmtfaWTqJqhjCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:magenta_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAwAACAQAbmFtZRgAbWluZWNyYWZ0Om1hZ2VudGFfY2FycGV0BAkAbmFtZV9oYXNoFXT36YNNZhMDCgBuZXR3b3JrX2lk+tqsGAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:pink_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRZAwAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfY2FycGV0BAkAbmFtZV9oYXNoHll72oqk+OoDCgBuZXR3b3JrX2lkrnBYDwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:white_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTtAAAACAQAbmFtZR8AbWluZWNyYWZ0OndoaXRlX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaFUk9iXVjwV8AwoAbmV0d29ya19pZJPZY8AKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:light_gray_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAwAACAQAbmFtZSQAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNo7EUk30hmUtYDCgBuZXR3b3JrX2lkh8jVIwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:gray_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAwAACAQAbmFtZR4AbWluZWNyYWZ0OmdyYXlfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoW77af6WihdwDCgBuZXR3b3JrX2lkSsqC1woGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:black_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTSAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJsYWNrX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaAfWYp0xtgcfAwoAbmV0d29ya19pZMWTC8EKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:brown_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTPAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJyb3duX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaB74EeiLO46XAwoAbmV0d29ya19pZEDHKqwKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:red_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTRAwAACAQAbmFtZR0AbWluZWNyYWZ0OnJlZF9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2gjFut6Z/VH1gMKAG5ldHdvcmtfaWSvcmwYCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:orange_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAwAACAQAbmFtZSAAbWluZWNyYWZ0Om9yYW5nZV9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2gADDj2IJiw+gMKAG5ldHdvcmtfaWTHph0FCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:yellow_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTHAwAACAQAbmFtZSAAbWluZWNyYWZ0OnllbGxvd19jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2iy6qKNn3ob5wMKAG5ldHdvcmtfaWQZAI39CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:lime_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAwAACAQAbmFtZR4AbWluZWNyYWZ0OmxpbWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNo4dYIPslbXPUDCgBuZXR3b3JrX2lk2O8X0AoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:green_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTQAwAACAQAbmFtZR8AbWluZWNyYWZ0OmdyZWVuX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaM/c9x2aJh3HAwoAbmV0d29ya19pZA0VfBMKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:cyan_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTMAwAACAQAbmFtZR4AbWluZWNyYWZ0OmN5YW5fY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNok+xKAe7XXjoDCgBuZXR3b3JrX2lkmkn6uwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:light_blue_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTGAwAACAQAbmFtZSQAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNogScpIQceyAEDCgBuZXR3b3JrX2lkOmVSbgoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:blue_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTOAwAACAQAbmFtZR4AbWluZWNyYWZ0OmJsdWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoFp7mmeL86r0DCgBuZXR3b3JrX2lkS3b3RQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:purple_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAwAACAQAbmFtZSAAbWluZWNyYWZ0OnB1cnBsZV9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2iYcVU04hoStwMKAG5ldHdvcmtfaWQXimEjCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:magenta_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAwAACAQAbmFtZSEAbWluZWNyYWZ0Om1hZ2VudGFfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoy/70q6VPsWgDCgBuZXR3b3JrX2lkf9mxQwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:pink_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAwAACAQAbmFtZR4AbWluZWNyYWZ0OnBpbmtfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoVikSAf8DwV0DCgBuZXR3b3JrX2lku2MivwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:white_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTsAAAACAQAbmFtZRgAbWluZWNyYWZ0OndoaXRlX2NvbmNyZXRlBAkAbmFtZV9oYXNo6zAp7lsLlvkDCgBuZXR3b3JrX2lk3MAYQAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:light_gray_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AwAACAQAbmFtZR0AbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY29uY3JldGUECQBuYW1lX2hhc2hEtet5wuDIKAMKAG5ldHdvcmtfaWQISs02CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:gray_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AwAACAQAbmFtZRcAbWluZWNyYWZ0OmdyYXlfY29uY3JldGUECQBuYW1lX2hhc2j92INnb0a83AMKAG5ldHdvcmtfaWQj8RHwCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:black_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAwAACAQAbmFtZRgAbWluZWNyYWZ0OmJsYWNrX2NvbmNyZXRlBAkAbmFtZV9oYXNo2X7NDIQmZ70DCgBuZXR3b3JrX2lk2uiVDQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:brown_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AwAACAQAbmFtZRgAbWluZWNyYWZ0OmJyb3duX2NvbmNyZXRlBAkAbmFtZV9oYXNoeka02BwXf6oDCgBuZXR3b3JrX2lkYf+xDQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:red_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAwAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZF9jb25jcmV0ZQQJAG5hbWVfaGFzaPWmNowLGubqAwoAbmV0d29ya19pZKwyx58KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:orange_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRzAwAACAQAbmFtZRkAbWluZWNyYWZ0Om9yYW5nZV9jb25jcmV0ZQQJAG5hbWVfaGFzaAgE8XmaAi6+AwoAbmV0d29ya19pZMDQNz8KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:yellow_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR2AwAACAQAbmFtZRkAbWluZWNyYWZ0OnllbGxvd19jb25jcmV0ZQQJAG5hbWVfaGFzaE6ONfJPBd0+AwoAbmV0d29ya19pZMarutwKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:lime_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR3AwAACAQAbmFtZRcAbWluZWNyYWZ0OmxpbWVfY29uY3JldGUECQBuYW1lX2hhc2gnd8JW6wmJcAMKAG5ldHdvcmtfaWTd47aoCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:green_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR/AwAACAQAbmFtZRgAbWluZWNyYWZ0OmdyZWVuX2NvbmNyZXRlBAkAbmFtZV9oYXNokbFxRKchQZkDCgBuZXR3b3JrX2lkmhZWUgoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:cyan_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AwAACAQAbmFtZRcAbWluZWNyYWZ0OmN5YW5fY29uY3JldGUECQBuYW1lX2hhc2hFRrWJ33qj1wMKAG5ldHdvcmtfaWQbi5b8CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:light_blue_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR1AwAACAQAbmFtZR0AbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY29uY3JldGUECQBuYW1lX2hhc2gHAe0kl0SE4AMKAG5ldHdvcmtfaWRL/GbSCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:blue_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AwAACAQAbmFtZRcAbWluZWNyYWZ0OmJsdWVfY29uY3JldGUECQBuYW1lX2hhc2hiay301nnj1wMKAG5ldHdvcmtfaWRMvFXNCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:purple_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR8AwAACAQAbmFtZRkAbWluZWNyYWZ0OnB1cnBsZV9jb25jcmV0ZQQJAG5hbWVfaGFzaHBHflsPIwdXAwoAbmV0d29ya19pZCyKA5gKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:magenta_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR0AwAACAQAbmFtZRoAbWluZWNyYWZ0Om1hZ2VudGFfY29uY3JldGUECQBuYW1lX2hhc2gN7LuB/OvdZAMKAG5ldHdvcmtfaWTc6ZOdCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:pink_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AwAACAQAbmFtZRcAbWluZWNyYWZ0OnBpbmtfY29uY3JldGUECQBuYW1lX2hhc2ii2G5F0u3SOAMKAG5ldHdvcmtfaWSszGgrCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:clay", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRSAAAACAQAbmFtZQ4AbWluZWNyYWZ0OmNsYXkECQBuYW1lX2hhc2j/S6sKXRcpzwMKAG5ldHdvcmtfaWRmsb8nCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:hardened_clay", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAAAACAQAbmFtZRcAbWluZWNyYWZ0OmhhcmRlbmVkX2NsYXkECQBuYW1lX2hhc2jrnRwCJ0krJAMKAG5ldHdvcmtfaWRBCOrrCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:white_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSfAAAACAQAbmFtZRoAbWluZWNyYWZ0OndoaXRlX3RlcnJhY290dGEECQBuYW1lX2hhc2j3RSdgmnAIewMKAG5ldHdvcmtfaWSimKw+CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:light_gray_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAwAACAQAbmFtZR8AbWluZWNyYWZ0OmxpZ2h0X2dyYXlfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAz1Ri3wIxomAwoAbmV0d29ya19pZH5qgOcKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:gray_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAwAACAQAbmFtZRkAbWluZWNyYWZ0OmdyYXlfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAXdSLAaNZ9vAwoAbmV0d29ya19pZM1QDV0KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:black_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWThAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJsYWNrX3RlcnJhY290dGEECQBuYW1lX2hhc2jxssdv5vlbpgMKAG5ldHdvcmtfaWRE3Ru/CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:brown_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJyb3duX3RlcnJhY290dGEECQBuYW1lX2hhc2gG4kPenmOF9gMKAG5ldHdvcmtfaWQ/i0iNCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:red_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAwAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNo7fX56HXFejEDCgBuZXR3b3JrX2lk8tTF8QoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:orange_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAwAACAQAbmFtZRsAbWluZWNyYWZ0Om9yYW5nZV90ZXJyYWNvdHRhBAkAbmFtZV9oYXNo0Hjmql3sruMDCgBuZXR3b3JrX2lklmqmkAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:yellow_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAwAACAQAbmFtZRsAbWluZWNyYWZ0OnllbGxvd190ZXJyYWNvdHRhBAkAbmFtZV9oYXNoqkyKKrmA3VcDCgBuZXR3b3JrX2lkaM/orAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:lime_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpbWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaANjADFOF9v7AwoAbmV0d29ya19pZJt0XsgKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:green_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAwAACAQAbmFtZRoAbWluZWNyYWZ0OmdyZWVuX3RlcnJhY290dGEECQBuYW1lX2hhc2j5Ybq36yYwRQMKAG5ldHdvcmtfaWQ8kGdHCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:cyan_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAwAACAQAbmFtZRkAbWluZWNyYWZ0OmN5YW5fdGVycmFjb3R0YQQJAG5hbWVfaGFzaN09COzMuHwAAwoAbmV0d29ya19pZIWPCzoKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:light_blue_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAwAACAQAbmFtZR8AbWluZWNyYWZ0OmxpZ2h0X2JsdWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaOMytez7cOZiAwoAbmV0d29ya19pZFHK1UsKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:blue_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAwAACAQAbmFtZRkAbWluZWNyYWZ0OmJsdWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaF6inyTK5RpAAwoAbmV0d29ya19pZF5mVZIKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:purple_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAwAACAQAbmFtZRsAbWluZWNyYWZ0OnB1cnBsZV90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoKF7YG61yTbEDCgBuZXR3b3JrX2lkhtRDlwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:magenta_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAwAACAQAbmFtZRwAbWluZWNyYWZ0Om1hZ2VudGFfdGVycmFjb3R0YQQJAG5hbWVfaGFzaLWvtpAVtztyAwoAbmV0d29ya19pZN5SoakKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:pink_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAwAACAQAbmFtZRkAbWluZWNyYWZ0OnBpbmtfdGVycmFjb3R0YQQJAG5hbWVfaGFzaJ7mzvyzSQZTAwoAbmV0d29ya19pZDJWe4YKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:white_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAAAACAQAbmFtZSEAbWluZWNyYWZ0OndoaXRlX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoiVzCdoHAJo0DCgBuZXR3b3JrX2lkIlj9AAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:silver_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAAAACAQAbmFtZSIAbWluZWNyYWZ0OnNpbHZlcl9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAVsA0CnhzA4AwoAbmV0d29ya19pZPnxtJEKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:gray_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAAAACAQAbmFtZSAAbWluZWNyYWZ0OmdyYXlfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2jvLZt9u/lF/AMKAG5ldHdvcmtfaWQVU8eFCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:black_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAAAACAQAbmFtZSEAbWluZWNyYWZ0OmJsYWNrX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoe8I4xAXbO5UDCgBuZXR3b3JrX2lk2Icb9AoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:brown_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWToAAAACAQAbmFtZSEAbWluZWNyYWZ0OmJyb3duX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoSiNZOobbpjoDCgBuZXR3b3JrX2lkJy0jwgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:red_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAAAACAQAbmFtZR8AbWluZWNyYWZ0OnJlZF9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaBdWFGLmCLFVAwoAbmV0d29ya19pZMYBJSEKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:orange_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAAAACAQAbmFtZSIAbWluZWNyYWZ0Om9yYW5nZV9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaMyJMrnPr7szAwoAbmV0d29ya19pZN6+7TUKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:yellow_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAAAACAQAbmFtZSIAbWluZWNyYWZ0OnllbGxvd19nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaN6NaIhf6m0uAwoAbmV0d29ya19pZKRHXeoKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:lime_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWThAAAACAQAbmFtZSAAbWluZWNyYWZ0OmxpbWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2iF3E68/rB2EAMKAG5ldHdvcmtfaWSP7qQWCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:green_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAAAACAQAbmFtZSEAbWluZWNyYWZ0OmdyZWVuX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNow5mo8aQDFboDCgBuZXR3b3JrX2lkoF11kgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:cyan_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAAAACAQAbmFtZSAAbWluZWNyYWZ0OmN5YW5fZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2gnNB+cCFRJhwMKAG5ldHdvcmtfaWT9buMtCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:light_blue_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAAAACAQAbmFtZSYAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2gladnCDBKCigMKAG5ldHdvcmtfaWS5CszFCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:blue_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAAAACAQAbmFtZSAAbWluZWNyYWZ0OmJsdWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2giOZK+2nB1igMKAG5ldHdvcmtfaWR+e22CCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:purple_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAAAACAQAbmFtZSIAbWluZWNyYWZ0OnB1cnBsZV9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaIQU03txeAfHAwoAbmV0d29ya19pZLKbSE4KBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:magenta_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAAAACAQAbmFtZSMAbWluZWNyYWZ0Om1hZ2VudGFfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2i/SNqDJbfjMgMKAG5ldHdvcmtfaWQKf9UvCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:pink_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAAAACAQAbmFtZSAAbWluZWNyYWZ0OnBpbmtfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2hik8DVt4g+twMKAG5ldHdvcmtfaWTKzav2CgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:purpur_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAAAACAQAbmFtZRYAbWluZWNyYWZ0OnB1cnB1cl9ibG9jawQJAG5hbWVfaGFzaAgLwnUZGlzsAwoAbmV0d29ya19pZLD8ox4KBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQcAZGVmYXVsdAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:purpur_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAAAACAQAbmFtZRYAbWluZWNyYWZ0OnB1cnB1cl9ibG9jawQJAG5hbWVfaGFzaAgLwnUZGlzsAwoAbmV0d29ya19pZPSAFFsKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQUAbGluZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:packed_mud", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAgAACAQAbmFtZRQAbWluZWNyYWZ0OnBhY2tlZF9tdWQECQBuYW1lX2hhc2gHOMa121h4FgMKAG5ldHdvcmtfaWTUb6LyCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:mud_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAgAACAQAbmFtZRQAbWluZWNyYWZ0Om11ZF9icmlja3MECQBuYW1lX2hhc2iDL/SVl/PewQMKAG5ldHdvcmtfaWSkBjaDCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:nether_wart_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAAAACAQAbmFtZRsAbWluZWNyYWZ0Om5ldGhlcl93YXJ0X2Jsb2NrBAkAbmFtZV9oYXNo9XGS4GNnlV4DCgBuZXR3b3JrX2lkh3apIgoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:warped_wart_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAQAACAQAbmFtZRsAbWluZWNyYWZ0OndhcnBlZF93YXJ0X2Jsb2NrBAkAbmFtZV9oYXNo9IqDS9yUPJoDCgBuZXR3b3JrX2lkMpKAbAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:shroomlight", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAQAACAQAbmFtZRUAbWluZWNyYWZ0OnNocm9vbWxpZ2h0BAkAbmFtZV9oYXNoZHCHcHX/HYADCgBuZXR3b3JrX2lkLG2JiwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:crimson_nylium", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fbnlsaXVtBAkAbmFtZV9oYXNoOr6DJYW2bFYDCgBuZXR3b3JrX2lkuWpRDgoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:warped_nylium", - "block_state_b64": "CgAAAwgAYmxvY2tfaWToAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9ueWxpdW0ECQBuYW1lX2hhc2g0Zf89cfr3rwMKAG5ldHdvcmtfaWSu/kekCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:netherrack", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAAAACAQAbmFtZRQAbWluZWNyYWZ0Om5ldGhlcnJhY2sECQBuYW1lX2hhc2i/r5ZyRsvPyQMKAG5ldHdvcmtfaWTAiTOACgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:basalt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhc2FsdAQJAG5hbWVfaGFzaH+UQO2yWodiAwoAbmV0d29ya19pZBPNSV4KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:polished_basalt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAQAACAQAbmFtZRkAbWluZWNyYWZ0OnBvbGlzaGVkX2Jhc2FsdAQJAG5hbWVfaGFzaMS+L0gMnRcBAwoAbmV0d29ya19pZF+/mHwKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:smooth_basalt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AgAACAQAbmFtZRcAbWluZWNyYWZ0OnNtb290aF9iYXNhbHQECQBuYW1lX2hhc2jKPUdz89kuNAMKAG5ldHdvcmtfaWTkb/oVCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:soul_soil", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAQAACAQAbmFtZRMAbWluZWNyYWZ0OnNvdWxfc29pbAQJAG5hbWVfaGFzaC1/87ccutuTAwoAbmV0d29ya19pZKc63SMKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:dirt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAAAACAQAbmFtZQ4AbWluZWNyYWZ0OmRpcnQECQBuYW1lX2hhc2hXp6jnXAe+kQMKAG5ldHdvcmtfaWSG706CCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:coarse_dirt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTBBAAACAQAbmFtZRUAbWluZWNyYWZ0OmNvYXJzZV9kaXJ0BAkAbmFtZV9oYXNosd+cah7WSmoDCgBuZXR3b3JrX2lkgS5RcAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:farmland", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AAAACAQAbmFtZRIAbWluZWNyYWZ0OmZhcm1sYW5kBAkAbmFtZV9oYXNoxyQ5ag7LolADCgBuZXR3b3JrX2lkX618FQoGAHN0YXRlcwMSAG1vaXN0dXJpemVkX2Ftb3VudAAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:grass_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAAAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXNzX2Jsb2NrBAkAbmFtZV9oYXNojPyGp3/CSZwDCgBuZXR3b3JrX2lktCgx3goGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:grass_path", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTGAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdyYXNzX3BhdGgECQBuYW1lX2hhc2i0/KZV8Qsy+gMKAG5ldHdvcmtfaWT7CcdzCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:podzol", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTzAAAACAQAbmFtZRAAbWluZWNyYWZ0OnBvZHpvbAQJAG5hbWVfaGFzaBzqokRjH4Z1AwoAbmV0d29ya19pZPPS/GUKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:mycelium", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAAAACAQAbmFtZRIAbWluZWNyYWZ0Om15Y2VsaXVtBAkAbmFtZV9oYXNojTN09cKickIDCgBuZXR3b3JrX2lkLNPxXQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:mud", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAgAACAQAbmFtZQ0AbWluZWNyYWZ0Om11ZAQJAG5hbWVfaGFzaPb/3P+uLy+9AwoAbmV0d29ya19pZPIUlUkKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:stone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lkIQ4xgAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:iron_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAAAACAQAbmFtZRIAbWluZWNyYWZ0Omlyb25fb3JlBAkAbmFtZV9oYXNoS7BYtLnfx3gDCgBuZXR3b3JrX2lk3loneQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:gold_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAAAACAQAbmFtZRIAbWluZWNyYWZ0OmdvbGRfb3JlBAkAbmFtZV9oYXNoC5Y+DUGXLC4DCgBuZXR3b3JrX2lkNhvMfwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:diamond_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4AAAACAQAbmFtZRUAbWluZWNyYWZ0OmRpYW1vbmRfb3JlBAkAbmFtZV9oYXNokUOJ2wZZrGQDCgBuZXR3b3JrX2lk/dChVAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:lapis_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQVAAAACAQAbmFtZRMAbWluZWNyYWZ0OmxhcGlzX29yZQQJAG5hbWVfaGFzaMrmrUrSzb7qAwoAbmV0d29ya19pZMg+qK4KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:redstone_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAAAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZHN0b25lX29yZQQJAG5hbWVfaGFzaFHVnp8Wc4JbAwoAbmV0d29ya19pZKDYvQoKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:coal_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAAAACAQAbmFtZRIAbWluZWNyYWZ0OmNvYWxfb3JlBAkAbmFtZV9oYXNo1OjA+Iuy51oDCgBuZXR3b3JrX2lk+R/aKAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:copper_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2AgAACAQAbmFtZRQAbWluZWNyYWZ0OmNvcHBlcl9vcmUECQBuYW1lX2hhc2iSZduSntOzOwMKAG5ldHdvcmtfaWQtIuCnCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:emerald_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAAAACAQAbmFtZRUAbWluZWNyYWZ0OmVtZXJhbGRfb3JlBAkAbmFtZV9oYXNoJTovr+VgINsDCgBuZXR3b3JrX2lknbkqCgoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:quartz_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAAAACAQAbmFtZRQAbWluZWNyYWZ0OnF1YXJ0el9vcmUECQBuYW1lX2hhc2g0yNHLMK9TaQMKAG5ldHdvcmtfaWSzN7nzCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:nether_gold_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQfAgAACAQAbmFtZRkAbWluZWNyYWZ0Om5ldGhlcl9nb2xkX29yZQQJAG5hbWVfaGFzaEJZ7segIBgBAwoAbmV0d29ya19pZNI9pDgKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:ancient_debris", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAgAACAQAbmFtZRgAbWluZWNyYWZ0OmFuY2llbnRfZGVicmlzBAkAbmFtZV9oYXNoNrbxMc9AwKcDCgBuZXR3b3JrX2lkrSNjEAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:deepslate_iron_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9pcm9uX29yZQQJAG5hbWVfaGFzaB/fDL9pgvXXAwoAbmV0d29ya19pZFA0bz4KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:deepslate_gold_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9nb2xkX29yZQQJAG5hbWVfaGFzaF9G7WYhKFinAwoAbmV0d29ya19pZHQTfBUKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:deepslate_diamond_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV9kaWFtb25kX29yZQQJAG5hbWVfaGFzaEUH5USh+iD3AwoAbmV0d29ya19pZHP6VzAKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:deepslate_lapis_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV9sYXBpc19vcmUECQBuYW1lX2hhc2j+yFxU/KZs1gMKAG5ldHdvcmtfaWRKINzICgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:deepslate_redstone_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAgAACAQAbmFtZSAAbWluZWNyYWZ0OmRlZXBzbGF0ZV9yZWRzdG9uZV9vcmUECQBuYW1lX2hhc2iVgM3wWWD6ugMKAG5ldHdvcmtfaWReBdYRCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:deepslate_emerald_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSWAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV9lbWVyYWxkX29yZQQJAG5hbWVfaGFzaNlfo5HTwS6wAwoAbmV0d29ya19pZNeie6sKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:deepslate_coal_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSVAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9jb2FsX29yZQQJAG5hbWVfaGFzaIjikmcbRrPPAwoAbmV0d29ya19pZD9TiygKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:deepslate_copper_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9jb3BwZXJfb3JlBAkAbmFtZV9oYXNottjV4Ev5LAQDCgBuZXR3b3JrX2lkP23rgQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:gravel", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAAAACAQAbmFtZRAAbWluZWNyYWZ0OmdyYXZlbAQJAG5hbWVfaGFzaOFxz8XJd2r/AwoAbmV0d29ya19pZBpfI1sKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:granite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAwAACAQAbmFtZREAbWluZWNyYWZ0OmdyYW5pdGUECQBuYW1lX2hhc2iq+Dur2pw4AwMKAG5ldHdvcmtfaWT2NMfJCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:diorite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAwAACAQAbmFtZREAbWluZWNyYWZ0OmRpb3JpdGUECQBuYW1lX2hhc2iaFsq2iinZBQMKAG5ldHdvcmtfaWQqGE6XCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:andesite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAwAACAQAbmFtZRIAbWluZWNyYWZ0OmFuZGVzaXRlBAkAbmFtZV9oYXNosaLIEnQQoSYDCgBuZXR3b3JrX2lkEApRZAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:blackstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAgAACAQAbmFtZRQAbWluZWNyYWZ0OmJsYWNrc3RvbmUECQBuYW1lX2hhc2iMFYziD80D6QMKAG5ldHdvcmtfaWSrUryHCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AgAACAQAbmFtZRMAbWluZWNyYWZ0OmRlZXBzbGF0ZQQJAG5hbWVfaGFzaKX5pAblxz8TAwoAbmV0d29ya19pZOJoQjsKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:polished_granite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWROAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGUECQBuYW1lX2hhc2iLiEfys8pFIAMKAG5ldHdvcmtfaWTCxxcHCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:polished_diorite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGUECQBuYW1lX2hhc2hTxY4fKmNmlAMKAG5ldHdvcmtfaWTmtjdRCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:polished_andesite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRSAwAACAQAbmFtZRsAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlBAkAbmFtZV9oYXNovl28uFk4HuQDCgBuZXR3b3JrX2lklFjuCwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:polished_blackstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQiAgAACAQAbmFtZR0AbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmUECQBuYW1lX2hhc2jT9fHCl6vWQQMKAG5ldHdvcmtfaWR/Ho6oCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:polished_deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AgAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaHC1edoaWF3uAwoAbmV0d29ya19pZCPeQsEKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:sand", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQMAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnNhbmQECQBuYW1lX2hhc2i6lthXXbAyWAMKAG5ldHdvcmtfaWRjeUMICgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:red_sand", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS0BAAACAQAbmFtZRIAbWluZWNyYWZ0OnJlZF9zYW5kBAkAbmFtZV9oYXNoCiarI69JQCkDCgBuZXR3b3JrX2lkU8UD/AoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:cactus", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAAAACAQAbmFtZRAAbWluZWNyYWZ0OmNhY3R1cwQJAG5hbWVfaGFzaCG9zL0N4wvGAwoAbmV0d29ya19pZDeCERAKBgBzdGF0ZXMDAwBhZ2UAAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:oak_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAAAACAQAbmFtZREAbWluZWNyYWZ0Om9ha19sb2cECQBuYW1lX2hhc2ho6TS+K7PZFQMKAG5ldHdvcmtfaWQjfjoxCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:stripped_oak_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQJAQAACAQAbmFtZRoAbWluZWNyYWZ0OnN0cmlwcGVkX29ha19sb2cECQBuYW1lX2hhc2h8dqh+OOHU4wMKAG5ldHdvcmtfaWSYKjdrCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:spruce_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4AwAACAQAbmFtZRQAbWluZWNyYWZ0OnNwcnVjZV9sb2cECQBuYW1lX2hhc2hZ03qaLoF3WgMKAG5ldHdvcmtfaWRlFD8eCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:stripped_spruce_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX3NwcnVjZV9sb2cECQBuYW1lX2hhc2iNrhKjS5IyrgMKAG5ldHdvcmtfaWRQcEC3CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:birch_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5AwAACAQAbmFtZRMAbWluZWNyYWZ0OmJpcmNoX2xvZwQJAG5hbWVfaGFzaBUzT3NxsZAnAwoAbmV0d29ya19pZBKN3VQKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:stripped_birch_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAQAACAQAbmFtZRwAbWluZWNyYWZ0OnN0cmlwcGVkX2JpcmNoX2xvZwQJAG5hbWVfaGFzaCFKS4AeuSidAwoAbmV0d29ya19pZN0IONIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:jungle_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6AwAACAQAbmFtZRQAbWluZWNyYWZ0Omp1bmdsZV9sb2cECQBuYW1lX2hhc2gkwW0KNulqDgMKAG5ldHdvcmtfaWQaziU/CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:stripped_jungle_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2p1bmdsZV9sb2cECQBuYW1lX2hhc2hAwMsgOk02JAMKAG5ldHdvcmtfaWQvls0eCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:acacia_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAAAACAQAbmFtZRQAbWluZWNyYWZ0OmFjYWNpYV9sb2cECQBuYW1lX2hhc2iV48VpYhjoYQMKAG5ldHdvcmtfaWRxEqe0CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:stripped_acacia_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2FjYWNpYV9sb2cECQBuYW1lX2hhc2hJb0lQqnEqlgMKAG5ldHdvcmtfaWRg3IdRCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:dark_oak_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ7AwAACAQAbmFtZRYAbWluZWNyYWZ0OmRhcmtfb2FrX2xvZwQJAG5hbWVfaGFzaIWfVRd0XUo3AwoAbmV0d29ya19pZPMM7LYKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:stripped_dark_oak_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQIAQAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2Rhcmtfb2FrX2xvZwQJAG5hbWVfaGFzaPFTdxRdPwkOAwoAbmV0d29ya19pZDIzenIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:mangrove_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAgAACAQAbmFtZRYAbWluZWNyYWZ0Om1hbmdyb3ZlX2xvZwQJAG5hbWVfaGFzaHZe6DzPZBobAwoAbmV0d29ya19pZG6DuYkKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:stripped_mangrove_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX21hbmdyb3ZlX2xvZwQJAG5hbWVfaGFzaLqIBo4hwA//AwoAbmV0d29ya19pZPtRn7UKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:cherry_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAwAACAQAbmFtZRQAbWluZWNyYWZ0OmNoZXJyeV9sb2cECQBuYW1lX2hhc2hwFlaioppB1wMKAG5ldHdvcmtfaWS2sdXECgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:stripped_cherry_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAwAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2NoZXJyeV9sb2cECQBuYW1lX2hhc2i85H6G+WhXaAMKAG5ldHdvcmtfaWRjzoglCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:crimson_stem", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAQAACAQAbmFtZRYAbWluZWNyYWZ0OmNyaW1zb25fc3RlbQQJAG5hbWVfaGFzaM0FzfL0UTKZAwoAbmV0d29ya19pZKvzID0KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:stripped_crimson_stem", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTvAQAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2NyaW1zb25fc3RlbQQJAG5hbWVfaGFzaDlA6nood57EAwoAbmV0d29ya19pZHrIqjIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:warped_stem", - "block_state_b64": "CgAAAwgAYmxvY2tfaWThAQAACAQAbmFtZRUAbWluZWNyYWZ0OndhcnBlZF9zdGVtBAkAbmFtZV9oYXNon7cKfPZxdrUDCgBuZXR3b3JrX2lkerWyMwoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:stripped_warped_stem", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAQAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX3dhcnBlZF9zdGVtBAkAbmFtZV9oYXNoEw+y0dDPSd8DCgBuZXR3b3JrX2lkIQ9vBAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:oak_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAQAACAQAbmFtZRIAbWluZWNyYWZ0Om9ha193b29kBAkAbmFtZV9oYXNoqQIkuVPyJX0DCgBuZXR3b3JrX2lku2G1YAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:spruce_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQtBAAACAQAbmFtZRUAbWluZWNyYWZ0OnNwcnVjZV93b29kBAkAbmFtZV9oYXNoTrIJ5TAQ+OgDCgBuZXR3b3JrX2lkaXLxCwoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:birch_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQuBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJpcmNoX3dvb2QECQBuYW1lX2hhc2iqVjG4xt0cKQMKAG5ldHdvcmtfaWS06c5VCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:jungle_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQvBAAACAQAbmFtZRUAbWluZWNyYWZ0Omp1bmdsZV93b29kBAkAbmFtZV9oYXNo9bYW29ORWCoDCgBuZXR3b3JrX2lkyFyKLQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:acacia_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQwBAAACAQAbmFtZRUAbWluZWNyYWZ0OmFjYWNpYV93b29kBAkAbmFtZV9oYXNoKkDfgzlJUcIDCgBuZXR3b3JrX2lkuTWlcgoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:dark_oak_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQxBAAACAQAbmFtZRcAbWluZWNyYWZ0OmRhcmtfb2FrX3dvb2QECQBuYW1lX2hhc2jaKv4ORLadAAMKAG5ldHdvcmtfaWSDrNQ8CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:stripped_oak_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQyBAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0cmlwcGVkX29ha193b29kBAkAbmFtZV9oYXNovW6KCv+VZnsDCgBuZXR3b3JrX2lkkhWGegoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:stripped_spruce_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQzBAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX3NwcnVjZV93b29kBAkAbmFtZV9oYXNoMnuUk4Xo6icDCgBuZXR3b3JrX2lkes2ydAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:stripped_birch_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ0BAAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2JpcmNoX3dvb2QECQBuYW1lX2hhc2hm88R604TKbAMKAG5ldHdvcmtfaWRleEMJCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:stripped_jungle_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ1BAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2p1bmdsZV93b29kBAkAbmFtZV9oYXNoUVs6KsZQRBoDCgBuZXR3b3JrX2lk92k8HQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:stripped_acacia_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2BAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2FjYWNpYV93b29kBAkAbmFtZV9oYXNo/kOPN2bCJhUDCgBuZXR3b3JrX2lktl6LwQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:stripped_dark_oak_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ3BAAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX2Rhcmtfb2FrX3dvb2QECQBuYW1lX2hhc2h2jFDfKVFgfAMKAG5ldHdvcmtfaWTgZQ5VCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:mangrove_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAgAACAQAbmFtZRcAbWluZWNyYWZ0Om1hbmdyb3ZlX3dvb2QECQBuYW1lX2hhc2iXVxG0JG2fVAMKAG5ldHdvcmtfaWTok1JCCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:stripped_mangrove_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAgAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX21hbmdyb3ZlX3dvb2QECQBuYW1lX2hhc2h7CkbaBF7/WAMKAG5ldHdvcmtfaWQLAX88CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:cherry_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQhAwAACAQAbmFtZRUAbWluZWNyYWZ0OmNoZXJyeV93b29kBAkAbmFtZV9oYXNoAW8srlmpBM8DCgBuZXR3b3JrX2lkEALMfAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AQwAc3RyaXBwZWRfYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:stripped_cherry_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAwAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2NoZXJyeV93b29kBAkAbmFtZV9oYXNo/e7KXv+CB38DCgBuZXR3b3JrX2lkg5aVtQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:crimson_hyphae", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25faHlwaGFlBAkAbmFtZV9oYXNouRmKmfSqEWADCgBuZXR3b3JrX2lk+Tm5rQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:stripped_crimson_hyphae", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQrAgAACAQAbmFtZSEAbWluZWNyYWZ0OnN0cmlwcGVkX2NyaW1zb25faHlwaGFlBAkAbmFtZV9oYXNoFffwmABq4LUDCgBuZXR3b3JrX2lkZAlUbgoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:warped_hyphae", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9oeXBoYWUECQBuYW1lX2hhc2hn8plQUr6pmQMKAG5ldHdvcmtfaWRU2AIBCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:stripped_warped_hyphae", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAgAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX3dhcnBlZF9oeXBoYWUECQBuYW1lX2hhc2irKq+HYPSgjQMKAG5ldHdvcmtfaWSbrOPDCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:bamboo_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJhbWJvb19ibG9jawQJAG5hbWVfaGFzaAbDeur6stIBAwoAbmV0d29ya19pZCJAwn0KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:stripped_bamboo_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAwAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2JhbWJvb19ibG9jawQJAG5hbWVfaGFzaJpwytpZOZM9AwoAbmV0d29ya19pZKuRbNEKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:oak_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQSAAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19sZWF2ZXMECQBuYW1lX2hhc2h6O4xGqA2oKgMKAG5ldHdvcmtfaWT98c59CgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:spruce_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQfBAAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9sZWF2ZXMECQBuYW1lX2hhc2i9x1CtNAuqZwMKAG5ldHdvcmtfaWSzF7pTCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:birch_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQgBAAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX2xlYXZlcwQJAG5hbWVfaGFzaBlAGHaoaLZSAwoAbmV0d29ya19pZOjtvWcKBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:jungle_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQhBAAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9sZWF2ZXMECQBuYW1lX2hhc2iW1uAH07zGhgMKAG5ldHdvcmtfaWSA5KX0CgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:acacia_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAAAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9sZWF2ZXMECQBuYW1lX2hhc2iZJf8dAgDRNQMKAG5ldHdvcmtfaWQ/G7VuCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:dark_oak_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQiBAAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX2xlYXZlcwQJAG5hbWVfaGFzaCk7rDipWFSjAwoAbmV0d29ya19pZJ2AkbYKBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:mangrove_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX2xlYXZlcwQJAG5hbWVfaGFzaKyI/dWvhEG8AwoAbmV0d29ya19pZPQxCZ8KBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:cherry_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9sZWF2ZXMECQBuYW1lX2hhc2giTs9ChhYBlQMKAG5ldHdvcmtfaWR8bPpwCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:azalea_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAgAACAQAbmFtZRcAbWluZWNyYWZ0OmF6YWxlYV9sZWF2ZXMECQBuYW1lX2hhc2iXFhD57wFS7AMKAG5ldHdvcmtfaWTNB/9ECgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:azalea_leaves_flowered", - "block_state_b64": "CgAAAwgAYmxvY2tfaWREAgAACAQAbmFtZSAAbWluZWNyYWZ0OmF6YWxlYV9sZWF2ZXNfZmxvd2VyZWQECQBuYW1lX2hhc2gs8jxlS/pMrwMKAG5ldHdvcmtfaWQ7W4PyCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:oak_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAAAACAQAbmFtZRUAbWluZWNyYWZ0Om9ha19zYXBsaW5nBAkAbmFtZV9oYXNoogXcT9QfjiUDCgBuZXR3b3JrX2lkG22C+AoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:spruce_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4BAAACAQAbmFtZRgAbWluZWNyYWZ0OnNwcnVjZV9zYXBsaW5nBAkAbmFtZV9oYXNoe8hz4uYP0FcDCgBuZXR3b3JrX2lkUQmhaQoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:birch_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5BAAACAQAbmFtZRcAbWluZWNyYWZ0OmJpcmNoX3NhcGxpbmcECQBuYW1lX2hhc2h348iJQ/tK4wMKAG5ldHdvcmtfaWQ2Uh53CgYAc3RhdGVzAQcAYWdlX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:jungle_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6BAAACAQAbmFtZRgAbWluZWNyYWZ0Omp1bmdsZV9zYXBsaW5nBAkAbmFtZV9oYXNo7tyTOdSrxaADCgBuZXR3b3JrX2lkXmBAdAoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:acacia_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ7BAAACAQAbmFtZRgAbWluZWNyYWZ0OmFjYWNpYV9zYXBsaW5nBAkAbmFtZV9oYXNo99sg15uoX7ADCgBuZXR3b3JrX2lkPXX1KgoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:dark_oak_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8BAAACAQAbmFtZRoAbWluZWNyYWZ0OmRhcmtfb2FrX3NhcGxpbmcECQBuYW1lX2hhc2jnVzFplW7cHgMKAG5ldHdvcmtfaWTD4giHCgYAc3RhdGVzAQcAYWdlX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:mangrove_propagule", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAgAACAQAbmFtZRwAbWluZWNyYWZ0Om1hbmdyb3ZlX3Byb3BhZ3VsZQQJAG5hbWVfaGFzaJGeox6hkfLFAwoAbmV0d29ya19pZAIpvpYKBgBzdGF0ZXMBBwBoYW5naW5nAAMPAHByb3BhZ3VsZV9zdGFnZQAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:cherry_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQiAwAACAQAbmFtZRgAbWluZWNyYWZ0OmNoZXJyeV9zYXBsaW5nBAkAbmFtZV9oYXNoGrPpNMf1LtcDCgBuZXR3b3JrX2lkypakXQoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:bee_nest", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAQAACAQAbmFtZRIAbWluZWNyYWZ0OmJlZV9uZXN0BAkAbmFtZV9oYXNo2R2WBxUHEZIDCgBuZXR3b3JrX2lkiXWLEAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAADCwBob25leV9sZXZlbAAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "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": "CgAAAwgAYmxvY2tfaWRnAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1lbG9uX2Jsb2NrBAkAbmFtZV9oYXNoXxSm0iYpAx8DCgBuZXR3b3JrX2lkC9rqygoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:melon_slice" - }, - { - "id": "minecraft:glistering_melon_slice" - }, - { - "id": "minecraft:sweet_berries" - }, - { - "id": "minecraft:glow_berries" - }, - { - "id": "minecraft:pumpkin", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAAAACAQAbmFtZREAbWluZWNyYWZ0OnB1bXBraW4ECQBuYW1lX2hhc2gc8A3jaSzWbgMKAG5ldHdvcmtfaWRFGA+xCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:carved_pumpkin", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSaAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNhcnZlZF9wdW1wa2luBAkAbmFtZV9oYXNoPu1T0MJuG90DCgBuZXR3b3JrX2lkXNNn5QoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:lit_pumpkin", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAAAACAQAbmFtZRUAbWluZWNyYWZ0OmxpdF9wdW1wa2luBAkAbmFtZV9oYXNo7gWtEm2uPL0DCgBuZXR3b3JrX2lki8sU4AoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:honeycomb" - }, - { - "id": "minecraft:fern", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRPBAAACAQAbmFtZQ4AbWluZWNyYWZ0OmZlcm4ECQBuYW1lX2hhc2iHbj3yXFn4owMKAG5ldHdvcmtfaWQKC6u7CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:large_fern", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRgBAAACAQAbmFtZRQAbWluZWNyYWZ0OmxhcmdlX2Zlcm4ECQBuYW1lX2hhc2gnE9sd0LzHtQMKAG5ldHdvcmtfaWTS9hG4CgYAc3RhdGVzAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:short_grass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQfAAAACAQAbmFtZRUAbWluZWNyYWZ0OnNob3J0X2dyYXNzBAkAbmFtZV9oYXNobWQghLH0bLcDCgBuZXR3b3JrX2lkJWOOqAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:tall_grass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRfBAAACAQAbmFtZRQAbWluZWNyYWZ0OnRhbGxfZ3Jhc3MECQBuYW1lX2hhc2ii5MyZJpv4sgMKAG5ldHdvcmtfaWRRfeH4CgYAc3RhdGVzAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:nether_sprouts" - }, - { - "id": "minecraft:fire_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAwAACAQAbmFtZRQAbWluZWNyYWZ0OmZpcmVfY29yYWwECQBuYW1lX2hhc2hOHyyECVQVJwMKAG5ldHdvcmtfaWS9vF0UCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:brain_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWREAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJyYWluX2NvcmFsBAkAbmFtZV9oYXNoRiWlLCwA2ycDCgBuZXR3b3JrX2lkrjAuhgoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:bubble_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbAQJAG5hbWVfaGFzaJz6rWnl+v2qAwoAbmV0d29ya19pZImIWy0KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:tube_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAQAACAQAbmFtZRQAbWluZWNyYWZ0OnR1YmVfY29yYWwECQBuYW1lX2hhc2iYa8oO/tgk7wMKAG5ldHdvcmtfaWRTfND5CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:horn_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRHAwAACAQAbmFtZRQAbWluZWNyYWZ0Omhvcm5fY29yYWwECQBuYW1lX2hhc2iZnRHjZbnLPgMKAG5ldHdvcmtfaWR+GGp8CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:dead_fire_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRLAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbAQJAG5hbWVfaGFzaEPU6tFy/latAwoAbmV0d29ya19pZNMa7V4KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:dead_brain_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAwAACAQAbmFtZRoAbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWwECQBuYW1lX2hhc2j5L6QJCISvzwMKAG5ldHdvcmtfaWQkKzeiCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:dead_bubble_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRKAwAACAQAbmFtZRsAbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsBAkAbmFtZV9oYXNoSTOZ/8wpeNYDCgBuZXR3b3JrX2lka6w9DAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:dead_tube_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbAQJAG5hbWVfaGFzaJGjNWhlaIJeAwoAbmV0d29ya19pZO3Z0ygKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:dead_horn_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbAQJAG5hbWVfaGFzaJBkz3qt+g2cAwoAbmV0d29ya19pZBAN+eYKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:fire_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRJBAAACAQAbmFtZRgAbWluZWNyYWZ0OmZpcmVfY29yYWxfZmFuBAkAbmFtZV9oYXNosOTxYYxsDLgDCgBuZXR3b3JrX2lkFKxbEgoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:brain_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRHBAAACAQAbmFtZRkAbWluZWNyYWZ0OmJyYWluX2NvcmFsX2ZhbgQJAG5hbWVfaGFzaAi5uHizSNcqAwoAbmV0d29ya19pZFtLjNwKBgBzdGF0ZXMDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:bubble_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRIBAAACAQAbmFtZRoAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbF9mYW4ECQBuYW1lX2hhc2hy/rX2on17DgMKAG5ldHdvcmtfaWQof60VCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:tube_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAQAACAQAbmFtZRgAbWluZWNyYWZ0OnR1YmVfY29yYWxfZmFuBAkAbmFtZV9oYXNo9pbJbo+PphIDCgBuZXR3b3JrX2lkenDTYgoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:horn_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRKBAAACAQAbmFtZRgAbWluZWNyYWZ0Omhvcm5fY29yYWxfZmFuBAkAbmFtZV9oYXNoA+ri6NPDkbUDCgBuZXR3b3JrX2lkezoHNwoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:dead_fire_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRNBAAACAQAbmFtZR0AbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbF9mYW4ECQBuYW1lX2hhc2hpQO02NDxPvwMKAG5ldHdvcmtfaWTaOJgLCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:dead_brain_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRLBAAACAQAbmFtZR4AbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWxfZmFuBAkAbmFtZV9oYXNoI9/+Z4YqMhIDCgBuZXR3b3JrX2lkqYXxYgoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:dead_bubble_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRMBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsX2ZhbgQJAG5hbWVfaGFzaBNECtIM6VIOAwoAbmV0d29ya19pZLrNtBEKBgBzdGF0ZXMDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:dead_tube_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAQAACAQAbmFtZR0AbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbF9mYW4ECQBuYW1lX2hhc2hbBBM9jFKWvQMKAG5ldHdvcmtfaWSkJKUWCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:dead_horn_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWROBAAACAQAbmFtZR0AbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbF9mYW4ECQBuYW1lX2hhc2hObElFrHfPygMKAG5ldHdvcmtfaWQ1ZxvmCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:crimson_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAQAACAQAbmFtZRcAbWluZWNyYWZ0OmNyaW1zb25fcm9vdHMECQBuYW1lX2hhc2j1fWgQLViv5QMKAG5ldHdvcmtfaWRLh5DXCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:warped_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAQAACAQAbmFtZRYAbWluZWNyYWZ0OndhcnBlZF9yb290cwQJAG5hbWVfaGFzaBc3WvbJOLlkAwoAbmV0d29ya19pZNLgDnAKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:dandelion", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQlAAAACAQAbmFtZRMAbWluZWNyYWZ0OmRhbmRlbGlvbgQJAG5hbWVfaGFzaBJ3bEUi+Nn/AwoAbmV0d29ya19pZBjjC44KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:poppy", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnBvcHB5BAkAbmFtZV9oYXNocMF8pITMbkcDCgBuZXR3b3JrX2lk8im6ywoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:blue_orchid", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ9BAAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfb3JjaGlkBAkAbmFtZV9oYXNoBjz2MsgB21EDCgBuZXR3b3JrX2lk/iLsSwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:allium", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ+BAAACAQAbmFtZRAAbWluZWNyYWZ0OmFsbGl1bQQJAG5hbWVfaGFzaDCGQBHNDTkcAwoAbmV0d29ya19pZD9Dgr0KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:azure_bluet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ/BAAACAQAbmFtZRUAbWluZWNyYWZ0OmF6dXJlX2JsdWV0BAkAbmFtZV9oYXNo9N5egqMT2QcDCgBuZXR3b3JrX2lkwIgDnwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:red_tulip", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRABAAACAQAbmFtZRMAbWluZWNyYWZ0OnJlZF90dWxpcAQJAG5hbWVfaGFzaAjMi9Rd+6rhAwoAbmV0d29ya19pZAZCnt8KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:orange_tulip", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRBBAAACAQAbmFtZRYAbWluZWNyYWZ0Om9yYW5nZV90dWxpcAQJAG5hbWVfaGFzaP+NjxMBZ8vAAwoAbmV0d29ya19pZPYatsMKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:white_tulip", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRCBAAACAQAbmFtZRUAbWluZWNyYWZ0OndoaXRlX3R1bGlwBAkAbmFtZV9oYXNo5vbU4VRPh3ADCgBuZXR3b3JrX2lkok+4rQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:pink_tulip", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRDBAAACAQAbmFtZRQAbWluZWNyYWZ0OnBpbmtfdHVsaXAECQBuYW1lX2hhc2hxDHZa6OaNXAMKAG5ldHdvcmtfaWTiOT+VCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:oxeye_daisy", - "block_state_b64": "CgAAAwgAYmxvY2tfaWREBAAACAQAbmFtZRUAbWluZWNyYWZ0Om94ZXllX2RhaXN5BAkAbmFtZV9oYXNoXwxsqNQTN9gDCgBuZXR3b3JrX2lkw7R7dwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:cornflower", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRFBAAACAQAbmFtZRQAbWluZWNyYWZ0OmNvcm5mbG93ZXIECQBuYW1lX2hhc2gnhyC3EeqHgAMKAG5ldHdvcmtfaWR4VrvACgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:lily_of_the_valley", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRGBAAACAQAbmFtZRwAbWluZWNyYWZ0OmxpbHlfb2ZfdGhlX3ZhbGxleQQJAG5hbWVfaGFzaI64TJSf9mgQAwoAbmV0d29ya19pZFE9+nwKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:sunflower", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAAAACAQAbmFtZRMAbWluZWNyYWZ0OnN1bmZsb3dlcgQJAG5hbWVfaGFzaAMxYQLoqlZ0AwoAbmV0d29ya19pZA10iSoKBgBzdGF0ZXMBDwB1cHBlcl9ibG9ja19iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:lilac", - "block_state_b64": "CgAAAwgAYmxvY2tfaWReBAAACAQAbmFtZQ8AbWluZWNyYWZ0OmxpbGFjBAkAbmFtZV9oYXNoD3nrQJuo7NkDCgBuZXR3b3JrX2lk5W+uFAoGAHN0YXRlcwEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:rose_bush", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhBAAACAQAbmFtZRMAbWluZWNyYWZ0OnJvc2VfYnVzaAQJAG5hbWVfaGFzaLoiFk8LVpGKAwoAbmV0d29ya19pZMZPv48KBgBzdGF0ZXMBDwB1cHBlcl9ibG9ja19iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:peony", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRiBAAACAQAbmFtZQ8AbWluZWNyYWZ0OnBlb255BAkAbmFtZV9oYXNoR4dYc4QquPADCgBuZXR3b3JrX2lkrTe7RwoGAHN0YXRlcwEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:pitcher_plant", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAwAACAQAbmFtZRcAbWluZWNyYWZ0OnBpdGNoZXJfcGxhbnQECQBuYW1lX2hhc2hRJHzsbDH+SQMKAG5ldHdvcmtfaWRnY76VCgYAc3RhdGVzAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:pink_petals", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQkAwAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfcGV0YWxzBAkAbmFtZV9oYXNo6DQwN9SwV3QDCgBuZXR3b3JrX2lkNWneGgoGAHN0YXRlcwMGAGdyb3d0aAAAAAAIHABtaW5lY3JhZnQ6Y2FyZGluYWxfZGlyZWN0aW9uBQBzb3V0aAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:wither_rose", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAQAACAQAbmFtZRUAbWluZWNyYWZ0OndpdGhlcl9yb3NlBAkAbmFtZV9oYXNoaSKxl3I516gDCgBuZXR3b3JrX2lkATXLPwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:torchflower", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ3AwAACAQAbmFtZRUAbWluZWNyYWZ0OnRvcmNoZmxvd2VyBAkAbmFtZV9oYXNoL+mHtElwbqQDCgBuZXR3b3JrX2lkI34O+AoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "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/XeXOLAMKAG5ldHdvcmtfaWSUkDtbCgYAc3RhdGVzAxMAdmluZV9kaXJlY3Rpb25fYml0cwAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:weeping_vines", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAQAACAQAbmFtZRcAbWluZWNyYWZ0OndlZXBpbmdfdmluZXMECQBuYW1lX2hhc2jrLgLHkQygiwMKAG5ldHdvcmtfaWQ8NHSJCgYAc3RhdGVzAxEAd2VlcGluZ192aW5lc19hZ2UAAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:twisting_vines", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAgAACAQAbmFtZRgAbWluZWNyYWZ0OnR3aXN0aW5nX3ZpbmVzBAkAbmFtZV9oYXNoDYR5QgVUQJADCgBuZXR3b3JrX2lk5kYVIQoGAHN0YXRlcwMSAHR3aXN0aW5nX3ZpbmVzX2FnZQAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:waterlily", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRvAAAACAQAbmFtZRMAbWluZWNyYWZ0OndhdGVybGlseQQJAG5hbWVfaGFzaEHgC4c1SXg0AwoAbmV0d29ya19pZOOerp8KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:seagrass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAQAACAQAbmFtZRIAbWluZWNyYWZ0OnNlYWdyYXNzBAkAbmFtZV9oYXNoHSBFtoHdWxIDCgBuZXR3b3JrX2lkd3lhEAoGAHN0YXRlcwgOAHNlYV9ncmFzc190eXBlBwBkZWZhdWx0AAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:kelp" - }, - { - "id": "minecraft:deadbush", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAAAACAQAbmFtZRIAbWluZWNyYWZ0OmRlYWRidXNoBAkAbmFtZV9oYXNoPFODe4IScnYDCgBuZXR3b3JrX2lkVfnl+goGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:bamboo", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhbWJvbwQJAG5hbWVfaGFzaBgpGmyzhedCAwoAbmV0d29ya19pZIZv1nYKBgBzdGF0ZXMBBwBhZ2VfYml0AAgQAGJhbWJvb19sZWFmX3NpemUJAG5vX2xlYXZlcwgWAGJhbWJvb19zdGFsa190aGlja25lc3MEAHRoaW4AAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:snow", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnNub3cECQBuYW1lX2hhc2gVHr5XXdETWAMKAG5ldHdvcmtfaWQ0zCeHCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:ice", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAAAACAQAbmFtZQ0AbWluZWNyYWZ0OmljZQQJAG5hbWVfaGFzaNF26f+uUT29AwoAbmV0d29ya19pZOUMaQYKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:packed_ice", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAAAACAQAbmFtZRQAbWluZWNyYWZ0OnBhY2tlZF9pY2UECQBuYW1lX2hhc2hk4bu123ZrFgMKAG5ldHdvcmtfaWTr/ooaCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:blue_ice", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQKAQAACAQAbmFtZRIAbWluZWNyYWZ0OmJsdWVfaWNlBAkAbmFtZV9oYXNo+EKxYgFhKcgDCgBuZXR3b3JrX2lkxfsA8goGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:snow_layer", - "block_state_b64": "CgAAAwgAYmxvY2tfaWROAAAACAQAbmFtZRQAbWluZWNyYWZ0OnNub3dfbGF5ZXIECQBuYW1lX2hhc2hXka6atMYUCQMKAG5ldHdvcmtfaWRCrIPcCgYAc3RhdGVzAQsAY292ZXJlZF9iaXQAAwYAaGVpZ2h0AAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:pointed_dripstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQzAgAACAQAbmFtZRsAbWluZWNyYWZ0OnBvaW50ZWRfZHJpcHN0b25lBAkAbmFtZV9oYXNoJMISzmHQgt8DCgBuZXR3b3JrX2lkbWrtYgoGAHN0YXRlcwgTAGRyaXBzdG9uZV90aGlja25lc3MDAHRpcAEHAGhhbmdpbmcBAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:dripstone_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AgAACAQAbmFtZRkAbWluZWNyYWZ0OmRyaXBzdG9uZV9ibG9jawQJAG5hbWVfaGFzaIIXnEqY77YsAwoAbmV0d29ya19pZMZi2kwKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:moss_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWROAgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vc3NfY2FycGV0BAkAbmFtZV9oYXNo/NEDxRPTshYDCgBuZXR3b3JrX2lkaGG3QwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:moss_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ/AgAACAQAbmFtZRQAbWluZWNyYWZ0Om1vc3NfYmxvY2sECQBuYW1lX2hhc2iovcsPUYX2tgMKAG5ldHdvcmtfaWT3JSbfCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:dirt_with_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ9AgAACAQAbmFtZRkAbWluZWNyYWZ0OmRpcnRfd2l0aF9yb290cwQJAG5hbWVfaGFzaLCNDYPviDCIAwoAbmV0d29ya19pZNCkwzoKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:hanging_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ+AgAACAQAbmFtZRcAbWluZWNyYWZ0Omhhbmdpbmdfcm9vdHMECQBuYW1lX2hhc2jaXn+Y5UZpDAMKAG5ldHdvcmtfaWRU4c2vCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:mangrove_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWThAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hbmdyb3ZlX3Jvb3RzBAkAbmFtZV9oYXNoa786PzQGZ6kDCgBuZXR3b3JrX2lklA0AHgoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:muddy_mangrove_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAgAACAQAbmFtZR4AbWluZWNyYWZ0Om11ZGR5X21hbmdyb3ZlX3Jvb3RzBAkAbmFtZV9oYXNo9YApdHpo1RkDCgBuZXR3b3JrX2lkH0Oc4woGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:big_dripleaf", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRCAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJpZ19kcmlwbGVhZgQJAG5hbWVfaGFzaGBEhXjo6qSdAwoAbmV0d29ya19pZMETsb8KBgBzdGF0ZXMBEQBiaWdfZHJpcGxlYWZfaGVhZAEIEQBiaWdfZHJpcGxlYWZfdGlsdAQAbm9uZQgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:small_dripleaf_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAgAACAQAbmFtZR4AbWluZWNyYWZ0OnNtYWxsX2RyaXBsZWFmX2Jsb2NrBAkAbmFtZV9oYXNojxRAgXP9uWADCgBuZXR3b3JrX2lkozbVPwoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24EAGVhc3QBDwB1cHBlcl9ibG9ja19iaXQBAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:spore_blossom", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRAAgAACAQAbmFtZRcAbWluZWNyYWZ0OnNwb3JlX2Jsb3Nzb20ECQBuYW1lX2hhc2il3U72Gbco2gMKAG5ldHdvcmtfaWSbbbgcCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:azalea", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAgAACAQAbmFtZRAAbWluZWNyYWZ0OmF6YWxlYQQJAG5hbWVfaGFzaNyUl+BW9JrBAwoAbmV0d29ya19pZO/XZtQKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:flowering_azalea", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAgAACAQAbmFtZRoAbWluZWNyYWZ0OmZsb3dlcmluZ19hemFsZWEECQBuYW1lX2hhc2ie9r33wz8kiwMKAG5ldHdvcmtfaWQ3ij0VCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:glow_lichen", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSaAgAACAQAbmFtZRUAbWluZWNyYWZ0Omdsb3dfbGljaGVuBAkAbmFtZV9oYXNobyPUrIYlo44DCgBuZXR3b3JrX2lkCh8lSAoGAHN0YXRlcwMZAG11bHRpX2ZhY2VfZGlyZWN0aW9uX2JpdHM/AAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:amethyst_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAgAACAQAbmFtZRgAbWluZWNyYWZ0OmFtZXRoeXN0X2Jsb2NrBAkAbmFtZV9oYXNob+JK1iiAthcDCgBuZXR3b3JrX2lk8HtpzgoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:budding_amethyst", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRHAgAACAQAbmFtZRoAbWluZWNyYWZ0OmJ1ZGRpbmdfYW1ldGh5c3QECQBuYW1lX2hhc2gJvAwfI14fxgMKAG5ldHdvcmtfaWTQYqfACgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:amethyst_cluster", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAgAACAQAbmFtZRoAbWluZWNyYWZ0OmFtZXRoeXN0X2NsdXN0ZXIECQBuYW1lX2hhc2jK82S88Jgm8wMKAG5ldHdvcmtfaWSCPMPGCgYAc3RhdGVzCBQAbWluZWNyYWZ0OmJsb2NrX2ZhY2UCAHVwAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:large_amethyst_bud", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAgAACAQAbmFtZRwAbWluZWNyYWZ0OmxhcmdlX2FtZXRoeXN0X2J1ZAQJAG5hbWVfaGFzaAHhdpWD+sd5AwoAbmV0d29ya19pZKkQxOcKBgBzdGF0ZXMIFABtaW5lY3JhZnQ6YmxvY2tfZmFjZQIAdXAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:medium_amethyst_bud", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRKAgAACAQAbmFtZR0AbWluZWNyYWZ0Om1lZGl1bV9hbWV0aHlzdF9idWQECQBuYW1lX2hhc2g5lBGtC0DzZQMKAG5ldHdvcmtfaWSYiP4gCgYAc3RhdGVzCBQAbWluZWNyYWZ0OmJsb2NrX2ZhY2UCAHVwAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:small_amethyst_bud", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRLAgAACAQAbmFtZRwAbWluZWNyYWZ0OnNtYWxsX2FtZXRoeXN0X2J1ZAQJAG5hbWVfaGFzaEnb4+q9PO4YAwoAbmV0d29ya19pZGWzxrQKBgBzdGF0ZXMIFABtaW5lY3JhZnQ6YmxvY2tfZmFjZQIAdXAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:tuff", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAgAACAQAbmFtZQ4AbWluZWNyYWZ0OnR1ZmYECQBuYW1lX2hhc2h1Rwc1XYsBGwMKAG5ldHdvcmtfaWRwQGn0CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:tuff_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAwAACAQAbmFtZRUAbWluZWNyYWZ0OnR1ZmZfc3RhaXJzBAkAbmFtZV9oYXNoKjyNUBjcfZsDCgBuZXR3b3JrX2lk+LsycgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:tuff_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAwAACAQAbmFtZRMAbWluZWNyYWZ0OnR1ZmZfc2xhYgQJAG5hbWVfaGFzaIhCGdlIsnMUAwoAbmV0d29ya19pZN1dUL4KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:tuff_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAwAACAQAbmFtZRMAbWluZWNyYWZ0OnR1ZmZfd2FsbAQJAG5hbWVfaGFzaMyeeu1IRf03AwoAbmV0d29ya19pZDkIrosKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:chiseled_tuff", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoaXNlbGVkX3R1ZmYECQBuYW1lX2hhc2iVliOT8OTQ9AMKAG5ldHdvcmtfaWTLNKOiCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:polished_tuff", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAwAACAQAbmFtZRcAbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmYECQBuYW1lX2hhc2hyaLe/KEVZ0gMKAG5ldHdvcmtfaWTcX3NrCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:polished_tuff_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTuAwAACAQAbmFtZR4AbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmZfc3RhaXJzBAkAbmFtZV9oYXNo8yuah8QI1dcDCgBuZXR3b3JrX2lkjLoU4AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:polished_tuff_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTsAwAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmZfc2xhYgQJAG5hbWVfaGFzaLXdb48YvAsHAwoAbmV0d29ya19pZAnJ7W0KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:polished_tuff_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTvAwAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmZfd2FsbAQJAG5hbWVfaGFzaJVZj6QYWXUrAwoAbmV0d29ya19pZLU7dooKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:tuff_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAwAACAQAbmFtZRUAbWluZWNyYWZ0OnR1ZmZfYnJpY2tzBAkAbmFtZV9oYXNo/hbQ+mXSK7wDCgBuZXR3b3JrX2lk6gmIwQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:tuff_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT0AwAACAQAbmFtZRsAbWluZWNyYWZ0OnR1ZmZfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNoWJpkAurUfKwDCgBuZXR3b3JrX2lkUMcjiwoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:tuff_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTyAwAACAQAbmFtZRkAbWluZWNyYWZ0OnR1ZmZfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaLqPMjVCv5dIAwoAbmV0d29ya19pZOmeRhcKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:tuff_brick_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT1AwAACAQAbmFtZRkAbWluZWNyYWZ0OnR1ZmZfYnJpY2tfd2FsbAQJAG5hbWVfaGFzaIL0IyNCOsonAwoAbmV0d29ya19pZJW4T5UKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:chiseled_tuff_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT2AwAACAQAbmFtZR4AbWluZWNyYWZ0OmNoaXNlbGVkX3R1ZmZfYnJpY2tzBAkAbmFtZV9oYXNo3oQw6gmxYuADCgBuZXR3b3JrX2lkm3D8AgoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:calcite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAgAACAQAbmFtZREAbWluZWNyYWZ0OmNhbGNpdGUECQBuYW1lX2hhc2ixKLu8ZIdzDQMKAG5ldHdvcmtfaWQlSbJDCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "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/FO78WDoDCgBuZXR3b3JrX2lkLh1OXAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:red_mushroom", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAAAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZF9tdXNocm9vbQQJAG5hbWVfaGFzaPpzJua7669xAwoAbmV0d29ya19pZCvWPYkKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:crimson_fungus", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fZnVuZ3VzBAkAbmFtZV9oYXNolIcCUuFM2u0DCgBuZXR3b3JrX2lkD2NN0QoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:warped_fungus", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9mdW5ndXMECQBuYW1lX2hhc2gq8bSnRVTAFgMKAG5ldHdvcmtfaWTkwS+rCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:brown_mushroom_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAAAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkdOMhDAoGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cw4AAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:red_mushroom_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAAAACAQAbmFtZRwAbWluZWNyYWZ0OnJlZF9tdXNocm9vbV9ibG9jawQJAG5hbWVfaGFzaJTTyJbth9M9AwoAbmV0d29ya19pZM+AyboKBgBzdGF0ZXMDEgBodWdlX211c2hyb29tX2JpdHMOAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:brown_mushroom_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAAAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkbdt3CAoGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cw8AAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:brown_mushroom_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAAAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkSrMl9goGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cwAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:egg" - }, - { - "id": "minecraft:sugar_cane" - }, - { - "id": "minecraft:sugar" - }, - { - "id": "minecraft:rotten_flesh" - }, - { - "id": "minecraft:bone" - }, - { - "id": "minecraft:web", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAAAACAQAbmFtZQ0AbWluZWNyYWZ0OndlYgQJAG5hbWVfaGFzaA4GKQCvG4i9AwoAbmV0d29ya19pZApt+jgKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:spider_eye" - }, - { - "id": "minecraft:mob_spawner", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ0AAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vYl9zcGF3bmVyBAkAbmFtZV9oYXNoNwGrCV/Fkh8DCgBuZXR3b3JrX2lkM1wTmgoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:trial_spawner", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6AgAACAQAbmFtZRcAbWluZWNyYWZ0OnRyaWFsX3NwYXduZXIECQBuYW1lX2hhc2iNLRPB4ACz+QMKAG5ldHdvcmtfaWTWFYHGCgYAc3RhdGVzAQcAb21pbm91cwADEwB0cmlhbF9zcGF3bmVyX3N0YXRlAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:vault", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5AgAACAQAbmFtZQ8AbWluZWNyYWZ0OnZhdWx0BAkAbmFtZV9oYXNoCAp9n3IAyqcDCgBuZXR3b3JrX2lk6/P+vwoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAQcAb21pbm91cwAICwB2YXVsdF9zdGF0ZQgAaW5hY3RpdmUAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:end_portal_frame", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AAAACAQAbmFtZRoAbWluZWNyYWZ0OmVuZF9wb3J0YWxfZnJhbWUECQBuYW1lX2hhc2gqofyUIjGOpQMKAG5ldHdvcmtfaWRbGHf8CgYAc3RhdGVzARIAZW5kX3BvcnRhbF9leWVfYml0AAgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:infested_stone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRgAbWluZWNyYWZ0OmluZmVzdGVkX3N0b25lBAkAbmFtZV9oYXNoxnRcHDu4zqQDCgBuZXR3b3JrX2lkpfcnsgoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:infested_cobblestone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRZBAAACAQAbmFtZR4AbWluZWNyYWZ0OmluZmVzdGVkX2NvYmJsZXN0b25lBAkAbmFtZV9oYXNoy+LVCKG2kVMDCgBuZXR3b3JrX2lkpn+icAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:infested_stone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRaBAAACAQAbmFtZR8AbWluZWNyYWZ0OmluZmVzdGVkX3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaBMnals7a32CAwoAbmV0d29ya19pZNHi2UYKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:infested_mossy_stone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRbBAAACAQAbmFtZSUAbWluZWNyYWZ0OmluZmVzdGVkX21vc3N5X3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaAmJk+HmVq0rAwoAbmV0d29ya19pZAVH8/sKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:infested_cracked_stone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRcBAAACAQAbmFtZScAbWluZWNyYWZ0OmluZmVzdGVkX2NyYWNrZWRfc3RvbmVfYnJpY2tzBAkAbmFtZV9oYXNoMyc60XcfcyoDCgBuZXR3b3JrX2lkaW+kbQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:infested_chiseled_stone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRdBAAACAQAbmFtZSgAbWluZWNyYWZ0OmluZmVzdGVkX2NoaXNlbGVkX3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaNUvNIIg9dZbAwoAbmV0d29ya19pZCajGicKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:infested_deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAgAACAQAbmFtZRwAbWluZWNyYWZ0OmluZmVzdGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaICF2VYccxF1AwoAbmV0d29ya19pZDa/624KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:dragon_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AAAACAQAbmFtZRQAbWluZWNyYWZ0OmRyYWdvbl9lZ2cECQBuYW1lX2hhc2inMzXrV+/e1wMKAG5ldHdvcmtfaWTgO1yRCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:turtle_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAQAACAQAbmFtZRQAbWluZWNyYWZ0OnR1cnRsZV9lZ2cECQBuYW1lX2hhc2iwSRcxOJIJ9gMKAG5ldHdvcmtfaWSIRNUhCgYAc3RhdGVzCA0AY3JhY2tlZF9zdGF0ZQkAbm9fY3JhY2tzCBAAdHVydGxlX2VnZ19jb3VudAcAb25lX2VnZwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:sniffer_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRTAwAACAQAbmFtZRUAbWluZWNyYWZ0OnNuaWZmZXJfZWdnBAkAbmFtZV9oYXNoY1lozc8lPcYDCgBuZXR3b3JrX2lk7yb/2QoGAHN0YXRlcwgNAGNyYWNrZWRfc3RhdGUJAG5vX2NyYWNrcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:frog_spawn", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAgAACAQAbmFtZRQAbWluZWNyYWZ0OmZyb2dfc3Bhd24ECQBuYW1lX2hhc2iWmd7idp3ZZwMKAG5ldHdvcmtfaWRFzJudCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:pearlescent_froglight", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAgAACAQAbmFtZR8AbWluZWNyYWZ0OnBlYXJsZXNjZW50X2Zyb2dsaWdodAQJAG5hbWVfaGFzaKkcFRyycYGyAwoAbmV0d29ya19pZJqYakAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:verdant_froglight", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAgAACAQAbmFtZRsAbWluZWNyYWZ0OnZlcmRhbnRfZnJvZ2xpZ2h0BAkAbmFtZV9oYXNoA+eXuTBohrQDCgBuZXR3b3JrX2lkDIVnsQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:ochre_froglight", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAgAACAQAbmFtZRkAbWluZWNyYWZ0Om9jaHJlX2Zyb2dsaWdodAQJAG5hbWVfaGFzaMY59kjPe+c3AwoAbmV0d29ya19pZO2TD50KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "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:breeze_spawn_egg" - }, - { - "id": "minecraft:armadillo_spawn_egg" - }, - { - "id": "minecraft:bogged_spawn_egg" - }, - { - "id": "minecraft:obsidian", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQxAAAACAQAbmFtZRIAbWluZWNyYWZ0Om9ic2lkaWFuBAkAbmFtZV9oYXNoiz4qrb8QjyEDCgBuZXR3b3JrX2lkuqnPpQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:crying_obsidian", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAgAACAQAbmFtZRkAbWluZWNyYWZ0OmNyeWluZ19vYnNpZGlhbgQJAG5hbWVfaGFzaKT0JlA7Z1K+AwoAbmV0d29ya19pZCjbPV4KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:bedrock", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAAAACAQAbmFtZREAbWluZWNyYWZ0OmJlZHJvY2sECQBuYW1lX2hhc2hWfFrh4LVtxwMKAG5ldHdvcmtfaWT7fKz1CgYAc3RhdGVzAQ4AaW5maW5pYnVybl9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:soul_sand", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNvdWxfc2FuZAQJAG5hbWVfaGFzaMaf+bccu+KTAwoAbmV0d29ya19pZBQSHrMKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:magma", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAAAACAQAbmFtZQ8AbWluZWNyYWZ0Om1hZ21hBAkAbmFtZV9oYXNoqyTjKaIsWfYDCgBuZXR3b3JrX2lkyfWAZgoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:nether_wart" - }, - { - "id": "minecraft:end_stone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AAAACAQAbmFtZRMAbWluZWNyYWZ0OmVuZF9zdG9uZQQJAG5hbWVfaGFzaH1J9jA39GJNAwoAbmV0d29ya19pZFeFQ7UKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:chorus_flower", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAAAACAQAbmFtZRcAbWluZWNyYWZ0OmNob3J1c19mbG93ZXIECQBuYW1lX2hhc2iMpSodli5uawMKAG5ldHdvcmtfaWRnd1ZWCgYAc3RhdGVzAwMAYWdlAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:chorus_plant", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAAAACAQAbmFtZRYAbWluZWNyYWZ0OmNob3J1c19wbGFudAQJAG5hbWVfaGFzaJhSrmNGKwaMAwoAbmV0d29ya19pZA3uVqMKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:chorus_fruit" - }, - { - "id": "minecraft:popped_chorus_fruit" - }, - { - "id": "minecraft:sponge", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAAAACAQAbmFtZRAAbWluZWNyYWZ0OnNwb25nZQQJAG5hbWVfaGFzaLrd2ScYRDMiAwoAbmV0d29ya19pZF01rO0KBgBzdGF0ZXMICwBzcG9uZ2VfdHlwZQMAZHJ5AAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:sponge", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAAAACAQAbmFtZRAAbWluZWNyYWZ0OnNwb25nZQQJAG5hbWVfaGFzaLrd2ScYRDMiAwoAbmV0d29ya19pZPiOc4QKBgBzdGF0ZXMICwBzcG9uZ2VfdHlwZQMAd2V0AAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:tube_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRoAbWluZWNyYWZ0OnR1YmVfY29yYWxfYmxvY2sECQBuYW1lX2hhc2iGkaiR7Eot4wMKAG5ldHdvcmtfaWQPNJ6sCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:brain_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRQBAAACAQAbmFtZRsAbWluZWNyYWZ0OmJyYWluX2NvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoeDNAK18yUo4DCgBuZXR3b3JrX2lkloN1vgoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:bubble_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRRBAAACAQAbmFtZRwAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaAI2mwMlvcNbAwoAbmV0d29ya19pZBlkxKIKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:fire_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRSBAAACAQAbmFtZRoAbWluZWNyYWZ0OmZpcmVfY29yYWxfYmxvY2sECQBuYW1lX2hhc2gg1gLeXLmKaAMKAG5ldHdvcmtfaWSp3W57CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:horn_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRTBAAACAQAbmFtZRoAbWluZWNyYWZ0Omhvcm5fY29yYWxfYmxvY2sECQBuYW1lX2hhc2hnZSLRWUwGhAMKAG5ldHdvcmtfaWRSK6ccCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:dead_tube_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRUBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaB9+lY3hAkNNAwoAbmV0d29ya19pZF0hKKYKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:dead_brain_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRVBAAACAQAbmFtZSAAbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWxfYmxvY2sECQBuYW1lX2hhc2iHyDn52AO8uwMKAG5ldHdvcmtfaWQw7yCaCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:dead_bubble_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRWBAAACAQAbmFtZSEAbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsX2Jsb2NrBAkAbmFtZV9oYXNotwkk/ITrsjADCgBuZXR3b3JrX2lk56mXUgoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:dead_fire_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRXBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaG0qHxbIrBEyAwoAbmV0d29ya19pZFvnH88KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:dead_horn_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRYBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaL7D8bu4Fm+0AwoAbmV0d29ya19pZEALRLoKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:sculk", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAgAACAQAbmFtZQ8AbWluZWNyYWZ0OnNjdWxrBAkAbmFtZV9oYXNo2Lq7T5yQF8kDCgBuZXR3b3JrX2lkyqUPPgoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:sculk_vein", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAgAACAQAbmFtZRQAbWluZWNyYWZ0OnNjdWxrX3ZlaW4ECQBuYW1lX2hhc2gJUdhVooV4zwMKAG5ldHdvcmtfaWSUfn1XCgYAc3RhdGVzAxkAbXVsdGlfZmFjZV9kaXJlY3Rpb25fYml0cwAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:sculk_catalyst", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAgAACAQAbmFtZRgAbWluZWNyYWZ0OnNjdWxrX2NhdGFseXN0BAkAbmFtZV9oYXNo+gCpbrCHST4DCgBuZXR3b3JrX2lkMJ2n/woGAHN0YXRlcwEFAGJsb29tAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:sculk_shrieker", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTMAgAACAQAbmFtZRgAbWluZWNyYWZ0OnNjdWxrX3Nocmlla2VyBAkAbmFtZV9oYXNo5OXtyObniQ4DCgBuZXR3b3JrX2lkxapoNAoGAHN0YXRlcwEGAGFjdGl2ZQABCgBjYW5fc3VtbW9uAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:sculk_sensor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQyAgAACAQAbmFtZRYAbWluZWNyYWZ0OnNjdWxrX3NlbnNvcgQJAG5hbWVfaGFzaCkmHreeTgNnAwoAbmV0d29ya19pZLj2WPcKBgBzdGF0ZXMDEgBzY3Vsa19zZW5zb3JfcGhhc2UAAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:calibrated_sculk_sensor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAwAACAQAbmFtZSEAbWluZWNyYWZ0OmNhbGlicmF0ZWRfc2N1bGtfc2Vuc29yBAkAbmFtZV9oYXNoffAcXXN/iJUDCgBuZXR3b3JrX2lkwOx3QQoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAxIAc2N1bGtfc2Vuc29yX3BoYXNlAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:reinforced_deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTRAgAACAQAbmFtZR4AbWluZWNyYWZ0OnJlaW5mb3JjZWRfZGVlcHNsYXRlBAkAbmFtZV9oYXNoldDmj91EapQDCgBuZXR3b3JrX2lkHIt+aQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "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:mace" - }, - { - "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:arrow", - "damage": 44 - }, - { - "id": "minecraft:arrow", - "damage": 45 - }, - { - "id": "minecraft:arrow", - "damage": 46 - }, - { - "id": "minecraft:arrow", - "damage": 47 - }, - { - "id": "minecraft:ominous_bottle" - }, - { - "id": "minecraft:ominous_bottle", - "damage": 1 - }, - { - "id": "minecraft:ominous_bottle", - "damage": 2 - }, - { - "id": "minecraft:ominous_bottle", - "damage": 3 - }, - { - "id": "minecraft:ominous_bottle", - "damage": 4 - }, - { - "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:wind_charge" - }, - { - "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:wolf_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:potion", - "damage": 43 - }, - { - "id": "minecraft:potion", - "damage": 44 - }, - { - "id": "minecraft:potion", - "damage": 45 - }, - { - "id": "minecraft:potion", - "damage": 46 - }, - { - "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:splash_potion", - "damage": 43 - }, - { - "id": "minecraft:splash_potion", - "damage": 44 - }, - { - "id": "minecraft:splash_potion", - "damage": 45 - }, - { - "id": "minecraft:splash_potion", - "damage": 46 - }, - { - "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:lingering_potion", - "damage": 43 - }, - { - "id": "minecraft:lingering_potion", - "damage": 44 - }, - { - "id": "minecraft:lingering_potion", - "damage": 45 - }, - { - "id": "minecraft:lingering_potion", - "damage": 46 - }, - { - "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": "CgAAAwgAYmxvY2tfaWQyAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnRvcmNoBAkAbmFtZV9oYXNoagn7rmDBzisDCgBuZXR3b3JrX2lk+BwwuQoGAHN0YXRlcwgWAHRvcmNoX2ZhY2luZ19kaXJlY3Rpb24HAHVua25vd24AAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:soul_torch", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQLAgAACAQAbmFtZRQAbWluZWNyYWZ0OnNvdWxfdG9yY2gECQBuYW1lX2hhc2huixOT04BRdQMKAG5ldHdvcmtfaWShbFILCgYAc3RhdGVzCBYAdG9yY2hfZmFjaW5nX2RpcmVjdGlvbgcAdW5rbm93bgADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:sea_pickle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAQAACAQAbmFtZRQAbWluZWNyYWZ0OnNlYV9waWNrbGUECQBuYW1lX2hhc2iONEfZJB+glgMKAG5ldHdvcmtfaWSINWQyCgYAc3RhdGVzAw0AY2x1c3Rlcl9jb3VudAAAAAABCABkZWFkX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:lantern", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTPAQAACAQAbmFtZREAbWluZWNyYWZ0OmxhbnRlcm4ECQBuYW1lX2hhc2hMw44VI2HWygMKAG5ldHdvcmtfaWRkjQvzCgYAc3RhdGVzAQcAaGFuZ2luZwAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:soul_lantern", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQMAgAACAQAbmFtZRYAbWluZWNyYWZ0OnNvdWxfbGFudGVybgQJAG5hbWVfaGFzaGjIpjxk9z+RAwoAbmV0d29ya19pZGfoP8cKBgBzdGF0ZXMBBwBoYW5naW5nAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAgAACAQAbmFtZRAAbWluZWNyYWZ0OmNhbmRsZQQJAG5hbWVfaGFzaHPd+MsNdWTfAwoAbmV0d29ya19pZHsBMA0KBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:white_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWScAgAACAQAbmFtZRYAbWluZWNyYWZ0OndoaXRlX2NhbmRsZQQJAG5hbWVfaGFzaN1EG5Q1mHiEAwoAbmV0d29ya19pZKN1mmgKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:orange_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSdAgAACAQAbmFtZRcAbWluZWNyYWZ0Om9yYW5nZV9jYW5kbGUECQBuYW1lX2hhc2jySEVWHgUIHQMKAG5ldHdvcmtfaWSfVz82CgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:magenta_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hZ2VudGFfY2FuZGxlBAkAbmFtZV9oYXNoG0u6YIOoBSEDCgBuZXR3b3JrX2lk9xGNkQoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:light_blue_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSfAgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FuZGxlBAkAbmFtZV9oYXNocXGeK0zgrG0DCgBuZXR3b3JrX2lk2m1y8goGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:yellow_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAgAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19jYW5kbGUECQBuYW1lX2hhc2i00dtusU3CqQMKAG5ldHdvcmtfaWR9LTmpCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:lime_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAgAACAQAbmFtZRUAbWluZWNyYWZ0OmxpbWVfY2FuZGxlBAkAbmFtZV9oYXNokcmrw5xvz7ADCgBuZXR3b3JrX2lkIAUu6QoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:pink_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAgAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfY2FuZGxlBAkAbmFtZV9oYXNoQJdEY4sZ0dwDCgBuZXR3b3JrX2lk23Rn5AoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:gray_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAgAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXlfY2FuZGxlBAkAbmFtZV9oYXNoS5poSo9wBDEDCgBuZXR3b3JrX2lk3trRCAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:light_gray_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FuZGxlBAkAbmFtZV9oYXNo9ruTZLBNMasDCgBuZXR3b3JrX2lkb6DOegoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:cyan_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAgAACAQAbmFtZRUAbWluZWNyYWZ0OmN5YW5fY2FuZGxlBAkAbmFtZV9oYXNoc/M8PNVcjOwDCgBuZXR3b3JrX2lkZoIQOQoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:purple_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSmAgAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnBsZV9jYW5kbGUECQBuYW1lX2hhc2jaI3xUW0/myQMKAG5ldHdvcmtfaWSnLI2BCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:blue_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAgAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfY2FuZGxlBAkAbmFtZV9oYXNoAASSPW6TgQADCgBuZXR3b3JrX2lkrxrjQAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:brown_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJyb3duX2NhbmRsZQQJAG5hbWVfaGFzaDia0l6s1+WYAwoAbmV0d29ya19pZKSkBXYKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:green_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAgAACAQAbmFtZRYAbWluZWNyYWZ0OmdyZWVuX2NhbmRsZQQJAG5hbWVfaGFzaLeFPO1l+fIoAwoAbmV0d29ya19pZBkznDsKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:red_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9jYW5kbGUECQBuYW1lX2hhc2jjAQpGf59ZdwMKAG5ldHdvcmtfaWRbb88GCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:black_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJsYWNrX2NhbmRsZQQJAG5hbWVfaGFzaB+wRDpOqREKAwoAbmV0d29ya19pZNnOnuEKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:crafting_table", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6AAAACAQAbmFtZRgAbWluZWNyYWZ0OmNyYWZ0aW5nX3RhYmxlBAkAbmFtZV9oYXNoe76VAmjvbpYDCgBuZXR3b3JrX2lkwCxwaAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:cartography_table", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTHAQAACAQAbmFtZRsAbWluZWNyYWZ0OmNhcnRvZ3JhcGh5X3RhYmxlBAkAbmFtZV9oYXNomaWiiD/znP8DCgBuZXR3b3JrX2lkI6FzMwoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:fletching_table", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAQAACAQAbmFtZRkAbWluZWNyYWZ0OmZsZXRjaGluZ190YWJsZQQJAG5hbWVfaGFzaPFibh8unKyUAwoAbmV0d29ya19pZJ2mW0oKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:smithing_table", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAQAACAQAbmFtZRgAbWluZWNyYWZ0OnNtaXRoaW5nX3RhYmxlBAkAbmFtZV9oYXNo4tFES2xOXEYDCgBuZXR3b3JrX2lkXWMBzQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:beehive", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAQAACAQAbmFtZREAbWluZWNyYWZ0OmJlZWhpdmUECQBuYW1lX2hhc2hCcqn12UbNpwMKAG5ldHdvcmtfaWR/idcaCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAMLAGhvbmV5X2xldmVsAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:suspicious_sand", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAwAACAQAbmFtZRkAbWluZWNyYWZ0OnN1c3BpY2lvdXNfc2FuZAQJAG5hbWVfaGFzaL67QsuvLP00AwoAbmV0d29ya19pZKnkaIAKBgBzdGF0ZXMDEABicnVzaGVkX3Byb2dyZXNzAAAAAAEHAGhhbmdpbmcBAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:suspicious_gravel", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AwAACAQAbmFtZRsAbWluZWNyYWZ0OnN1c3BpY2lvdXNfZ3JhdmVsBAkAbmFtZV9oYXNoJSVbGNk7C3oDCgBuZXR3b3JrX2lkvIEJAAoGAHN0YXRlcwMQAGJydXNoZWRfcHJvZ3Jlc3MAAAAAAQcAaGFuZ2luZwEAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:campfire" - }, - { - "id": "minecraft:soul_campfire" - }, - { - "id": "minecraft:furnace", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ9AAAACAQAbmFtZREAbWluZWNyYWZ0OmZ1cm5hY2UECQBuYW1lX2hhc2ioOQrludYY8wMKAG5ldHdvcmtfaWRZxnDOCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:blast_furnace", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTDAQAACAQAbmFtZRcAbWluZWNyYWZ0OmJsYXN0X2Z1cm5hY2UECQBuYW1lX2hhc2ivDbnjkpGm5QMKAG5ldHdvcmtfaWTcEbV/CgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:smoker", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAQAACAQAbmFtZRAAbWluZWNyYWZ0OnNtb2tlcgQJAG5hbWVfaGFzaJd1rDMkRWomAwoAbmV0d29ya19pZGWswMwKBgBzdGF0ZXMIHABtaW5lY3JhZnQ6Y2FyZGluYWxfZGlyZWN0aW9uBQBzb3V0aAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:respawn_anchor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJlc3Bhd25fYW5jaG9yBAkAbmFtZV9oYXNoZOdcjW05qigDCgBuZXR3b3JrX2lkmhMcaQoGAHN0YXRlcwMVAHJlc3Bhd25fYW5jaG9yX2NoYXJnZQAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:brewing_stand" - }, - { - "id": "minecraft:anvil", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lkqXzNjwoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:chipped_anvil", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS+BAAACAQAbmFtZRcAbWluZWNyYWZ0OmNoaXBwZWRfYW52aWwECQBuYW1lX2hhc2ge+QY3vlS/eQMKAG5ldHdvcmtfaWRJ15iUCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:damaged_anvil", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS/BAAACAQAbmFtZRcAbWluZWNyYWZ0OmRhbWFnZWRfYW52aWwECQBuYW1lX2hhc2imJ12Be2V8+AMKAG5ldHdvcmtfaWRh5SHkCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:grindstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTCAQAACAQAbmFtZRQAbWluZWNyYWZ0OmdyaW5kc3RvbmUECQBuYW1lX2hhc2id56zc0nk99wMKAG5ldHdvcmtfaWS4Es07CgYAc3RhdGVzCAoAYXR0YWNobWVudAgAc3RhbmRpbmcDCQBkaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:enchanting_table", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR0AAAACAQAbmFtZRoAbWluZWNyYWZ0OmVuY2hhbnRpbmdfdGFibGUECQBuYW1lX2hhc2jgIx24VLvMvwMKAG5ldHdvcmtfaWRliFFJCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:bookshelf", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAAAACAQAbmFtZRMAbWluZWNyYWZ0OmJvb2tzaGVsZgQJAG5hbWVfaGFzaDU04DrgJCS9AwoAbmV0d29ya19pZBcWwIwKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:chiseled_bookshelf", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAwAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX2Jvb2tzaGVsZgQJAG5hbWVfaGFzaNXDBnsIsywYAwoAbmV0d29ya19pZIprt5IKBgBzdGF0ZXMDDABib29rc19zdG9yZWQAAAAAAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:lectern", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTBAQAACAQAbmFtZREAbWluZWNyYWZ0OmxlY3Rlcm4ECQBuYW1lX2hhc2j5Z4Mmi/1QxAMKAG5ldHdvcmtfaWR4JfDHCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgBCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:cauldron" - }, - { - "id": "minecraft:composter", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAQAACAQAbmFtZRMAbWluZWNyYWZ0OmNvbXBvc3RlcgQJAG5hbWVfaGFzaPAADHptzeWJAwoAbmV0d29ya19pZHIL6i4KBgBzdGF0ZXMDFABjb21wb3N0ZXJfZmlsbF9sZXZlbAAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:chest", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2AAAACAQAbmFtZQ8AbWluZWNyYWZ0OmNoZXN0BAkAbmFtZV9oYXNog9ozMxlcA88DCgBuZXR3b3JrX2lkDkOFvAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:trapped_chest", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAAAACAQAbmFtZRcAbWluZWNyYWZ0OnRyYXBwZWRfY2hlc3QECQBuYW1lX2hhc2g2qpF9stsEjgMKAG5ldHdvcmtfaWTjJWYxCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAbm9ydGgAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:ender_chest", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAAAACAQAbmFtZRUAbWluZWNyYWZ0OmVuZGVyX2NoZXN0BAkAbmFtZV9oYXNohEZzOFdg0WUDCgBuZXR3b3JrX2lkx4jiSQoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:barrel", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhcnJlbAQJAG5hbWVfaGFzaHDkRPGymiRqAwoAbmV0d29ya19pZPnxzgsKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:undyed_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAAAACAQAbmFtZRwAbWluZWNyYWZ0OnVuZHllZF9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaOC9mypm/MlBAwoAbmV0d29ya19pZJ8rxp0KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:white_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAAAACAQAbmFtZRsAbWluZWNyYWZ0OndoaXRlX3NodWxrZXJfYm94BAkAbmFtZV9oYXNosK79m1rPUBwDCgBuZXR3b3JrX2lkjrET6goGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:light_gray_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAwAACAQAbmFtZSAAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2iBe5zq7PxHmgMKAG5ldHdvcmtfaWSCVJv0CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:gray_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRqAwAACAQAbmFtZRoAbWluZWNyYWZ0OmdyYXlfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2ga2s8ctjHUhgMKAG5ldHdvcmtfaWS3WMsWCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:black_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRyAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJsYWNrX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoPm03OZphrp8DCgBuZXR3b3JrX2lkXHztNAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:brown_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRvAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJyb3duX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoT3DD6qAL9cADCgBuZXR3b3JrX2lkaXxpYQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:red_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRxAwAACAQAbmFtZRkAbWluZWNyYWZ0OnJlZF9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaMIlKSCzqSZoAwoAbmV0d29ya19pZNrf+icKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:orange_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAwAACAQAbmFtZRwAbWluZWNyYWZ0Om9yYW5nZV9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaG2MAXU67wGrAwoAbmV0d29ya19pZGoO05gKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:yellow_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRnAwAACAQAbmFtZRwAbWluZWNyYWZ0OnllbGxvd19zaHVsa2VyX2JveAQJAG5hbWVfaGFzaIsLwQHYjcIEAwoAbmV0d29ya19pZBCBSiYKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:lime_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRoAwAACAQAbmFtZRoAbWluZWNyYWZ0OmxpbWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2hUwBkg+faUGAMKAG5ldHdvcmtfaWRJeKqqCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:green_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRwAwAACAQAbmFtZRsAbWluZWNyYWZ0OmdyZWVuX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoZgUeT3LupLUDCgBuZXR3b3JrX2lkzJiohQoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:cyan_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAwAACAQAbmFtZRoAbWluZWNyYWZ0OmN5YW5fc2h1bGtlcl9ib3gECQBuYW1lX2hhc2gSfbjteXg5yAMKAG5ldHdvcmtfaWTHeliECgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:light_blue_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAwAACAQAbmFtZSAAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2h0VFCX0qsRxQMKAG5ldHdvcmtfaWQXD8U0CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:blue_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJsdWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2hn9gS0XIe6rAMKAG5ldHdvcmtfaWTO4PJaCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:purple_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAwAACAQAbmFtZRwAbWluZWNyYWZ0OnB1cnBsZV9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaEV/lkNPxRDdAwoAbmV0d29ya19pZFK25GAKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:magenta_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAwAACAQAbmFtZR0AbWluZWNyYWZ0Om1hZ2VudGFfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2iqWM7IJHxcFgMKAG5ldHdvcmtfaWTyyudTCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:pink_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRpAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBpbmtfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2in1tkJ1GNcZgMKAG5ldHdvcmtfaWQOEGXjCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:armor_stand" - }, - { - "id": "minecraft:noteblock", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAAAACAQAbmFtZRMAbWluZWNyYWZ0Om5vdGVibG9jawQJAG5hbWVfaGFzaHPA8dBBH0UaAwoAbmV0d29ya19pZH1U5QkKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:jukebox", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAAAACAQAbmFtZREAbWluZWNyYWZ0Omp1a2Vib3gECQBuYW1lX2hhc2ieAIPExf/ZfgMKAG5ldHdvcmtfaWSmR7JfCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "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:music_disc_creator" - }, - { - "id": "minecraft:music_disc_creator_music_box" - }, - { - "id": "minecraft:music_disc_precipice" - }, - { - "id": "minecraft:disc_fragment_5" - }, - { - "id": "minecraft:glowstone_dust" - }, - { - "id": "minecraft:glowstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRZAAAACAQAbmFtZRMAbWluZWNyYWZ0Omdsb3dzdG9uZQQJAG5hbWVfaGFzaFYqXNkefIlPAwoAbmV0d29ya19pZGT7WYYKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:redstone_lamp", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZHN0b25lX2xhbXAECQBuYW1lX2hhc2hJ9V80caPvEgMKAG5ldHdvcmtfaWRvNPwnCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:sea_lantern", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAAAACAQAbmFtZRUAbWluZWNyYWZ0OnNlYV9sYW50ZXJuBAkAbmFtZV9oYXNoLPsv1TX9M+QDCgBuZXR3b3JrX2lk1PPVyAoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "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": "CgAAAwgAYmxvY2tfaWSKAAAACAQAbmFtZRAAbWluZWNyYWZ0OmJlYWNvbgQJAG5hbWVfaGFzaACwhhfSkdkHAwoAbmV0d29ya19pZF8jfiEKBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:bell", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAQAACAQAbmFtZQ4AbWluZWNyYWZ0OmJlbGwECQBuYW1lX2hhc2iPqsgDXRcsxAMKAG5ldHdvcmtfaWT7zhOoCgYAc3RhdGVzCAoAYXR0YWNobWVudAgAc3RhbmRpbmcDCQBkaXJlY3Rpb24AAAAAAQoAdG9nZ2xlX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:conduit", - "block_state_b64": "CgAAAwgAYmxvY2tfaWScAQAACAQAbmFtZREAbWluZWNyYWZ0OmNvbmR1aXQECQBuYW1lX2hhc2jqxKAxq2EaWQMKAG5ldHdvcmtfaWTWcBVnCgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:stonecutter_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lY3V0dGVyX2Jsb2NrBAkAbmFtZV9oYXNoQAXTbAM3MeYDCgBuZXR3b3JrX2lkWS4RjAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "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:armadillo_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:breeze_rod" - }, - { - "id": "minecraft:heavy_core", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ7AgAACAQAbmFtZRQAbWluZWNyYWZ0OmhlYXZ5X2NvcmUECQBuYW1lX2hhc2hhz/uNCtrC2QMKAG5ldHdvcmtfaWRaFu+8CgYAc3RhdGVzAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "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/q5cEA0hmQMKAG5ldHdvcmtfaWQ2eM8kCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:lightning_rod", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ3AgAACAQAbmFtZRcAbWluZWNyYWZ0OmxpZ2h0bmluZ19yb2QECQBuYW1lX2hhc2ioXQF1xvfHNQMKAG5ldHdvcmtfaWRLuHyACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:end_crystal" - }, - { - "id": "minecraft:paper" - }, - { - "id": "minecraft:book" - }, - { - "id": "minecraft:writable_book" - }, - { - "id": "minecraft:trial_key" - }, - { - "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:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQmAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQmAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQmAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQnAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQnAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQnAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQnAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQnAAIDAGx2bAUAAAA=" - }, - { - "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": "CgAACQQAZW5jaAoBAAAAAgIAaWQoAAIDAGx2bAQAAAA=" - }, - { - "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": "CgAAAwgAYmxvY2tfaWRCAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnJhaWwECQBuYW1lX2hhc2hUzmhUXYJDUQMKAG5ldHdvcmtfaWR+Sp6YCgYAc3RhdGVzAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:golden_rail", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQbAAAACAQAbmFtZRUAbWluZWNyYWZ0OmdvbGRlbl9yYWlsBAkAbmFtZV9oYXNoOoV5MaKipoUDCgBuZXR3b3JrX2lkfAcxLwoGAHN0YXRlcwENAHJhaWxfZGF0YV9iaXQAAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:detector_rail", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQcAAAACAQAbmFtZRcAbWluZWNyYWZ0OmRldGVjdG9yX3JhaWwECQBuYW1lX2hhc2gVUk31qOysUQMKAG5ldHdvcmtfaWRVW/aICgYAc3RhdGVzAQ0AcmFpbF9kYXRhX2JpdAADDgByYWlsX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:activator_rail", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AAAACAQAbmFtZRgAbWluZWNyYWZ0OmFjdGl2YXRvcl9yYWlsBAkAbmFtZV9oYXNosIL91qriCRkDCgBuZXR3b3JrX2lkZfckmwoGAHN0YXRlcwENAHJhaWxfZGF0YV9iaXQAAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "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": "CgAAAwgAYmxvY2tfaWSYAAAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZHN0b25lX2Jsb2NrBAkAbmFtZV9oYXNoRhULL0r8o0sDCgBuZXR3b3JrX2lklayOHgoGAHN0YXRlcwADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:redstone_torch", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAAAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZHN0b25lX3RvcmNoBAkAbmFtZV9oYXNoizFRjpYMIDgDCgBuZXR3b3JrX2lkuHz7yAoGAHN0YXRlcwgWAHRvcmNoX2ZhY2luZ19kaXJlY3Rpb24HAHVua25vd24AAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:lever", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmxldmVyBAkAbmFtZV9oYXNoGMJeLJsUMLYDCgBuZXR3b3JrX2lkEF/GuAoGAHN0YXRlcwgPAGxldmVyX2RpcmVjdGlvbg4AZG93bl9lYXN0X3dlc3QBCABvcGVuX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:wooden_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAAAACAQAbmFtZRcAbWluZWNyYWZ0Ondvb2Rlbl9idXR0b24ECQBuYW1lX2hhc2hR7PgSTQt0sQMKAG5ldHdvcmtfaWSU07kYCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:spruce_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAQAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9idXR0b24ECQBuYW1lX2hhc2jBW9Z8aYE7YQMKAG5ldHdvcmtfaWTkUIGuCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:birch_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSMAQAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX2J1dHRvbgQJAG5hbWVfaGFzaJXYgGuSHbTwAwoAbmV0d29ya19pZGWp3yoKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:jungle_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSOAQAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9idXR0b24ECQBuYW1lX2hhc2iCgNANcJs+BQMKAG5ldHdvcmtfaWT9fImWCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:acacia_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAQAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9idXR0b24ECQBuYW1lX2hhc2gVvmcT7LTO0wMKAG5ldHdvcmtfaWRQnxIJCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:dark_oak_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSNAQAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX2J1dHRvbgQJAG5hbWVfaGFzaIV10ZGGrCIEAwoAbmV0d29ya19pZN5vAmIKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:mangrove_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX2J1dHRvbgQJAG5hbWVfaGFzaNzeYYKLgOzJAwoAbmV0d29ya19pZAFEGQ0KBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:cherry_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9idXR0b24ECQBuYW1lX2hhc2j2/IHjeAbUcwMKAG5ldHdvcmtfaWRJ1irQCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:bamboo_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT+AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19idXR0b24ECQBuYW1lX2hhc2j7AddMi+6nsgMKAG5ldHdvcmtfaWSa9w4/CgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:stone_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAAAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX2J1dHRvbgQJAG5hbWVfaGFzaM4ejMctmvohAwoAbmV0d29ya19pZMw+aC0KBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:crimson_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fYnV0dG9uBAkAbmFtZV9oYXNofnjYHaYIeWgDCgBuZXR3b3JrX2lk+n1vyQoGAHN0YXRlcwESAGJ1dHRvbl9wcmVzc2VkX2JpdAADEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:warped_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9idXR0b24ECQBuYW1lX2hhc2jwkV2EU6Cn1QMKAG5ldHdvcmtfaWTnHnk1CgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:polished_blackstone_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQnAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnV0dG9uBAkAbmFtZV9oYXNojmxzQKS0S/EDCgBuZXR3b3JrX2lkDtQ95woGAHN0YXRlcwESAGJ1dHRvbl9wcmVzc2VkX2JpdAADEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:tripwire_hook", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAAAACAQAbmFtZRcAbWluZWNyYWZ0OnRyaXB3aXJlX2hvb2sECQBuYW1lX2hhc2gQdp+oGZLNnAMKAG5ldHdvcmtfaWSy+1KJCgYAc3RhdGVzAQwAYXR0YWNoZWRfYml0AAMJAGRpcmVjdGlvbgAAAAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:wooden_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAAAACAQAbmFtZR8AbWluZWNyYWZ0Ondvb2Rlbl9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaGkGs5kCuA74AwoAbmV0d29ya19pZDRzPNwKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:spruce_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAQAACAQAbmFtZR8AbWluZWNyYWZ0OnNwcnVjZV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaNmwuq549fJKAwoAbmV0d29ya19pZLQMCw0KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:birch_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSWAQAACAQAbmFtZR4AbWluZWNyYWZ0OmJpcmNoX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNorQkT9kDdlTwDCgBuZXR3b3JrX2lkH0G97AoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:jungle_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSYAQAACAQAbmFtZR8AbWluZWNyYWZ0Omp1bmdsZV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaJ7DcteCkb8/AwoAbmV0d29ya19pZLdPBSAKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:acacia_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSVAQAACAQAbmFtZR8AbWluZWNyYWZ0OmFjYWNpYV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaC2frZtfoYqCAwoAbmV0d29ya19pZIDdI18KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:dark_oak_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAQAACAQAbmFtZSEAbWluZWNyYWZ0OmRhcmtfb2FrX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoHUCJsTy52pwDCgBuZXR3b3JrX2lkKpi8rAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:mangrove_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAgAACAQAbmFtZSEAbWluZWNyYWZ0Om1hbmdyb3ZlX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoiDsTfJaX100DCgBuZXR3b3JrX2lkuwWDyQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:cherry_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAwAACAQAbmFtZR8AbWluZWNyYWZ0OmNoZXJyeV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaALMqYEZDUQHAwoAbmV0d29ya19pZPNT+r0KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:bamboo_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJhbWJvb19wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaNvxJ7NIAaqlAwoAbmV0d29ya19pZIZ8XnYKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:crimson_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAgAACAQAbmFtZSAAbWluZWNyYWZ0OmNyaW1zb25fcHJlc3N1cmVfcGxhdGUECQBuYW1lX2hhc2hqBDVDAd31/gMKAG5ldHdvcmtfaWRmV18LCgYAc3RhdGVzAw8AcmVkc3RvbmVfc2lnbmFsAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:warped_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAgAACAQAbmFtZR8AbWluZWNyYWZ0OndhcnBlZF9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaBxFoQksWtYUAwoAbmV0d29ya19pZJVRoIcKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:stone_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0b25lX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNounJuTBUTrU8DCgBuZXR3b3JrX2lkjDydwQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:light_weighted_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSTAAAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X3dlaWdodGVkX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoOyOJkNxLtkEDCgBuZXR3b3JrX2lkrr2AjgoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:heavy_weighted_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAAAACAQAbmFtZScAbWluZWNyYWZ0OmhlYXZ5X3dlaWdodGVkX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoltgDmDvTajUDCgBuZXR3b3JrX2lkFxVKuQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:polished_blackstone_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAgAACAQAbmFtZSwAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfcHJlc3N1cmVfcGxhdGUECQBuYW1lX2hhc2h65Ci6/CeGqwMKAG5ldHdvcmtfaWTaSW5xCgYAc3RhdGVzAw8AcmVkc3RvbmVfc2lnbmFsAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:observer", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT7AAAACAQAbmFtZRIAbWluZWNyYWZ0Om9ic2VydmVyBAkAbmFtZV9oYXNoYhlh1lpmHTgDCgBuZXR3b3JrX2lkQEh55goGAHN0YXRlcwgaAG1pbmVjcmFmdDpmYWNpbmdfZGlyZWN0aW9uBABkb3duAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:daylight_detector", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAAAACAQAbmFtZRsAbWluZWNyYWZ0OmRheWxpZ2h0X2RldGVjdG9yBAkAbmFtZV9oYXNoV0F0s7B7PVgDCgBuZXR3b3JrX2lkri5afQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:repeater" - }, - { - "id": "minecraft:comparator" - }, - { - "id": "minecraft:hopper" - }, - { - "id": "minecraft:dropper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AAAACAQAbmFtZREAbWluZWNyYWZ0OmRyb3BwZXIECQBuYW1lX2hhc2joXP7XqU0l3QMKAG5ldHdvcmtfaWQfQN6zCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgMAAAABDQB0cmlnZ2VyZWRfYml0AAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:dispenser", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAAAACAQAbmFtZRMAbWluZWNyYWZ0OmRpc3BlbnNlcgQJAG5hbWVfaGFzaP1RR+zAbYP2AwoAbmV0d29ya19pZGAayD0KBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAwAAAAENAHRyaWdnZXJlZF9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:crafter", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4AgAACAQAbmFtZREAbWluZWNyYWZ0OmNyYWZ0ZXIECQBuYW1lX2hhc2iLCT/rJmRN8QMKAG5ldHdvcmtfaWTPTbvrCgYAc3RhdGVzAQgAY3JhZnRpbmcACAsAb3JpZW50YXRpb24JAGRvd25fZWFzdAENAHRyaWdnZXJlZF9iaXQAAAMHAHZlcnNpb24GFBUBAA==" - }, - { - "id": "minecraft:piston", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQhAAAACAQAbmFtZRAAbWluZWNyYWZ0OnBpc3RvbgQJAG5hbWVfaGFzaDs3AFh1fL0uAwoAbmV0d29ya19pZLD/5XQKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAQAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:sticky_piston", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQdAAAACAQAbmFtZRcAbWluZWNyYWZ0OnN0aWNreV9waXN0b24ECQBuYW1lX2hhc2hPFJFJSiJ0ZQMKAG5ldHdvcmtfaWT/MzCJCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgEAAAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:tnt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAAAACAQAbmFtZQ0AbWluZWNyYWZ0OnRudAQJAG5hbWVfaGFzaEYOHwCvJH29AwoAbmV0d29ya19pZCGfjU4KBgBzdGF0ZXMBFABhbGxvd191bmRlcndhdGVyX2JpdAABCwBleHBsb2RlX2JpdAAAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:name_tag" - }, - { - "id": "minecraft:loom", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAQAACAQAbmFtZQ4AbWluZWNyYWZ0Omxvb20ECQBuYW1lX2hhc2i7DKjAXNq8TAMKAG5ldHdvcmtfaWR/49HXCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:banner", - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 8, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 7, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 15, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 12, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 14, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 1, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 4, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 5, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 13, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 9, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 3, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 11, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 10, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 2, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "id": "minecraft:banner", - "damage": 6, - "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" - }, - { - "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:flow_banner_pattern" - }, - { - "id": "minecraft:guster_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:flow_pottery_sherd" - }, - { - "id": "minecraft:friend_pottery_sherd" - }, - { - "id": "minecraft:guster_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:scrape_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:flow_armor_trim_smithing_template" - }, - { - "id": "minecraft:bolt_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": "CgAAAwgAYmxvY2tfaWTuAQAACAQAbmFtZRAAbWluZWNyYWZ0OnRhcmdldAQJAG5hbWVfaGFzaJc66SVbYlaxAwoAbmV0d29ya19pZPBozs0KBgBzdGF0ZXMAAwcAdmVyc2lvbgYUFQEA" - }, - { - "id": "minecraft:decorated_pot", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAwAACAQAbmFtZRcAbWluZWNyYWZ0OmRlY29yYXRlZF9wb3QECQBuYW1lX2hhc2jjQgckn8VTvwMKAG5ldHdvcmtfaWRwvkUUCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBhQVAQA=" - }, - { - "id": "minecraft:lodestone_compass" - }, - { - "id": "minecraft:wither_spawn_egg" - }, - { - "id": "minecraft:ender_dragon_spawn_egg" - }, - { - "id": "minecraft:ominous_trial_key" - } - ] -} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/creative_items.1_21_30.json b/core/src/main/resources/bedrock/creative_items.1_21_50.json similarity index 84% rename from core/src/main/resources/bedrock/creative_items.1_21_30.json rename to core/src/main/resources/bedrock/creative_items.1_21_50.json index 8fab4638e..a1d4ac6ef 100644 --- a/core/src/main/resources/bedrock/creative_items.1_21_30.json +++ b/core/src/main/resources/bedrock/creative_items.1_21_50.json @@ -2,443 +2,491 @@ "items": [ { "id": "minecraft:oak_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19wbGFua3MECQBuYW1lX2hhc2ilMDLR92rQ4wMKAG5ldHdvcmtfaWS2GotyCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19wbGFua3MECQBuYW1lX2hhc2ilMDLR92rQ4wMKAG5ldHdvcmtfaWS2GotyCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:spruce_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAwAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9wbGFua3MECQBuYW1lX2hhc2iumBkmFGFE8gMKAG5ldHdvcmtfaWSo8TFgCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAwAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9wbGFua3MECQBuYW1lX2hhc2iumBkmFGFE8gMKAG5ldHdvcmtfaWSo8TFgCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:birch_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX3BsYW5rcwQJAG5hbWVfaGFzaLrrAKJqV2WFAwoAbmV0d29ya19pZL+e3ZAKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX3BsYW5rcwQJAG5hbWVfaGFzaLrrAKJqV2WFAwoAbmV0d29ya19pZL+e3ZAKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:jungle_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAwAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9wbGFua3MECQBuYW1lX2hhc2iBM3k4T3FAugMKAG5ldHdvcmtfaWSXUmBCCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAwAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9wbGFua3MECQBuYW1lX2hhc2iBM3k4T3FAugMKAG5ldHdvcmtfaWSXUmBCCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:acacia_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAwAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9wbGFua3MECQBuYW1lX2hhc2g60edJxO5/aAMKAG5ldHdvcmtfaWTUXozECgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAwAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9wbGFua3MECQBuYW1lX2hhc2g60edJxO5/aAMKAG5ldHdvcmtfaWTUXozECgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:dark_oak_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX3BsYW5rcwQJAG5hbWVfaGFzaAr64wkQ9cA7AwoAbmV0d29ya19pZFbMeR0KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX3BsYW5rcwQJAG5hbWVfaGFzaAr64wkQ9cA7AwoAbmV0d29ya19pZFbMeR0KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:mangrove_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX3BsYW5rcwQJAG5hbWVfaGFzaPvLtcEA0F8xAwoAbmV0d29ya19pZEvnlCYKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX3BsYW5rcwQJAG5hbWVfaGFzaPvLtcEA0F8xAwoAbmV0d29ya19pZEvnlCYKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:cherry_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9wbGFua3MECQBuYW1lX2hhc2hNIvVh/lVW7gMKAG5ldHdvcmtfaWQTXpRoCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9wbGFua3MECQBuYW1lX2hhc2hNIvVh/lVW7gMKAG5ldHdvcmtfaWQTXpRoCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:pale_oak_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTjBAAACAQAbmFtZRkAbWluZWNyYWZ0OnBhbGVfb2FrX3BsYW5rcwQJAG5hbWVfaGFzaDbrgXmqzgxDAwoAbmV0d29ya19pZFpM6OoKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:bamboo_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT9AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19wbGFua3MECQBuYW1lX2hhc2gYnjNz7SCCjgMKAG5ldHdvcmtfaWTi8ySSCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWT9AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19wbGFua3MECQBuYW1lX2hhc2gYnjNz7SCCjgMKAG5ldHdvcmtfaWTi8ySSCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:bamboo_mosaic", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT8AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19tb3NhaWMECQBuYW1lX2hhc2izSEgiMKOp/AMKAG5ldHdvcmtfaWQZ/p8xCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWT8AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19tb3NhaWMECQBuYW1lX2hhc2izSEgiMKOp/AMKAG5ldHdvcmtfaWQZ/p8xCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:crimson_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fcGxhbmtzBAkAbmFtZV9oYXNoJc5IKqNXJnwDCgBuZXR3b3JrX2lkwtJDdQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fcGxhbmtzBAkAbmFtZV9oYXNoJc5IKqNXJnwDCgBuZXR3b3JrX2lkwtJDdQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:warped_planks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTyAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9wbGFua3MECQBuYW1lX2hhc2g3yGXEWhe6LgMKAG5ldHdvcmtfaWStTABvCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTyAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9wbGFua3MECQBuYW1lX2hhc2g3yGXEWhe6LgMKAG5ldHdvcmtfaWStTABvCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWSLY2XwCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWSLY2XwCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:mossy_cobblestone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTKBAAACAQAbmFtZSAAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2gHUQMwwFQeNQMKAG5ldHdvcmtfaWRzPhG8CgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTKBAAACAQAbmFtZSAAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2gHUQMwwFQeNQMKAG5ldHdvcmtfaWRzPhG8CgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:granite_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTLBAAACAQAbmFtZRYAbWluZWNyYWZ0OmdyYW5pdGVfd2FsbAQJAG5hbWVfaGFzaE1GmM5AU0qUAwoAbmV0d29ya19pZE/UoPUKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTLBAAACAQAbmFtZRYAbWluZWNyYWZ0OmdyYW5pdGVfd2FsbAQJAG5hbWVfaGFzaE1GmM5AU0qUAwoAbmV0d29ya19pZE/UoPUKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:diorite_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTMBAAACAQAbmFtZRYAbWluZWNyYWZ0OmRpb3JpdGVfd2FsbAQJAG5hbWVfaGFzaF27l0QvdM8xAwoAbmV0d29ya19pZJe7jOwKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTMBAAACAQAbmFtZRYAbWluZWNyYWZ0OmRpb3JpdGVfd2FsbAQJAG5hbWVfaGFzaF27l0QvdM8xAwoAbmV0d29ya19pZJe7jOwKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:andesite_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTNBAAACAQAbmFtZRcAbWluZWNyYWZ0OmFuZGVzaXRlX3dhbGwECQBuYW1lX2hhc2gAL1Vay0kZjQMKAG5ldHdvcmtfaWRJGxdvCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTNBAAACAQAbmFtZRcAbWluZWNyYWZ0OmFuZGVzaXRlX3dhbGwECQBuYW1lX2hhc2gAL1Vay0kZjQMKAG5ldHdvcmtfaWRJGxdvCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:sandstone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTOBAAACAQAbmFtZRgAbWluZWNyYWZ0OnNhbmRzdG9uZV93YWxsBAkAbmFtZV9oYXNoYL2gu8a6HfgDCgBuZXR3b3JrX2lkHrhRjgoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTOBAAACAQAbmFtZRgAbWluZWNyYWZ0OnNhbmRzdG9uZV93YWxsBAkAbmFtZV9oYXNoYL2gu8a6HfgDCgBuZXR3b3JrX2lkHrhRjgoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:red_sandstone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTVBAAACAQAbmFtZRwAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmVfd2FsbAQJAG5hbWVfaGFzaLAUUdOlo24MAwoAbmV0d29ya19pZI66BqAKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTVBAAACAQAbmFtZRwAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmVfd2FsbAQJAG5hbWVfaGFzaLAUUdOlo24MAwoAbmV0d29ya19pZI66BqAKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:stone_brick_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTQBAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2JyaWNrX3dhbGwECQBuYW1lX2hhc2hQegufuP6vjAMKAG5ldHdvcmtfaWS4AsOKCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTQBAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2JyaWNrX3dhbGwECQBuYW1lX2hhc2hQegufuP6vjAMKAG5ldHdvcmtfaWS4AsOKCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:mossy_stone_brick_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTRBAAACAQAbmFtZSAAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrX3dhbGwECQBuYW1lX2hhc2i680zzUekp+wMKAG5ldHdvcmtfaWTQTaHPCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTRBAAACAQAbmFtZSAAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrX3dhbGwECQBuYW1lX2hhc2i680zzUekp+wMKAG5ldHdvcmtfaWTQTaHPCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:brick_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTPBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJyaWNrX3dhbGwECQBuYW1lX2hhc2gGJFLNjfgSCAMKAG5ldHdvcmtfaWSc5iUZCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTPBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJyaWNrX3dhbGwECQBuYW1lX2hhc2gGJFLNjfgSCAMKAG5ldHdvcmtfaWSc5iUZCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:nether_brick_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTSBAAACAQAbmFtZRsAbWluZWNyYWZ0Om5ldGhlcl9icmlja193YWxsBAkAbmFtZV9oYXNoAxb5f2yQ5MYDCgBuZXR3b3JrX2lkAECPDAoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTSBAAACAQAbmFtZRsAbWluZWNyYWZ0Om5ldGhlcl9icmlja193YWxsBAkAbmFtZV9oYXNoAxb5f2yQ5MYDCgBuZXR3b3JrX2lkAECPDAoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:red_nether_brick_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTWBAAACAQAbmFtZR8AbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2tfd2FsbAQJAG5hbWVfaGFzaBOtwkokUt3cAwoAbmV0d29ya19pZJykmZUKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTWBAAACAQAbmFtZR8AbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2tfd2FsbAQJAG5hbWVfaGFzaBOtwkokUt3cAwoAbmV0d29ya19pZJykmZUKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:end_stone_brick_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTTBAAACAQAbmFtZR4AbWluZWNyYWZ0OmVuZF9zdG9uZV9icmlja193YWxsBAkAbmFtZV9oYXNoOsr1L9kJIAMDCgBuZXR3b3JrX2lkjuYlYgoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTBAAACAQAbmFtZR4AbWluZWNyYWZ0OmVuZF9zdG9uZV9icmlja193YWxsBAkAbmFtZV9oYXNoOsr1L9kJIAMDCgBuZXR3b3JrX2lkjuYlYgoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:prismarine_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTUBAAACAQAbmFtZRkAbWluZWNyYWZ0OnByaXNtYXJpbmVfd2FsbAQJAG5hbWVfaGFzaDO5IGrYZu1/AwoAbmV0d29ya19pZB4nLYYKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTUBAAACAQAbmFtZRkAbWluZWNyYWZ0OnByaXNtYXJpbmVfd2FsbAQJAG5hbWVfaGFzaDO5IGrYZu1/AwoAbmV0d29ya19pZB4nLYYKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:blackstone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsYWNrc3RvbmVfd2FsbAQJAG5hbWVfaGFzaMP8XppUSU1RAwoAbmV0d29ya19pZMbeBBsKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsYWNrc3RvbmVfd2FsbAQJAG5hbWVfaGFzaMP8XppUSU1RAwoAbmV0d29ya19pZMbeBBsKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:polished_blackstone_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfd2FsbAQJAG5hbWVfaGFzaP6SwV08YwzAAwoAbmV0d29ya19pZAJLsz8KBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfd2FsbAQJAG5hbWVfaGFzaP6SwV08YwzAAwoAbmV0d29ya19pZAJLsz8KBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:polished_blackstone_brick_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQVAgAACAQAbmFtZSgAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfd2FsbAQJAG5hbWVfaGFzaBBIDZbHxiEzAwoAbmV0d29ya19pZEbLV8cKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQVAgAACAQAbmFtZSgAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfd2FsbAQJAG5hbWVfaGFzaBBIDZbHxiEzAwoAbmV0d29ya19pZEbLV8cKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:cobbled_deepslate_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AgAACAQAbmFtZSAAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3dhbGwECQBuYW1lX2hhc2iECY5oKxeT+gMKAG5ldHdvcmtfaWRCnPrFCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AgAACAQAbmFtZSAAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3dhbGwECQBuYW1lX2hhc2iECY5oKxeT+gMKAG5ldHdvcmtfaWRCnPrFCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:deepslate_tile_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3dhbGwECQBuYW1lX2hhc2jz7N+PeuEXgQMKAG5ldHdvcmtfaWTqw4s4CgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3dhbGwECQBuYW1lX2hhc2jz7N+PeuEXgQMKAG5ldHdvcmtfaWTqw4s4CgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:polished_deepslate_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV93YWxsBAkAbmFtZV9oYXNoHxjTdj9pevMDCgBuZXR3b3JrX2lkIvBYYwoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV93YWxsBAkAbmFtZV9oYXNoHxjTdj9pevMDCgBuZXR3b3JrX2lkIvBYYwoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:deepslate_brick_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSJAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja193YWxsBAkAbmFtZV9oYXNoEs3EQrjroyEDCgBuZXR3b3JrX2lkwlrCGwoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSJAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja193YWxsBAkAbmFtZV9oYXNoEs3EQrjroyEDCgBuZXR3b3JrX2lkwlrCGwoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:tuff_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAwAACAQAbmFtZRMAbWluZWNyYWZ0OnR1ZmZfd2FsbAQJAG5hbWVfaGFzaMyeeu1IRf03AwoAbmV0d29ya19pZDkIrosKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:tuff_brick_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT1AwAACAQAbmFtZRkAbWluZWNyYWZ0OnR1ZmZfYnJpY2tfd2FsbAQJAG5hbWVfaGFzaIL0IyNCOsonAwoAbmV0d29ya19pZJW4T5UKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:polished_tuff_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTvAwAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmZfd2FsbAQJAG5hbWVfaGFzaJVZj6QYWXUrAwoAbmV0d29ya19pZLU7dooKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:mud_brick_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAgAACAQAbmFtZRgAbWluZWNyYWZ0Om11ZF9icmlja193YWxsBAkAbmFtZV9oYXNov9b98ATpUSwDCgBuZXR3b3JrX2lkH/1WZQoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAgAACAQAbmFtZRgAbWluZWNyYWZ0Om11ZF9icmlja193YWxsBAkAbmFtZV9oYXNov9b98ATpUSwDCgBuZXR3b3JrX2lkH/1WZQoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:resin_brick_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT4BAAACAQAbmFtZRoAbWluZWNyYWZ0OnJlc2luX2JyaWNrX3dhbGwECQBuYW1lX2hhc2iUkvfZlSl8+gMKAG5ldHdvcmtfaWSYW394CgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:oak_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAAAACAQAbmFtZRMAbWluZWNyYWZ0Om9ha19mZW5jZQQJAG5hbWVfaGFzaGEmid7AaCWRAwoAbmV0d29ya19pZDvPEXcKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAAAACAQAbmFtZRMAbWluZWNyYWZ0Om9ha19mZW5jZQQJAG5hbWVfaGFzaGEmid7AaCWRAwoAbmV0d29ya19pZDvPEXcKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:spruce_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRCAwAACAQAbmFtZRYAbWluZWNyYWZ0OnNwcnVjZV9mZW5jZQQJAG5hbWVfaGFzaPQCm+aX1ZQeAwoAbmV0d29ya19pZD1QUEoKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRCAwAACAQAbmFtZRYAbWluZWNyYWZ0OnNwcnVjZV9mZW5jZQQJAG5hbWVfaGFzaPQCm+aX1ZQeAwoAbmV0d29ya19pZD1QUEoKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:birch_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ/AwAACAQAbmFtZRUAbWluZWNyYWZ0OmJpcmNoX2ZlbmNlBAkAbmFtZV9oYXNo6CJ2ATpANfgDCgBuZXR3b3JrX2lkmCUV2QoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ/AwAACAQAbmFtZRUAbWluZWNyYWZ0OmJpcmNoX2ZlbmNlBAkAbmFtZV9oYXNo6CJ2ATpANfgDCgBuZXR3b3JrX2lkmCUV2QoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:jungle_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRBAwAACAQAbmFtZRYAbWluZWNyYWZ0Omp1bmdsZV9mZW5jZQQJAG5hbWVfaGFzaOX4cD9uAmsdAwoAbmV0d29ya19pZHz1VxkKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRBAwAACAQAbmFtZRYAbWluZWNyYWZ0Omp1bmdsZV9mZW5jZQQJAG5hbWVfaGFzaOX4cD9uAmsdAwoAbmV0d29ya19pZHz1VxkKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:acacia_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ+AwAACAQAbmFtZRYAbWluZWNyYWZ0OmFjYWNpYV9mZW5jZQQJAG5hbWVfaGFzaGjn+RlKVDH6AwoAbmV0d29ya19pZNVGubwKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ+AwAACAQAbmFtZRYAbWluZWNyYWZ0OmFjYWNpYV9mZW5jZQQJAG5hbWVfaGFzaGjn+RlKVDH6AwoAbmV0d29ya19pZNVGubwKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:dark_oak_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRAAwAACAQAbmFtZRgAbWluZWNyYWZ0OmRhcmtfb2FrX2ZlbmNlBAkAbmFtZV9oYXNoGPj0gCgM0c0DCgBuZXR3b3JrX2lk2w+gEwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRAAwAACAQAbmFtZRgAbWluZWNyYWZ0OmRhcmtfb2FrX2ZlbmNlBAkAbmFtZV9oYXNoGPj0gCgM0c0DCgBuZXR3b3JrX2lk2w+gEwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:mangrove_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hbmdyb3ZlX2ZlbmNlBAkAbmFtZV9oYXNowwAd7tPu9bsDCgBuZXR3b3JrX2lkKEcd0goGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hbmdyb3ZlX2ZlbmNlBAkAbmFtZV9oYXNowwAd7tPu9bsDCgBuZXR3b3JrX2lkKEcd0goGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:cherry_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAwAACAQAbmFtZRYAbWluZWNyYWZ0OmNoZXJyeV9mZW5jZQQJAG5hbWVfaGFzaFmtUfHfTxcxAwoAbmV0d29ya19pZPCBxAIKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAwAACAQAbmFtZRYAbWluZWNyYWZ0OmNoZXJyeV9mZW5jZQQJAG5hbWVfaGFzaFmtUfHfTxcxAwoAbmV0d29ya19pZPCBxAIKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:pale_oak_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTeBAAACAQAbmFtZRgAbWluZWNyYWZ0OnBhbGVfb2FrX2ZlbmNlBAkAbmFtZV9oYXNobM05DVVUSxsDCgBuZXR3b3JrX2lkS7udAwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:bamboo_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJhbWJvb19mZW5jZQQJAG5hbWVfaGFzaCKRbxfXsfkiAwoAbmV0d29ya19pZJNXKFcKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJhbWJvb19mZW5jZQQJAG5hbWVfaGFzaCKRbxfXsfkiAwoAbmV0d29ya19pZJNXKFcKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:nether_brick_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRxAAAACAQAbmFtZRwAbWluZWNyYWZ0Om5ldGhlcl9icmlja19mZW5jZQQJAG5hbWVfaGFzaA6030ngawxcAwoAbmV0d29ya19pZLnjLF4KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRxAAAACAQAbmFtZRwAbWluZWNyYWZ0Om5ldGhlcl9icmlja19mZW5jZQQJAG5hbWVfaGFzaA6030ngawxcAwoAbmV0d29ya19pZLnjLF4KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:crimson_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT/AQAACAQAbmFtZRcAbWluZWNyYWZ0OmNyaW1zb25fZmVuY2UECQBuYW1lX2hhc2jhUhKv1HGj9AMKAG5ldHdvcmtfaWR3OH3OCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWT/AQAACAQAbmFtZRcAbWluZWNyYWZ0OmNyaW1zb25fZmVuY2UECQBuYW1lX2hhc2jhUhKv1HGj9AMKAG5ldHdvcmtfaWR3OH3OCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:warped_fence", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQAAgAACAQAbmFtZRYAbWluZWNyYWZ0OndhcnBlZF9mZW5jZQQJAG5hbWVfaGFzaJfb3/YuKmOWAwoAbmV0d29ya19pZCpaGC8KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQAAgAACAQAbmFtZRYAbWluZWNyYWZ0OndhcnBlZF9mZW5jZQQJAG5hbWVfaGFzaJfb3/YuKmOWAwoAbmV0d29ya19pZCpaGC8KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAAAACAQAbmFtZRQAbWluZWNyYWZ0OmZlbmNlX2dhdGUECQBuYW1lX2hhc2hTxpjEDmRzAwMKAG5ldHdvcmtfaWR+T9kTCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAAAACAQAbmFtZRQAbWluZWNyYWZ0OmZlbmNlX2dhdGUECQBuYW1lX2hhc2hTxpjEDmRzAwMKAG5ldHdvcmtfaWR+T9kTCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:spruce_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS3AAAACAQAbmFtZRsAbWluZWNyYWZ0OnNwcnVjZV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoanTVB84HRbkDCgBuZXR3b3JrX2lkEnw5egoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWS3AAAACAQAbmFtZRsAbWluZWNyYWZ0OnNwcnVjZV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoanTVB84HRbkDCgBuZXR3b3JrX2lkEnw5egoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:birch_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS4AAAACAQAbmFtZRoAbWluZWNyYWZ0OmJpcmNoX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2jmfPklI8azSwMKAG5ldHdvcmtfaWQL77/BCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWS4AAAACAQAbmFtZRoAbWluZWNyYWZ0OmJpcmNoX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2jmfPklI8azSwMKAG5ldHdvcmtfaWQL77/BCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:jungle_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS5AAAACAQAbmFtZRsAbWluZWNyYWZ0Omp1bmdsZV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNobYVQkfBomIcDCgBuZXR3b3JrX2lkA1zgtgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWS5AAAACAQAbmFtZRsAbWluZWNyYWZ0Omp1bmdsZV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNobYVQkfBomIcDCgBuZXR3b3JrX2lkA1zgtgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:acacia_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS7AAAACAQAbmFtZRsAbWluZWNyYWZ0OmFjYWNpYV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoZnrLUx/XSekDCgBuZXR3b3JrX2lkHg/kTgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWS7AAAACAQAbmFtZRsAbWluZWNyYWZ0OmFjYWNpYV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoZnrLUx/XSekDCgBuZXR3b3JrX2lkHg/kTgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:dark_oak_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS6AAAACAQAbmFtZR0AbWluZWNyYWZ0OmRhcmtfb2FrX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2j2PTvdJJHcVQMKAG5ldHdvcmtfaWTwjOCeCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWS6AAAACAQAbmFtZR0AbWluZWNyYWZ0OmRhcmtfb2FrX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2j2PTvdJJHcVQMKAG5ldHdvcmtfaWTwjOCeCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:mangrove_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAgAACAQAbmFtZR0AbWluZWNyYWZ0Om1hbmdyb3ZlX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2i/kOhBKiI/dAMKAG5ldHdvcmtfaWSfweCSCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAgAACAQAbmFtZR0AbWluZWNyYWZ0Om1hbmdyb3ZlX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2i/kOhBKiI/dAMKAG5ldHdvcmtfaWSfweCSCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:cherry_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAwAACAQAbmFtZRsAbWluZWNyYWZ0OmNoZXJyeV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoKWLgCk0z+PsDCgBuZXR3b3JrX2lk/9bTZQoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAwAACAQAbmFtZRsAbWluZWNyYWZ0OmNoZXJyeV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoKWLgCk0z+PsDCgBuZXR3b3JrX2lk/9bTZQoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:pale_oak_fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTfBAAACAQAbmFtZR0AbWluZWNyYWZ0OnBhbGVfb2FrX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2hCrHUtEPI3BgMKAG5ldHdvcmtfaWRsEYcmCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:bamboo_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJhbWJvb19mZW5jZV9nYXRlBAkAbmFtZV9oYXNopH1JrUgwdIADCgBuZXR3b3JrX2lkzIpPywoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJhbWJvb19mZW5jZV9nYXRlBAkAbmFtZV9oYXNopH1JrUgwdIADCgBuZXR3b3JrX2lkzIpPywoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:crimson_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAgAACAQAbmFtZRwAbWluZWNyYWZ0OmNyaW1zb25fZmVuY2VfZ2F0ZQQJAG5hbWVfaGFzaHE3Gfd0Z2d2AwoAbmV0d29ya19pZDQzVbEKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQsAaW5fd2FsbF9iaXQAAQgAb3Blbl9iaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAgAACAQAbmFtZRwAbWluZWNyYWZ0OmNyaW1zb25fZmVuY2VfZ2F0ZQQJAG5hbWVfaGFzaHE3Gfd0Z2d2AwoAbmV0d29ya19pZDQzVbEKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQsAaW5fd2FsbF9iaXQAAQgAb3Blbl9iaXQAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:warped_fence_gate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAgAACAQAbmFtZRsAbWluZWNyYWZ0OndhcnBlZF9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoy0oIBjDIG4kDCgBuZXR3b3JrX2lkkf+/3QoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAgAACAQAbmFtZRsAbWluZWNyYWZ0OndhcnBlZF9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoy0oIBjDIG4kDCgBuZXR3b3JrX2lkkf+/3QoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:normal_stone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAQAACAQAbmFtZR0AbWluZWNyYWZ0Om5vcm1hbF9zdG9uZV9zdGFpcnMECQBuYW1lX2hhc2hAEktZZOkGIwMKAG5ldHdvcmtfaWQeH1ALCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAQAACAQAbmFtZR0AbWluZWNyYWZ0Om5vcm1hbF9zdG9uZV9zdGFpcnMECQBuYW1lX2hhc2hAEktZZOkGIwMKAG5ldHdvcmtfaWQeH1ALCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:stone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAAAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX3N0YWlycwQJAG5hbWVfaGFzaNRjqVC5GRVDAwoAbmV0d29ya19pZDcCv+MKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAAAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX3N0YWlycwQJAG5hbWVfaGFzaNRjqVC5GRVDAwoAbmV0d29ya19pZDcCv+MKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:mossy_cobblestone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSyAQAACAQAbmFtZSIAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lX3N0YWlycwQJAG5hbWVfaGFzaMVSTq5z9n1RAwoAbmV0d29ya19pZFIfrhkKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSyAQAACAQAbmFtZSIAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lX3N0YWlycwQJAG5hbWVfaGFzaMVSTq5z9n1RAwoAbmV0d29ya19pZFIfrhkKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:oak_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ1AAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19zdGFpcnMECQBuYW1lX2hhc2jk/HFzdXy0FQMKAG5ldHdvcmtfaWQJjyzBCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ1AAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19zdGFpcnMECQBuYW1lX2hhc2jk/HFzdXy0FQMKAG5ldHdvcmtfaWQJjyzBCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:spruce_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAAAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9zdGFpcnMECQBuYW1lX2hhc2iznygw7uBPBQMKAG5ldHdvcmtfaWTv+is3CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAAAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9zdGFpcnMECQBuYW1lX2hhc2iznygw7uBPBQMKAG5ldHdvcmtfaWTv+is3CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:birch_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAAAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX3N0YWlycwQJAG5hbWVfaGFzaPfhbL619a3GAwoAbmV0d29ya19pZFyPlHAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAAAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX3N0YWlycwQJAG5hbWVfaGFzaPfhbL619a3GAwoAbmV0d29ya19pZFyPlHAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:jungle_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAAAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9zdGFpcnMECQBuYW1lX2hhc2jodJsHUbOVxQMKAG5ldHdvcmtfaWR0z5d4CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAAAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9zdGFpcnMECQBuYW1lX2hhc2jodJsHUbOVxQMKAG5ldHdvcmtfaWR0z5d4CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:acacia_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAAAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9zdGFpcnMECQBuYW1lX2hhc2h3x1NmD43IqQMKAG5ldHdvcmtfaWS7Jwz6CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAAAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9zdGFpcnMECQBuYW1lX2hhc2h3x1NmD43IqQMKAG5ldHdvcmtfaWS7Jwz6CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:dark_oak_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAAAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX3N0YWlycwQJAG5hbWVfaGFzaMfwkbYPbNmAAwoAbmV0d29ya19pZCmBYKAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAAAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX3N0YWlycwQJAG5hbWVfaGFzaMfwkbYPbNmAAwoAbmV0d29ya19pZCmBYKAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:mangrove_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX3N0YWlycwQJAG5hbWVfaGFzaNpUDY+uGMpyAwoAbmV0d29ya19pZChzUAsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX3N0YWlycwQJAG5hbWVfaGFzaNpUDY+uGMpyAwoAbmV0d29ya19pZChzUAsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:cherry_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQcAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9zdGFpcnMECQBuYW1lX2hhc2jMtr0v9JY4zwMKAG5ldHdvcmtfaWRQwq31CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQcAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9zdGFpcnMECQBuYW1lX2hhc2jMtr0v9JY4zwMKAG5ldHdvcmtfaWRQwq31CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:pale_oak_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTnBAAACAQAbmFtZRkAbWluZWNyYWZ0OnBhbGVfb2FrX3N0YWlycwQJAG5hbWVfaGFzaJsYBq7wfPXaAwoAbmV0d29ya19pZE1U5UIKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:bamboo_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT/AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19zdGFpcnMECQBuYW1lX2hhc2jFOzWL8PalKwMKAG5ldHdvcmtfaWTVPh42CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWT/AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19zdGFpcnMECQBuYW1lX2hhc2jFOzWL8PalKwMKAG5ldHdvcmtfaWTVPh42CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:bamboo_mosaic_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQKAwAACAQAbmFtZR4AbWluZWNyYWZ0OmJhbWJvb19tb3NhaWNfc3RhaXJzBAkAbmFtZV9oYXNoNLPiveSHPaoDCgBuZXR3b3JrX2lk44PHjgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQKAwAACAQAbmFtZR4AbWluZWNyYWZ0OmJhbWJvb19tb3NhaWNfc3RhaXJzBAkAbmFtZV9oYXNoNLPiveSHPaoDCgBuZXR3b3JrX2lk44PHjgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:stone_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAAAACAQAbmFtZRwAbWluZWNyYWZ0OnN0b25lX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaN6tQViRo5cwAwoAbmV0d29ya19pZDMyMgIKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAAAACAQAbmFtZRwAbWluZWNyYWZ0OnN0b25lX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaN6tQViRo5cwAwoAbmV0d29ya19pZDMyMgIKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:mossy_stone_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAQAACAQAbmFtZSIAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaIB/Zv5YBPuYAwoAbmV0d29ya19pZANTOsMKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAQAACAQAbmFtZSIAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaIB/Zv5YBPuYAwoAbmV0d29ya19pZANTOsMKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:sandstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAAAACAQAbmFtZRoAbWluZWNyYWZ0OnNhbmRzdG9uZV9zdGFpcnMECQBuYW1lX2hhc2hOyA0BoYUOPQMKAG5ldHdvcmtfaWSV/834CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAAAACAQAbmFtZRoAbWluZWNyYWZ0OnNhbmRzdG9uZV9zdGFpcnMECQBuYW1lX2hhc2hOyA0BoYUOPQMKAG5ldHdvcmtfaWSV/834CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:smooth_sandstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSwAQAACAQAbmFtZSEAbWluZWNyYWZ0OnNtb290aF9zYW5kc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNoB+CuCd8Ruz8DCgBuZXR3b3JrX2lksR+m8QoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSwAQAACAQAbmFtZSEAbWluZWNyYWZ0OnNtb290aF9zYW5kc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNoB+CuCd8Ruz8DCgBuZXR3b3JrX2lksR+m8QoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:red_sandstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS0AAAACAQAbmFtZR4AbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNoPs0LpHPL24YDCgBuZXR3b3JrX2lkLYVt3woGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWS0AAAACAQAbmFtZR4AbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNoPs0LpHPL24YDCgBuZXR3b3JrX2lkLYVt3woGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:smooth_red_sandstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAQAACAQAbmFtZSUAbWluZWNyYWZ0OnNtb290aF9yZWRfc2FuZHN0b25lX3N0YWlycwQJAG5hbWVfaGFzaBvjtQv5pf+MAwoAbmV0d29ya19pZMHNND8KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAQAACAQAbmFtZSUAbWluZWNyYWZ0OnNtb290aF9yZWRfc2FuZHN0b25lX3N0YWlycwQJAG5hbWVfaGFzaBvjtQv5pf+MAwoAbmV0d29ya19pZMHNND8KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:granite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAQAACAQAbmFtZRgAbWluZWNyYWZ0OmdyYW5pdGVfc3RhaXJzBAkAbmFtZV9oYXNoGzpvtoqKQjgDCgBuZXR3b3JrX2lkPkcB1goGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAQAACAQAbmFtZRgAbWluZWNyYWZ0OmdyYW5pdGVfc3RhaXJzBAkAbmFtZV9oYXNoGzpvtoqKQjgDCgBuZXR3b3JrX2lkPkcB1goGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:polished_granite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAQAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGVfc3RhaXJzBAkAbmFtZV9oYXNo3PvbSfEQklIDCgBuZXR3b3JrX2lkMmEm3AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAQAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGVfc3RhaXJzBAkAbmFtZV9oYXNo3PvbSfEQklIDCgBuZXR3b3JrX2lkMmEm3AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:diorite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAQAACAQAbmFtZRgAbWluZWNyYWZ0OmRpb3JpdGVfc3RhaXJzBAkAbmFtZV9oYXNoi73T8VQuZmcDCgBuZXR3b3JrX2lk6i6nBQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAQAACAQAbmFtZRgAbWluZWNyYWZ0OmRpb3JpdGVfc3RhaXJzBAkAbmFtZV9oYXNoi73T8VQuZmcDCgBuZXR3b3JrX2lk6i6nBQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:polished_diorite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAQAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGVfc3RhaXJzBAkAbmFtZV9oYXNoFKRJd5Wk5L0DCgBuZXR3b3JrX2lkbt2ioAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAQAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGVfc3RhaXJzBAkAbmFtZV9oYXNoFKRJd5Wk5L0DCgBuZXR3b3JrX2lkbt2ioAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:andesite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAQAACAQAbmFtZRkAbWluZWNyYWZ0OmFuZGVzaXRlX3N0YWlycwQJAG5hbWVfaGFzaO5w2FKBw76EAwoAbmV0d29ya19pZKhXEgUKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAQAACAQAbmFtZRkAbWluZWNyYWZ0OmFuZGVzaXRlX3N0YWlycwQJAG5hbWVfaGFzaO5w2FKBw76EAwoAbmV0d29ya19pZKhXEgUKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:polished_andesite_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWStAQAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlX3N0YWlycwQJAG5hbWVfaGFzaNcZZ/zmLInIAwoAbmV0d29ya19pZJTHrlEKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWStAQAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlX3N0YWlycwQJAG5hbWVfaGFzaNcZZ/zmLInIAwoAbmV0d29ya19pZJTHrlEKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAAAACAQAbmFtZRYAbWluZWNyYWZ0OmJyaWNrX3N0YWlycwQJAG5hbWVfaGFzaMyt+cRDk5O2AwoAbmV0d29ya19pZNeMh58KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAAAACAQAbmFtZRYAbWluZWNyYWZ0OmJyaWNrX3N0YWlycwQJAG5hbWVfaGFzaMyt+cRDk5O2AwoAbmV0d29ya19pZNeMh58KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:nether_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRyAAAACAQAbmFtZR0AbWluZWNyYWZ0Om5ldGhlcl9icmlja19zdGFpcnMECQBuYW1lX2hhc2jRqIoOXgifBAMKAG5ldHdvcmtfaWQDiw5yCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRyAAAACAQAbmFtZR0AbWluZWNyYWZ0Om5ldGhlcl9icmlja19zdGFpcnMECQBuYW1lX2hhc2jRqIoOXgifBAMKAG5ldHdvcmtfaWQDiw5yCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:red_nether_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS3AQAACAQAbmFtZSEAbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNogQvosSbcj7kDCgBuZXR3b3JrX2lkx2IMtAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWS3AQAACAQAbmFtZSEAbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNogQvosSbcj7kDCgBuZXR3b3JrX2lkx2IMtAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:end_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSxAQAACAQAbmFtZRoAbWluZWNyYWZ0OmVuZF9icmlja19zdGFpcnMECQBuYW1lX2hhc2hmlAk+QhsUsQMKAG5ldHdvcmtfaWTN7KFaCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSxAQAACAQAbmFtZRoAbWluZWNyYWZ0OmVuZF9icmlja19zdGFpcnMECQBuYW1lX2hhc2hmlAk+QhsUsQMKAG5ldHdvcmtfaWTN7KFaCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:quartz_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWScAAAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9zdGFpcnMECQBuYW1lX2hhc2hmvpvOqGi6egMKAG5ldHdvcmtfaWRmUTh7CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWScAAAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9zdGFpcnMECQBuYW1lX2hhc2hmvpvOqGi6egMKAG5ldHdvcmtfaWRmUTh7CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:smooth_quartz_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS4AQAACAQAbmFtZR4AbWluZWNyYWZ0OnNtb290aF9xdWFydHpfc3RhaXJzBAkAbmFtZV9oYXNoNZZ9rX0qZOsDCgBuZXR3b3JrX2lkzsgQyQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWS4AQAACAQAbmFtZR4AbWluZWNyYWZ0OnNtb290aF9xdWFydHpfc3RhaXJzBAkAbmFtZV9oYXNoNZZ9rX0qZOsDCgBuZXR3b3JrX2lkzsgQyQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:purpur_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAAAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnB1cl9zdGFpcnMECQBuYW1lX2hhc2ifwDxeezXD7gMKAG5ldHdvcmtfaWTT+rxiCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAAAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnB1cl9zdGFpcnMECQBuYW1lX2hhc2ifwDxeezXD7gMKAG5ldHdvcmtfaWTT+rxiCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:prismarine_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAQAACAQAbmFtZRsAbWluZWNyYWZ0OnByaXNtYXJpbmVfc3RhaXJzBAkAbmFtZV9oYXNooTHSZ+IrYtcDCgBuZXR3b3JrX2lkxTJfeAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAQAACAQAbmFtZRsAbWluZWNyYWZ0OnByaXNtYXJpbmVfc3RhaXJzBAkAbmFtZV9oYXNooTHSZ+IrYtcDCgBuZXR3b3JrX2lkxTJfeAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:dark_prismarine_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAQAACAQAbmFtZSAAbWluZWNyYWZ0OmRhcmtfcHJpc21hcmluZV9zdGFpcnMECQBuYW1lX2hhc2hIciLmam4o4AMKAG5ldHdvcmtfaWTVu7TCCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAQAACAQAbmFtZSAAbWluZWNyYWZ0OmRhcmtfcHJpc21hcmluZV9zdGFpcnMECQBuYW1lX2hhc2hIciLmam4o4AMKAG5ldHdvcmtfaWTVu7TCCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:prismarine_bricks_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAQAACAQAbmFtZSIAbWluZWNyYWZ0OnByaXNtYXJpbmVfYnJpY2tzX3N0YWlycwQJAG5hbWVfaGFzaNIjq1oBlZMMAwoAbmV0d29ya19pZGEFwLYKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAQAACAQAbmFtZSIAbWluZWNyYWZ0OnByaXNtYXJpbmVfYnJpY2tzX3N0YWlycwQJAG5hbWVfaGFzaNIjq1oBlZMMAwoAbmV0d29ya19pZGEFwLYKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:crimson_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT9AQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fc3RhaXJzBAkAbmFtZV9oYXNoZJqIzCBpCq4DCgBuZXR3b3JrX2lktXE00AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWT9AQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fc3RhaXJzBAkAbmFtZV9oYXNoZJqIzCBpCq4DCgBuZXR3b3JrX2lktXE00AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:warped_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT+AQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9zdGFpcnMECQBuYW1lX2hhc2hOkY27jLD4RQMKAG5ldHdvcmtfaWQ+E5VrCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWT+AQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9zdGFpcnMECQBuYW1lX2hhc2hOkY27jLD4RQMKAG5ldHdvcmtfaWQ+E5VrCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:blackstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAgAACAQAbmFtZRsAbWluZWNyYWZ0OmJsYWNrc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNokdoUb76p9McDCgBuZXR3b3JrX2lk5fWI5goGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAgAACAQAbmFtZRsAbWluZWNyYWZ0OmJsYWNrc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNokdoUb76p9McDCgBuZXR3b3JrX2lk5fWI5goGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:polished_blackstone_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNolCFtFIE8MmADCgBuZXR3b3JrX2lkGTf7sgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNolCFtFIE8MmADCgBuZXR3b3JrX2lkGTf7sgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:polished_blackstone_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQSAgAACAQAbmFtZSoAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNonks6UlfpOmkDCgBuZXR3b3JrX2lkgYeOdAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAgAACAQAbmFtZRsAbWluZWNyYWZ0OmN1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoHfoAXYq5G3MDCgBuZXR3b3JrX2lkeetf7woGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:exposed_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAgAACAQAbmFtZSMAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcl9zdGFpcnMECQBuYW1lX2hhc2howneQGtZ9cgMKAG5ldHdvcmtfaWSg73zdCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:weathered_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAgAACAQAbmFtZSUAbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyX3N0YWlycwQJAG5hbWVfaGFzaP+R5loXxrVgAwoAbmV0d29ya19pZOnbRf4KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:oxidized_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAgAACAQAbmFtZSQAbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNo6Jeoq5rsPxsDCgBuZXR3b3JrX2lkmRjDnQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:waxed_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAgAACAQAbmFtZSEAbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoh07CQj0/SR8DCgBuZXR3b3JrX2lkmYqoqAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:waxed_exposed_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcl9zdGFpcnMECQBuYW1lX2hhc2guVct1ilmxTwMKAG5ldHdvcmtfaWQgCPROCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:waxed_weathered_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRnAgAACAQAbmFtZSsAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyX3N0YWlycwQJAG5hbWVfaGFzaPXC8Sz/phCpAwoAbmV0d29ya19pZHlwHVsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:waxed_oxidized_cut_copper_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS/AgAACAQAbmFtZSoAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoaqGdkuhxVZUDCgBuZXR3b3JrX2lkYQXzzgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQSAgAACAQAbmFtZSoAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNonks6UlfpOmkDCgBuZXR3b3JrX2lkgYeOdAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:cobbled_deepslate_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR8AgAACAQAbmFtZSIAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3N0YWlycwQJAG5hbWVfaGFzaPIfa+TpyJcIAwoAbmV0d29ya19pZJUvOYIKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWR8AgAACAQAbmFtZSIAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3N0YWlycwQJAG5hbWVfaGFzaPIfa+TpyJcIAwoAbmV0d29ya19pZJUvOYIKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:deepslate_tile_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3N0YWlycwQJAG5hbWVfaGFzaGFRFzB72mN2AwoAbmV0d29ya19pZJEOgIsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3N0YWlycwQJAG5hbWVfaGFzaGFRFzB72mN2AwoAbmV0d29ya19pZJEOgIsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:polished_deepslate_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAgAACAQAbmFtZSMAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV9zdGFpcnMECQBuYW1lX2hhc2iNCYxVik9sGAMKAG5ldHdvcmtfaWSRVPnYCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAgAACAQAbmFtZSMAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV9zdGFpcnMECQBuYW1lX2hhc2iNCYxVik9sGAMKAG5ldHdvcmtfaWSRVPnYCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:deepslate_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAgAACAQAbmFtZSAAbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja19zdGFpcnMECQBuYW1lX2hhc2hIasOahEf83wMKAG5ldHdvcmtfaWQ1qEDCCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAgAACAQAbmFtZSAAbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja19zdGFpcnMECQBuYW1lX2hhc2hIasOahEf83wMKAG5ldHdvcmtfaWQ1qEDCCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:tuff_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAwAACAQAbmFtZRUAbWluZWNyYWZ0OnR1ZmZfc3RhaXJzBAkAbmFtZV9oYXNoKjyNUBjcfZsDCgBuZXR3b3JrX2lk+LsycgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:polished_tuff_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTuAwAACAQAbmFtZR4AbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmZfc3RhaXJzBAkAbmFtZV9oYXNo8yuah8QI1dcDCgBuZXR3b3JrX2lkjLoU4AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:tuff_brick_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT0AwAACAQAbmFtZRsAbWluZWNyYWZ0OnR1ZmZfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNoWJpkAurUfKwDCgBuZXR3b3JrX2lkUMcjiwoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:mud_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAgAACAQAbmFtZRoAbWluZWNyYWZ0Om11ZF9icmlja19zdGFpcnMECQBuYW1lX2hhc2gt3qxK1NWajAMKAG5ldHdvcmtfaWSm9N3MCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAgAACAQAbmFtZRoAbWluZWNyYWZ0Om11ZF9icmlja19zdGFpcnMECQBuYW1lX2hhc2gt3qxK1NWajAMKAG5ldHdvcmtfaWSm9N3MCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAgAACAQAbmFtZRsAbWluZWNyYWZ0OmN1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoHfoAXYq5G3MDCgBuZXR3b3JrX2lkeetf7woGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:exposed_cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAgAACAQAbmFtZSMAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcl9zdGFpcnMECQBuYW1lX2hhc2howneQGtZ9cgMKAG5ldHdvcmtfaWSg73zdCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:weathered_cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAgAACAQAbmFtZSUAbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyX3N0YWlycwQJAG5hbWVfaGFzaP+R5loXxrVgAwoAbmV0d29ya19pZOnbRf4KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:oxidized_cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAgAACAQAbmFtZSQAbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNo6Jeoq5rsPxsDCgBuZXR3b3JrX2lkmRjDnQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:waxed_cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAgAACAQAbmFtZSEAbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoh07CQj0/SR8DCgBuZXR3b3JrX2lkmYqoqAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:waxed_exposed_cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcl9zdGFpcnMECQBuYW1lX2hhc2guVct1ilmxTwMKAG5ldHdvcmtfaWQgCPROCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:waxed_weathered_cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRnAgAACAQAbmFtZSsAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyX3N0YWlycwQJAG5hbWVfaGFzaPXC8Sz/phCpAwoAbmV0d29ya19pZHlwHVsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:waxed_oxidized_cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS/AgAACAQAbmFtZSoAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoaqGdkuhxVZUDCgBuZXR3b3JrX2lkYQXzzgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:resin_brick_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT3BAAACAQAbmFtZRwAbWluZWNyYWZ0OnJlc2luX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaGJwsbVlApWmAwoAbmV0d29ya19pZCPz+A0KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:wooden_door" @@ -464,6 +512,9 @@ { "id": "minecraft:cherry_door" }, + { + "id": "minecraft:pale_oak_door" + }, { "id": "minecraft:bamboo_door" }, @@ -476,1729 +527,1813 @@ { "id": "minecraft:warped_door" }, - { - "id": "minecraft:trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRgAAAACAQAbmFtZRIAbWluZWNyYWZ0OnRyYXBkb29yBAkAbmFtZV9oYXNotYiAJGtN0xADCgBuZXR3b3JrX2lkyTAWkAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:spruce_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAQAACAQAbmFtZRkAbWluZWNyYWZ0OnNwcnVjZV90cmFwZG9vcgQJAG5hbWVfaGFzaOwlfbgBkUW4AwoAbmV0d29ya19pZPHy1K0KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:birch_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAQAACAQAbmFtZRgAbWluZWNyYWZ0OmJpcmNoX3RyYXBkb29yBAkAbmFtZV9oYXNoSLtLweOLJ7wDCgBuZXR3b3JrX2lkeJWDfgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:jungle_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSTAQAACAQAbmFtZRkAbWluZWNyYWZ0Omp1bmdsZV90cmFwZG9vcgQJAG5hbWVfaGFzaDP/TnM9wyCIAwoAbmV0d29ya19pZEy2fJoKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:acacia_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAQAACAQAbmFtZRkAbWluZWNyYWZ0OmFjYWNpYV90cmFwZG9vcgQJAG5hbWVfaGFzaMj8xi3vmEKOAwoAbmV0d29ya19pZOHj8E8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:dark_oak_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAQAACAQAbmFtZRsAbWluZWNyYWZ0OmRhcmtfb2FrX3RyYXBkb29yBAkAbmFtZV9oYXNomB2GGJQ2aOMDCgBuZXR3b3JrX2lko5ZHTwoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:mangrove_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTvAgAACAQAbmFtZRsAbWluZWNyYWZ0Om1hbmdyb3ZlX3RyYXBkb29yBAkAbmFtZV9oYXNooV3kQsQUUmkDCgBuZXR3b3JrX2lkkF/mxAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:cherry_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAwAACAQAbmFtZRkAbWluZWNyYWZ0OmNoZXJyeV90cmFwZG9vcgQJAG5hbWVfaGFzaH/PefpfdHgtAwoAbmV0d29ya19pZOA7eNgKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:bamboo_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAwAACAQAbmFtZRkAbWluZWNyYWZ0OmJhbWJvb190cmFwZG9vcgQJAG5hbWVfaGFzaJrEOpsTwtKCAwoAbmV0d29ya19pZLvbPz8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:iron_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAAAACAQAbmFtZRcAbWluZWNyYWZ0Omlyb25fdHJhcGRvb3IECQBuYW1lX2hhc2gwA+IumsEiGQMKAG5ldHdvcmtfaWTvSVl/CgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:crimson_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT1AQAACAQAbmFtZRoAbWluZWNyYWZ0OmNyaW1zb25fdHJhcGRvb3IECQBuYW1lX2hhc2jHXufTnwUkYgMKAG5ldHdvcmtfaWQLjMYVCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:warped_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT2AQAACAQAbmFtZRkAbWluZWNyYWZ0OndhcnBlZF90cmFwZG9vcgQJAG5hbWVfaGFzaA20wG/+vkd6AwoAbmV0d29ya19pZHKR/hYKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:iron_bars", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAAAACAQAbmFtZRMAbWluZWNyYWZ0Omlyb25fYmFycwQJAG5hbWVfaGFzaPuefWSNAe56AwoAbmV0d29ya19pZN2LB5IKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmdsYXNzBAkAbmFtZV9oYXNowGJByfWff6gDCgBuZXR3b3JrX2lk0hdLNwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:white_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAAAACAQAbmFtZR0AbWluZWNyYWZ0OndoaXRlX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2iHubqoMbu9fAMKAG5ldHdvcmtfaWRndBrUCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:light_gray_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAwAACAQAbmFtZSIAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaKKa+LrRsHQhAwoAbmV0d29ya19pZEv2giYKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:gray_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSmAwAACAQAbmFtZRwAbWluZWNyYWZ0OmdyYXlfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaIETy7Y/HZREAwoAbmV0d29ya19pZDomVrUKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:black_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAwAACAQAbmFtZR0AbWluZWNyYWZ0OmJsYWNrX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2iV6BCwpfDMmwMKAG5ldHdvcmtfaWSV7doJCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:brown_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAwAACAQAbmFtZR0AbWluZWNyYWZ0OmJyb3duX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2igsEiq5np8JgMKAG5ldHdvcmtfaWRMzE/lCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:red_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWStAwAACAQAbmFtZRsAbWluZWNyYWZ0OnJlZF9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNoCa2J12/lQoIDCgBuZXR3b3JrX2lk283lWAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:orange_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAwAACAQAbmFtZR4AbWluZWNyYWZ0Om9yYW5nZV9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNozgjAuvzhxGsDCgBuZXR3b3JrX2lkW5CkhQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:yellow_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAwAACAQAbmFtZR4AbWluZWNyYWZ0OnllbGxvd19zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNo7EbHMd5WVugDCgBuZXR3b3JrX2lkkdDyXQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:lime_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAwAACAQAbmFtZRwAbWluZWNyYWZ0OmxpbWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaBtZA1nZtwcFAwoAbmV0d29ya19pZDxX85UKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:green_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAwAACAQAbmFtZR0AbWluZWNyYWZ0OmdyZWVuX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2h91ptDgbehWwMKAG5ldHdvcmtfaWTlDhnECgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:cyan_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAwAACAQAbmFtZRwAbWluZWNyYWZ0OmN5YW5fc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaBkIYQ8nQLqbAwoAbmV0d29ya19pZOL1lHsKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:light_blue_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAwAACAQAbmFtZSIAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaLt05n1G0fiSAwoAbmV0d29ya19pZNbwulIKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:blue_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAwAACAQAbmFtZRwAbWluZWNyYWZ0OmJsdWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaPhLocSfzduRAwoAbmV0d29ya19pZENsjFwKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:purple_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAwAACAQAbmFtZR4AbWluZWNyYWZ0OnB1cnBsZV9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNoJk0DhRO0szUDCgBuZXR3b3JrX2lkD98ZxgoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:magenta_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAwAACAQAbmFtZR8AbWluZWNyYWZ0Om1hZ2VudGFfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaFEDeFiJj3zSAwoAbmV0d29ya19pZG+iFRoKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:pink_stained_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAwAACAQAbmFtZRwAbWluZWNyYWZ0OnBpbmtfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaDijTX87ywxhAwoAbmV0d29ya19pZKdEricKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:tinted_glass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAgAACAQAbmFtZRYAbWluZWNyYWZ0OnRpbnRlZF9nbGFzcwQJAG5hbWVfaGFzaAFZWSamk6KdAwoAbmV0d29ya19pZGSvWX8KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdsYXNzX3BhbmUECQBuYW1lX2hhc2gRSBHwNMQ4gQMKAG5ldHdvcmtfaWRGwixuCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:white_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAAAACAQAbmFtZSIAbWluZWNyYWZ0OndoaXRlX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaHgxQmgJVtRrAwoAbmV0d29ya19pZBEr/DYKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:light_gray_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSJAwAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNon0aQw9lNkSEDCgBuZXR3b3JrX2lk9dp5VgoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:gray_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAwAACAQAbmFtZSEAbWluZWNyYWZ0OmdyYXlfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNors74IIw+2MMDCgBuZXR3b3JrX2lkmrGO5woGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:black_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAwAACAQAbmFtZSIAbWluZWNyYWZ0OmJsYWNrX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaOK/5ZRRd+M1AwoAbmV0d29ya19pZDv++oQKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:brown_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSNAwAACAQAbmFtZSIAbWluZWNyYWZ0OmJyb3duX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLHeGJyRFTIWAwoAbmV0d29ya19pZMz9L0wKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:red_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAwAACAQAbmFtZSAAbWluZWNyYWZ0OnJlZF9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2gGr4x6JheAywMKAG5ldHdvcmtfaWQBjCTmCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:orange_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAwAACAQAbmFtZSMAbWluZWNyYWZ0Om9yYW5nZV9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2hbHxPD2gEbEAMKAG5ldHdvcmtfaWSt/7a5CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:yellow_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAwAACAQAbmFtZSMAbWluZWNyYWZ0OnllbGxvd19zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2g9tl4aOCyZBwMKAG5ldHdvcmtfaWTXRAS7CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:lime_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAwAACAQAbmFtZSEAbWluZWNyYWZ0OmxpbWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNo3CtUyLwoGegDCgBuZXR3b3JrX2lkYJDnggoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:green_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSOAwAACAQAbmFtZSIAbWluZWNyYWZ0OmdyZWVuX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaJo6YP7IMy9SAwoAbmV0d29ya19pZHOnixoKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:cyan_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAwAACAQAbmFtZSEAbWluZWNyYWZ0OmN5YW5fc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoti97c6QrbLQDCgBuZXR3b3JrX2lkUqFUeQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:light_blue_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAwAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNovDg/gQle104DCgBuZXR3b3JrX2lkFuy4MQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:blue_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSMAwAACAQAbmFtZSEAbWluZWNyYWZ0OmJsdWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoGc57tiexbQMDCgBuZXR3b3JrX2lk1eBLUAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:purple_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAwAACAQAbmFtZSMAbWluZWNyYWZ0OnB1cnBsZV9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2hDJHYdd0FdfQMKAG5ldHdvcmtfaWSNsdK5CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:magenta_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAwAACAQAbmFtZSQAbWluZWNyYWZ0Om1hZ2VudGFfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNo3pcOw5bs5XoDCgBuZXR3b3JrX2lkVbOR7AoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:pink_stained_glass_pane", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAwAACAQAbmFtZSEAbWluZWNyYWZ0OnBpbmtfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoWRhSACMWgswDCgBuZXR3b3JrX2lkIR92xwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:ladder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRBAAAACAQAbmFtZRAAbWluZWNyYWZ0OmxhZGRlcgQJAG5hbWVfaGFzaKBhqheJVOz+AwoAbmV0d29ya19pZCgvzlsKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:scaffolding", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAQAACAQAbmFtZRUAbWluZWNyYWZ0OnNjYWZmb2xkaW5nBAkAbmFtZV9oYXNoYrkevrqcljwDCgBuZXR3b3JrX2lkD13mlAoGAHN0YXRlcwMJAHN0YWJpbGl0eQAAAAABDwBzdGFiaWxpdHlfY2hlY2sAAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:smooth_stone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAAAACAQAbmFtZRsAbWluZWNyYWZ0OnNtb290aF9zdG9uZV9zbGFiBAkAbmFtZV9oYXNon5I1yVw74uMDCgBuZXR3b3JrX2lkqvjcBQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:normal_stone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSCBAAACAQAbmFtZRsAbWluZWNyYWZ0Om5vcm1hbF9zdG9uZV9zbGFiBAkAbmFtZV9oYXNoIvsjJLQdolcDCgBuZXR3b3JrX2lkC1zqRQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:cobblestone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRoBAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3NsYWIECQBuYW1lX2hhc2h5CXtW7vlQVgMKAG5ldHdvcmtfaWRDGyj2CgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:mossy_cobblestone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR3BAAACAQAbmFtZSAAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lX3NsYWIECQBuYW1lX2hhc2ijm1BCwB82VgMKAG5ldHdvcmtfaWR7ByMGCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:oak_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAAAACAQAbmFtZRIAbWluZWNyYWZ0Om9ha19zbGFiBAkAbmFtZV9oYXNoJp1Cp1M4jlwDCgBuZXR3b3JrX2lkZH6+owoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:spruce_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQjBAAACAQAbmFtZRUAbWluZWNyYWZ0OnNwcnVjZV9zbGFiBAkAbmFtZV9oYXNodQi70jB238cDCgBuZXR3b3JrX2lkrriOYQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:birch_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQkBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJpcmNoX3NsYWIECQBuYW1lX2hhc2gZPpfMxoOsTAMKAG5ldHdvcmtfaWThR9jyCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:jungle_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQlBAAACAQAbmFtZRUAbWluZWNyYWZ0Omp1bmdsZV9zbGFiBAkAbmFtZV9oYXNo6gLs79NXak4DCgBuZXR3b3JrX2lk5ZiKgwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:acacia_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQmBAAACAQAbmFtZRUAbWluZWNyYWZ0OmFjYWNpYV9zbGFiBAkAbmFtZV9oYXNomSdFmDnv4OUDCgBuZXR3b3JrX2lkHttaXAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:dark_oak_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQnBAAACAQAbmFtZRcAbWluZWNyYWZ0OmRhcmtfb2FrX3NsYWIECQBuYW1lX2hhc2hJjTohRFyhIQMKAG5ldHdvcmtfaWRMzDTyCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:mangrove_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWToAgAACAQAbmFtZRcAbWluZWNyYWZ0Om1hbmdyb3ZlX3NsYWIECQBuYW1lX2hhc2jYCcmhJPeNMwMKAG5ldHdvcmtfaWQx6U1yCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:cherry_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQaAwAACAQAbmFtZRUAbWluZWNyYWZ0OmNoZXJyeV9zbGFiBAkAbmFtZV9oYXNoTt0MmVn/mqoDCgBuZXR3b3JrX2lk2VVsZQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:bamboo_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQAAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJhbWJvb19zbGFiBAkAbmFtZV9oYXNoo1xuFqINeLYDCgBuZXR3b3JrX2lkVC+0twoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:bamboo_mosaic_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQLAwAACAQAbmFtZRwAbWluZWNyYWZ0OmJhbWJvb19tb3NhaWNfc2xhYgQJAG5hbWVfaGFzaNbVRBZ/ChI3AwoAbmV0d29ya19pZOLZHFMKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:stone_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRqBAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2JyaWNrX3NsYWIECQBuYW1lX2hhc2js6EexuKuzrQMKAG5ldHdvcmtfaWRSsMxaCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:mossy_stone_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAQAACAQAbmFtZSAAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrX3NsYWIECQBuYW1lX2hhc2hiA4kFUl4tHAMKAG5ldHdvcmtfaWS6joSOCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:sandstone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRnBAAACAQAbmFtZRgAbWluZWNyYWZ0OnNhbmRzdG9uZV9zbGFiBAkAbmFtZV9oYXNo/GMI0MZnrhsDCgBuZXR3b3JrX2lkFP8WmwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:cut_sandstone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDBAAACAQAbmFtZRwAbWluZWNyYWZ0OmN1dF9zYW5kc3RvbmVfc2xhYgQJAG5hbWVfaGFzaE+zxVQweViJAwoAbmV0d29ya19pZHsu74YKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:smooth_sandstone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR4BAAACAQAbmFtZR8AbWluZWNyYWZ0OnNtb290aF9zYW5kc3RvbmVfc2xhYgQJAG5hbWVfaGFzaIkmsO1gw3gnAwoAbmV0d29ya19pZFSiwP0KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:red_sandstone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRwAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmVfc2xhYgQJAG5hbWVfaGFzaEyDjeWlUHItAwoAbmV0d29ya19pZIT4rmwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:cut_red_sandstone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSEBAAACAQAbmFtZSAAbWluZWNyYWZ0OmN1dF9yZWRfc2FuZHN0b25lX3NsYWIECQBuYW1lX2hhc2hTVRS++snU3wMKAG5ldHdvcmtfaWSvIAviCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:smooth_red_sandstone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR6BAAACAQAbmFtZSMAbWluZWNyYWZ0OnNtb290aF9yZWRfc2FuZHN0b25lX3NsYWIECQBuYW1lX2hhc2i9iN2UK272tgMKAG5ldHdvcmtfaWRUZrwJCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:granite_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR/BAAACAQAbmFtZRYAbWluZWNyYWZ0OmdyYW5pdGVfc2xhYgQJAG5hbWVfaGFzaL0HprlAhhZwAwoAbmV0d29ya19pZIcIdc8KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:polished_granite_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSABAAACAQAbmFtZR8AbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGVfc2xhYgQJAG5hbWVfaGFzaP6bXk5w2dGrAwoAbmV0d29ya19pZCsRy1cKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:diorite_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR9BAAACAQAbmFtZRYAbWluZWNyYWZ0OmRpb3JpdGVfc2xhYgQJAG5hbWVfaGFzaM3ppS8v55sNAwoAbmV0d29ya19pZB+Pv9oKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:polished_diorite_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR+BAAACAQAbmFtZR8AbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGVfc2xhYgQJAG5hbWVfaGFzaLZlyJLkMPhyAwoAbmV0d29ya19pZFM0HYwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:andesite_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR8BAAACAQAbmFtZRcAbWluZWNyYWZ0OmFuZGVzaXRlX3NsYWIECQBuYW1lX2hhc2icIrtuy/aosAMKAG5ldHdvcmtfaWTtXTtYCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:polished_andesite_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR7BAAACAQAbmFtZSAAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlX3NsYWIECQBuYW1lX2hhc2j56zJOfCF+3wMKAG5ldHdvcmtfaWRBs69FCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRpBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJyaWNrX3NsYWIECQBuYW1lX2hhc2hO/Da4jU2v4wMKAG5ldHdvcmtfaWRG/qphCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:nether_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRsBAAACAQAbmFtZRsAbWluZWNyYWZ0Om5ldGhlcl9icmlja19zbGFiBAkAbmFtZV9oYXNonymoa2zbbqMDCgBuZXR3b3JrX2lkquvR1QoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:red_nether_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR5BAAACAQAbmFtZR8AbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaG89ujUk3Y64AwoAbmV0d29ya19pZEZIunAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:end_stone_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZR4AbWluZWNyYWZ0OmVuZF9zdG9uZV9icmlja19zbGFiBAkAbmFtZV9oYXNo4tkxQtl+IyQDCgBuZXR3b3JrX2lkhByH/woGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:quartz_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRrBAAACAQAbmFtZRUAbWluZWNyYWZ0OnF1YXJ0el9zbGFiBAkAbmFtZV9oYXNo9JMj3upfsbwDCgBuZXR3b3JrX2lkn2g2VAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:smooth_quartz_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSBBAAACAQAbmFtZRwAbWluZWNyYWZ0OnNtb290aF9xdWFydHpfc2xhYgQJAG5hbWVfaGFzaHOSJv8ve0nmAwoAbmV0d29ya19pZFMk/JsKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:purpur_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRzBAAACAQAbmFtZRUAbWluZWNyYWZ0OnB1cnB1cl9zbGFiBAkAbmFtZV9oYXNo4XeWbKpx2ScDCgBuZXR3b3JrX2lkRkga5goGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:prismarine_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR0BAAACAQAbmFtZRkAbWluZWNyYWZ0OnByaXNtYXJpbmVfc2xhYgQJAG5hbWVfaGFzaI9x+1fY8QRfAwoAbmV0d29ya19pZBTUZhwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:dark_prismarine_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR1BAAACAQAbmFtZR4AbWluZWNyYWZ0OmRhcmtfcHJpc21hcmluZV9zbGFiBAkAbmFtZV9oYXNoSsZGDkEL5ZUDCgBuZXR3b3JrX2lkNLQ8VwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:prismarine_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR2BAAACAQAbmFtZR8AbWluZWNyYWZ0OnByaXNtYXJpbmVfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaB1FSbVi97xJAwoAbmV0d29ya19pZEBwwFMKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:crimson_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAgAACAQAbmFtZRYAbWluZWNyYWZ0OmNyaW1zb25fc2xhYgQJAG5hbWVfaGFzaKZ+EfP0ZYOZAwoAbmV0d29ya19pZAxRUWAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:warped_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQIAgAACAQAbmFtZRUAbWluZWNyYWZ0OndhcnBlZF9zbGFiBAkAbmFtZV9oYXNo/AT0e/Z9W7UDCgBuZXR3b3JrX2lk1yq11AoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:blackstone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsYWNrc3RvbmVfc2xhYgQJAG5hbWVfaGFzaF/DD4ZUlNgtAwoAbmV0d29ya19pZGy1DjwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:polished_blackstone_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQkAgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfc2xhYgQJAG5hbWVfaGFzaDYnuUs86EWfAwoAbmV0d29ya19pZJj2bXIKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:polished_blackstone_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQbAgAACAQAbmFtZSgAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaKySLqvHc4xXAwoAbmV0d29ya19pZOyWX94KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRoAgAACAQAbmFtZRkAbWluZWNyYWZ0OmN1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaDsNpb2qs4iBAwoAbmV0d29ya19pZOTm2nsKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:exposed_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRpAgAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcl9zbGFiBAkAbmFtZV9oYXNoahQ5OwIQb7kDCgBuZXR3b3JrX2lkrUlZLwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:weathered_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRqAgAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyX3NsYWIECQBuYW1lX2hhc2hBIuGIOVVXogMKAG5ldHdvcmtfaWQgnaDiCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:oxidized_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAgAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaOptj9ycfpaDAwoAbmV0d29ya19pZMzFSRgKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:waxed_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaAlx6DZOCTHzAwoAbmV0d29ya19pZFRBvDAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:waxed_exposed_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAgAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcl9zbGFiBAkAbmFtZV9oYXNo3KqS5OnhtRIDCgBuZXR3b3JrX2lkHTGcTgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:waxed_weathered_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyX3NsYWIECQBuYW1lX2hhc2gzZ1oX0HCFtwMKAG5ldHdvcmtfaWSgJR+XCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:waxed_oxidized_cut_copper_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTAAgAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaMjjTnLu1KcqAwoAbmV0d29ya19pZIxsnFYKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:cobbled_deepslate_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AgAACAQAbmFtZSAAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3NsYWIECQBuYW1lX2hhc2gwJIVWK1TM2QMKAG5ldHdvcmtfaWTYAoX5CgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:polished_deepslate_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR/AgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV9zbGFiBAkAbmFtZV9oYXNoC/Adiz8k6RYDCgBuZXR3b3JrX2lkuFYMAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:deepslate_tile_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3NsYWIECQBuYW1lX2hhc2hPydV6emzIXAMKAG5ldHdvcmtfaWQwlbFCCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:deepslate_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja19zbGFiBAkAbmFtZV9oYXNoSv62V7iw10UDCgBuZXR3b3JrX2lkWMoragoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:mud_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAgAACAQAbmFtZRgAbWluZWNyYWZ0Om11ZF9icmlja19zbGFiBAkAbmFtZV9oYXNoq/tGBQWkv08DCgBuZXR3b3JrX2lkl4nnMwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:brick_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAAAACAQAbmFtZRUAbWluZWNyYWZ0OmJyaWNrX2Jsb2NrBAkAbmFtZV9oYXNo5Qc2E005S3oDCgBuZXR3b3JrX2lkqeGWRgoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:chiseled_nether_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAgAACAQAbmFtZSAAbWluZWNyYWZ0OmNoaXNlbGVkX25ldGhlcl9icmlja3MECQBuYW1lX2hhc2g31SBPTcUK1QMKAG5ldHdvcmtfaWS8TJ+TCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:cracked_nether_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAgAACAQAbmFtZR8AbWluZWNyYWZ0OmNyYWNrZWRfbmV0aGVyX2JyaWNrcwQJAG5hbWVfaGFzaAdC6eKzXT5tAwoAbmV0d29ya19pZIUSejwKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:quartz_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAgAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9icmlja3MECQBuYW1lX2hhc2jSZO590dd8sAMKAG5ldHdvcmtfaWSc5xCLCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:stone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAAAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX2JyaWNrcwQJAG5hbWVfaGFzaGAiQu8VWVJRAwoAbmV0d29ya19pZH2DjXUKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:mossy_stone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRjBAAACAQAbmFtZRwAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaIZBO00MONRIAwoAbmV0d29ya19pZL2WDrAKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:cracked_stone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRkBAAACAQAbmFtZR4AbWluZWNyYWZ0OmNyYWNrZWRfc3RvbmVfYnJpY2tzBAkAbmFtZV9oYXNocIkAp6riMz4DCgBuZXR3b3JrX2lkTWGeCwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:chiseled_stone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRlBAAACAQAbmFtZR8AbWluZWNyYWZ0OmNoaXNlbGVkX3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaMB2FPLLADkEAwoAbmV0d29ya19pZOIPn0IKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:end_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTOAAAACAQAbmFtZRQAbWluZWNyYWZ0OmVuZF9icmlja3MECQBuYW1lX2hhc2hIUFfxNLZaFgMKAG5ldHdvcmtfaWQ/vDihCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:prismarine_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSzBAAACAQAbmFtZRsAbWluZWNyYWZ0OnByaXNtYXJpbmVfYnJpY2tzBAkAbmFtZV9oYXNozeGe3/7s5fcDCgBuZXR3b3JrX2lkj/iBnAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:polished_blackstone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tzBAkAbmFtZV9oYXNoIHgsgIdzKXcDCgBuZXR3b3JrX2lkUw9b3woGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:cracked_polished_blackstone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAgAACAQAbmFtZSwAbWluZWNyYWZ0OmNyYWNrZWRfcG9saXNoZWRfYmxhY2tzdG9uZV9icmlja3MECQBuYW1lX2hhc2jQIO1GQDk80AMKAG5ldHdvcmtfaWQ3UlRYCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:gilded_blackstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAgAACAQAbmFtZRsAbWluZWNyYWZ0OmdpbGRlZF9ibGFja3N0b25lBAkAbmFtZV9oYXNoNoWt1ocG0HEDCgBuZXR3b3JrX2lktL8gUwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:chiseled_polished_blackstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAgAACAQAbmFtZSYAbWluZWNyYWZ0OmNoaXNlbGVkX3BvbGlzaGVkX2JsYWNrc3RvbmUECQBuYW1lX2hhc2gzFa+kEjCJgAMKAG5ldHdvcmtfaWR2NJX2CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:deepslate_tiles", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAgAACAQAbmFtZRkAbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlcwQJAG5hbWVfaGFzaGcLLx3NXAFvAwoAbmV0d29ya19pZI/G/xYKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:cracked_deepslate_tiles", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSYAgAACAQAbmFtZSEAbWluZWNyYWZ0OmNyYWNrZWRfZGVlcHNsYXRlX3RpbGVzBAkAbmFtZV9oYXNo9zWgkFuMM1QDCgBuZXR3b3JrX2lkGwY6OgoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:deepslate_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAgAACAQAbmFtZRoAbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja3MECQBuYW1lX2hhc2gucvFmPdZxigMKAG5ldHdvcmtfaWSH4HDPCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:cracked_deepslate_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAgAACAQAbmFtZSIAbWluZWNyYWZ0OmNyYWNrZWRfZGVlcHNsYXRlX2JyaWNrcwQJAG5hbWVfaGFzaN40aqhh9WqHAwoAbmV0d29ya19pZO9GPBQKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:chiseled_deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAgAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaEU7/uRG8HSBAwoAbmV0d29ya19pZEqmI0EKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:cobblestone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAAAACAQAbmFtZRUAbWluZWNyYWZ0OmNvYmJsZXN0b25lBAkAbmFtZV9oYXNoPoK7mGlSUz4DCgBuZXR3b3JrX2lkLm7RZwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:mossy_cobblestone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQwAAAACAQAbmFtZRsAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lBAkAbmFtZV9oYXNoGJ67FCbkChMDCgBuZXR3b3JrX2lk/pYs1AoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:cobbled_deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AgAACAQAbmFtZRsAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlBAkAbmFtZV9oYXNoLUz9Y/ywmLwDCgBuZXR3b3JrX2lkNwzZ+AoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:smooth_stone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AQAACAQAbmFtZRYAbWluZWNyYWZ0OnNtb290aF9zdG9uZQQJAG5hbWVfaGFzaMwf87/JaTNvAwoAbmV0d29ya19pZLkZICEKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZPsXMaQKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:chiseled_sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSvBAAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX3NhbmRzdG9uZQQJAG5hbWVfaGFzaPEkxMvZmemgAwoAbmV0d29ya19pZGI5NB4KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:cut_sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSwBAAACAQAbmFtZRcAbWluZWNyYWZ0OmN1dF9zYW5kc3RvbmUECQBuYW1lX2hhc2ichLQc71njnQMKAG5ldHdvcmtfaWSmBLkRCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:smooth_sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSxBAAACAQAbmFtZRoAbWluZWNyYWZ0OnNtb290aF9zYW5kc3RvbmUECQBuYW1lX2hhc2huR7XTwISyCAMKAG5ldHdvcmtfaWSzWj3UCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:red_sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWRXRYxZCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:chiseled_red_sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS7BAAACAQAbmFtZSAAbWluZWNyYWZ0OmNoaXNlbGVkX3JlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2gh5sX+ON054wMKAG5ldHdvcmtfaWT6Pw1PCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:cut_red_sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS8BAAACAQAbmFtZRsAbWluZWNyYWZ0OmN1dF9yZWRfc2FuZHN0b25lBAkAbmFtZV9oYXNoaOtka4NrQ1EDCgBuZXR3b3JrX2lk3r/JPAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:smooth_red_sandstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS9BAAACAQAbmFtZR4AbWluZWNyYWZ0OnNtb290aF9yZWRfc2FuZHN0b25lBAkAbmFtZV9oYXNoqsNl8x36ju4DCgBuZXR3b3JrX2lk7x5DTwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:coal_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWStAAAACAQAbmFtZRQAbWluZWNyYWZ0OmNvYWxfYmxvY2sECQBuYW1lX2hhc2jH8QQP3t5PiAMKAG5ldHdvcmtfaWRo+sR+CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:dried_kelp_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAQAACAQAbmFtZRoAbWluZWNyYWZ0OmRyaWVkX2tlbHBfYmxvY2sECQBuYW1lX2hhc2iRoucexkrl8wMKAG5ldHdvcmtfaWQQCCrvCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:gold_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdvbGRfYmxvY2sECQBuYW1lX2hhc2iYLshvjtXzFwMKAG5ldHdvcmtfaWTDJGBcCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:iron_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAAAACAQAbmFtZRQAbWluZWNyYWZ0Omlyb25fYmxvY2sECQBuYW1lX2hhc2jYINmJQbvV/gMKAG5ldHdvcmtfaWRf7AbICgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:copper_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRTAgAACAQAbmFtZRYAbWluZWNyYWZ0OmNvcHBlcl9ibG9jawQJAG5hbWVfaGFzaDVxnehsGaZ1AwoAbmV0d29ya19pZIiUodwKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, { "id": "minecraft:copper_door" }, - { - "id": "minecraft:copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQXBAAACAQAbmFtZRkAbWluZWNyYWZ0OmNvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaO9fXio+svKVAwoAbmV0d29ya19pZMCoRjEKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT/AwAACAQAbmFtZRYAbWluZWNyYWZ0OmNvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaC/JEFOWnmEcAwoAbmV0d29ya19pZC6YiiMKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:exposed_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAgAACAQAbmFtZRgAbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoQH3Fukmu3CEDCgBuZXR3b3JrX2lk72jFIwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, { "id": "minecraft:exposed_copper_door" }, - { - "id": "minecraft:exposed_copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQYBAAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyX3RyYXBkb29yBAkAbmFtZV9oYXNoYhDFUysN7qUDCgBuZXR3b3JrX2lkMzwGJgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:exposed_copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQABAAACAQAbmFtZR4AbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyX2dyYXRlBAkAbmFtZV9oYXNolFIBYLYU0IcDCgBuZXR3b3JrX2lk4UqptAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:weathered_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAgAACAQAbmFtZRoAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2hJCQXbvobv+gMKAG5ldHdvcmtfaWQwM0lJCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, { "id": "minecraft:weathered_copper_door" }, - { - "id": "minecraft:weathered_copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQZBAAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXJfdHJhcGRvb3IECQBuYW1lX2hhc2hFnEC282a1tgMKAG5ldHdvcmtfaWTk70oiCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:weathered_copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQBBAAACAQAbmFtZSAAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXJfZ3JhdGUECQBuYW1lX2hhc2jB3o8enlv1RgMKAG5ldHdvcmtfaWRih2pOCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:oxidized_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAgAACAQAbmFtZRkAbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMDtJqR0G5Y7AwoAbmV0d29ya19pZGjN8bUKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, { "id": "minecraft:oxidized_copper_door" }, - { - "id": "minecraft:oxidized_copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQaBAAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaOJpG/XFexVwAwoAbmV0d29ya19pZPhi0J4KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:oxidized_copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQCBAAACAQAbmFtZR8AbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaBRfNhyndve7AwoAbmV0d29ya19pZKY2cnEKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:waxed_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAgAACAQAbmFtZRYAbWluZWNyYWZ0OndheGVkX2NvcHBlcgQJAG5hbWVfaGFzaPF+FG6Eh5fsAwoAbmV0d29ya19pZIjtz/0KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, { "id": "minecraft:waxed_copper_door" }, - { - "id": "minecraft:waxed_copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQbBAAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2NvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaO0JUKUHqNU6AwoAbmV0d29ya19pZJC3ZuMKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:waxed_copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQDBAAACAQAbmFtZRwAbWluZWNyYWZ0OndheGVkX2NvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaDmC92M2RO+HAwoAbmV0d29ya19pZH4og2AKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:waxed_exposed_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAgAACAQAbmFtZR4AbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoig8IOc+SCikDCgBuZXR3b3JrX2lklz8yWQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, { "id": "minecraft:waxed_exposed_copper_door" }, - { - "id": "minecraft:waxed_exposed_copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQcBAAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyX3RyYXBkb29yBAkAbmFtZV9oYXNoBHHxCpkUzpgDCgBuZXR3b3JrX2lkw2XBGQoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:waxed_exposed_copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQEBAAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyX2dyYXRlBAkAbmFtZV9oYXNoWmd6B+hWwiEDCgBuZXR3b3JrX2lk8d4ZQwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:waxed_weathered_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRZAgAACAQAbmFtZSAAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2gjtPq8MOdvKgMKAG5ldHdvcmtfaWSQ9Ln9CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, { "id": "minecraft:waxed_weathered_copper_door" }, - { - "id": "minecraft:waxed_weathered_copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQdBAAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXJfdHJhcGRvb3IECQBuYW1lX2hhc2gH9Fi3JCF4egMKAG5ldHdvcmtfaWRkGU6TCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:waxed_weathered_copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQFBAAACAQAbmFtZSYAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXJfZ3JhdGUECQBuYW1lX2hhc2hXfilVFDAiYQMKAG5ldHdvcmtfaWQqTGC1CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:waxed_oxidized_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS9AgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMaORhsO+LzjAwoAbmV0d29ya19pZJhGfLEKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, { "id": "minecraft:waxed_oxidized_copper_door" }, + { + "id": "minecraft:trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRgAAAACAQAbmFtZRIAbWluZWNyYWZ0OnRyYXBkb29yBAkAbmFtZV9oYXNotYiAJGtN0xADCgBuZXR3b3JrX2lkyTAWkAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:spruce_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAQAACAQAbmFtZRkAbWluZWNyYWZ0OnNwcnVjZV90cmFwZG9vcgQJAG5hbWVfaGFzaOwlfbgBkUW4AwoAbmV0d29ya19pZPHy1K0KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:birch_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAQAACAQAbmFtZRgAbWluZWNyYWZ0OmJpcmNoX3RyYXBkb29yBAkAbmFtZV9oYXNoSLtLweOLJ7wDCgBuZXR3b3JrX2lkeJWDfgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:jungle_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSTAQAACAQAbmFtZRkAbWluZWNyYWZ0Omp1bmdsZV90cmFwZG9vcgQJAG5hbWVfaGFzaDP/TnM9wyCIAwoAbmV0d29ya19pZEy2fJoKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:acacia_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAQAACAQAbmFtZRkAbWluZWNyYWZ0OmFjYWNpYV90cmFwZG9vcgQJAG5hbWVfaGFzaMj8xi3vmEKOAwoAbmV0d29ya19pZOHj8E8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:dark_oak_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAQAACAQAbmFtZRsAbWluZWNyYWZ0OmRhcmtfb2FrX3RyYXBkb29yBAkAbmFtZV9oYXNomB2GGJQ2aOMDCgBuZXR3b3JrX2lko5ZHTwoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:mangrove_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTvAgAACAQAbmFtZRsAbWluZWNyYWZ0Om1hbmdyb3ZlX3RyYXBkb29yBAkAbmFtZV9oYXNooV3kQsQUUmkDCgBuZXR3b3JrX2lkkF/mxAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:cherry_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAwAACAQAbmFtZRkAbWluZWNyYWZ0OmNoZXJyeV90cmFwZG9vcgQJAG5hbWVfaGFzaH/PefpfdHgtAwoAbmV0d29ya19pZOA7eNgKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:pale_oak_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTpBAAACAQAbmFtZRsAbWluZWNyYWZ0OnBhbGVfb2FrX3RyYXBkb29yBAkAbmFtZV9oYXNo5L0cQtjJA9oDCgBuZXR3b3JrX2lkVwhZTgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:bamboo_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAwAACAQAbmFtZRkAbWluZWNyYWZ0OmJhbWJvb190cmFwZG9vcgQJAG5hbWVfaGFzaJrEOpsTwtKCAwoAbmV0d29ya19pZLvbPz8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:iron_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAAAACAQAbmFtZRcAbWluZWNyYWZ0Omlyb25fdHJhcGRvb3IECQBuYW1lX2hhc2gwA+IumsEiGQMKAG5ldHdvcmtfaWTvSVl/CgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:crimson_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT1AQAACAQAbmFtZRoAbWluZWNyYWZ0OmNyaW1zb25fdHJhcGRvb3IECQBuYW1lX2hhc2jHXufTnwUkYgMKAG5ldHdvcmtfaWQLjMYVCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:warped_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT2AQAACAQAbmFtZRkAbWluZWNyYWZ0OndhcnBlZF90cmFwZG9vcgQJAG5hbWVfaGFzaA20wG/+vkd6AwoAbmV0d29ya19pZHKR/hYKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:copper_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQXBAAACAQAbmFtZRkAbWluZWNyYWZ0OmNvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaO9fXio+svKVAwoAbmV0d29ya19pZMCoRjEKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:exposed_copper_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQYBAAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyX3RyYXBkb29yBAkAbmFtZV9oYXNoYhDFUysN7qUDCgBuZXR3b3JrX2lkMzwGJgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:weathered_copper_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQZBAAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXJfdHJhcGRvb3IECQBuYW1lX2hhc2hFnEC282a1tgMKAG5ldHdvcmtfaWTk70oiCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:oxidized_copper_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQaBAAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaOJpG/XFexVwAwoAbmV0d29ya19pZPhi0J4KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:waxed_copper_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQbBAAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2NvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaO0JUKUHqNU6AwoAbmV0d29ya19pZJC3ZuMKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:waxed_exposed_copper_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQcBAAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyX3RyYXBkb29yBAkAbmFtZV9oYXNoBHHxCpkUzpgDCgBuZXR3b3JrX2lkw2XBGQoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:waxed_weathered_copper_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQdBAAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXJfdHJhcGRvb3IECQBuYW1lX2hhc2gH9Fi3JCF4egMKAG5ldHdvcmtfaWRkGU6TCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, { "id": "minecraft:waxed_oxidized_copper_trapdoor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQeBAAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaNA/q9qAy6Z9AwoAbmV0d29ya19pZDgExS8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQeBAAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaNA/q9qAy6Z9AwoAbmV0d29ya19pZDgExS8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:iron_bars", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAAAACAQAbmFtZRMAbWluZWNyYWZ0Omlyb25fYmFycwQJAG5hbWVfaGFzaPuefWSNAe56AwoAbmV0d29ya19pZN2LB5IKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmdsYXNzBAkAbmFtZV9oYXNowGJByfWff6gDCgBuZXR3b3JrX2lk0hdLNwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:white_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAAAACAQAbmFtZR0AbWluZWNyYWZ0OndoaXRlX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2iHubqoMbu9fAMKAG5ldHdvcmtfaWRndBrUCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:light_gray_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAwAACAQAbmFtZSIAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaKKa+LrRsHQhAwoAbmV0d29ya19pZEv2giYKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:gray_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSmAwAACAQAbmFtZRwAbWluZWNyYWZ0OmdyYXlfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaIETy7Y/HZREAwoAbmV0d29ya19pZDomVrUKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:black_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAwAACAQAbmFtZR0AbWluZWNyYWZ0OmJsYWNrX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2iV6BCwpfDMmwMKAG5ldHdvcmtfaWSV7doJCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:brown_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAwAACAQAbmFtZR0AbWluZWNyYWZ0OmJyb3duX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2igsEiq5np8JgMKAG5ldHdvcmtfaWRMzE/lCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:red_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWStAwAACAQAbmFtZRsAbWluZWNyYWZ0OnJlZF9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNoCa2J12/lQoIDCgBuZXR3b3JrX2lk283lWAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:orange_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAwAACAQAbmFtZR4AbWluZWNyYWZ0Om9yYW5nZV9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNozgjAuvzhxGsDCgBuZXR3b3JrX2lkW5CkhQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:yellow_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAwAACAQAbmFtZR4AbWluZWNyYWZ0OnllbGxvd19zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNo7EbHMd5WVugDCgBuZXR3b3JrX2lkkdDyXQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:lime_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAwAACAQAbmFtZRwAbWluZWNyYWZ0OmxpbWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaBtZA1nZtwcFAwoAbmV0d29ya19pZDxX85UKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:green_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAwAACAQAbmFtZR0AbWluZWNyYWZ0OmdyZWVuX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2h91ptDgbehWwMKAG5ldHdvcmtfaWTlDhnECgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:cyan_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAwAACAQAbmFtZRwAbWluZWNyYWZ0OmN5YW5fc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaBkIYQ8nQLqbAwoAbmV0d29ya19pZOL1lHsKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:light_blue_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAwAACAQAbmFtZSIAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaLt05n1G0fiSAwoAbmV0d29ya19pZNbwulIKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:blue_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAwAACAQAbmFtZRwAbWluZWNyYWZ0OmJsdWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaPhLocSfzduRAwoAbmV0d29ya19pZENsjFwKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:purple_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAwAACAQAbmFtZR4AbWluZWNyYWZ0OnB1cnBsZV9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNoJk0DhRO0szUDCgBuZXR3b3JrX2lkD98ZxgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:magenta_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAwAACAQAbmFtZR8AbWluZWNyYWZ0Om1hZ2VudGFfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaFEDeFiJj3zSAwoAbmV0d29ya19pZG+iFRoKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:pink_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAwAACAQAbmFtZRwAbWluZWNyYWZ0OnBpbmtfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaDijTX87ywxhAwoAbmV0d29ya19pZKdEricKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:tinted_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAgAACAQAbmFtZRYAbWluZWNyYWZ0OnRpbnRlZF9nbGFzcwQJAG5hbWVfaGFzaAFZWSamk6KdAwoAbmV0d29ya19pZGSvWX8KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdsYXNzX3BhbmUECQBuYW1lX2hhc2gRSBHwNMQ4gQMKAG5ldHdvcmtfaWRGwixuCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:white_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAAAACAQAbmFtZSIAbWluZWNyYWZ0OndoaXRlX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaHgxQmgJVtRrAwoAbmV0d29ya19pZBEr/DYKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:light_gray_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSJAwAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNon0aQw9lNkSEDCgBuZXR3b3JrX2lk9dp5VgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:gray_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAwAACAQAbmFtZSEAbWluZWNyYWZ0OmdyYXlfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNors74IIw+2MMDCgBuZXR3b3JrX2lkmrGO5woGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:black_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAwAACAQAbmFtZSIAbWluZWNyYWZ0OmJsYWNrX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaOK/5ZRRd+M1AwoAbmV0d29ya19pZDv++oQKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:brown_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSNAwAACAQAbmFtZSIAbWluZWNyYWZ0OmJyb3duX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLHeGJyRFTIWAwoAbmV0d29ya19pZMz9L0wKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:red_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAwAACAQAbmFtZSAAbWluZWNyYWZ0OnJlZF9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2gGr4x6JheAywMKAG5ldHdvcmtfaWQBjCTmCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:orange_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAwAACAQAbmFtZSMAbWluZWNyYWZ0Om9yYW5nZV9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2hbHxPD2gEbEAMKAG5ldHdvcmtfaWSt/7a5CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:yellow_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAwAACAQAbmFtZSMAbWluZWNyYWZ0OnllbGxvd19zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2g9tl4aOCyZBwMKAG5ldHdvcmtfaWTXRAS7CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:lime_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAwAACAQAbmFtZSEAbWluZWNyYWZ0OmxpbWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNo3CtUyLwoGegDCgBuZXR3b3JrX2lkYJDnggoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:green_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSOAwAACAQAbmFtZSIAbWluZWNyYWZ0OmdyZWVuX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaJo6YP7IMy9SAwoAbmV0d29ya19pZHOnixoKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cyan_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAwAACAQAbmFtZSEAbWluZWNyYWZ0OmN5YW5fc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoti97c6QrbLQDCgBuZXR3b3JrX2lkUqFUeQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:light_blue_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAwAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNovDg/gQle104DCgBuZXR3b3JrX2lkFuy4MQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:blue_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSMAwAACAQAbmFtZSEAbWluZWNyYWZ0OmJsdWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoGc57tiexbQMDCgBuZXR3b3JrX2lk1eBLUAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:purple_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAwAACAQAbmFtZSMAbWluZWNyYWZ0OnB1cnBsZV9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2hDJHYdd0FdfQMKAG5ldHdvcmtfaWSNsdK5CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:magenta_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAwAACAQAbmFtZSQAbWluZWNyYWZ0Om1hZ2VudGFfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNo3pcOw5bs5XoDCgBuZXR3b3JrX2lkVbOR7AoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:pink_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAwAACAQAbmFtZSEAbWluZWNyYWZ0OnBpbmtfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoWRhSACMWgswDCgBuZXR3b3JrX2lkIR92xwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:ladder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRBAAAACAQAbmFtZRAAbWluZWNyYWZ0OmxhZGRlcgQJAG5hbWVfaGFzaKBhqheJVOz+AwoAbmV0d29ya19pZCgvzlsKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:scaffolding", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAQAACAQAbmFtZRUAbWluZWNyYWZ0OnNjYWZmb2xkaW5nBAkAbmFtZV9oYXNoYrkevrqcljwDCgBuZXR3b3JrX2lkD13mlAoGAHN0YXRlcwMJAHN0YWJpbGl0eQAAAAABDwBzdGFiaWxpdHlfY2hlY2sAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:brick_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAAAACAQAbmFtZRUAbWluZWNyYWZ0OmJyaWNrX2Jsb2NrBAkAbmFtZV9oYXNo5Qc2E005S3oDCgBuZXR3b3JrX2lkqeGWRgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:smooth_stone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAAAACAQAbmFtZRsAbWluZWNyYWZ0OnNtb290aF9zdG9uZV9zbGFiBAkAbmFtZV9oYXNon5I1yVw74uMDCgBuZXR3b3JrX2lkqvjcBQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:normal_stone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSCBAAACAQAbmFtZRsAbWluZWNyYWZ0Om5vcm1hbF9zdG9uZV9zbGFiBAkAbmFtZV9oYXNoIvsjJLQdolcDCgBuZXR3b3JrX2lkC1zqRQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cobblestone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRoBAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3NsYWIECQBuYW1lX2hhc2h5CXtW7vlQVgMKAG5ldHdvcmtfaWRDGyj2CgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:mossy_cobblestone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR3BAAACAQAbmFtZSAAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lX3NsYWIECQBuYW1lX2hhc2ijm1BCwB82VgMKAG5ldHdvcmtfaWR7ByMGCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:oak_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAAAACAQAbmFtZRIAbWluZWNyYWZ0Om9ha19zbGFiBAkAbmFtZV9oYXNoJp1Cp1M4jlwDCgBuZXR3b3JrX2lkZH6+owoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:spruce_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQjBAAACAQAbmFtZRUAbWluZWNyYWZ0OnNwcnVjZV9zbGFiBAkAbmFtZV9oYXNodQi70jB238cDCgBuZXR3b3JrX2lkrriOYQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:birch_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQkBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJpcmNoX3NsYWIECQBuYW1lX2hhc2gZPpfMxoOsTAMKAG5ldHdvcmtfaWThR9jyCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:jungle_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQlBAAACAQAbmFtZRUAbWluZWNyYWZ0Omp1bmdsZV9zbGFiBAkAbmFtZV9oYXNo6gLs79NXak4DCgBuZXR3b3JrX2lk5ZiKgwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:acacia_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmBAAACAQAbmFtZRUAbWluZWNyYWZ0OmFjYWNpYV9zbGFiBAkAbmFtZV9oYXNomSdFmDnv4OUDCgBuZXR3b3JrX2lkHttaXAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:dark_oak_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQnBAAACAQAbmFtZRcAbWluZWNyYWZ0OmRhcmtfb2FrX3NsYWIECQBuYW1lX2hhc2hJjTohRFyhIQMKAG5ldHdvcmtfaWRMzDTyCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:mangrove_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWToAgAACAQAbmFtZRcAbWluZWNyYWZ0Om1hbmdyb3ZlX3NsYWIECQBuYW1lX2hhc2jYCcmhJPeNMwMKAG5ldHdvcmtfaWQx6U1yCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:cherry_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQaAwAACAQAbmFtZRUAbWluZWNyYWZ0OmNoZXJyeV9zbGFiBAkAbmFtZV9oYXNoTt0MmVn/mqoDCgBuZXR3b3JrX2lk2VVsZQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:pale_oak_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTlBAAACAQAbmFtZRcAbWluZWNyYWZ0OnBhbGVfb2FrX3NsYWIECQBuYW1lX2hhc2g9QqTGUjo2XgMKAG5ldHdvcmtfaWQoWvcmCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:bamboo_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQAAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJhbWJvb19zbGFiBAkAbmFtZV9oYXNoo1xuFqINeLYDCgBuZXR3b3JrX2lkVC+0twoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:bamboo_mosaic_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQLAwAACAQAbmFtZRwAbWluZWNyYWZ0OmJhbWJvb19tb3NhaWNfc2xhYgQJAG5hbWVfaGFzaNbVRBZ/ChI3AwoAbmV0d29ya19pZOLZHFMKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:stone_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRqBAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2JyaWNrX3NsYWIECQBuYW1lX2hhc2js6EexuKuzrQMKAG5ldHdvcmtfaWRSsMxaCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:mossy_stone_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAQAACAQAbmFtZSAAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrX3NsYWIECQBuYW1lX2hhc2hiA4kFUl4tHAMKAG5ldHdvcmtfaWS6joSOCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:sandstone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRnBAAACAQAbmFtZRgAbWluZWNyYWZ0OnNhbmRzdG9uZV9zbGFiBAkAbmFtZV9oYXNo/GMI0MZnrhsDCgBuZXR3b3JrX2lkFP8WmwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cut_sandstone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDBAAACAQAbmFtZRwAbWluZWNyYWZ0OmN1dF9zYW5kc3RvbmVfc2xhYgQJAG5hbWVfaGFzaE+zxVQweViJAwoAbmV0d29ya19pZHsu74YKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:smooth_sandstone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR4BAAACAQAbmFtZR8AbWluZWNyYWZ0OnNtb290aF9zYW5kc3RvbmVfc2xhYgQJAG5hbWVfaGFzaIkmsO1gw3gnAwoAbmV0d29ya19pZFSiwP0KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:red_sandstone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRwAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmVfc2xhYgQJAG5hbWVfaGFzaEyDjeWlUHItAwoAbmV0d29ya19pZIT4rmwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:cut_red_sandstone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSEBAAACAQAbmFtZSAAbWluZWNyYWZ0OmN1dF9yZWRfc2FuZHN0b25lX3NsYWIECQBuYW1lX2hhc2hTVRS++snU3wMKAG5ldHdvcmtfaWSvIAviCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:smooth_red_sandstone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR6BAAACAQAbmFtZSMAbWluZWNyYWZ0OnNtb290aF9yZWRfc2FuZHN0b25lX3NsYWIECQBuYW1lX2hhc2i9iN2UK272tgMKAG5ldHdvcmtfaWRUZrwJCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:granite_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR/BAAACAQAbmFtZRYAbWluZWNyYWZ0OmdyYW5pdGVfc2xhYgQJAG5hbWVfaGFzaL0HprlAhhZwAwoAbmV0d29ya19pZIcIdc8KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:polished_granite_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSABAAACAQAbmFtZR8AbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGVfc2xhYgQJAG5hbWVfaGFzaP6bXk5w2dGrAwoAbmV0d29ya19pZCsRy1cKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:diorite_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR9BAAACAQAbmFtZRYAbWluZWNyYWZ0OmRpb3JpdGVfc2xhYgQJAG5hbWVfaGFzaM3ppS8v55sNAwoAbmV0d29ya19pZB+Pv9oKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:polished_diorite_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR+BAAACAQAbmFtZR8AbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGVfc2xhYgQJAG5hbWVfaGFzaLZlyJLkMPhyAwoAbmV0d29ya19pZFM0HYwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:andesite_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR8BAAACAQAbmFtZRcAbWluZWNyYWZ0OmFuZGVzaXRlX3NsYWIECQBuYW1lX2hhc2icIrtuy/aosAMKAG5ldHdvcmtfaWTtXTtYCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:polished_andesite_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR7BAAACAQAbmFtZSAAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlX3NsYWIECQBuYW1lX2hhc2j56zJOfCF+3wMKAG5ldHdvcmtfaWRBs69FCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRpBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJyaWNrX3NsYWIECQBuYW1lX2hhc2hO/Da4jU2v4wMKAG5ldHdvcmtfaWRG/qphCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:nether_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRsBAAACAQAbmFtZRsAbWluZWNyYWZ0Om5ldGhlcl9icmlja19zbGFiBAkAbmFtZV9oYXNonymoa2zbbqMDCgBuZXR3b3JrX2lkquvR1QoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:red_nether_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR5BAAACAQAbmFtZR8AbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaG89ujUk3Y64AwoAbmV0d29ya19pZEZIunAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:end_stone_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZR4AbWluZWNyYWZ0OmVuZF9zdG9uZV9icmlja19zbGFiBAkAbmFtZV9oYXNo4tkxQtl+IyQDCgBuZXR3b3JrX2lkhByH/woGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:quartz_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRrBAAACAQAbmFtZRUAbWluZWNyYWZ0OnF1YXJ0el9zbGFiBAkAbmFtZV9oYXNo9JMj3upfsbwDCgBuZXR3b3JrX2lkn2g2VAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:smooth_quartz_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSBBAAACAQAbmFtZRwAbWluZWNyYWZ0OnNtb290aF9xdWFydHpfc2xhYgQJAG5hbWVfaGFzaHOSJv8ve0nmAwoAbmV0d29ya19pZFMk/JsKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:purpur_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRzBAAACAQAbmFtZRUAbWluZWNyYWZ0OnB1cnB1cl9zbGFiBAkAbmFtZV9oYXNo4XeWbKpx2ScDCgBuZXR3b3JrX2lkRkga5goGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:prismarine_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR0BAAACAQAbmFtZRkAbWluZWNyYWZ0OnByaXNtYXJpbmVfc2xhYgQJAG5hbWVfaGFzaI9x+1fY8QRfAwoAbmV0d29ya19pZBTUZhwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:dark_prismarine_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR1BAAACAQAbmFtZR4AbWluZWNyYWZ0OmRhcmtfcHJpc21hcmluZV9zbGFiBAkAbmFtZV9oYXNoSsZGDkEL5ZUDCgBuZXR3b3JrX2lkNLQ8VwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:prismarine_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR2BAAACAQAbmFtZR8AbWluZWNyYWZ0OnByaXNtYXJpbmVfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaB1FSbVi97xJAwoAbmV0d29ya19pZEBwwFMKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:crimson_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAgAACAQAbmFtZRYAbWluZWNyYWZ0OmNyaW1zb25fc2xhYgQJAG5hbWVfaGFzaKZ+EfP0ZYOZAwoAbmV0d29ya19pZAxRUWAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:warped_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQIAgAACAQAbmFtZRUAbWluZWNyYWZ0OndhcnBlZF9zbGFiBAkAbmFtZV9oYXNo/AT0e/Z9W7UDCgBuZXR3b3JrX2lk1yq11AoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:blackstone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsYWNrc3RvbmVfc2xhYgQJAG5hbWVfaGFzaF/DD4ZUlNgtAwoAbmV0d29ya19pZGy1DjwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:polished_blackstone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQkAgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfc2xhYgQJAG5hbWVfaGFzaDYnuUs86EWfAwoAbmV0d29ya19pZJj2bXIKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:polished_blackstone_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQbAgAACAQAbmFtZSgAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaKySLqvHc4xXAwoAbmV0d29ya19pZOyWX94KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:cobbled_deepslate_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AgAACAQAbmFtZSAAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3NsYWIECQBuYW1lX2hhc2gwJIVWK1TM2QMKAG5ldHdvcmtfaWTYAoX5CgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:polished_deepslate_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR/AgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV9zbGFiBAkAbmFtZV9oYXNoC/Adiz8k6RYDCgBuZXR3b3JrX2lkuFYMAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:deepslate_tile_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3NsYWIECQBuYW1lX2hhc2hPydV6emzIXAMKAG5ldHdvcmtfaWQwlbFCCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:deepslate_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja19zbGFiBAkAbmFtZV9oYXNoSv62V7iw10UDCgBuZXR3b3JrX2lkWMoragoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:tuff_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAwAACAQAbmFtZRMAbWluZWNyYWZ0OnR1ZmZfc2xhYgQJAG5hbWVfaGFzaIhCGdlIsnMUAwoAbmV0d29ya19pZN1dUL4KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:polished_tuff_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTsAwAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmZfc2xhYgQJAG5hbWVfaGFzaLXdb48YvAsHAwoAbmV0d29ya19pZAnJ7W0KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:tuff_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTyAwAACAQAbmFtZRkAbWluZWNyYWZ0OnR1ZmZfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaLqPMjVCv5dIAwoAbmV0d29ya19pZOmeRhcKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:mud_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAgAACAQAbmFtZRgAbWluZWNyYWZ0Om11ZF9icmlja19zbGFiBAkAbmFtZV9oYXNoq/tGBQWkv08DCgBuZXR3b3JrX2lkl4nnMwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRoAgAACAQAbmFtZRkAbWluZWNyYWZ0OmN1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaDsNpb2qs4iBAwoAbmV0d29ya19pZOTm2nsKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:exposed_cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRpAgAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcl9zbGFiBAkAbmFtZV9oYXNoahQ5OwIQb7kDCgBuZXR3b3JrX2lkrUlZLwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:weathered_cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRqAgAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyX3NsYWIECQBuYW1lX2hhc2hBIuGIOVVXogMKAG5ldHdvcmtfaWQgnaDiCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:oxidized_cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAgAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaOptj9ycfpaDAwoAbmV0d29ya19pZMzFSRgKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:waxed_cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaAlx6DZOCTHzAwoAbmV0d29ya19pZFRBvDAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:waxed_exposed_cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAgAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcl9zbGFiBAkAbmFtZV9oYXNo3KqS5OnhtRIDCgBuZXR3b3JrX2lkHTGcTgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:waxed_weathered_cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyX3NsYWIECQBuYW1lX2hhc2gzZ1oX0HCFtwMKAG5ldHdvcmtfaWSgJR+XCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:waxed_oxidized_cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTAAgAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaMjjTnLu1KcqAwoAbmV0d29ya19pZIxsnFYKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:resin_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT1BAAACAQAbmFtZRoAbWluZWNyYWZ0OnJlc2luX2JyaWNrX3NsYWIECQBuYW1lX2hhc2hAGu/Hlaa12QMKAG5ldHdvcmtfaWSyDq8CCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:stone_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAAAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX2JyaWNrcwQJAG5hbWVfaGFzaGAiQu8VWVJRAwoAbmV0d29ya19pZH2DjXUKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:mossy_stone_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRjBAAACAQAbmFtZRwAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaIZBO00MONRIAwoAbmV0d29ya19pZL2WDrAKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cracked_stone_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRkBAAACAQAbmFtZR4AbWluZWNyYWZ0OmNyYWNrZWRfc3RvbmVfYnJpY2tzBAkAbmFtZV9oYXNocIkAp6riMz4DCgBuZXR3b3JrX2lkTWGeCwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:chiseled_stone_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRlBAAACAQAbmFtZR8AbWluZWNyYWZ0OmNoaXNlbGVkX3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaMB2FPLLADkEAwoAbmV0d29ya19pZOIPn0IKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:smooth_stone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AQAACAQAbmFtZRYAbWluZWNyYWZ0OnNtb290aF9zdG9uZQQJAG5hbWVfaGFzaMwf87/JaTNvAwoAbmV0d29ya19pZLkZICEKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:end_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTOAAAACAQAbmFtZRQAbWluZWNyYWZ0OmVuZF9icmlja3MECQBuYW1lX2hhc2hIUFfxNLZaFgMKAG5ldHdvcmtfaWQ/vDihCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:polished_blackstone_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tzBAkAbmFtZV9oYXNoIHgsgIdzKXcDCgBuZXR3b3JrX2lkUw9b3woGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:cracked_polished_blackstone_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAgAACAQAbmFtZSwAbWluZWNyYWZ0OmNyYWNrZWRfcG9saXNoZWRfYmxhY2tzdG9uZV9icmlja3MECQBuYW1lX2hhc2jQIO1GQDk80AMKAG5ldHdvcmtfaWQ3UlRYCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:gilded_blackstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAgAACAQAbmFtZRsAbWluZWNyYWZ0OmdpbGRlZF9ibGFja3N0b25lBAkAbmFtZV9oYXNoNoWt1ocG0HEDCgBuZXR3b3JrX2lktL8gUwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:chiseled_polished_blackstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAgAACAQAbmFtZSYAbWluZWNyYWZ0OmNoaXNlbGVkX3BvbGlzaGVkX2JsYWNrc3RvbmUECQBuYW1lX2hhc2gzFa+kEjCJgAMKAG5ldHdvcmtfaWR2NJX2CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:deepslate_tiles", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAgAACAQAbmFtZRkAbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlcwQJAG5hbWVfaGFzaGcLLx3NXAFvAwoAbmV0d29ya19pZI/G/xYKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cracked_deepslate_tiles", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSYAgAACAQAbmFtZSEAbWluZWNyYWZ0OmNyYWNrZWRfZGVlcHNsYXRlX3RpbGVzBAkAbmFtZV9oYXNo9zWgkFuMM1QDCgBuZXR3b3JrX2lkGwY6OgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:deepslate_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAgAACAQAbmFtZRoAbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja3MECQBuYW1lX2hhc2gucvFmPdZxigMKAG5ldHdvcmtfaWSH4HDPCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:tuff_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAwAACAQAbmFtZRUAbWluZWNyYWZ0OnR1ZmZfYnJpY2tzBAkAbmFtZV9oYXNo/hbQ+mXSK7wDCgBuZXR3b3JrX2lk6gmIwQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:cracked_deepslate_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAgAACAQAbmFtZSIAbWluZWNyYWZ0OmNyYWNrZWRfZGVlcHNsYXRlX2JyaWNrcwQJAG5hbWVfaGFzaN40aqhh9WqHAwoAbmV0d29ya19pZO9GPBQKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:chiseled_deepslate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAgAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaEU7/uRG8HSBAwoAbmV0d29ya19pZEqmI0EKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:chiseled_tuff", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoaXNlbGVkX3R1ZmYECQBuYW1lX2hhc2iVliOT8OTQ9AMKAG5ldHdvcmtfaWTLNKOiCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:chiseled_tuff_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT2AwAACAQAbmFtZR4AbWluZWNyYWZ0OmNoaXNlbGVkX3R1ZmZfYnJpY2tzBAkAbmFtZV9oYXNo3oQw6gmxYuADCgBuZXR3b3JrX2lkm3D8AgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:cobblestone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAAAACAQAbmFtZRUAbWluZWNyYWZ0OmNvYmJsZXN0b25lBAkAbmFtZV9oYXNoPoK7mGlSUz4DCgBuZXR3b3JrX2lkLm7RZwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:mossy_cobblestone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQwAAAACAQAbmFtZRsAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lBAkAbmFtZV9oYXNoGJ67FCbkChMDCgBuZXR3b3JrX2lk/pYs1AoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:cobbled_deepslate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AgAACAQAbmFtZRsAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlBAkAbmFtZV9oYXNoLUz9Y/ywmLwDCgBuZXR3b3JrX2lkNwzZ+AoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZPsXMaQKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:chiseled_sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSvBAAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX3NhbmRzdG9uZQQJAG5hbWVfaGFzaPEkxMvZmemgAwoAbmV0d29ya19pZGI5NB4KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:cut_sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSwBAAACAQAbmFtZRcAbWluZWNyYWZ0OmN1dF9zYW5kc3RvbmUECQBuYW1lX2hhc2ichLQc71njnQMKAG5ldHdvcmtfaWSmBLkRCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:smooth_sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSxBAAACAQAbmFtZRoAbWluZWNyYWZ0OnNtb290aF9zYW5kc3RvbmUECQBuYW1lX2hhc2huR7XTwISyCAMKAG5ldHdvcmtfaWSzWj3UCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:red_sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWRXRYxZCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:chiseled_red_sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS7BAAACAQAbmFtZSAAbWluZWNyYWZ0OmNoaXNlbGVkX3JlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2gh5sX+ON054wMKAG5ldHdvcmtfaWT6Pw1PCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:cut_red_sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS8BAAACAQAbmFtZRsAbWluZWNyYWZ0OmN1dF9yZWRfc2FuZHN0b25lBAkAbmFtZV9oYXNoaOtka4NrQ1EDCgBuZXR3b3JrX2lk3r/JPAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:smooth_red_sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS9BAAACAQAbmFtZR4AbWluZWNyYWZ0OnNtb290aF9yZWRfc2FuZHN0b25lBAkAbmFtZV9oYXNoqsNl8x36ju4DCgBuZXR3b3JrX2lk7x5DTwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:coal_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWStAAAACAQAbmFtZRQAbWluZWNyYWZ0OmNvYWxfYmxvY2sECQBuYW1lX2hhc2jH8QQP3t5PiAMKAG5ldHdvcmtfaWRo+sR+CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:dried_kelp_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAQAACAQAbmFtZRoAbWluZWNyYWZ0OmRyaWVkX2tlbHBfYmxvY2sECQBuYW1lX2hhc2iRoucexkrl8wMKAG5ldHdvcmtfaWQQCCrvCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:copper_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRTAgAACAQAbmFtZRYAbWluZWNyYWZ0OmNvcHBlcl9ibG9jawQJAG5hbWVfaGFzaDVxnehsGaZ1AwoAbmV0d29ya19pZIiUodwKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:weathered_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAgAACAQAbmFtZRoAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2hJCQXbvobv+gMKAG5ldHdvcmtfaWQwM0lJCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:exposed_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAgAACAQAbmFtZRgAbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoQH3Fukmu3CEDCgBuZXR3b3JrX2lk72jFIwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:oxidized_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAgAACAQAbmFtZRkAbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMDtJqR0G5Y7AwoAbmV0d29ya19pZGjN8bUKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:waxed_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAgAACAQAbmFtZRYAbWluZWNyYWZ0OndheGVkX2NvcHBlcgQJAG5hbWVfaGFzaPF+FG6Eh5fsAwoAbmV0d29ya19pZIjtz/0KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:waxed_exposed_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAgAACAQAbmFtZR4AbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoig8IOc+SCikDCgBuZXR3b3JrX2lklz8yWQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:waxed_weathered_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRZAgAACAQAbmFtZSAAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2gjtPq8MOdvKgMKAG5ldHdvcmtfaWSQ9Ln9CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:waxed_oxidized_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS9AgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMaORhsO+LzjAwoAbmV0d29ya19pZJhGfLEKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:copper_grate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT/AwAACAQAbmFtZRYAbWluZWNyYWZ0OmNvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaC/JEFOWnmEcAwoAbmV0d29ya19pZC6YiiMKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:exposed_copper_grate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQABAAACAQAbmFtZR4AbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyX2dyYXRlBAkAbmFtZV9oYXNolFIBYLYU0IcDCgBuZXR3b3JrX2lk4UqptAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:weathered_copper_grate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQBBAAACAQAbmFtZSAAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXJfZ3JhdGUECQBuYW1lX2hhc2jB3o8enlv1RgMKAG5ldHdvcmtfaWRih2pOCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:oxidized_copper_grate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQCBAAACAQAbmFtZR8AbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaBRfNhyndve7AwoAbmV0d29ya19pZKY2cnEKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:waxed_copper_grate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQDBAAACAQAbmFtZRwAbWluZWNyYWZ0OndheGVkX2NvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaDmC92M2RO+HAwoAbmV0d29ya19pZH4og2AKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:waxed_exposed_copper_grate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQEBAAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyX2dyYXRlBAkAbmFtZV9oYXNoWmd6B+hWwiEDCgBuZXR3b3JrX2lk8d4ZQwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:waxed_weathered_copper_grate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQFBAAACAQAbmFtZSYAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXJfZ3JhdGUECQBuYW1lX2hhc2hXfilVFDAiYQMKAG5ldHdvcmtfaWQqTGC1CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:waxed_oxidized_copper_grate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQGBAAACAQAbmFtZSUAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaEbeMT605GP4AwoAbmV0d29ya19pZOZjpkkKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQGBAAACAQAbmFtZSUAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaEbeMT605GP4AwoAbmV0d29ya19pZOZjpkkKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRaAgAACAQAbmFtZRQAbWluZWNyYWZ0OmN1dF9jb3BwZXIECQBuYW1lX2hhc2hAfN3NGax3eAMKAG5ldHdvcmtfaWTnFBtYCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRaAgAACAQAbmFtZRQAbWluZWNyYWZ0OmN1dF9jb3BwZXIECQBuYW1lX2hhc2hAfN3NGax3eAMKAG5ldHdvcmtfaWTnFBtYCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:exposed_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAgAACAQAbmFtZRwAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcgQJAG5hbWVfaGFzaA85G3yv/w6pAwoAbmV0d29ya19pZMQhr0QKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAgAACAQAbmFtZRwAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcgQJAG5hbWVfaGFzaA85G3yv/w6pAwoAbmV0d29ya19pZMQhr0QKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:weathered_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRcAgAACAQAbmFtZR4AbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyBAkAbmFtZV9oYXNoVgRV0fBaz88DCgBuZXR3b3JrX2lk/0cYugoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRcAgAACAQAbmFtZR4AbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyBAkAbmFtZV9oYXNoVgRV0fBaz88DCgBuZXR3b3JrX2lk/0cYugoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:oxidized_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRdAgAACAQAbmFtZR0AbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2iP8WmFWOkriwMKAG5ldHdvcmtfaWQPdce7CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRdAgAACAQAbmFtZR0AbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2iP8WmFWOkriwMKAG5ldHdvcmtfaWQPdce7CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:waxed_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWReAgAACAQAbmFtZRoAbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2jumiwOZIqv2AMKAG5ldHdvcmtfaWQvuxx9CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWReAgAACAQAbmFtZRoAbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2jumiwOZIqv2AMKAG5ldHdvcmtfaWQvuxx9CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:waxed_exposed_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRfAgAACAQAbmFtZSIAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcgQJAG5hbWVfaGFzaPE/OfK6IoVMAwoAbmV0d29ya19pZHy5HkcKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRfAgAACAQAbmFtZSIAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcgQJAG5hbWVfaGFzaPE/OfK6IoVMAwoAbmV0d29ya19pZHy5HkcKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:waxed_weathered_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRgAgAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyBAkAbmFtZV9oYXNoCA1xDp11bnwDCgBuZXR3b3JrX2lkDyEDVQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRgAgAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyBAkAbmFtZV9oYXNoCA1xDp11bnwDCgBuZXR3b3JrX2lkDyEDVQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:waxed_oxidized_cut_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS+AgAACAQAbmFtZSMAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2i1pZAsZYHLDAMKAG5ldHdvcmtfaWQ/wSkCCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWS+AgAACAQAbmFtZSMAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2i1pZAsZYHLDAMKAG5ldHdvcmtfaWQ/wSkCCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT3AwAACAQAbmFtZRkAbWluZWNyYWZ0OmNoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaIsW5pmpJEuQAwoAbmV0d29ya19pZHetwrkKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWT3AwAACAQAbmFtZRkAbWluZWNyYWZ0OmNoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaIsW5pmpJEuQAwoAbmV0d29ya19pZHetwrkKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:exposed_chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT4AwAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY2hpc2VsZWRfY29wcGVyBAkAbmFtZV9oYXNoOvrLJ0UowbgDCgBuZXR3b3JrX2lkZj7cPwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWT4AwAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY2hpc2VsZWRfY29wcGVyBAkAbmFtZV9oYXNoOvrLJ0UowbgDCgBuZXR3b3JrX2lkZj7cPwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:weathered_chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT5AwAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jaGlzZWxlZF9jb3BwZXIECQBuYW1lX2hhc2hh+42XlsWvGAMKAG5ldHdvcmtfaWS7Cy59CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWT5AwAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jaGlzZWxlZF9jb3BwZXIECQBuYW1lX2hhc2hh+42XlsWvGAMKAG5ldHdvcmtfaWS7Cy59CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:oxidized_chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT6AwAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2NoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaLpTIsnfluiCAwoAbmV0d29ya19pZB9/jS8KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWT6AwAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2NoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaLpTIsnfluiCAwoAbmV0d29ya19pZB9/jS8KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:waxed_chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT7AwAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2NoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaFnXvXY5OinzAwoAbmV0d29ya19pZAcKtHsKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWT7AwAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2NoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaFnXvXY5OinzAwoAbmV0d29ya19pZAcKtHsKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:waxed_exposed_chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT8AwAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY2hpc2VsZWRfY29wcGVyBAkAbmFtZV9oYXNoHJdq+Pph6hMDCgBuZXR3b3JrX2lkdge7IAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWT8AwAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY2hpc2VsZWRfY29wcGVyBAkAbmFtZV9oYXNoHJdq+Pph6hMDCgBuZXR3b3JrX2lkdge7IAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:waxed_oxidized_chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT9AwAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaMj49OvlTpgCAwoAbmV0d29ya19pZN/r+roKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWT9AwAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaMj49OvlTpgCAwoAbmV0d29ya19pZN/r+roKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:waxed_weathered_chiseled_copper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT+AwAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jaGlzZWxlZF9jb3BwZXIECQBuYW1lX2hhc2hzuO+Sg9LYQwMKAG5ldHdvcmtfaWQ7AN7iCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWT+AwAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jaGlzZWxlZF9jb3BwZXIECQBuYW1lX2hhc2hzuO+Sg9LYQwMKAG5ldHdvcmtfaWQ7AN7iCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQHBAAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcHBlcl9idWxiBAkAbmFtZV9oYXNo41TimHOsMWcDCgBuZXR3b3JrX2lkJnZvAgoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQHBAAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcHBlcl9idWxiBAkAbmFtZV9oYXNo41TimHOsMWcDCgBuZXR3b3JrX2lkJnZvAgoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:exposed_copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQIBAAACAQAbmFtZR0AbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyX2J1bGIECQBuYW1lX2hhc2g++f1wYLLCrAMKAG5ldHdvcmtfaWRLdMmGCgYAc3RhdGVzAQMAbGl0AAELAHBvd2VyZWRfYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQIBAAACAQAbmFtZR0AbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyX2J1bGIECQBuYW1lX2hhc2g++f1wYLLCrAMKAG5ldHdvcmtfaWRLdMmGCgYAc3RhdGVzAQMAbGl0AAELAHBvd2VyZWRfYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:weathered_copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQJBAAACAQAbmFtZR8AbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXJfYnVsYgQJAG5hbWVfaGFzaMEtsYfwRTXlAwoAbmV0d29ya19pZAp51LQKBgBzdGF0ZXMBAwBsaXQAAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQJBAAACAQAbmFtZR8AbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXJfYnVsYgQJAG5hbWVfaGFzaMEtsYfwRTXlAwoAbmV0d29ya19pZAp51LQKBgBzdGF0ZXMBAwBsaXQAAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:oxidized_copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQKBAAACAQAbmFtZR4AbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcl9idWxiBAkAbmFtZV9oYXNovnrBQZs8nDIDCgBuZXR3b3JrX2lkPsj0AAoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQKBAAACAQAbmFtZR4AbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcl9idWxiBAkAbmFtZV9oYXNovnrBQZs8nDIDCgBuZXR3b3JrX2lkPsj0AAoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:waxed_copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQLBAAACAQAbmFtZRsAbWluZWNyYWZ0OndheGVkX2NvcHBlcl9idWxiBAkAbmFtZV9oYXNoGTg6TYllMiIDCgBuZXR3b3JrX2lk9m0WhgoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQLBAAACAQAbmFtZRsAbWluZWNyYWZ0OndheGVkX2NvcHBlcl9idWxiBAkAbmFtZV9oYXNoGTg6TYllMiIDCgBuZXR3b3JrX2lk9m0WhgoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:waxed_exposed_copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQMBAAACAQAbmFtZSMAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyX2J1bGIECQBuYW1lX2hhc2gI6xkPcvBDVwMKAG5ldHdvcmtfaWR7BRcACgYAc3RhdGVzAQMAbGl0AAELAHBvd2VyZWRfYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQMBAAACAQAbmFtZSMAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyX2J1bGIECQBuYW1lX2hhc2gI6xkPcvBDVwMKAG5ldHdvcmtfaWR7BRcACgYAc3RhdGVzAQMAbGl0AAELAHBvd2VyZWRfYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:waxed_weathered_copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQNBAAACAQAbmFtZSUAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXJfYnVsYgQJAG5hbWVfaGFzaMsUnmp3/VqVAwoAbmV0d29ya19pZEoworoKBgBzdGF0ZXMBAwBsaXQAAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQNBAAACAQAbmFtZSUAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXJfYnVsYgQJAG5hbWVfaGFzaMsUnmp3/VqVAwoAbmV0d29ya19pZEoworoKBgBzdGF0ZXMBAwBsaXQAAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:waxed_oxidized_copper_bulb", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQOBAAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcl9idWxiBAkAbmFtZV9oYXNoBFKxY3fjVq4DCgBuZXR3b3JrX2lkzrJ6aAoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQOBAAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcl9idWxiBAkAbmFtZV9oYXNoBFKxY3fjVq4DCgBuZXR3b3JrX2lkzrJ6aAoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:iron_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAAAACAQAbmFtZRQAbWluZWNyYWZ0Omlyb25fYmxvY2sECQBuYW1lX2hhc2jYINmJQbvV/gMKAG5ldHdvcmtfaWRf7AbICgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:gold_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdvbGRfYmxvY2sECQBuYW1lX2hhc2iYLshvjtXzFwMKAG5ldHdvcmtfaWTDJGBcCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:emerald_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAAAACAQAbmFtZRcAbWluZWNyYWZ0OmVtZXJhbGRfYmxvY2sECQBuYW1lX2hhc2hK6QunqJznNAMKAG5ldHdvcmtfaWRk5+otCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAAAACAQAbmFtZRcAbWluZWNyYWZ0OmVtZXJhbGRfYmxvY2sECQBuYW1lX2hhc2hK6QunqJznNAMKAG5ldHdvcmtfaWRk5+otCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:diamond_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5AAAACAQAbmFtZRcAbWluZWNyYWZ0OmRpYW1vbmRfYmxvY2sECQBuYW1lX2hhc2iGKrxuvkytFQMKAG5ldHdvcmtfaWQQeQZXCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5AAAACAQAbmFtZRcAbWluZWNyYWZ0OmRpYW1vbmRfYmxvY2sECQBuYW1lX2hhc2iGKrxuvkytFQMKAG5ldHdvcmtfaWQQeQZXCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:lapis_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAAAACAQAbmFtZRUAbWluZWNyYWZ0OmxhcGlzX2Jsb2NrBAkAbmFtZV9oYXNoDZ44xdb2zVoDCgBuZXR3b3JrX2lktVy0BAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:raw_iron_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTCAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJhd19pcm9uX2Jsb2NrBAkAbmFtZV9oYXNo9XyzNIQXxvwDCgBuZXR3b3JrX2lknms1QAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAAAACAQAbmFtZRUAbWluZWNyYWZ0OmxhcGlzX2Jsb2NrBAkAbmFtZV9oYXNoDZ44xdb2zVoDCgBuZXR3b3JrX2lktVy0BAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:raw_copper_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTDAgAACAQAbmFtZRoAbWluZWNyYWZ0OnJhd19jb3BwZXJfYmxvY2sECQBuYW1lX2hhc2hw1KG0TNUGgwMKAG5ldHdvcmtfaWS1vGo/CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTDAgAACAQAbmFtZRoAbWluZWNyYWZ0OnJhd19jb3BwZXJfYmxvY2sECQBuYW1lX2hhc2hw1KG0TNUGgwMKAG5ldHdvcmtfaWS1vGo/CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:raw_iron_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTCAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJhd19pcm9uX2Jsb2NrBAkAbmFtZV9oYXNo9XyzNIQXxvwDCgBuZXR3b3JrX2lknms1QAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:raw_gold_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJhd19nb2xkX2Jsb2NrBAkAbmFtZV9oYXNo6YuwuLwfOBwDCgBuZXR3b3JrX2lkLiQ5gQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJhd19nb2xkX2Jsb2NrBAkAbmFtZV9oYXNo6YuwuLwfOBwDCgBuZXR3b3JrX2lkLiQ5gQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:quartz_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAAAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZE2axGsKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAAAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZE2axGsKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:quartz_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAgAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9icmlja3MECQBuYW1lX2hhc2jSZO590dd8sAMKAG5ldHdvcmtfaWSc5xCLCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:quartz_pillar", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS5BAAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9waWxsYXIECQBuYW1lX2hhc2igp62HI+PuSwMKAG5ldHdvcmtfaWS9SGXLCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWS5BAAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9waWxsYXIECQBuYW1lX2hhc2igp62HI+PuSwMKAG5ldHdvcmtfaWS9SGXLCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:chiseled_quartz_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS4BAAACAQAbmFtZR8AbWluZWNyYWZ0OmNoaXNlbGVkX3F1YXJ0el9ibG9jawQJAG5hbWVfaGFzaAftJM9mCAvaAwoAbmV0d29ya19pZFwy0s0KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWS4BAAACAQAbmFtZR8AbWluZWNyYWZ0OmNoaXNlbGVkX3F1YXJ0el9ibG9jawQJAG5hbWVfaGFzaAftJM9mCAvaAwoAbmV0d29ya19pZFwy0s0KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:smooth_quartz", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS6BAAACAQAbmFtZRcAbWluZWNyYWZ0OnNtb290aF9xdWFydHoECQBuYW1lX2hhc2hIVzzgiItGagMKAG5ldHdvcmtfaWTVWgU2CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWS6BAAACAQAbmFtZRcAbWluZWNyYWZ0OnNtb290aF9xdWFydHoECQBuYW1lX2hhc2hIVzzgiItGagMKAG5ldHdvcmtfaWTVWgU2CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:prismarine", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAAAACAQAbmFtZRQAbWluZWNyYWZ0OnByaXNtYXJpbmUECQBuYW1lX2hhc2jcnQCHi9CspQMKAG5ldHdvcmtfaWQnuuW1CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAAAACAQAbmFtZRQAbWluZWNyYWZ0OnByaXNtYXJpbmUECQBuYW1lX2hhc2jcnQCHi9CspQMKAG5ldHdvcmtfaWQnuuW1CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:prismarine_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSzBAAACAQAbmFtZRsAbWluZWNyYWZ0OnByaXNtYXJpbmVfYnJpY2tzBAkAbmFtZV9oYXNozeGe3/7s5fcDCgBuZXR3b3JrX2lkj/iBnAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:dark_prismarine", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSyBAAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfcHJpc21hcmluZQQJAG5hbWVfaGFzaK+rhxsgkzplAwoAbmV0d29ya19pZIdA0I0KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSyBAAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfcHJpc21hcmluZQQJAG5hbWVfaGFzaK+rhxsgkzplAwoAbmV0d29ya19pZIdA0I0KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:slime", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnNsaW1lBAkAbmFtZV9oYXNoHJiEEJx+JlkDCgBuZXR3b3JrX2lkfgfVzAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnNsaW1lBAkAbmFtZV9oYXNoHJiEEJx+JlkDCgBuZXR3b3JrX2lkfgfVzAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:honey_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAQAACAQAbmFtZRUAbWluZWNyYWZ0OmhvbmV5X2Jsb2NrBAkAbmFtZV9oYXNo9zLYSUlelywDCgBuZXR3b3JrX2lko+dyWgoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAQAACAQAbmFtZRUAbWluZWNyYWZ0OmhvbmV5X2Jsb2NrBAkAbmFtZV9oYXNo9zLYSUlelywDCgBuZXR3b3JrX2lko+dyWgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:honeycomb_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAQAACAQAbmFtZRkAbWluZWNyYWZ0OmhvbmV5Y29tYl9ibG9jawQJAG5hbWVfaGFzaASIPuOCYd1oAwoAbmV0d29ya19pZKys4n4KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAQAACAQAbmFtZRkAbWluZWNyYWZ0OmhvbmV5Y29tYl9ibG9jawQJAG5hbWVfaGFzaASIPuOCYd1oAwoAbmV0d29ya19pZKys4n4KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:resin_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT8BAAACAQAbmFtZRUAbWluZWNyYWZ0OnJlc2luX2Jsb2NrBAkAbmFtZV9oYXNo6SHuLxdB67QDCgBuZXR3b3JrX2lkcWO4EwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:hay_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAAAACAQAbmFtZRMAbWluZWNyYWZ0OmhheV9ibG9jawQJAG5hbWVfaGFzaIB2VxKxX8EpAwoAbmV0d29ya19pZKuQSloKBgBzdGF0ZXMDCgBkZXByZWNhdGVkAAAAAAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAAAACAQAbmFtZRMAbWluZWNyYWZ0OmhheV9ibG9jawQJAG5hbWVfaGFzaIB2VxKxX8EpAwoAbmV0d29ya19pZKuQSloKBgBzdGF0ZXMDCgBkZXByZWNhdGVkAAAAAAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:bone_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAAAACAQAbmFtZRQAbWluZWNyYWZ0OmJvbmVfYmxvY2sECQBuYW1lX2hhc2i4ZX576W9AWgMKAG5ldHdvcmtfaWTWGacQCgYAc3RhdGVzAwoAZGVwcmVjYXRlZAAAAAAICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAAAACAQAbmFtZRQAbWluZWNyYWZ0OmJvbmVfYmxvY2sECQBuYW1lX2hhc2i4ZX576W9AWgMKAG5ldHdvcmtfaWTWGacQCgYAc3RhdGVzAwoAZGVwcmVjYXRlZAAAAAAICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:resin_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT0BAAACAQAbmFtZRYAbWluZWNyYWZ0OnJlc2luX2JyaWNrcwQJAG5hbWVfaGFzaPQfo5PcOZSaAwoAbmV0d29ya19pZB24YHwKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:chiseled_resin_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT7BAAACAQAbmFtZR8AbWluZWNyYWZ0OmNoaXNlbGVkX3Jlc2luX2JyaWNrcwQJAG5hbWVfaGFzaNSCIvsamt6qAwoAbmV0d29ya19pZBY+3hYKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:nether_brick", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRwAAAACAQAbmFtZRYAbWluZWNyYWZ0Om5ldGhlcl9icmljawQJAG5hbWVfaGFzaMxcRiheU+nXAwoAbmV0d29ya19pZMkmzloKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRwAAAACAQAbmFtZRYAbWluZWNyYWZ0Om5ldGhlcl9icmljawQJAG5hbWVfaGFzaMxcRiheU+nXAwoAbmV0d29ya19pZMkmzloKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:red_nether_brick", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAAAACAQAbmFtZRoAbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2sECQBuYW1lX2hhc2j8pRO4LfoECAMKAG5ldHdvcmtfaWRpdF0YCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAAAACAQAbmFtZRoAbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2sECQBuYW1lX2hhc2j8pRO4LfoECAMKAG5ldHdvcmtfaWRpdF0YCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:chiseled_nether_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAgAACAQAbmFtZSAAbWluZWNyYWZ0OmNoaXNlbGVkX25ldGhlcl9icmlja3MECQBuYW1lX2hhc2g31SBPTcUK1QMKAG5ldHdvcmtfaWS8TJ+TCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:cracked_nether_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAgAACAQAbmFtZR8AbWluZWNyYWZ0OmNyYWNrZWRfbmV0aGVyX2JyaWNrcwQJAG5hbWVfaGFzaAdC6eKzXT5tAwoAbmV0d29ya19pZIUSejwKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:netherite_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAgAACAQAbmFtZRkAbWluZWNyYWZ0Om5ldGhlcml0ZV9ibG9jawQJAG5hbWVfaGFzaMghh6Zib/ZKAwoAbmV0d29ya19pZIz0mq0KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAgAACAQAbmFtZRkAbWluZWNyYWZ0Om5ldGhlcml0ZV9ibG9jawQJAG5hbWVfaGFzaMghh6Zib/ZKAwoAbmV0d29ya19pZIz0mq0KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:lodestone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAQAACAQAbmFtZRMAbWluZWNyYWZ0OmxvZGVzdG9uZQQJAG5hbWVfaGFzaJ2gmHOTlXv8AwoAbmV0d29ya19pZEfgB4wKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAQAACAQAbmFtZRMAbWluZWNyYWZ0OmxvZGVzdG9uZQQJAG5hbWVfaGFzaJ2gmHOTlXv8AwoAbmV0d29ya19pZEfgB4wKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:white_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAAAACAQAbmFtZRQAbWluZWNyYWZ0OndoaXRlX3dvb2wECQBuYW1lX2hhc2jRWB7vaIEDiQMKAG5ldHdvcmtfaWSO8paQCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAAAACAQAbmFtZRQAbWluZWNyYWZ0OndoaXRlX3dvb2wECQBuYW1lX2hhc2jRWB7vaIEDiQMKAG5ldHdvcmtfaWSO8paQCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:light_gray_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQnAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfd29vbAQJAG5hbWVfaGFzaOpdQ1a2v4b3AwoAbmV0d29ya19pZIqZCYEKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQnAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfd29vbAQJAG5hbWVfaGFzaOpdQ1a2v4b3AwoAbmV0d29ya19pZIqZCYEKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:gray_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAwAACAQAbmFtZRMAbWluZWNyYWZ0OmdyYXlfd29vbAQJAG5hbWVfaGFzaLsc1Lp1xdIOAwoAbmV0d29ya19pZFUs+HgKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAwAACAQAbmFtZRMAbWluZWNyYWZ0OmdyYXlfd29vbAQJAG5hbWVfaGFzaLsc1Lp1xdIOAwoAbmV0d29ya19pZFUs+HgKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:black_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAwAACAQAbmFtZRQAbWluZWNyYWZ0OmJsYWNrX3dvb2wECQBuYW1lX2hhc2hP2HC6o0X4HAMKAG5ldHdvcmtfaWRUbORcCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAwAACAQAbmFtZRQAbWluZWNyYWZ0OmJsYWNrX3dvb2wECQBuYW1lX2hhc2hP2HC6o0X4HAMKAG5ldHdvcmtfaWRUbORcCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:brown_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAwAACAQAbmFtZRQAbWluZWNyYWZ0OmJyb3duX3dvb2wECQBuYW1lX2hhc2ig5IW89PrREwMKAG5ldHdvcmtfaWRjT9j8CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAwAACAQAbmFtZRQAbWluZWNyYWZ0OmJyb3duX3dvb2wECQBuYW1lX2hhc2ig5IW89PrREwMKAG5ldHdvcmtfaWRjT9j8CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:red_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQrAwAACAQAbmFtZRIAbWluZWNyYWZ0OnJlZF93b29sBAkAbmFtZV9oYXNoY4TBDq+mFgUDCgBuZXR3b3JrX2lktn9lcAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQrAwAACAQAbmFtZRIAbWluZWNyYWZ0OnJlZF93b29sBAkAbmFtZV9oYXNoY4TBDq+mFgUDCgBuZXR3b3JrX2lktn9lcAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:orange_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAwAACAQAbmFtZRUAbWluZWNyYWZ0Om9yYW5nZV93b29sBAkAbmFtZV9oYXNoFstfrTZfSCgDCgBuZXR3b3JrX2lk+rqywwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAwAACAQAbmFtZRUAbWluZWNyYWZ0Om9yYW5nZV93b29sBAkAbmFtZV9oYXNoFstfrTZfSCgDCgBuZXR3b3JrX2lk+rqywwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:yellow_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAwAACAQAbmFtZRUAbWluZWNyYWZ0OnllbGxvd193b29sBAkAbmFtZV9oYXNoTFyus2RHegcDCgBuZXR3b3JrX2lkkKBhXAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAwAACAQAbmFtZRUAbWluZWNyYWZ0OnllbGxvd193b29sBAkAbmFtZV9oYXNoTFyus2RHegcDCgBuZXR3b3JrX2lkkKBhXAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:lime_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAwAACAQAbmFtZRMAbWluZWNyYWZ0OmxpbWVfd29vbAQJAG5hbWVfaGFzaNVnnzKiMxmeAwoAbmV0d29ya19pZG9b32kKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAwAACAQAbmFtZRMAbWluZWNyYWZ0OmxpbWVfd29vbAQJAG5hbWVfaGFzaNVnnzKiMxmeAwoAbmV0d29ya19pZG9b32kKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:green_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAwAACAQAbmFtZRQAbWluZWNyYWZ0OmdyZWVuX3dvb2wECQBuYW1lX2hhc2i3mElRYHIcSQMKAG5ldHdvcmtfaWSssprwCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAwAACAQAbmFtZRQAbWluZWNyYWZ0OmdyZWVuX3dvb2wECQBuYW1lX2hhc2i3mElRYHIcSQMKAG5ldHdvcmtfaWSssprwCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:cyan_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQwAwAACAQAbmFtZRMAbWluZWNyYWZ0OmN5YW5fd29vbAQJAG5hbWVfaGFzaBNDfvHn8dqFAwoAbmV0d29ya19pZK0hAbgKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQwAwAACAQAbmFtZRMAbWluZWNyYWZ0OmN5YW5fd29vbAQJAG5hbWVfaGFzaBNDfvHn8dqFAwoAbmV0d29ya19pZK0hAbgKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:light_blue_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQxAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfd29vbAQJAG5hbWVfaGFzaLWFAUfyxFPNAwoAbmV0d29ya19pZL2oEugKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQxAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfd29vbAQJAG5hbWVfaGFzaLWFAUfyxFPNAwoAbmV0d29ya19pZL2oEugKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:blue_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQyAwAACAQAbmFtZRMAbWluZWNyYWZ0OmJsdWVfd29vbAQJAG5hbWVfaGFzaLjHyxxbTWCLAwoAbmV0d29ya19pZPaLdFQKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQyAwAACAQAbmFtZRMAbWluZWNyYWZ0OmJsdWVfd29vbAQJAG5hbWVfaGFzaLjHyxxbTWCLAwoAbmV0d29ya19pZPaLdFQKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:purple_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQzAwAACAQAbmFtZRUAbWluZWNyYWZ0OnB1cnBsZV93b29sBAkAbmFtZV9oYXNojvFtqzjAf/4DCgBuZXR3b3JrX2lklqASNQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQzAwAACAQAbmFtZRUAbWluZWNyYWZ0OnB1cnBsZV93b29sBAkAbmFtZV9oYXNojvFtqzjAf/4DCgBuZXR3b3JrX2lklqASNQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:magenta_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ0AwAACAQAbmFtZRYAbWluZWNyYWZ0Om1hZ2VudGFfd29vbAQJAG5hbWVfaGFzaGuOHvf+Pd4yAwoAbmV0d29ya19pZI4UoDQKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ0AwAACAQAbmFtZRYAbWluZWNyYWZ0Om1hZ2VudGFfd29vbAQJAG5hbWVfaGFzaGuOHvf+Pd4yAwoAbmV0d29ya19pZI4UoDQKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:pink_wool", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ1AwAACAQAbmFtZRMAbWluZWNyYWZ0OnBpbmtfd29vbAQJAG5hbWVfaGFzaPiVA2pFeoFLAwoAbmV0d29ya19pZOZRO6oKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ1AwAACAQAbmFtZRMAbWluZWNyYWZ0OnBpbmtfd29vbAQJAG5hbWVfaGFzaPiVA2pFeoFLAwoAbmV0d29ya19pZOZRO6oKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:white_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAAAACAQAbmFtZRYAbWluZWNyYWZ0OndoaXRlX2NhcnBldAQJAG5hbWVfaGFzaNeMHTI1fWPXAwoAbmV0d29ya19pZEahDFcKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAAAACAQAbmFtZRYAbWluZWNyYWZ0OndoaXRlX2NhcnBldAQJAG5hbWVfaGFzaNeMHTI1fWPXAwoAbmV0d29ya19pZEahDFcKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:light_gray_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAwAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FycGV0BAkAbmFtZV9oYXNoHPw6ArBAsP0DCgBuZXR3b3JrX2lkQoAeUAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAwAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FycGV0BAkAbmFtZV9oYXNoHPw6ArBAsP0DCgBuZXR3b3JrX2lkQoAeUAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:gray_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRaAwAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXlfY2FycGV0BAkAbmFtZV9oYXNoZVR0OI+1VRADCgBuZXR3b3JrX2lkETF4WwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRaAwAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXlfY2FycGV0BAkAbmFtZV9oYXNoZVR0OI+1VRADCgBuZXR3b3JrX2lkETF4WwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:black_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJsYWNrX2NhcnBldAQJAG5hbWVfaGFzaOk7LP9NptyhAwoAbmV0d29ya19pZFjmXtIKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJsYWNrX2NhcnBldAQJAG5hbWVfaGFzaOk7LP9NptyhAwoAbmV0d29ya19pZFjmXtIKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:brown_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRfAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJyb3duX2NhcnBldAQJAG5hbWVfaGFzaNaXFyOsAvIvAwoAbmV0d29ya19pZHPjFuoKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRfAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJyb3duX2NhcnBldAQJAG5hbWVfaGFzaNaXFyOsAvIvAwoAbmV0d29ya19pZHPjFuoKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:red_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAwAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9jYXJwZXQECQBuYW1lX2hhc2i9eSKBf6SO3wMKAG5ldHdvcmtfaWQuhI/KCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAwAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9jYXJwZXQECQBuYW1lX2hhc2i9eSKBf6SO3wMKAG5ldHdvcmtfaWQuhI/KCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:orange_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAwAACAQAbmFtZRcAbWluZWNyYWZ0Om9yYW5nZV9jYXJwZXQECQBuYW1lX2hhc2hIUkO4HlAdygMKAG5ldHdvcmtfaWSyKV9OCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAwAACAQAbmFtZRcAbWluZWNyYWZ0Om9yYW5nZV9jYXJwZXQECQBuYW1lX2hhc2hIUkO4HlAdygMKAG5ldHdvcmtfaWSyKV9OCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:yellow_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAwAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19jYXJwZXQECQBuYW1lX2hhc2hSDKX3scCamwMKAG5ldHdvcmtfaWT8nq+ECgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAwAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19jYXJwZXQECQBuYW1lX2hhc2hSDKX3scCamwMKAG5ldHdvcmtfaWT8nq+ECgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:lime_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAwAACAQAbmFtZRUAbWluZWNyYWZ0OmxpbWVfY2FycGV0BAkAbmFtZV9oYXNo+6KFOpzsib4DCgBuZXR3b3JrX2lkT+DS4woGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAwAACAQAbmFtZRUAbWluZWNyYWZ0OmxpbWVfY2FycGV0BAkAbmFtZV9oYXNo+6KFOpzsib4DCgBuZXR3b3JrX2lkT+DS4woGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:green_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRgAwAACAQAbmFtZRYAbWluZWNyYWZ0OmdyZWVuX2NhcnBldAQJAG5hbWVfaGFzaCHPMP9ltqFJAwoAbmV0d29ya19pZBgwAvAKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRgAwAACAQAbmFtZRYAbWluZWNyYWZ0OmdyZWVuX2NhcnBldAQJAG5hbWVfaGFzaCHPMP9ltqFJAwoAbmV0d29ya19pZBgwAvAKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:cyan_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRcAwAACAQAbmFtZRUAbWluZWNyYWZ0OmN5YW5fY2FycGV0BAkAbmFtZV9oYXNobXf62dQBJj8DCgBuZXR3b3JrX2lkKVppLgoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRcAwAACAQAbmFtZRUAbWluZWNyYWZ0OmN5YW5fY2FycGV0BAkAbmFtZV9oYXNobXf62dQBJj8DCgBuZXR3b3JrX2lkKVppLgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:light_blue_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAwAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FycGV0BAkAbmFtZV9oYXNo20l4oktdZ3sDCgBuZXR3b3JrX2lkjdeMiwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAwAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FycGV0BAkAbmFtZV9oYXNo20l4oktdZ3sDCgBuZXR3b3JrX2lkjdeMiwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:blue_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWReAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfY2FycGV0BAkAbmFtZV9oYXNo3p3lsW0eQwsDCgBuZXR3b3JrX2lkAovdPQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWReAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfY2FycGV0BAkAbmFtZV9oYXNo3p3lsW0eQwsDCgBuZXR3b3JrX2lkAovdPQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:purple_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRdAwAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnBsZV9jYXJwZXQECQBuYW1lX2hhc2jwIA9pW/qp7QMKAG5ldHdvcmtfaWTqJqhjCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRdAwAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnBsZV9jYXJwZXQECQBuYW1lX2hhc2jwIA9pW/qp7QMKAG5ldHdvcmtfaWTqJqhjCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:magenta_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAwAACAQAbmFtZRgAbWluZWNyYWZ0Om1hZ2VudGFfY2FycGV0BAkAbmFtZV9oYXNoFXT36YNNZhMDCgBuZXR3b3JrX2lk+tqsGAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAwAACAQAbmFtZRgAbWluZWNyYWZ0Om1hZ2VudGFfY2FycGV0BAkAbmFtZV9oYXNoFXT36YNNZhMDCgBuZXR3b3JrX2lk+tqsGAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:pink_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRZAwAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfY2FycGV0BAkAbmFtZV9oYXNoHll72oqk+OoDCgBuZXR3b3JrX2lkrnBYDwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRZAwAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfY2FycGV0BAkAbmFtZV9oYXNoHll72oqk+OoDCgBuZXR3b3JrX2lkrnBYDwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:white_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTtAAAACAQAbmFtZR8AbWluZWNyYWZ0OndoaXRlX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaFUk9iXVjwV8AwoAbmV0d29ya19pZJPZY8AKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTtAAAACAQAbmFtZR8AbWluZWNyYWZ0OndoaXRlX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaFUk9iXVjwV8AwoAbmV0d29ya19pZJPZY8AKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:light_gray_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAwAACAQAbmFtZSQAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNo7EUk30hmUtYDCgBuZXR3b3JrX2lkh8jVIwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAwAACAQAbmFtZSQAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNo7EUk30hmUtYDCgBuZXR3b3JrX2lkh8jVIwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:gray_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAwAACAQAbmFtZR4AbWluZWNyYWZ0OmdyYXlfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoW77af6WihdwDCgBuZXR3b3JrX2lkSsqC1woGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAwAACAQAbmFtZR4AbWluZWNyYWZ0OmdyYXlfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoW77af6WihdwDCgBuZXR3b3JrX2lkSsqC1woGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:black_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTSAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJsYWNrX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaAfWYp0xtgcfAwoAbmV0d29ya19pZMWTC8EKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTSAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJsYWNrX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaAfWYp0xtgcfAwoAbmV0d29ya19pZMWTC8EKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:brown_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTPAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJyb3duX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaB74EeiLO46XAwoAbmV0d29ya19pZEDHKqwKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTPAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJyb3duX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaB74EeiLO46XAwoAbmV0d29ya19pZEDHKqwKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:red_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTRAwAACAQAbmFtZR0AbWluZWNyYWZ0OnJlZF9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2gjFut6Z/VH1gMKAG5ldHdvcmtfaWSvcmwYCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTRAwAACAQAbmFtZR0AbWluZWNyYWZ0OnJlZF9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2gjFut6Z/VH1gMKAG5ldHdvcmtfaWSvcmwYCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:orange_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAwAACAQAbmFtZSAAbWluZWNyYWZ0Om9yYW5nZV9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2gADDj2IJiw+gMKAG5ldHdvcmtfaWTHph0FCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAwAACAQAbmFtZSAAbWluZWNyYWZ0Om9yYW5nZV9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2gADDj2IJiw+gMKAG5ldHdvcmtfaWTHph0FCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:yellow_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTHAwAACAQAbmFtZSAAbWluZWNyYWZ0OnllbGxvd19jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2iy6qKNn3ob5wMKAG5ldHdvcmtfaWQZAI39CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTHAwAACAQAbmFtZSAAbWluZWNyYWZ0OnllbGxvd19jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2iy6qKNn3ob5wMKAG5ldHdvcmtfaWQZAI39CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:lime_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAwAACAQAbmFtZR4AbWluZWNyYWZ0OmxpbWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNo4dYIPslbXPUDCgBuZXR3b3JrX2lk2O8X0AoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAwAACAQAbmFtZR4AbWluZWNyYWZ0OmxpbWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNo4dYIPslbXPUDCgBuZXR3b3JrX2lk2O8X0AoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:green_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTQAwAACAQAbmFtZR8AbWluZWNyYWZ0OmdyZWVuX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaM/c9x2aJh3HAwoAbmV0d29ya19pZA0VfBMKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTQAwAACAQAbmFtZR8AbWluZWNyYWZ0OmdyZWVuX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaM/c9x2aJh3HAwoAbmV0d29ya19pZA0VfBMKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:cyan_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTMAwAACAQAbmFtZR4AbWluZWNyYWZ0OmN5YW5fY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNok+xKAe7XXjoDCgBuZXR3b3JrX2lkmkn6uwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTMAwAACAQAbmFtZR4AbWluZWNyYWZ0OmN5YW5fY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNok+xKAe7XXjoDCgBuZXR3b3JrX2lkmkn6uwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:light_blue_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTGAwAACAQAbmFtZSQAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNogScpIQceyAEDCgBuZXR3b3JrX2lkOmVSbgoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTGAwAACAQAbmFtZSQAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNogScpIQceyAEDCgBuZXR3b3JrX2lkOmVSbgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:blue_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTOAwAACAQAbmFtZR4AbWluZWNyYWZ0OmJsdWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoFp7mmeL86r0DCgBuZXR3b3JrX2lkS3b3RQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTOAwAACAQAbmFtZR4AbWluZWNyYWZ0OmJsdWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoFp7mmeL86r0DCgBuZXR3b3JrX2lkS3b3RQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:purple_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAwAACAQAbmFtZSAAbWluZWNyYWZ0OnB1cnBsZV9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2iYcVU04hoStwMKAG5ldHdvcmtfaWQXimEjCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAwAACAQAbmFtZSAAbWluZWNyYWZ0OnB1cnBsZV9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2iYcVU04hoStwMKAG5ldHdvcmtfaWQXimEjCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:magenta_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAwAACAQAbmFtZSEAbWluZWNyYWZ0Om1hZ2VudGFfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoy/70q6VPsWgDCgBuZXR3b3JrX2lkf9mxQwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAwAACAQAbmFtZSEAbWluZWNyYWZ0Om1hZ2VudGFfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoy/70q6VPsWgDCgBuZXR3b3JrX2lkf9mxQwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:pink_concrete_powder", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAwAACAQAbmFtZR4AbWluZWNyYWZ0OnBpbmtfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoVikSAf8DwV0DCgBuZXR3b3JrX2lku2MivwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAwAACAQAbmFtZR4AbWluZWNyYWZ0OnBpbmtfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoVikSAf8DwV0DCgBuZXR3b3JrX2lku2MivwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:white_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTsAAAACAQAbmFtZRgAbWluZWNyYWZ0OndoaXRlX2NvbmNyZXRlBAkAbmFtZV9oYXNo6zAp7lsLlvkDCgBuZXR3b3JrX2lk3MAYQAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTsAAAACAQAbmFtZRgAbWluZWNyYWZ0OndoaXRlX2NvbmNyZXRlBAkAbmFtZV9oYXNo6zAp7lsLlvkDCgBuZXR3b3JrX2lk3MAYQAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:light_gray_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AwAACAQAbmFtZR0AbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY29uY3JldGUECQBuYW1lX2hhc2hEtet5wuDIKAMKAG5ldHdvcmtfaWQISs02CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AwAACAQAbmFtZR0AbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY29uY3JldGUECQBuYW1lX2hhc2hEtet5wuDIKAMKAG5ldHdvcmtfaWQISs02CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:gray_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AwAACAQAbmFtZRcAbWluZWNyYWZ0OmdyYXlfY29uY3JldGUECQBuYW1lX2hhc2j92INnb0a83AMKAG5ldHdvcmtfaWQj8RHwCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AwAACAQAbmFtZRcAbWluZWNyYWZ0OmdyYXlfY29uY3JldGUECQBuYW1lX2hhc2j92INnb0a83AMKAG5ldHdvcmtfaWQj8RHwCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:black_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAwAACAQAbmFtZRgAbWluZWNyYWZ0OmJsYWNrX2NvbmNyZXRlBAkAbmFtZV9oYXNo2X7NDIQmZ70DCgBuZXR3b3JrX2lk2uiVDQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAwAACAQAbmFtZRgAbWluZWNyYWZ0OmJsYWNrX2NvbmNyZXRlBAkAbmFtZV9oYXNo2X7NDIQmZ70DCgBuZXR3b3JrX2lk2uiVDQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:brown_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AwAACAQAbmFtZRgAbWluZWNyYWZ0OmJyb3duX2NvbmNyZXRlBAkAbmFtZV9oYXNoeka02BwXf6oDCgBuZXR3b3JrX2lkYf+xDQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AwAACAQAbmFtZRgAbWluZWNyYWZ0OmJyb3duX2NvbmNyZXRlBAkAbmFtZV9oYXNoeka02BwXf6oDCgBuZXR3b3JrX2lkYf+xDQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:red_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAwAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZF9jb25jcmV0ZQQJAG5hbWVfaGFzaPWmNowLGubqAwoAbmV0d29ya19pZKwyx58KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAwAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZF9jb25jcmV0ZQQJAG5hbWVfaGFzaPWmNowLGubqAwoAbmV0d29ya19pZKwyx58KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:orange_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRzAwAACAQAbmFtZRkAbWluZWNyYWZ0Om9yYW5nZV9jb25jcmV0ZQQJAG5hbWVfaGFzaAgE8XmaAi6+AwoAbmV0d29ya19pZMDQNz8KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRzAwAACAQAbmFtZRkAbWluZWNyYWZ0Om9yYW5nZV9jb25jcmV0ZQQJAG5hbWVfaGFzaAgE8XmaAi6+AwoAbmV0d29ya19pZMDQNz8KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:yellow_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR2AwAACAQAbmFtZRkAbWluZWNyYWZ0OnllbGxvd19jb25jcmV0ZQQJAG5hbWVfaGFzaE6ONfJPBd0+AwoAbmV0d29ya19pZMarutwKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWR2AwAACAQAbmFtZRkAbWluZWNyYWZ0OnllbGxvd19jb25jcmV0ZQQJAG5hbWVfaGFzaE6ONfJPBd0+AwoAbmV0d29ya19pZMarutwKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:lime_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR3AwAACAQAbmFtZRcAbWluZWNyYWZ0OmxpbWVfY29uY3JldGUECQBuYW1lX2hhc2gnd8JW6wmJcAMKAG5ldHdvcmtfaWTd47aoCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWR3AwAACAQAbmFtZRcAbWluZWNyYWZ0OmxpbWVfY29uY3JldGUECQBuYW1lX2hhc2gnd8JW6wmJcAMKAG5ldHdvcmtfaWTd47aoCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:green_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR/AwAACAQAbmFtZRgAbWluZWNyYWZ0OmdyZWVuX2NvbmNyZXRlBAkAbmFtZV9oYXNokbFxRKchQZkDCgBuZXR3b3JrX2lkmhZWUgoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWR/AwAACAQAbmFtZRgAbWluZWNyYWZ0OmdyZWVuX2NvbmNyZXRlBAkAbmFtZV9oYXNokbFxRKchQZkDCgBuZXR3b3JrX2lkmhZWUgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:cyan_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AwAACAQAbmFtZRcAbWluZWNyYWZ0OmN5YW5fY29uY3JldGUECQBuYW1lX2hhc2hFRrWJ33qj1wMKAG5ldHdvcmtfaWQbi5b8CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AwAACAQAbmFtZRcAbWluZWNyYWZ0OmN5YW5fY29uY3JldGUECQBuYW1lX2hhc2hFRrWJ33qj1wMKAG5ldHdvcmtfaWQbi5b8CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:light_blue_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR1AwAACAQAbmFtZR0AbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY29uY3JldGUECQBuYW1lX2hhc2gHAe0kl0SE4AMKAG5ldHdvcmtfaWRL/GbSCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWR1AwAACAQAbmFtZR0AbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY29uY3JldGUECQBuYW1lX2hhc2gHAe0kl0SE4AMKAG5ldHdvcmtfaWRL/GbSCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:blue_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AwAACAQAbmFtZRcAbWluZWNyYWZ0OmJsdWVfY29uY3JldGUECQBuYW1lX2hhc2hiay301nnj1wMKAG5ldHdvcmtfaWRMvFXNCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AwAACAQAbmFtZRcAbWluZWNyYWZ0OmJsdWVfY29uY3JldGUECQBuYW1lX2hhc2hiay301nnj1wMKAG5ldHdvcmtfaWRMvFXNCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:purple_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR8AwAACAQAbmFtZRkAbWluZWNyYWZ0OnB1cnBsZV9jb25jcmV0ZQQJAG5hbWVfaGFzaHBHflsPIwdXAwoAbmV0d29ya19pZCyKA5gKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWR8AwAACAQAbmFtZRkAbWluZWNyYWZ0OnB1cnBsZV9jb25jcmV0ZQQJAG5hbWVfaGFzaHBHflsPIwdXAwoAbmV0d29ya19pZCyKA5gKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:magenta_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR0AwAACAQAbmFtZRoAbWluZWNyYWZ0Om1hZ2VudGFfY29uY3JldGUECQBuYW1lX2hhc2gN7LuB/OvdZAMKAG5ldHdvcmtfaWTc6ZOdCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWR0AwAACAQAbmFtZRoAbWluZWNyYWZ0Om1hZ2VudGFfY29uY3JldGUECQBuYW1lX2hhc2gN7LuB/OvdZAMKAG5ldHdvcmtfaWTc6ZOdCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:pink_concrete", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AwAACAQAbmFtZRcAbWluZWNyYWZ0OnBpbmtfY29uY3JldGUECQBuYW1lX2hhc2ii2G5F0u3SOAMKAG5ldHdvcmtfaWSszGgrCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:clay", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRSAAAACAQAbmFtZQ4AbWluZWNyYWZ0OmNsYXkECQBuYW1lX2hhc2j/S6sKXRcpzwMKAG5ldHdvcmtfaWRmsb8nCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AwAACAQAbmFtZRcAbWluZWNyYWZ0OnBpbmtfY29uY3JldGUECQBuYW1lX2hhc2ii2G5F0u3SOAMKAG5ldHdvcmtfaWSszGgrCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:hardened_clay", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAAAACAQAbmFtZRcAbWluZWNyYWZ0OmhhcmRlbmVkX2NsYXkECQBuYW1lX2hhc2jrnRwCJ0krJAMKAG5ldHdvcmtfaWRBCOrrCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAAAACAQAbmFtZRcAbWluZWNyYWZ0OmhhcmRlbmVkX2NsYXkECQBuYW1lX2hhc2jrnRwCJ0krJAMKAG5ldHdvcmtfaWRBCOrrCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:white_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSfAAAACAQAbmFtZRoAbWluZWNyYWZ0OndoaXRlX3RlcnJhY290dGEECQBuYW1lX2hhc2j3RSdgmnAIewMKAG5ldHdvcmtfaWSimKw+CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSfAAAACAQAbmFtZRoAbWluZWNyYWZ0OndoaXRlX3RlcnJhY290dGEECQBuYW1lX2hhc2j3RSdgmnAIewMKAG5ldHdvcmtfaWSimKw+CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:light_gray_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAwAACAQAbmFtZR8AbWluZWNyYWZ0OmxpZ2h0X2dyYXlfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAz1Ri3wIxomAwoAbmV0d29ya19pZH5qgOcKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAwAACAQAbmFtZR8AbWluZWNyYWZ0OmxpZ2h0X2dyYXlfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAz1Ri3wIxomAwoAbmV0d29ya19pZH5qgOcKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:gray_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAwAACAQAbmFtZRkAbWluZWNyYWZ0OmdyYXlfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAXdSLAaNZ9vAwoAbmV0d29ya19pZM1QDV0KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAwAACAQAbmFtZRkAbWluZWNyYWZ0OmdyYXlfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAXdSLAaNZ9vAwoAbmV0d29ya19pZM1QDV0KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:black_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWThAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJsYWNrX3RlcnJhY290dGEECQBuYW1lX2hhc2jxssdv5vlbpgMKAG5ldHdvcmtfaWRE3Ru/CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWThAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJsYWNrX3RlcnJhY290dGEECQBuYW1lX2hhc2jxssdv5vlbpgMKAG5ldHdvcmtfaWRE3Ru/CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:brown_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJyb3duX3RlcnJhY290dGEECQBuYW1lX2hhc2gG4kPenmOF9gMKAG5ldHdvcmtfaWQ/i0iNCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJyb3duX3RlcnJhY290dGEECQBuYW1lX2hhc2gG4kPenmOF9gMKAG5ldHdvcmtfaWQ/i0iNCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:red_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAwAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNo7fX56HXFejEDCgBuZXR3b3JrX2lk8tTF8QoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAwAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNo7fX56HXFejEDCgBuZXR3b3JrX2lk8tTF8QoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:orange_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAwAACAQAbmFtZRsAbWluZWNyYWZ0Om9yYW5nZV90ZXJyYWNvdHRhBAkAbmFtZV9oYXNo0Hjmql3sruMDCgBuZXR3b3JrX2lklmqmkAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAwAACAQAbmFtZRsAbWluZWNyYWZ0Om9yYW5nZV90ZXJyYWNvdHRhBAkAbmFtZV9oYXNo0Hjmql3sruMDCgBuZXR3b3JrX2lklmqmkAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:yellow_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAwAACAQAbmFtZRsAbWluZWNyYWZ0OnllbGxvd190ZXJyYWNvdHRhBAkAbmFtZV9oYXNoqkyKKrmA3VcDCgBuZXR3b3JrX2lkaM/orAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAwAACAQAbmFtZRsAbWluZWNyYWZ0OnllbGxvd190ZXJyYWNvdHRhBAkAbmFtZV9oYXNoqkyKKrmA3VcDCgBuZXR3b3JrX2lkaM/orAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:lime_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpbWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaANjADFOF9v7AwoAbmV0d29ya19pZJt0XsgKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpbWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaANjADFOF9v7AwoAbmV0d29ya19pZJt0XsgKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:green_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAwAACAQAbmFtZRoAbWluZWNyYWZ0OmdyZWVuX3RlcnJhY290dGEECQBuYW1lX2hhc2j5Ybq36yYwRQMKAG5ldHdvcmtfaWQ8kGdHCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAwAACAQAbmFtZRoAbWluZWNyYWZ0OmdyZWVuX3RlcnJhY290dGEECQBuYW1lX2hhc2j5Ybq36yYwRQMKAG5ldHdvcmtfaWQ8kGdHCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:cyan_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAwAACAQAbmFtZRkAbWluZWNyYWZ0OmN5YW5fdGVycmFjb3R0YQQJAG5hbWVfaGFzaN09COzMuHwAAwoAbmV0d29ya19pZIWPCzoKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAwAACAQAbmFtZRkAbWluZWNyYWZ0OmN5YW5fdGVycmFjb3R0YQQJAG5hbWVfaGFzaN09COzMuHwAAwoAbmV0d29ya19pZIWPCzoKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:light_blue_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAwAACAQAbmFtZR8AbWluZWNyYWZ0OmxpZ2h0X2JsdWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaOMytez7cOZiAwoAbmV0d29ya19pZFHK1UsKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAwAACAQAbmFtZR8AbWluZWNyYWZ0OmxpZ2h0X2JsdWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaOMytez7cOZiAwoAbmV0d29ya19pZFHK1UsKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:blue_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAwAACAQAbmFtZRkAbWluZWNyYWZ0OmJsdWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaF6inyTK5RpAAwoAbmV0d29ya19pZF5mVZIKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAwAACAQAbmFtZRkAbWluZWNyYWZ0OmJsdWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaF6inyTK5RpAAwoAbmV0d29ya19pZF5mVZIKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:purple_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAwAACAQAbmFtZRsAbWluZWNyYWZ0OnB1cnBsZV90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoKF7YG61yTbEDCgBuZXR3b3JrX2lkhtRDlwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAwAACAQAbmFtZRsAbWluZWNyYWZ0OnB1cnBsZV90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoKF7YG61yTbEDCgBuZXR3b3JrX2lkhtRDlwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:magenta_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAwAACAQAbmFtZRwAbWluZWNyYWZ0Om1hZ2VudGFfdGVycmFjb3R0YQQJAG5hbWVfaGFzaLWvtpAVtztyAwoAbmV0d29ya19pZN5SoakKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAwAACAQAbmFtZRwAbWluZWNyYWZ0Om1hZ2VudGFfdGVycmFjb3R0YQQJAG5hbWVfaGFzaLWvtpAVtztyAwoAbmV0d29ya19pZN5SoakKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:pink_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAwAACAQAbmFtZRkAbWluZWNyYWZ0OnBpbmtfdGVycmFjb3R0YQQJAG5hbWVfaGFzaJ7mzvyzSQZTAwoAbmV0d29ya19pZDJWe4YKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAwAACAQAbmFtZRkAbWluZWNyYWZ0OnBpbmtfdGVycmFjb3R0YQQJAG5hbWVfaGFzaJ7mzvyzSQZTAwoAbmV0d29ya19pZDJWe4YKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:white_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAAAACAQAbmFtZSEAbWluZWNyYWZ0OndoaXRlX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoiVzCdoHAJo0DCgBuZXR3b3JrX2lkIlj9AAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAAAACAQAbmFtZSEAbWluZWNyYWZ0OndoaXRlX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoiVzCdoHAJo0DCgBuZXR3b3JrX2lkIlj9AAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:silver_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAAAACAQAbmFtZSIAbWluZWNyYWZ0OnNpbHZlcl9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAVsA0CnhzA4AwoAbmV0d29ya19pZPnxtJEKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAAAACAQAbmFtZSIAbWluZWNyYWZ0OnNpbHZlcl9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAVsA0CnhzA4AwoAbmV0d29ya19pZPnxtJEKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:gray_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAAAACAQAbmFtZSAAbWluZWNyYWZ0OmdyYXlfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2jvLZt9u/lF/AMKAG5ldHdvcmtfaWQVU8eFCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAAAACAQAbmFtZSAAbWluZWNyYWZ0OmdyYXlfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2jvLZt9u/lF/AMKAG5ldHdvcmtfaWQVU8eFCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:black_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAAAACAQAbmFtZSEAbWluZWNyYWZ0OmJsYWNrX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoe8I4xAXbO5UDCgBuZXR3b3JrX2lk2Icb9AoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAAAACAQAbmFtZSEAbWluZWNyYWZ0OmJsYWNrX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoe8I4xAXbO5UDCgBuZXR3b3JrX2lk2Icb9AoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:brown_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWToAAAACAQAbmFtZSEAbWluZWNyYWZ0OmJyb3duX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoSiNZOobbpjoDCgBuZXR3b3JrX2lkJy0jwgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWToAAAACAQAbmFtZSEAbWluZWNyYWZ0OmJyb3duX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoSiNZOobbpjoDCgBuZXR3b3JrX2lkJy0jwgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:red_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAAAACAQAbmFtZR8AbWluZWNyYWZ0OnJlZF9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaBdWFGLmCLFVAwoAbmV0d29ya19pZMYBJSEKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAAAACAQAbmFtZR8AbWluZWNyYWZ0OnJlZF9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaBdWFGLmCLFVAwoAbmV0d29ya19pZMYBJSEKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:orange_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAAAACAQAbmFtZSIAbWluZWNyYWZ0Om9yYW5nZV9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaMyJMrnPr7szAwoAbmV0d29ya19pZN6+7TUKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAAAACAQAbmFtZSIAbWluZWNyYWZ0Om9yYW5nZV9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaMyJMrnPr7szAwoAbmV0d29ya19pZN6+7TUKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:yellow_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAAAACAQAbmFtZSIAbWluZWNyYWZ0OnllbGxvd19nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaN6NaIhf6m0uAwoAbmV0d29ya19pZKRHXeoKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAAAACAQAbmFtZSIAbWluZWNyYWZ0OnllbGxvd19nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaN6NaIhf6m0uAwoAbmV0d29ya19pZKRHXeoKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:lime_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWThAAAACAQAbmFtZSAAbWluZWNyYWZ0OmxpbWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2iF3E68/rB2EAMKAG5ldHdvcmtfaWSP7qQWCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWThAAAACAQAbmFtZSAAbWluZWNyYWZ0OmxpbWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2iF3E68/rB2EAMKAG5ldHdvcmtfaWSP7qQWCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:green_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAAAACAQAbmFtZSEAbWluZWNyYWZ0OmdyZWVuX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNow5mo8aQDFboDCgBuZXR3b3JrX2lkoF11kgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAAAACAQAbmFtZSEAbWluZWNyYWZ0OmdyZWVuX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNow5mo8aQDFboDCgBuZXR3b3JrX2lkoF11kgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:cyan_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAAAACAQAbmFtZSAAbWluZWNyYWZ0OmN5YW5fZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2gnNB+cCFRJhwMKAG5ldHdvcmtfaWT9buMtCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAAAACAQAbmFtZSAAbWluZWNyYWZ0OmN5YW5fZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2gnNB+cCFRJhwMKAG5ldHdvcmtfaWT9buMtCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:light_blue_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAAAACAQAbmFtZSYAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2gladnCDBKCigMKAG5ldHdvcmtfaWS5CszFCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAAAACAQAbmFtZSYAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2gladnCDBKCigMKAG5ldHdvcmtfaWS5CszFCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:blue_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAAAACAQAbmFtZSAAbWluZWNyYWZ0OmJsdWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2giOZK+2nB1igMKAG5ldHdvcmtfaWR+e22CCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAAAACAQAbmFtZSAAbWluZWNyYWZ0OmJsdWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2giOZK+2nB1igMKAG5ldHdvcmtfaWR+e22CCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:purple_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAAAACAQAbmFtZSIAbWluZWNyYWZ0OnB1cnBsZV9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaIQU03txeAfHAwoAbmV0d29ya19pZLKbSE4KBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAAAACAQAbmFtZSIAbWluZWNyYWZ0OnB1cnBsZV9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaIQU03txeAfHAwoAbmV0d29ya19pZLKbSE4KBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:magenta_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAAAACAQAbmFtZSMAbWluZWNyYWZ0Om1hZ2VudGFfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2i/SNqDJbfjMgMKAG5ldHdvcmtfaWQKf9UvCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAAAACAQAbmFtZSMAbWluZWNyYWZ0Om1hZ2VudGFfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2i/SNqDJbfjMgMKAG5ldHdvcmtfaWQKf9UvCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:pink_glazed_terracotta", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAAAACAQAbmFtZSAAbWluZWNyYWZ0OnBpbmtfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2hik8DVt4g+twMKAG5ldHdvcmtfaWTKzav2CgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAAAACAQAbmFtZSAAbWluZWNyYWZ0OnBpbmtfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2hik8DVt4g+twMKAG5ldHdvcmtfaWTKzav2CgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:purpur_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAAAACAQAbmFtZRYAbWluZWNyYWZ0OnB1cnB1cl9ibG9jawQJAG5hbWVfaGFzaAgLwnUZGlzsAwoAbmV0d29ya19pZGCZ+4UKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAAAACAQAbmFtZRYAbWluZWNyYWZ0OnB1cnB1cl9ibG9jawQJAG5hbWVfaGFzaAgLwnUZGlzsAwoAbmV0d29ya19pZGCZ+4UKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:purpur_pillar", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS2BAAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnB1cl9waWxsYXIECQBuYW1lX2hhc2iFcSsdykO+jgMKAG5ldHdvcmtfaWQe0+geCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWS2BAAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnB1cl9waWxsYXIECQBuYW1lX2hhc2iFcSsdykO+jgMKAG5ldHdvcmtfaWQe0+geCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:packed_mud", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAgAACAQAbmFtZRQAbWluZWNyYWZ0OnBhY2tlZF9tdWQECQBuYW1lX2hhc2gHOMa121h4FgMKAG5ldHdvcmtfaWTUb6LyCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAgAACAQAbmFtZRQAbWluZWNyYWZ0OnBhY2tlZF9tdWQECQBuYW1lX2hhc2gHOMa121h4FgMKAG5ldHdvcmtfaWTUb6LyCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:mud_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAgAACAQAbmFtZRQAbWluZWNyYWZ0Om11ZF9icmlja3MECQBuYW1lX2hhc2iDL/SVl/PewQMKAG5ldHdvcmtfaWSkBjaDCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAgAACAQAbmFtZRQAbWluZWNyYWZ0Om11ZF9icmlja3MECQBuYW1lX2hhc2iDL/SVl/PewQMKAG5ldHdvcmtfaWSkBjaDCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:nether_wart_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAAAACAQAbmFtZRsAbWluZWNyYWZ0Om5ldGhlcl93YXJ0X2Jsb2NrBAkAbmFtZV9oYXNo9XGS4GNnlV4DCgBuZXR3b3JrX2lkh3apIgoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAAAACAQAbmFtZRsAbWluZWNyYWZ0Om5ldGhlcl93YXJ0X2Jsb2NrBAkAbmFtZV9oYXNo9XGS4GNnlV4DCgBuZXR3b3JrX2lkh3apIgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:warped_wart_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAQAACAQAbmFtZRsAbWluZWNyYWZ0OndhcnBlZF93YXJ0X2Jsb2NrBAkAbmFtZV9oYXNo9IqDS9yUPJoDCgBuZXR3b3JrX2lkMpKAbAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAQAACAQAbmFtZRsAbWluZWNyYWZ0OndhcnBlZF93YXJ0X2Jsb2NrBAkAbmFtZV9oYXNo9IqDS9yUPJoDCgBuZXR3b3JrX2lkMpKAbAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:shroomlight", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAQAACAQAbmFtZRUAbWluZWNyYWZ0OnNocm9vbWxpZ2h0BAkAbmFtZV9oYXNoZHCHcHX/HYADCgBuZXR3b3JrX2lkLG2JiwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAQAACAQAbmFtZRUAbWluZWNyYWZ0OnNocm9vbWxpZ2h0BAkAbmFtZV9oYXNoZHCHcHX/HYADCgBuZXR3b3JrX2lkLG2JiwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:crimson_nylium", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fbnlsaXVtBAkAbmFtZV9oYXNoOr6DJYW2bFYDCgBuZXR3b3JrX2lkuWpRDgoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fbnlsaXVtBAkAbmFtZV9oYXNoOr6DJYW2bFYDCgBuZXR3b3JrX2lkuWpRDgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:warped_nylium", - "block_state_b64": "CgAAAwgAYmxvY2tfaWToAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9ueWxpdW0ECQBuYW1lX2hhc2g0Zf89cfr3rwMKAG5ldHdvcmtfaWSu/kekCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWToAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9ueWxpdW0ECQBuYW1lX2hhc2g0Zf89cfr3rwMKAG5ldHdvcmtfaWSu/kekCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:netherrack", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAAAACAQAbmFtZRQAbWluZWNyYWZ0Om5ldGhlcnJhY2sECQBuYW1lX2hhc2i/r5ZyRsvPyQMKAG5ldHdvcmtfaWTAiTOACgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:basalt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhc2FsdAQJAG5hbWVfaGFzaH+UQO2yWodiAwoAbmV0d29ya19pZBPNSV4KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:polished_basalt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAQAACAQAbmFtZRkAbWluZWNyYWZ0OnBvbGlzaGVkX2Jhc2FsdAQJAG5hbWVfaGFzaMS+L0gMnRcBAwoAbmV0d29ya19pZF+/mHwKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:smooth_basalt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AgAACAQAbmFtZRcAbWluZWNyYWZ0OnNtb290aF9iYXNhbHQECQBuYW1lX2hhc2jKPUdz89kuNAMKAG5ldHdvcmtfaWTkb/oVCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAAAACAQAbmFtZRQAbWluZWNyYWZ0Om5ldGhlcnJhY2sECQBuYW1lX2hhc2i/r5ZyRsvPyQMKAG5ldHdvcmtfaWTAiTOACgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:soul_soil", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAQAACAQAbmFtZRMAbWluZWNyYWZ0OnNvdWxfc29pbAQJAG5hbWVfaGFzaC1/87ccutuTAwoAbmV0d29ya19pZKc63SMKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:dirt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAAAACAQAbmFtZQ4AbWluZWNyYWZ0OmRpcnQECQBuYW1lX2hhc2hXp6jnXAe+kQMKAG5ldHdvcmtfaWSG706CCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:coarse_dirt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTBBAAACAQAbmFtZRUAbWluZWNyYWZ0OmNvYXJzZV9kaXJ0BAkAbmFtZV9oYXNosd+cah7WSmoDCgBuZXR3b3JrX2lkgS5RcAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:farmland", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AAAACAQAbmFtZRIAbWluZWNyYWZ0OmZhcm1sYW5kBAkAbmFtZV9oYXNoxyQ5ag7LolADCgBuZXR3b3JrX2lkX618FQoGAHN0YXRlcwMSAG1vaXN0dXJpemVkX2Ftb3VudAAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAQAACAQAbmFtZRMAbWluZWNyYWZ0OnNvdWxfc29pbAQJAG5hbWVfaGFzaC1/87ccutuTAwoAbmV0d29ya19pZKc63SMKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:grass_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAAAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXNzX2Jsb2NrBAkAbmFtZV9oYXNojPyGp3/CSZwDCgBuZXR3b3JrX2lktCgx3goGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:grass_path", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTGAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdyYXNzX3BhdGgECQBuYW1lX2hhc2i0/KZV8Qsy+gMKAG5ldHdvcmtfaWT7CcdzCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAAAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXNzX2Jsb2NrBAkAbmFtZV9oYXNojPyGp3/CSZwDCgBuZXR3b3JrX2lktCgx3goGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:podzol", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTzAAAACAQAbmFtZRAAbWluZWNyYWZ0OnBvZHpvbAQJAG5hbWVfaGFzaBzqokRjH4Z1AwoAbmV0d29ya19pZPPS/GUKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTzAAAACAQAbmFtZRAAbWluZWNyYWZ0OnBvZHpvbAQJAG5hbWVfaGFzaBzqokRjH4Z1AwoAbmV0d29ya19pZPPS/GUKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:mycelium", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAAAACAQAbmFtZRIAbWluZWNyYWZ0Om15Y2VsaXVtBAkAbmFtZV9oYXNojTN09cKickIDCgBuZXR3b3JrX2lkLNPxXQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAAAACAQAbmFtZRIAbWluZWNyYWZ0Om15Y2VsaXVtBAkAbmFtZV9oYXNojTN09cKickIDCgBuZXR3b3JrX2lkLNPxXQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:grass_path", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTGAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdyYXNzX3BhdGgECQBuYW1lX2hhc2i0/KZV8Qsy+gMKAG5ldHdvcmtfaWT7CcdzCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:dirt", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAAAACAQAbmFtZQ4AbWluZWNyYWZ0OmRpcnQECQBuYW1lX2hhc2hXp6jnXAe+kQMKAG5ldHdvcmtfaWSG706CCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:coarse_dirt", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTBBAAACAQAbmFtZRUAbWluZWNyYWZ0OmNvYXJzZV9kaXJ0BAkAbmFtZV9oYXNosd+cah7WSmoDCgBuZXR3b3JrX2lkgS5RcAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:dirt_with_roots", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ9AgAACAQAbmFtZRkAbWluZWNyYWZ0OmRpcnRfd2l0aF9yb290cwQJAG5hbWVfaGFzaLCNDYPviDCIAwoAbmV0d29ya19pZNCkwzoKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:farmland", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AAAACAQAbmFtZRIAbWluZWNyYWZ0OmZhcm1sYW5kBAkAbmFtZV9oYXNoxyQ5ag7LolADCgBuZXR3b3JrX2lkX618FQoGAHN0YXRlcwMSAG1vaXN0dXJpemVkX2Ftb3VudAAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:mud", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAgAACAQAbmFtZQ0AbWluZWNyYWZ0Om11ZAQJAG5hbWVfaGFzaPb/3P+uLy+9AwoAbmV0d29ya19pZPIUlUkKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAgAACAQAbmFtZQ0AbWluZWNyYWZ0Om11ZAQJAG5hbWVfaGFzaPb/3P+uLy+9AwoAbmV0d29ya19pZPIUlUkKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { - "id": "minecraft:stone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lkIQ4xgAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "id": "minecraft:clay", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRSAAAACAQAbmFtZQ4AbWluZWNyYWZ0OmNsYXkECQBuYW1lX2hhc2j/S6sKXRcpzwMKAG5ldHdvcmtfaWRmsb8nCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:iron_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAAAACAQAbmFtZRIAbWluZWNyYWZ0Omlyb25fb3JlBAkAbmFtZV9oYXNoS7BYtLnfx3gDCgBuZXR3b3JrX2lk3loneQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAAAACAQAbmFtZRIAbWluZWNyYWZ0Omlyb25fb3JlBAkAbmFtZV9oYXNoS7BYtLnfx3gDCgBuZXR3b3JrX2lk3loneQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:gold_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAAAACAQAbmFtZRIAbWluZWNyYWZ0OmdvbGRfb3JlBAkAbmFtZV9oYXNoC5Y+DUGXLC4DCgBuZXR3b3JrX2lkNhvMfwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAAAACAQAbmFtZRIAbWluZWNyYWZ0OmdvbGRfb3JlBAkAbmFtZV9oYXNoC5Y+DUGXLC4DCgBuZXR3b3JrX2lkNhvMfwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:diamond_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4AAAACAQAbmFtZRUAbWluZWNyYWZ0OmRpYW1vbmRfb3JlBAkAbmFtZV9oYXNokUOJ2wZZrGQDCgBuZXR3b3JrX2lk/dChVAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4AAAACAQAbmFtZRUAbWluZWNyYWZ0OmRpYW1vbmRfb3JlBAkAbmFtZV9oYXNokUOJ2wZZrGQDCgBuZXR3b3JrX2lk/dChVAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:lapis_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQVAAAACAQAbmFtZRMAbWluZWNyYWZ0OmxhcGlzX29yZQQJAG5hbWVfaGFzaMrmrUrSzb7qAwoAbmV0d29ya19pZMg+qK4KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQVAAAACAQAbmFtZRMAbWluZWNyYWZ0OmxhcGlzX29yZQQJAG5hbWVfaGFzaMrmrUrSzb7qAwoAbmV0d29ya19pZMg+qK4KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:redstone_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAAAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZHN0b25lX29yZQQJAG5hbWVfaGFzaFHVnp8Wc4JbAwoAbmV0d29ya19pZKDYvQoKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAAAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZHN0b25lX29yZQQJAG5hbWVfaGFzaFHVnp8Wc4JbAwoAbmV0d29ya19pZKDYvQoKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:coal_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAAAACAQAbmFtZRIAbWluZWNyYWZ0OmNvYWxfb3JlBAkAbmFtZV9oYXNo1OjA+Iuy51oDCgBuZXR3b3JrX2lk+R/aKAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAAAACAQAbmFtZRIAbWluZWNyYWZ0OmNvYWxfb3JlBAkAbmFtZV9oYXNo1OjA+Iuy51oDCgBuZXR3b3JrX2lk+R/aKAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:copper_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2AgAACAQAbmFtZRQAbWluZWNyYWZ0OmNvcHBlcl9vcmUECQBuYW1lX2hhc2iSZduSntOzOwMKAG5ldHdvcmtfaWQtIuCnCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2AgAACAQAbmFtZRQAbWluZWNyYWZ0OmNvcHBlcl9vcmUECQBuYW1lX2hhc2iSZduSntOzOwMKAG5ldHdvcmtfaWQtIuCnCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:emerald_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAAAACAQAbmFtZRUAbWluZWNyYWZ0OmVtZXJhbGRfb3JlBAkAbmFtZV9oYXNoJTovr+VgINsDCgBuZXR3b3JrX2lknbkqCgoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAAAACAQAbmFtZRUAbWluZWNyYWZ0OmVtZXJhbGRfb3JlBAkAbmFtZV9oYXNoJTovr+VgINsDCgBuZXR3b3JrX2lknbkqCgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:quartz_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAAAACAQAbmFtZRQAbWluZWNyYWZ0OnF1YXJ0el9vcmUECQBuYW1lX2hhc2g0yNHLMK9TaQMKAG5ldHdvcmtfaWSzN7nzCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAAAACAQAbmFtZRQAbWluZWNyYWZ0OnF1YXJ0el9vcmUECQBuYW1lX2hhc2g0yNHLMK9TaQMKAG5ldHdvcmtfaWSzN7nzCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:nether_gold_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQfAgAACAQAbmFtZRkAbWluZWNyYWZ0Om5ldGhlcl9nb2xkX29yZQQJAG5hbWVfaGFzaEJZ7segIBgBAwoAbmV0d29ya19pZNI9pDgKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQfAgAACAQAbmFtZRkAbWluZWNyYWZ0Om5ldGhlcl9nb2xkX29yZQQJAG5hbWVfaGFzaEJZ7segIBgBAwoAbmV0d29ya19pZNI9pDgKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:ancient_debris", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAgAACAQAbmFtZRgAbWluZWNyYWZ0OmFuY2llbnRfZGVicmlzBAkAbmFtZV9oYXNoNrbxMc9AwKcDCgBuZXR3b3JrX2lkrSNjEAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAgAACAQAbmFtZRgAbWluZWNyYWZ0OmFuY2llbnRfZGVicmlzBAkAbmFtZV9oYXNoNrbxMc9AwKcDCgBuZXR3b3JrX2lkrSNjEAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:deepslate_iron_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9pcm9uX29yZQQJAG5hbWVfaGFzaB/fDL9pgvXXAwoAbmV0d29ya19pZFA0bz4KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9pcm9uX29yZQQJAG5hbWVfaGFzaB/fDL9pgvXXAwoAbmV0d29ya19pZFA0bz4KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:deepslate_gold_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9nb2xkX29yZQQJAG5hbWVfaGFzaF9G7WYhKFinAwoAbmV0d29ya19pZHQTfBUKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9nb2xkX29yZQQJAG5hbWVfaGFzaF9G7WYhKFinAwoAbmV0d29ya19pZHQTfBUKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:deepslate_diamond_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV9kaWFtb25kX29yZQQJAG5hbWVfaGFzaEUH5USh+iD3AwoAbmV0d29ya19pZHP6VzAKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV9kaWFtb25kX29yZQQJAG5hbWVfaGFzaEUH5USh+iD3AwoAbmV0d29ya19pZHP6VzAKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:deepslate_lapis_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV9sYXBpc19vcmUECQBuYW1lX2hhc2j+yFxU/KZs1gMKAG5ldHdvcmtfaWRKINzICgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV9sYXBpc19vcmUECQBuYW1lX2hhc2j+yFxU/KZs1gMKAG5ldHdvcmtfaWRKINzICgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:deepslate_redstone_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAgAACAQAbmFtZSAAbWluZWNyYWZ0OmRlZXBzbGF0ZV9yZWRzdG9uZV9vcmUECQBuYW1lX2hhc2iVgM3wWWD6ugMKAG5ldHdvcmtfaWReBdYRCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAgAACAQAbmFtZSAAbWluZWNyYWZ0OmRlZXBzbGF0ZV9yZWRzdG9uZV9vcmUECQBuYW1lX2hhc2iVgM3wWWD6ugMKAG5ldHdvcmtfaWReBdYRCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:deepslate_emerald_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSWAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV9lbWVyYWxkX29yZQQJAG5hbWVfaGFzaNlfo5HTwS6wAwoAbmV0d29ya19pZNeie6sKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSWAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV9lbWVyYWxkX29yZQQJAG5hbWVfaGFzaNlfo5HTwS6wAwoAbmV0d29ya19pZNeie6sKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:deepslate_coal_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSVAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9jb2FsX29yZQQJAG5hbWVfaGFzaIjikmcbRrPPAwoAbmV0d29ya19pZD9TiygKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSVAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9jb2FsX29yZQQJAG5hbWVfaGFzaIjikmcbRrPPAwoAbmV0d29ya19pZD9TiygKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:deepslate_copper_ore", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9jb3BwZXJfb3JlBAkAbmFtZV9oYXNottjV4Ev5LAQDCgBuZXR3b3JrX2lkP23rgQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9jb3BwZXJfb3JlBAkAbmFtZV9oYXNottjV4Ev5LAQDCgBuZXR3b3JrX2lkP23rgQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { - "id": "minecraft:gravel", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAAAACAQAbmFtZRAAbWluZWNyYWZ0OmdyYXZlbAQJAG5hbWVfaGFzaOFxz8XJd2r/AwoAbmV0d29ya19pZBpfI1sKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "id": "minecraft:stone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lkIQ4xgAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:granite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAwAACAQAbmFtZREAbWluZWNyYWZ0OmdyYW5pdGUECQBuYW1lX2hhc2iq+Dur2pw4AwMKAG5ldHdvcmtfaWT2NMfJCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAwAACAQAbmFtZREAbWluZWNyYWZ0OmdyYW5pdGUECQBuYW1lX2hhc2iq+Dur2pw4AwMKAG5ldHdvcmtfaWT2NMfJCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:diorite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAwAACAQAbmFtZREAbWluZWNyYWZ0OmRpb3JpdGUECQBuYW1lX2hhc2iaFsq2iinZBQMKAG5ldHdvcmtfaWQqGE6XCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAwAACAQAbmFtZREAbWluZWNyYWZ0OmRpb3JpdGUECQBuYW1lX2hhc2iaFsq2iinZBQMKAG5ldHdvcmtfaWQqGE6XCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:andesite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAwAACAQAbmFtZRIAbWluZWNyYWZ0OmFuZGVzaXRlBAkAbmFtZV9oYXNosaLIEnQQoSYDCgBuZXR3b3JrX2lkEApRZAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAwAACAQAbmFtZRIAbWluZWNyYWZ0OmFuZGVzaXRlBAkAbmFtZV9oYXNosaLIEnQQoSYDCgBuZXR3b3JrX2lkEApRZAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:blackstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAgAACAQAbmFtZRQAbWluZWNyYWZ0OmJsYWNrc3RvbmUECQBuYW1lX2hhc2iMFYziD80D6QMKAG5ldHdvcmtfaWSrUryHCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAgAACAQAbmFtZRQAbWluZWNyYWZ0OmJsYWNrc3RvbmUECQBuYW1lX2hhc2iMFYziD80D6QMKAG5ldHdvcmtfaWSrUryHCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AgAACAQAbmFtZRMAbWluZWNyYWZ0OmRlZXBzbGF0ZQQJAG5hbWVfaGFzaKX5pAblxz8TAwoAbmV0d29ya19pZOJoQjsKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AgAACAQAbmFtZRMAbWluZWNyYWZ0OmRlZXBzbGF0ZQQJAG5hbWVfaGFzaKX5pAblxz8TAwoAbmV0d29ya19pZOJoQjsKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:tuff", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAgAACAQAbmFtZQ4AbWluZWNyYWZ0OnR1ZmYECQBuYW1lX2hhc2h1Rwc1XYsBGwMKAG5ldHdvcmtfaWRwQGn0CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:basalt", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhc2FsdAQJAG5hbWVfaGFzaH+UQO2yWodiAwoAbmV0d29ya19pZBPNSV4KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:polished_granite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWROAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGUECQBuYW1lX2hhc2iLiEfys8pFIAMKAG5ldHdvcmtfaWTCxxcHCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWROAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGUECQBuYW1lX2hhc2iLiEfys8pFIAMKAG5ldHdvcmtfaWTCxxcHCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:polished_diorite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGUECQBuYW1lX2hhc2hTxY4fKmNmlAMKAG5ldHdvcmtfaWTmtjdRCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGUECQBuYW1lX2hhc2hTxY4fKmNmlAMKAG5ldHdvcmtfaWTmtjdRCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:polished_andesite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRSAwAACAQAbmFtZRsAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlBAkAbmFtZV9oYXNovl28uFk4HuQDCgBuZXR3b3JrX2lklFjuCwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRSAwAACAQAbmFtZRsAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlBAkAbmFtZV9oYXNovl28uFk4HuQDCgBuZXR3b3JrX2lklFjuCwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:polished_blackstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQiAgAACAQAbmFtZR0AbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmUECQBuYW1lX2hhc2jT9fHCl6vWQQMKAG5ldHdvcmtfaWR/Ho6oCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQiAgAACAQAbmFtZR0AbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmUECQBuYW1lX2hhc2jT9fHCl6vWQQMKAG5ldHdvcmtfaWR/Ho6oCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:polished_deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AgAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaHC1edoaWF3uAwoAbmV0d29ya19pZCPeQsEKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AgAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaHC1edoaWF3uAwoAbmV0d29ya19pZCPeQsEKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:polished_tuff", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAwAACAQAbmFtZRcAbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmYECQBuYW1lX2hhc2hyaLe/KEVZ0gMKAG5ldHdvcmtfaWTcX3NrCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:polished_basalt", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAQAACAQAbmFtZRkAbWluZWNyYWZ0OnBvbGlzaGVkX2Jhc2FsdAQJAG5hbWVfaGFzaMS+L0gMnRcBAwoAbmV0d29ya19pZF+/mHwKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:smooth_basalt", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AgAACAQAbmFtZRcAbWluZWNyYWZ0OnNtb290aF9iYXNhbHQECQBuYW1lX2hhc2jKPUdz89kuNAMKAG5ldHdvcmtfaWTkb/oVCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:gravel", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAAAACAQAbmFtZRAAbWluZWNyYWZ0OmdyYXZlbAQJAG5hbWVfaGFzaOFxz8XJd2r/AwoAbmV0d29ya19pZBpfI1sKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:sand", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQMAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnNhbmQECQBuYW1lX2hhc2i6lthXXbAyWAMKAG5ldHdvcmtfaWRjeUMICgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQMAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnNhbmQECQBuYW1lX2hhc2i6lthXXbAyWAMKAG5ldHdvcmtfaWRjeUMICgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:red_sand", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS0BAAACAQAbmFtZRIAbWluZWNyYWZ0OnJlZF9zYW5kBAkAbmFtZV9oYXNoCiarI69JQCkDCgBuZXR3b3JrX2lkU8UD/AoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWS0BAAACAQAbmFtZRIAbWluZWNyYWZ0OnJlZF9zYW5kBAkAbmFtZV9oYXNoCiarI69JQCkDCgBuZXR3b3JrX2lkU8UD/AoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:cactus", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAAAACAQAbmFtZRAAbWluZWNyYWZ0OmNhY3R1cwQJAG5hbWVfaGFzaCG9zL0N4wvGAwoAbmV0d29ya19pZDeCERAKBgBzdGF0ZXMDAwBhZ2UAAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAAAACAQAbmFtZRAAbWluZWNyYWZ0OmNhY3R1cwQJAG5hbWVfaGFzaCG9zL0N4wvGAwoAbmV0d29ya19pZDeCERAKBgBzdGF0ZXMDAwBhZ2UAAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:oak_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAAAACAQAbmFtZREAbWluZWNyYWZ0Om9ha19sb2cECQBuYW1lX2hhc2ho6TS+K7PZFQMKAG5ldHdvcmtfaWQjfjoxCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAAAACAQAbmFtZREAbWluZWNyYWZ0Om9ha19sb2cECQBuYW1lX2hhc2ho6TS+K7PZFQMKAG5ldHdvcmtfaWQjfjoxCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:stripped_oak_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQJAQAACAQAbmFtZRoAbWluZWNyYWZ0OnN0cmlwcGVkX29ha19sb2cECQBuYW1lX2hhc2h8dqh+OOHU4wMKAG5ldHdvcmtfaWSYKjdrCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQJAQAACAQAbmFtZRoAbWluZWNyYWZ0OnN0cmlwcGVkX29ha19sb2cECQBuYW1lX2hhc2h8dqh+OOHU4wMKAG5ldHdvcmtfaWSYKjdrCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:spruce_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4AwAACAQAbmFtZRQAbWluZWNyYWZ0OnNwcnVjZV9sb2cECQBuYW1lX2hhc2hZ03qaLoF3WgMKAG5ldHdvcmtfaWRlFD8eCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4AwAACAQAbmFtZRQAbWluZWNyYWZ0OnNwcnVjZV9sb2cECQBuYW1lX2hhc2hZ03qaLoF3WgMKAG5ldHdvcmtfaWRlFD8eCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:stripped_spruce_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX3NwcnVjZV9sb2cECQBuYW1lX2hhc2iNrhKjS5IyrgMKAG5ldHdvcmtfaWRQcEC3CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX3NwcnVjZV9sb2cECQBuYW1lX2hhc2iNrhKjS5IyrgMKAG5ldHdvcmtfaWRQcEC3CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:birch_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5AwAACAQAbmFtZRMAbWluZWNyYWZ0OmJpcmNoX2xvZwQJAG5hbWVfaGFzaBUzT3NxsZAnAwoAbmV0d29ya19pZBKN3VQKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5AwAACAQAbmFtZRMAbWluZWNyYWZ0OmJpcmNoX2xvZwQJAG5hbWVfaGFzaBUzT3NxsZAnAwoAbmV0d29ya19pZBKN3VQKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:stripped_birch_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAQAACAQAbmFtZRwAbWluZWNyYWZ0OnN0cmlwcGVkX2JpcmNoX2xvZwQJAG5hbWVfaGFzaCFKS4AeuSidAwoAbmV0d29ya19pZN0IONIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAQAACAQAbmFtZRwAbWluZWNyYWZ0OnN0cmlwcGVkX2JpcmNoX2xvZwQJAG5hbWVfaGFzaCFKS4AeuSidAwoAbmV0d29ya19pZN0IONIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:jungle_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6AwAACAQAbmFtZRQAbWluZWNyYWZ0Omp1bmdsZV9sb2cECQBuYW1lX2hhc2gkwW0KNulqDgMKAG5ldHdvcmtfaWQaziU/CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6AwAACAQAbmFtZRQAbWluZWNyYWZ0Omp1bmdsZV9sb2cECQBuYW1lX2hhc2gkwW0KNulqDgMKAG5ldHdvcmtfaWQaziU/CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:stripped_jungle_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2p1bmdsZV9sb2cECQBuYW1lX2hhc2hAwMsgOk02JAMKAG5ldHdvcmtfaWQvls0eCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2p1bmdsZV9sb2cECQBuYW1lX2hhc2hAwMsgOk02JAMKAG5ldHdvcmtfaWQvls0eCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:acacia_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAAAACAQAbmFtZRQAbWluZWNyYWZ0OmFjYWNpYV9sb2cECQBuYW1lX2hhc2iV48VpYhjoYQMKAG5ldHdvcmtfaWRxEqe0CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAAAACAQAbmFtZRQAbWluZWNyYWZ0OmFjYWNpYV9sb2cECQBuYW1lX2hhc2iV48VpYhjoYQMKAG5ldHdvcmtfaWRxEqe0CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:stripped_acacia_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2FjYWNpYV9sb2cECQBuYW1lX2hhc2hJb0lQqnEqlgMKAG5ldHdvcmtfaWRg3IdRCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2FjYWNpYV9sb2cECQBuYW1lX2hhc2hJb0lQqnEqlgMKAG5ldHdvcmtfaWRg3IdRCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:dark_oak_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ7AwAACAQAbmFtZRYAbWluZWNyYWZ0OmRhcmtfb2FrX2xvZwQJAG5hbWVfaGFzaIWfVRd0XUo3AwoAbmV0d29ya19pZPMM7LYKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ7AwAACAQAbmFtZRYAbWluZWNyYWZ0OmRhcmtfb2FrX2xvZwQJAG5hbWVfaGFzaIWfVRd0XUo3AwoAbmV0d29ya19pZPMM7LYKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:stripped_dark_oak_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQIAQAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2Rhcmtfb2FrX2xvZwQJAG5hbWVfaGFzaPFTdxRdPwkOAwoAbmV0d29ya19pZDIzenIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQIAQAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2Rhcmtfb2FrX2xvZwQJAG5hbWVfaGFzaPFTdxRdPwkOAwoAbmV0d29ya19pZDIzenIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:mangrove_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAgAACAQAbmFtZRYAbWluZWNyYWZ0Om1hbmdyb3ZlX2xvZwQJAG5hbWVfaGFzaHZe6DzPZBobAwoAbmV0d29ya19pZG6DuYkKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAgAACAQAbmFtZRYAbWluZWNyYWZ0Om1hbmdyb3ZlX2xvZwQJAG5hbWVfaGFzaHZe6DzPZBobAwoAbmV0d29ya19pZG6DuYkKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:stripped_mangrove_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX21hbmdyb3ZlX2xvZwQJAG5hbWVfaGFzaLqIBo4hwA//AwoAbmV0d29ya19pZPtRn7UKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX21hbmdyb3ZlX2xvZwQJAG5hbWVfaGFzaLqIBo4hwA//AwoAbmV0d29ya19pZPtRn7UKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:cherry_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAwAACAQAbmFtZRQAbWluZWNyYWZ0OmNoZXJyeV9sb2cECQBuYW1lX2hhc2hwFlaioppB1wMKAG5ldHdvcmtfaWS2sdXECgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAwAACAQAbmFtZRQAbWluZWNyYWZ0OmNoZXJyeV9sb2cECQBuYW1lX2hhc2hwFlaioppB1wMKAG5ldHdvcmtfaWS2sdXECgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:stripped_cherry_log", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAwAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2NoZXJyeV9sb2cECQBuYW1lX2hhc2i85H6G+WhXaAMKAG5ldHdvcmtfaWRjzoglCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAwAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2NoZXJyeV9sb2cECQBuYW1lX2hhc2i85H6G+WhXaAMKAG5ldHdvcmtfaWRjzoglCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:pale_oak_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTiBAAACAQAbmFtZRYAbWluZWNyYWZ0OnBhbGVfb2FrX2xvZwQJAG5hbWVfaGFzaIEcMMTin/ihAwoAbmV0d29ya19pZMtoEVwKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:stripped_pale_oak_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWThBAAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX3BhbGVfb2FrX2xvZwQJAG5hbWVfaGFzaBVKFLV2TrFcAwoAbmV0d29ya19pZBY8/GAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:crimson_stem", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAQAACAQAbmFtZRYAbWluZWNyYWZ0OmNyaW1zb25fc3RlbQQJAG5hbWVfaGFzaM0FzfL0UTKZAwoAbmV0d29ya19pZKvzID0KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAQAACAQAbmFtZRYAbWluZWNyYWZ0OmNyaW1zb25fc3RlbQQJAG5hbWVfaGFzaM0FzfL0UTKZAwoAbmV0d29ya19pZKvzID0KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:stripped_crimson_stem", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTvAQAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2NyaW1zb25fc3RlbQQJAG5hbWVfaGFzaDlA6nood57EAwoAbmV0d29ya19pZHrIqjIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTvAQAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2NyaW1zb25fc3RlbQQJAG5hbWVfaGFzaDlA6nood57EAwoAbmV0d29ya19pZHrIqjIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:warped_stem", - "block_state_b64": "CgAAAwgAYmxvY2tfaWThAQAACAQAbmFtZRUAbWluZWNyYWZ0OndhcnBlZF9zdGVtBAkAbmFtZV9oYXNon7cKfPZxdrUDCgBuZXR3b3JrX2lkerWyMwoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWThAQAACAQAbmFtZRUAbWluZWNyYWZ0OndhcnBlZF9zdGVtBAkAbmFtZV9oYXNon7cKfPZxdrUDCgBuZXR3b3JrX2lkerWyMwoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:stripped_warped_stem", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAQAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX3dhcnBlZF9zdGVtBAkAbmFtZV9oYXNoEw+y0dDPSd8DCgBuZXR3b3JrX2lkIQ9vBAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAQAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX3dhcnBlZF9zdGVtBAkAbmFtZV9oYXNoEw+y0dDPSd8DCgBuZXR3b3JrX2lkIQ9vBAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:oak_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAQAACAQAbmFtZRIAbWluZWNyYWZ0Om9ha193b29kBAkAbmFtZV9oYXNoqQIkuVPyJX0DCgBuZXR3b3JrX2lku2G1YAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAQAACAQAbmFtZRIAbWluZWNyYWZ0Om9ha193b29kBAkAbmFtZV9oYXNoqQIkuVPyJX0DCgBuZXR3b3JrX2lku2G1YAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:stripped_oak_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQyBAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0cmlwcGVkX29ha193b29kBAkAbmFtZV9oYXNovW6KCv+VZnsDCgBuZXR3b3JrX2lkkhWGegoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQyBAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0cmlwcGVkX29ha193b29kBAkAbmFtZV9oYXNovW6KCv+VZnsDCgBuZXR3b3JrX2lkkhWGegoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:spruce_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQtBAAACAQAbmFtZRUAbWluZWNyYWZ0OnNwcnVjZV93b29kBAkAbmFtZV9oYXNoTrIJ5TAQ+OgDCgBuZXR3b3JrX2lkaXLxCwoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQtBAAACAQAbmFtZRUAbWluZWNyYWZ0OnNwcnVjZV93b29kBAkAbmFtZV9oYXNoTrIJ5TAQ+OgDCgBuZXR3b3JrX2lkaXLxCwoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:stripped_spruce_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQzBAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX3NwcnVjZV93b29kBAkAbmFtZV9oYXNoMnuUk4Xo6icDCgBuZXR3b3JrX2lkes2ydAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQzBAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX3NwcnVjZV93b29kBAkAbmFtZV9oYXNoMnuUk4Xo6icDCgBuZXR3b3JrX2lkes2ydAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:birch_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQuBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJpcmNoX3dvb2QECQBuYW1lX2hhc2iqVjG4xt0cKQMKAG5ldHdvcmtfaWS06c5VCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQuBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJpcmNoX3dvb2QECQBuYW1lX2hhc2iqVjG4xt0cKQMKAG5ldHdvcmtfaWS06c5VCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:stripped_birch_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ0BAAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2JpcmNoX3dvb2QECQBuYW1lX2hhc2hm88R604TKbAMKAG5ldHdvcmtfaWRleEMJCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ0BAAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2JpcmNoX3dvb2QECQBuYW1lX2hhc2hm88R604TKbAMKAG5ldHdvcmtfaWRleEMJCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:jungle_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQvBAAACAQAbmFtZRUAbWluZWNyYWZ0Omp1bmdsZV93b29kBAkAbmFtZV9oYXNo9bYW29ORWCoDCgBuZXR3b3JrX2lkyFyKLQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQvBAAACAQAbmFtZRUAbWluZWNyYWZ0Omp1bmdsZV93b29kBAkAbmFtZV9oYXNo9bYW29ORWCoDCgBuZXR3b3JrX2lkyFyKLQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:stripped_jungle_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ1BAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2p1bmdsZV93b29kBAkAbmFtZV9oYXNoUVs6KsZQRBoDCgBuZXR3b3JrX2lk92k8HQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ1BAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2p1bmdsZV93b29kBAkAbmFtZV9oYXNoUVs6KsZQRBoDCgBuZXR3b3JrX2lk92k8HQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:acacia_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQwBAAACAQAbmFtZRUAbWluZWNyYWZ0OmFjYWNpYV93b29kBAkAbmFtZV9oYXNoKkDfgzlJUcIDCgBuZXR3b3JrX2lkuTWlcgoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQwBAAACAQAbmFtZRUAbWluZWNyYWZ0OmFjYWNpYV93b29kBAkAbmFtZV9oYXNoKkDfgzlJUcIDCgBuZXR3b3JrX2lkuTWlcgoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:stripped_acacia_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2BAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2FjYWNpYV93b29kBAkAbmFtZV9oYXNo/kOPN2bCJhUDCgBuZXR3b3JrX2lktl6LwQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2BAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2FjYWNpYV93b29kBAkAbmFtZV9oYXNo/kOPN2bCJhUDCgBuZXR3b3JrX2lktl6LwQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:dark_oak_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQxBAAACAQAbmFtZRcAbWluZWNyYWZ0OmRhcmtfb2FrX3dvb2QECQBuYW1lX2hhc2jaKv4ORLadAAMKAG5ldHdvcmtfaWSDrNQ8CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQxBAAACAQAbmFtZRcAbWluZWNyYWZ0OmRhcmtfb2FrX3dvb2QECQBuYW1lX2hhc2jaKv4ORLadAAMKAG5ldHdvcmtfaWSDrNQ8CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:stripped_dark_oak_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ3BAAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX2Rhcmtfb2FrX3dvb2QECQBuYW1lX2hhc2h2jFDfKVFgfAMKAG5ldHdvcmtfaWTgZQ5VCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ3BAAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX2Rhcmtfb2FrX3dvb2QECQBuYW1lX2hhc2h2jFDfKVFgfAMKAG5ldHdvcmtfaWTgZQ5VCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:mangrove_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAgAACAQAbmFtZRcAbWluZWNyYWZ0Om1hbmdyb3ZlX3dvb2QECQBuYW1lX2hhc2iXVxG0JG2fVAMKAG5ldHdvcmtfaWTok1JCCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAgAACAQAbmFtZRcAbWluZWNyYWZ0Om1hbmdyb3ZlX3dvb2QECQBuYW1lX2hhc2iXVxG0JG2fVAMKAG5ldHdvcmtfaWSkqJ4cCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:stripped_mangrove_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAgAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX21hbmdyb3ZlX3dvb2QECQBuYW1lX2hhc2h7CkbaBF7/WAMKAG5ldHdvcmtfaWQLAX88CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAgAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX21hbmdyb3ZlX3dvb2QECQBuYW1lX2hhc2h7CkbaBF7/WAMKAG5ldHdvcmtfaWQLAX88CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:cherry_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQhAwAACAQAbmFtZRUAbWluZWNyYWZ0OmNoZXJyeV93b29kBAkAbmFtZV9oYXNoAW8srlmpBM8DCgBuZXR3b3JrX2lkEALMfAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AQwAc3RyaXBwZWRfYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQhAwAACAQAbmFtZRUAbWluZWNyYWZ0OmNoZXJyeV93b29kBAkAbmFtZV9oYXNoAW8srlmpBM8DCgBuZXR3b3JrX2lkLPsAwgoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:stripped_cherry_wood", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAwAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2NoZXJyeV93b29kBAkAbmFtZV9oYXNo/e7KXv+CB38DCgBuZXR3b3JrX2lkg5aVtQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAwAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2NoZXJyeV93b29kBAkAbmFtZV9oYXNo/e7KXv+CB38DCgBuZXR3b3JrX2lkg5aVtQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:pale_oak_wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTsBAAACAQAbmFtZRcAbWluZWNyYWZ0OnBhbGVfb2FrX3dvb2QECQBuYW1lX2hhc2hGlXnbUgRIggMKAG5ldHdvcmtfaWRPLx7LCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:stripped_pale_oak_wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTrBAAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX3BhbGVfb2FrX3dvb2QECQBuYW1lX2hhc2iqaxd6ta2eNAMKAG5ldHdvcmtfaWQI+pz3CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:crimson_hyphae", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25faHlwaGFlBAkAbmFtZV9oYXNouRmKmfSqEWADCgBuZXR3b3JrX2lk+Tm5rQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25faHlwaGFlBAkAbmFtZV9oYXNouRmKmfSqEWADCgBuZXR3b3JrX2lk+Tm5rQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:stripped_crimson_hyphae", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQrAgAACAQAbmFtZSEAbWluZWNyYWZ0OnN0cmlwcGVkX2NyaW1zb25faHlwaGFlBAkAbmFtZV9oYXNoFffwmABq4LUDCgBuZXR3b3JrX2lkZAlUbgoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQrAgAACAQAbmFtZSEAbWluZWNyYWZ0OnN0cmlwcGVkX2NyaW1zb25faHlwaGFlBAkAbmFtZV9oYXNoFffwmABq4LUDCgBuZXR3b3JrX2lkZAlUbgoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:warped_hyphae", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9oeXBoYWUECQBuYW1lX2hhc2hn8plQUr6pmQMKAG5ldHdvcmtfaWRU2AIBCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9oeXBoYWUECQBuYW1lX2hhc2hn8plQUr6pmQMKAG5ldHdvcmtfaWRU2AIBCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:stripped_warped_hyphae", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAgAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX3dhcnBlZF9oeXBoYWUECQBuYW1lX2hhc2irKq+HYPSgjQMKAG5ldHdvcmtfaWSbrOPDCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAgAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX3dhcnBlZF9oeXBoYWUECQBuYW1lX2hhc2irKq+HYPSgjQMKAG5ldHdvcmtfaWSbrOPDCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:bamboo_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJhbWJvb19ibG9jawQJAG5hbWVfaGFzaAbDeur6stIBAwoAbmV0d29ya19pZCJAwn0KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJhbWJvb19ibG9jawQJAG5hbWVfaGFzaAbDeur6stIBAwoAbmV0d29ya19pZCJAwn0KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:stripped_bamboo_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAwAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2JhbWJvb19ibG9jawQJAG5hbWVfaGFzaJpwytpZOZM9AwoAbmV0d29ya19pZKuRbNEKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAwAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2JhbWJvb19ibG9jawQJAG5hbWVfaGFzaJpwytpZOZM9AwoAbmV0d29ya19pZKuRbNEKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:oak_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQSAAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19sZWF2ZXMECQBuYW1lX2hhc2h6O4xGqA2oKgMKAG5ldHdvcmtfaWT98c59CgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQSAAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19sZWF2ZXMECQBuYW1lX2hhc2h6O4xGqA2oKgMKAG5ldHdvcmtfaWT98c59CgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:spruce_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQfBAAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9sZWF2ZXMECQBuYW1lX2hhc2i9x1CtNAuqZwMKAG5ldHdvcmtfaWSzF7pTCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQfBAAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9sZWF2ZXMECQBuYW1lX2hhc2i9x1CtNAuqZwMKAG5ldHdvcmtfaWSzF7pTCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:birch_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQgBAAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX2xlYXZlcwQJAG5hbWVfaGFzaBlAGHaoaLZSAwoAbmV0d29ya19pZOjtvWcKBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQgBAAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX2xlYXZlcwQJAG5hbWVfaGFzaBlAGHaoaLZSAwoAbmV0d29ya19pZOjtvWcKBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:jungle_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQhBAAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9sZWF2ZXMECQBuYW1lX2hhc2iW1uAH07zGhgMKAG5ldHdvcmtfaWSA5KX0CgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQhBAAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9sZWF2ZXMECQBuYW1lX2hhc2iW1uAH07zGhgMKAG5ldHdvcmtfaWSA5KX0CgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:acacia_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAAAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9sZWF2ZXMECQBuYW1lX2hhc2iZJf8dAgDRNQMKAG5ldHdvcmtfaWQ/G7VuCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAAAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9sZWF2ZXMECQBuYW1lX2hhc2iZJf8dAgDRNQMKAG5ldHdvcmtfaWQ/G7VuCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:dark_oak_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQiBAAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX2xlYXZlcwQJAG5hbWVfaGFzaCk7rDipWFSjAwoAbmV0d29ya19pZJ2AkbYKBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQiBAAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX2xlYXZlcwQJAG5hbWVfaGFzaCk7rDipWFSjAwoAbmV0d29ya19pZJ2AkbYKBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:mangrove_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX2xlYXZlcwQJAG5hbWVfaGFzaKyI/dWvhEG8AwoAbmV0d29ya19pZPQxCZ8KBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX2xlYXZlcwQJAG5hbWVfaGFzaKyI/dWvhEG8AwoAbmV0d29ya19pZPQxCZ8KBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:cherry_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9sZWF2ZXMECQBuYW1lX2hhc2giTs9ChhYBlQMKAG5ldHdvcmtfaWR8bPpwCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9sZWF2ZXMECQBuYW1lX2hhc2giTs9ChhYBlQMKAG5ldHdvcmtfaWR8bPpwCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:pale_oak_leaves", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTuBAAACAQAbmFtZRkAbWluZWNyYWZ0OnBhbGVfb2FrX2xlYXZlcwQJAG5hbWVfaGFzaKVccFYyf0wbAwoAbmV0d29ya19pZNFNvgcKBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:azalea_leaves", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAgAACAQAbmFtZRcAbWluZWNyYWZ0OmF6YWxlYV9sZWF2ZXMECQBuYW1lX2hhc2iXFhD57wFS7AMKAG5ldHdvcmtfaWTNB/9ECgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAgAACAQAbmFtZRcAbWluZWNyYWZ0OmF6YWxlYV9sZWF2ZXMECQBuYW1lX2hhc2iXFhD57wFS7AMKAG5ldHdvcmtfaWTNB/9ECgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:azalea_leaves_flowered", - "block_state_b64": "CgAAAwgAYmxvY2tfaWREAgAACAQAbmFtZSAAbWluZWNyYWZ0OmF6YWxlYV9sZWF2ZXNfZmxvd2VyZWQECQBuYW1lX2hhc2gs8jxlS/pMrwMKAG5ldHdvcmtfaWQ7W4PyCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWREAgAACAQAbmFtZSAAbWluZWNyYWZ0OmF6YWxlYV9sZWF2ZXNfZmxvd2VyZWQECQBuYW1lX2hhc2gs8jxlS/pMrwMKAG5ldHdvcmtfaWQ7W4PyCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:oak_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAAAACAQAbmFtZRUAbWluZWNyYWZ0Om9ha19zYXBsaW5nBAkAbmFtZV9oYXNoogXcT9QfjiUDCgBuZXR3b3JrX2lkG22C+AoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAAAACAQAbmFtZRUAbWluZWNyYWZ0Om9ha19zYXBsaW5nBAkAbmFtZV9oYXNoogXcT9QfjiUDCgBuZXR3b3JrX2lkG22C+AoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:spruce_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4BAAACAQAbmFtZRgAbWluZWNyYWZ0OnNwcnVjZV9zYXBsaW5nBAkAbmFtZV9oYXNoe8hz4uYP0FcDCgBuZXR3b3JrX2lkUQmhaQoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4BAAACAQAbmFtZRgAbWluZWNyYWZ0OnNwcnVjZV9zYXBsaW5nBAkAbmFtZV9oYXNoe8hz4uYP0FcDCgBuZXR3b3JrX2lkUQmhaQoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:birch_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5BAAACAQAbmFtZRcAbWluZWNyYWZ0OmJpcmNoX3NhcGxpbmcECQBuYW1lX2hhc2h348iJQ/tK4wMKAG5ldHdvcmtfaWQ2Uh53CgYAc3RhdGVzAQcAYWdlX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5BAAACAQAbmFtZRcAbWluZWNyYWZ0OmJpcmNoX3NhcGxpbmcECQBuYW1lX2hhc2h348iJQ/tK4wMKAG5ldHdvcmtfaWQ2Uh53CgYAc3RhdGVzAQcAYWdlX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:jungle_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6BAAACAQAbmFtZRgAbWluZWNyYWZ0Omp1bmdsZV9zYXBsaW5nBAkAbmFtZV9oYXNo7tyTOdSrxaADCgBuZXR3b3JrX2lkXmBAdAoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6BAAACAQAbmFtZRgAbWluZWNyYWZ0Omp1bmdsZV9zYXBsaW5nBAkAbmFtZV9oYXNo7tyTOdSrxaADCgBuZXR3b3JrX2lkXmBAdAoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:acacia_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ7BAAACAQAbmFtZRgAbWluZWNyYWZ0OmFjYWNpYV9zYXBsaW5nBAkAbmFtZV9oYXNo99sg15uoX7ADCgBuZXR3b3JrX2lkPXX1KgoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ7BAAACAQAbmFtZRgAbWluZWNyYWZ0OmFjYWNpYV9zYXBsaW5nBAkAbmFtZV9oYXNo99sg15uoX7ADCgBuZXR3b3JrX2lkPXX1KgoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:dark_oak_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8BAAACAQAbmFtZRoAbWluZWNyYWZ0OmRhcmtfb2FrX3NhcGxpbmcECQBuYW1lX2hhc2jnVzFplW7cHgMKAG5ldHdvcmtfaWTD4giHCgYAc3RhdGVzAQcAYWdlX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8BAAACAQAbmFtZRoAbWluZWNyYWZ0OmRhcmtfb2FrX3NhcGxpbmcECQBuYW1lX2hhc2jnVzFplW7cHgMKAG5ldHdvcmtfaWTD4giHCgYAc3RhdGVzAQcAYWdlX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:mangrove_propagule", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAgAACAQAbmFtZRwAbWluZWNyYWZ0Om1hbmdyb3ZlX3Byb3BhZ3VsZQQJAG5hbWVfaGFzaJGeox6hkfLFAwoAbmV0d29ya19pZAIpvpYKBgBzdGF0ZXMBBwBoYW5naW5nAAMPAHByb3BhZ3VsZV9zdGFnZQAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAgAACAQAbmFtZRwAbWluZWNyYWZ0Om1hbmdyb3ZlX3Byb3BhZ3VsZQQJAG5hbWVfaGFzaJGeox6hkfLFAwoAbmV0d29ya19pZAIpvpYKBgBzdGF0ZXMBBwBoYW5naW5nAAMPAHByb3BhZ3VsZV9zdGFnZQAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:cherry_sapling", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQiAwAACAQAbmFtZRgAbWluZWNyYWZ0OmNoZXJyeV9zYXBsaW5nBAkAbmFtZV9oYXNoGrPpNMf1LtcDCgBuZXR3b3JrX2lkypakXQoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQiAwAACAQAbmFtZRgAbWluZWNyYWZ0OmNoZXJyeV9zYXBsaW5nBAkAbmFtZV9oYXNoGrPpNMf1LtcDCgBuZXR3b3JrX2lkypakXQoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:pale_oak_sapling", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTtBAAACAQAbmFtZRoAbWluZWNyYWZ0OnBhbGVfb2FrX3NhcGxpbmcECQBuYW1lX2hhc2gzvl+QbSfPHwMKAG5ldHdvcmtfaWSzav9sCgYAc3RhdGVzAQcAYWdlX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:bee_nest", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAQAACAQAbmFtZRIAbWluZWNyYWZ0OmJlZV9uZXN0BAkAbmFtZV9oYXNo2R2WBxUHEZIDCgBuZXR3b3JrX2lkiXWLEAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAADCwBob25leV9sZXZlbAAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAQAACAQAbmFtZRIAbWluZWNyYWZ0OmJlZV9uZXN0BAkAbmFtZV9oYXNo2R2WBxUHEZIDCgBuZXR3b3JrX2lkiXWLEAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAADCwBob25leV9sZXZlbAAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:wheat_seeds" @@ -2247,7 +2382,7 @@ }, { "id": "minecraft:melon_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRnAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1lbG9uX2Jsb2NrBAkAbmFtZV9oYXNoXxSm0iYpAx8DCgBuZXR3b3JrX2lkC9rqygoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRnAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1lbG9uX2Jsb2NrBAkAbmFtZV9oYXNoXxSm0iYpAx8DCgBuZXR3b3JrX2lkC9rqygoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:melon_slice" @@ -2263,205 +2398,217 @@ }, { "id": "minecraft:pumpkin", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAAAACAQAbmFtZREAbWluZWNyYWZ0OnB1bXBraW4ECQBuYW1lX2hhc2gc8A3jaSzWbgMKAG5ldHdvcmtfaWRFGA+xCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAAAACAQAbmFtZREAbWluZWNyYWZ0OnB1bXBraW4ECQBuYW1lX2hhc2gc8A3jaSzWbgMKAG5ldHdvcmtfaWRFGA+xCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:carved_pumpkin", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSaAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNhcnZlZF9wdW1wa2luBAkAbmFtZV9oYXNoPu1T0MJuG90DCgBuZXR3b3JrX2lkXNNn5QoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSaAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNhcnZlZF9wdW1wa2luBAkAbmFtZV9oYXNoPu1T0MJuG90DCgBuZXR3b3JrX2lkXNNn5QoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:lit_pumpkin", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAAAACAQAbmFtZRUAbWluZWNyYWZ0OmxpdF9wdW1wa2luBAkAbmFtZV9oYXNo7gWtEm2uPL0DCgBuZXR3b3JrX2lki8sU4AoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAAAACAQAbmFtZRUAbWluZWNyYWZ0OmxpdF9wdW1wa2luBAkAbmFtZV9oYXNo7gWtEm2uPL0DCgBuZXR3b3JrX2lki8sU4AoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:honeycomb" }, + { + "id": "minecraft:resin_clump", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT9BAAACAQAbmFtZRUAbWluZWNyYWZ0OnJlc2luX2NsdW1wBAkAbmFtZV9oYXNok5dcTB5ZyioDCgBuZXR3b3JrX2lkFbHrwwoGAHN0YXRlcwMZAG11bHRpX2ZhY2VfZGlyZWN0aW9uX2JpdHMAAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, { "id": "minecraft:fern", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRPBAAACAQAbmFtZQ4AbWluZWNyYWZ0OmZlcm4ECQBuYW1lX2hhc2iHbj3yXFn4owMKAG5ldHdvcmtfaWQKC6u7CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRPBAAACAQAbmFtZQ4AbWluZWNyYWZ0OmZlcm4ECQBuYW1lX2hhc2iHbj3yXFn4owMKAG5ldHdvcmtfaWQKC6u7CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:large_fern", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRgBAAACAQAbmFtZRQAbWluZWNyYWZ0OmxhcmdlX2Zlcm4ECQBuYW1lX2hhc2gnE9sd0LzHtQMKAG5ldHdvcmtfaWTS9hG4CgYAc3RhdGVzAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRgBAAACAQAbmFtZRQAbWluZWNyYWZ0OmxhcmdlX2Zlcm4ECQBuYW1lX2hhc2gnE9sd0LzHtQMKAG5ldHdvcmtfaWTS9hG4CgYAc3RhdGVzAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:short_grass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQfAAAACAQAbmFtZRUAbWluZWNyYWZ0OnNob3J0X2dyYXNzBAkAbmFtZV9oYXNobWQghLH0bLcDCgBuZXR3b3JrX2lkJWOOqAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQfAAAACAQAbmFtZRUAbWluZWNyYWZ0OnNob3J0X2dyYXNzBAkAbmFtZV9oYXNobWQghLH0bLcDCgBuZXR3b3JrX2lkJWOOqAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:tall_grass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRfBAAACAQAbmFtZRQAbWluZWNyYWZ0OnRhbGxfZ3Jhc3MECQBuYW1lX2hhc2ii5MyZJpv4sgMKAG5ldHdvcmtfaWRRfeH4CgYAc3RhdGVzAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRfBAAACAQAbmFtZRQAbWluZWNyYWZ0OnRhbGxfZ3Jhc3MECQBuYW1lX2hhc2ii5MyZJpv4sgMKAG5ldHdvcmtfaWRRfeH4CgYAc3RhdGVzAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:nether_sprouts" }, { "id": "minecraft:fire_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAwAACAQAbmFtZRQAbWluZWNyYWZ0OmZpcmVfY29yYWwECQBuYW1lX2hhc2hOHyyECVQVJwMKAG5ldHdvcmtfaWS9vF0UCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAwAACAQAbmFtZRQAbWluZWNyYWZ0OmZpcmVfY29yYWwECQBuYW1lX2hhc2hOHyyECVQVJwMKAG5ldHdvcmtfaWS9vF0UCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:brain_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWREAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJyYWluX2NvcmFsBAkAbmFtZV9oYXNoRiWlLCwA2ycDCgBuZXR3b3JrX2lkrjAuhgoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWREAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJyYWluX2NvcmFsBAkAbmFtZV9oYXNoRiWlLCwA2ycDCgBuZXR3b3JrX2lkrjAuhgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:bubble_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbAQJAG5hbWVfaGFzaJz6rWnl+v2qAwoAbmV0d29ya19pZImIWy0KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbAQJAG5hbWVfaGFzaJz6rWnl+v2qAwoAbmV0d29ya19pZImIWy0KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:tube_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAQAACAQAbmFtZRQAbWluZWNyYWZ0OnR1YmVfY29yYWwECQBuYW1lX2hhc2iYa8oO/tgk7wMKAG5ldHdvcmtfaWRTfND5CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAQAACAQAbmFtZRQAbWluZWNyYWZ0OnR1YmVfY29yYWwECQBuYW1lX2hhc2iYa8oO/tgk7wMKAG5ldHdvcmtfaWRTfND5CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:horn_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRHAwAACAQAbmFtZRQAbWluZWNyYWZ0Omhvcm5fY29yYWwECQBuYW1lX2hhc2iZnRHjZbnLPgMKAG5ldHdvcmtfaWR+GGp8CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRHAwAACAQAbmFtZRQAbWluZWNyYWZ0Omhvcm5fY29yYWwECQBuYW1lX2hhc2iZnRHjZbnLPgMKAG5ldHdvcmtfaWR+GGp8CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:dead_fire_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRLAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbAQJAG5hbWVfaGFzaEPU6tFy/latAwoAbmV0d29ya19pZNMa7V4KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRLAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbAQJAG5hbWVfaGFzaEPU6tFy/latAwoAbmV0d29ya19pZNMa7V4KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:dead_brain_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAwAACAQAbmFtZRoAbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWwECQBuYW1lX2hhc2j5L6QJCISvzwMKAG5ldHdvcmtfaWQkKzeiCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAwAACAQAbmFtZRoAbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWwECQBuYW1lX2hhc2j5L6QJCISvzwMKAG5ldHdvcmtfaWQkKzeiCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:dead_bubble_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRKAwAACAQAbmFtZRsAbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsBAkAbmFtZV9oYXNoSTOZ/8wpeNYDCgBuZXR3b3JrX2lka6w9DAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRKAwAACAQAbmFtZRsAbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsBAkAbmFtZV9oYXNoSTOZ/8wpeNYDCgBuZXR3b3JrX2lka6w9DAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:dead_tube_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbAQJAG5hbWVfaGFzaJGjNWhlaIJeAwoAbmV0d29ya19pZO3Z0ygKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbAQJAG5hbWVfaGFzaJGjNWhlaIJeAwoAbmV0d29ya19pZO3Z0ygKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:dead_horn_coral", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbAQJAG5hbWVfaGFzaJBkz3qt+g2cAwoAbmV0d29ya19pZBAN+eYKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbAQJAG5hbWVfaGFzaJBkz3qt+g2cAwoAbmV0d29ya19pZBAN+eYKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:fire_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRJBAAACAQAbmFtZRgAbWluZWNyYWZ0OmZpcmVfY29yYWxfZmFuBAkAbmFtZV9oYXNosOTxYYxsDLgDCgBuZXR3b3JrX2lkFKxbEgoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRJBAAACAQAbmFtZRgAbWluZWNyYWZ0OmZpcmVfY29yYWxfZmFuBAkAbmFtZV9oYXNosOTxYYxsDLgDCgBuZXR3b3JrX2lkFKxbEgoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:brain_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRHBAAACAQAbmFtZRkAbWluZWNyYWZ0OmJyYWluX2NvcmFsX2ZhbgQJAG5hbWVfaGFzaAi5uHizSNcqAwoAbmV0d29ya19pZFtLjNwKBgBzdGF0ZXMDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRHBAAACAQAbmFtZRkAbWluZWNyYWZ0OmJyYWluX2NvcmFsX2ZhbgQJAG5hbWVfaGFzaAi5uHizSNcqAwoAbmV0d29ya19pZFtLjNwKBgBzdGF0ZXMDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:bubble_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRIBAAACAQAbmFtZRoAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbF9mYW4ECQBuYW1lX2hhc2hy/rX2on17DgMKAG5ldHdvcmtfaWQof60VCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRIBAAACAQAbmFtZRoAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbF9mYW4ECQBuYW1lX2hhc2hy/rX2on17DgMKAG5ldHdvcmtfaWQof60VCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:tube_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAQAACAQAbmFtZRgAbWluZWNyYWZ0OnR1YmVfY29yYWxfZmFuBAkAbmFtZV9oYXNo9pbJbo+PphIDCgBuZXR3b3JrX2lkenDTYgoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAQAACAQAbmFtZRgAbWluZWNyYWZ0OnR1YmVfY29yYWxfZmFuBAkAbmFtZV9oYXNo9pbJbo+PphIDCgBuZXR3b3JrX2lkenDTYgoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:horn_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRKBAAACAQAbmFtZRgAbWluZWNyYWZ0Omhvcm5fY29yYWxfZmFuBAkAbmFtZV9oYXNoA+ri6NPDkbUDCgBuZXR3b3JrX2lkezoHNwoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRKBAAACAQAbmFtZRgAbWluZWNyYWZ0Omhvcm5fY29yYWxfZmFuBAkAbmFtZV9oYXNoA+ri6NPDkbUDCgBuZXR3b3JrX2lkezoHNwoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:dead_fire_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRNBAAACAQAbmFtZR0AbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbF9mYW4ECQBuYW1lX2hhc2hpQO02NDxPvwMKAG5ldHdvcmtfaWTaOJgLCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRNBAAACAQAbmFtZR0AbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbF9mYW4ECQBuYW1lX2hhc2hpQO02NDxPvwMKAG5ldHdvcmtfaWTaOJgLCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:dead_brain_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRLBAAACAQAbmFtZR4AbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWxfZmFuBAkAbmFtZV9oYXNoI9/+Z4YqMhIDCgBuZXR3b3JrX2lkqYXxYgoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRLBAAACAQAbmFtZR4AbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWxfZmFuBAkAbmFtZV9oYXNoI9/+Z4YqMhIDCgBuZXR3b3JrX2lkqYXxYgoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:dead_bubble_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRMBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsX2ZhbgQJAG5hbWVfaGFzaBNECtIM6VIOAwoAbmV0d29ya19pZLrNtBEKBgBzdGF0ZXMDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRMBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsX2ZhbgQJAG5hbWVfaGFzaBNECtIM6VIOAwoAbmV0d29ya19pZLrNtBEKBgBzdGF0ZXMDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:dead_tube_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAQAACAQAbmFtZR0AbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbF9mYW4ECQBuYW1lX2hhc2hbBBM9jFKWvQMKAG5ldHdvcmtfaWSkJKUWCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAQAACAQAbmFtZR0AbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbF9mYW4ECQBuYW1lX2hhc2hbBBM9jFKWvQMKAG5ldHdvcmtfaWSkJKUWCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:dead_horn_coral_fan", - "block_state_b64": "CgAAAwgAYmxvY2tfaWROBAAACAQAbmFtZR0AbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbF9mYW4ECQBuYW1lX2hhc2hObElFrHfPygMKAG5ldHdvcmtfaWQ1ZxvmCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWROBAAACAQAbmFtZR0AbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbF9mYW4ECQBuYW1lX2hhc2hObElFrHfPygMKAG5ldHdvcmtfaWQ1ZxvmCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:crimson_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAQAACAQAbmFtZRcAbWluZWNyYWZ0OmNyaW1zb25fcm9vdHMECQBuYW1lX2hhc2j1fWgQLViv5QMKAG5ldHdvcmtfaWRLh5DXCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAQAACAQAbmFtZRcAbWluZWNyYWZ0OmNyaW1zb25fcm9vdHMECQBuYW1lX2hhc2j1fWgQLViv5QMKAG5ldHdvcmtfaWRLh5DXCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:warped_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAQAACAQAbmFtZRYAbWluZWNyYWZ0OndhcnBlZF9yb290cwQJAG5hbWVfaGFzaBc3WvbJOLlkAwoAbmV0d29ya19pZNLgDnAKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAQAACAQAbmFtZRYAbWluZWNyYWZ0OndhcnBlZF9yb290cwQJAG5hbWVfaGFzaBc3WvbJOLlkAwoAbmV0d29ya19pZNLgDnAKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:dandelion", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQlAAAACAQAbmFtZRMAbWluZWNyYWZ0OmRhbmRlbGlvbgQJAG5hbWVfaGFzaBJ3bEUi+Nn/AwoAbmV0d29ya19pZBjjC44KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQlAAAACAQAbmFtZRMAbWluZWNyYWZ0OmRhbmRlbGlvbgQJAG5hbWVfaGFzaBJ3bEUi+Nn/AwoAbmV0d29ya19pZBjjC44KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:poppy", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnBvcHB5BAkAbmFtZV9oYXNocMF8pITMbkcDCgBuZXR3b3JrX2lk8im6ywoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnBvcHB5BAkAbmFtZV9oYXNocMF8pITMbkcDCgBuZXR3b3JrX2lk8im6ywoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:blue_orchid", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ9BAAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfb3JjaGlkBAkAbmFtZV9oYXNoBjz2MsgB21EDCgBuZXR3b3JrX2lk/iLsSwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ9BAAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfb3JjaGlkBAkAbmFtZV9oYXNoBjz2MsgB21EDCgBuZXR3b3JrX2lk/iLsSwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:allium", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ+BAAACAQAbmFtZRAAbWluZWNyYWZ0OmFsbGl1bQQJAG5hbWVfaGFzaDCGQBHNDTkcAwoAbmV0d29ya19pZD9Dgr0KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ+BAAACAQAbmFtZRAAbWluZWNyYWZ0OmFsbGl1bQQJAG5hbWVfaGFzaDCGQBHNDTkcAwoAbmV0d29ya19pZD9Dgr0KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:azure_bluet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ/BAAACAQAbmFtZRUAbWluZWNyYWZ0OmF6dXJlX2JsdWV0BAkAbmFtZV9oYXNo9N5egqMT2QcDCgBuZXR3b3JrX2lkwIgDnwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ/BAAACAQAbmFtZRUAbWluZWNyYWZ0OmF6dXJlX2JsdWV0BAkAbmFtZV9oYXNo9N5egqMT2QcDCgBuZXR3b3JrX2lkwIgDnwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:red_tulip", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRABAAACAQAbmFtZRMAbWluZWNyYWZ0OnJlZF90dWxpcAQJAG5hbWVfaGFzaAjMi9Rd+6rhAwoAbmV0d29ya19pZAZCnt8KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRABAAACAQAbmFtZRMAbWluZWNyYWZ0OnJlZF90dWxpcAQJAG5hbWVfaGFzaAjMi9Rd+6rhAwoAbmV0d29ya19pZAZCnt8KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:orange_tulip", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRBBAAACAQAbmFtZRYAbWluZWNyYWZ0Om9yYW5nZV90dWxpcAQJAG5hbWVfaGFzaP+NjxMBZ8vAAwoAbmV0d29ya19pZPYatsMKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRBBAAACAQAbmFtZRYAbWluZWNyYWZ0Om9yYW5nZV90dWxpcAQJAG5hbWVfaGFzaP+NjxMBZ8vAAwoAbmV0d29ya19pZPYatsMKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:white_tulip", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRCBAAACAQAbmFtZRUAbWluZWNyYWZ0OndoaXRlX3R1bGlwBAkAbmFtZV9oYXNo5vbU4VRPh3ADCgBuZXR3b3JrX2lkok+4rQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRCBAAACAQAbmFtZRUAbWluZWNyYWZ0OndoaXRlX3R1bGlwBAkAbmFtZV9oYXNo5vbU4VRPh3ADCgBuZXR3b3JrX2lkok+4rQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:pink_tulip", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRDBAAACAQAbmFtZRQAbWluZWNyYWZ0OnBpbmtfdHVsaXAECQBuYW1lX2hhc2hxDHZa6OaNXAMKAG5ldHdvcmtfaWTiOT+VCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRDBAAACAQAbmFtZRQAbWluZWNyYWZ0OnBpbmtfdHVsaXAECQBuYW1lX2hhc2hxDHZa6OaNXAMKAG5ldHdvcmtfaWTiOT+VCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:oxeye_daisy", - "block_state_b64": "CgAAAwgAYmxvY2tfaWREBAAACAQAbmFtZRUAbWluZWNyYWZ0Om94ZXllX2RhaXN5BAkAbmFtZV9oYXNoXwxsqNQTN9gDCgBuZXR3b3JrX2lkw7R7dwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWREBAAACAQAbmFtZRUAbWluZWNyYWZ0Om94ZXllX2RhaXN5BAkAbmFtZV9oYXNoXwxsqNQTN9gDCgBuZXR3b3JrX2lkw7R7dwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:cornflower", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRFBAAACAQAbmFtZRQAbWluZWNyYWZ0OmNvcm5mbG93ZXIECQBuYW1lX2hhc2gnhyC3EeqHgAMKAG5ldHdvcmtfaWR4VrvACgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRFBAAACAQAbmFtZRQAbWluZWNyYWZ0OmNvcm5mbG93ZXIECQBuYW1lX2hhc2gnhyC3EeqHgAMKAG5ldHdvcmtfaWR4VrvACgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:lily_of_the_valley", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRGBAAACAQAbmFtZRwAbWluZWNyYWZ0OmxpbHlfb2ZfdGhlX3ZhbGxleQQJAG5hbWVfaGFzaI64TJSf9mgQAwoAbmV0d29ya19pZFE9+nwKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRGBAAACAQAbmFtZRwAbWluZWNyYWZ0OmxpbHlfb2ZfdGhlX3ZhbGxleQQJAG5hbWVfaGFzaI64TJSf9mgQAwoAbmV0d29ya19pZFE9+nwKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:sunflower", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAAAACAQAbmFtZRMAbWluZWNyYWZ0OnN1bmZsb3dlcgQJAG5hbWVfaGFzaAMxYQLoqlZ0AwoAbmV0d29ya19pZA10iSoKBgBzdGF0ZXMBDwB1cHBlcl9ibG9ja19iaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAAAACAQAbmFtZRMAbWluZWNyYWZ0OnN1bmZsb3dlcgQJAG5hbWVfaGFzaAMxYQLoqlZ0AwoAbmV0d29ya19pZA10iSoKBgBzdGF0ZXMBDwB1cHBlcl9ibG9ja19iaXQAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:lilac", - "block_state_b64": "CgAAAwgAYmxvY2tfaWReBAAACAQAbmFtZQ8AbWluZWNyYWZ0OmxpbGFjBAkAbmFtZV9oYXNoD3nrQJuo7NkDCgBuZXR3b3JrX2lk5W+uFAoGAHN0YXRlcwEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWReBAAACAQAbmFtZQ8AbWluZWNyYWZ0OmxpbGFjBAkAbmFtZV9oYXNoD3nrQJuo7NkDCgBuZXR3b3JrX2lk5W+uFAoGAHN0YXRlcwEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:rose_bush", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhBAAACAQAbmFtZRMAbWluZWNyYWZ0OnJvc2VfYnVzaAQJAG5hbWVfaGFzaLoiFk8LVpGKAwoAbmV0d29ya19pZMZPv48KBgBzdGF0ZXMBDwB1cHBlcl9ibG9ja19iaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRhBAAACAQAbmFtZRMAbWluZWNyYWZ0OnJvc2VfYnVzaAQJAG5hbWVfaGFzaLoiFk8LVpGKAwoAbmV0d29ya19pZMZPv48KBgBzdGF0ZXMBDwB1cHBlcl9ibG9ja19iaXQAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:peony", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRiBAAACAQAbmFtZQ8AbWluZWNyYWZ0OnBlb255BAkAbmFtZV9oYXNoR4dYc4QquPADCgBuZXR3b3JrX2lkrTe7RwoGAHN0YXRlcwEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRiBAAACAQAbmFtZQ8AbWluZWNyYWZ0OnBlb255BAkAbmFtZV9oYXNoR4dYc4QquPADCgBuZXR3b3JrX2lkrTe7RwoGAHN0YXRlcwEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:pitcher_plant", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAwAACAQAbmFtZRcAbWluZWNyYWZ0OnBpdGNoZXJfcGxhbnQECQBuYW1lX2hhc2hRJHzsbDH+SQMKAG5ldHdvcmtfaWRnY76VCgYAc3RhdGVzAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAwAACAQAbmFtZRcAbWluZWNyYWZ0OnBpdGNoZXJfcGxhbnQECQBuYW1lX2hhc2hRJHzsbDH+SQMKAG5ldHdvcmtfaWRnY76VCgYAc3RhdGVzAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:pink_petals", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQkAwAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfcGV0YWxzBAkAbmFtZV9oYXNo6DQwN9SwV3QDCgBuZXR3b3JrX2lkNWneGgoGAHN0YXRlcwMGAGdyb3d0aAAAAAAIHABtaW5lY3JhZnQ6Y2FyZGluYWxfZGlyZWN0aW9uBQBzb3V0aAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQkAwAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfcGV0YWxzBAkAbmFtZV9oYXNo6DQwN9SwV3QDCgBuZXR3b3JrX2lkNWneGgoGAHN0YXRlcwMGAGdyb3d0aAAAAAAIHABtaW5lY3JhZnQ6Y2FyZGluYWxfZGlyZWN0aW9uBQBzb3V0aAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:wither_rose", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAQAACAQAbmFtZRUAbWluZWNyYWZ0OndpdGhlcl9yb3NlBAkAbmFtZV9oYXNoaSKxl3I516gDCgBuZXR3b3JrX2lkATXLPwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAQAACAQAbmFtZRUAbWluZWNyYWZ0OndpdGhlcl9yb3NlBAkAbmFtZV9oYXNoaSKxl3I516gDCgBuZXR3b3JrX2lkATXLPwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:torchflower", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ3AwAACAQAbmFtZRUAbWluZWNyYWZ0OnRvcmNoZmxvd2VyBAkAbmFtZV9oYXNoL+mHtElwbqQDCgBuZXR3b3JrX2lkI34O+AoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ3AwAACAQAbmFtZRUAbWluZWNyYWZ0OnRvcmNoZmxvd2VyBAkAbmFtZV9oYXNoL+mHtElwbqQDCgBuZXR3b3JrX2lkI34O+AoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:closed_eyeblossom", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT6BAAACAQAbmFtZRsAbWluZWNyYWZ0OmNsb3NlZF9leWVibG9zc29tBAkAbmFtZV9oYXNoYbeklHBkRL8DCgBuZXR3b3JrX2lku6xJeAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:open_eyeblossom", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT5BAAACAQAbmFtZRkAbWluZWNyYWZ0Om9wZW5fZXllYmxvc3NvbQQJAG5hbWVfaGFzaHH2HXQ24l8fAwoAbmV0d29ya19pZP1bL4YKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:white_dye" @@ -2528,194 +2675,146 @@ }, { "id": "minecraft:vine", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRqAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnZpbmUECQBuYW1lX2hhc2j0Sj8/XeXOLAMKAG5ldHdvcmtfaWSUkDtbCgYAc3RhdGVzAxMAdmluZV9kaXJlY3Rpb25fYml0cwAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRqAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnZpbmUECQBuYW1lX2hhc2j0Sj8/XeXOLAMKAG5ldHdvcmtfaWSUkDtbCgYAc3RhdGVzAxMAdmluZV9kaXJlY3Rpb25fYml0cwAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:weeping_vines", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAQAACAQAbmFtZRcAbWluZWNyYWZ0OndlZXBpbmdfdmluZXMECQBuYW1lX2hhc2jrLgLHkQygiwMKAG5ldHdvcmtfaWQ8NHSJCgYAc3RhdGVzAxEAd2VlcGluZ192aW5lc19hZ2UAAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAQAACAQAbmFtZRcAbWluZWNyYWZ0OndlZXBpbmdfdmluZXMECQBuYW1lX2hhc2jrLgLHkQygiwMKAG5ldHdvcmtfaWQ8NHSJCgYAc3RhdGVzAxEAd2VlcGluZ192aW5lc19hZ2UAAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:twisting_vines", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAgAACAQAbmFtZRgAbWluZWNyYWZ0OnR3aXN0aW5nX3ZpbmVzBAkAbmFtZV9oYXNoDYR5QgVUQJADCgBuZXR3b3JrX2lk5kYVIQoGAHN0YXRlcwMSAHR3aXN0aW5nX3ZpbmVzX2FnZQAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAgAACAQAbmFtZRgAbWluZWNyYWZ0OnR3aXN0aW5nX3ZpbmVzBAkAbmFtZV9oYXNoDYR5QgVUQJADCgBuZXR3b3JrX2lk5kYVIQoGAHN0YXRlcwMSAHR3aXN0aW5nX3ZpbmVzX2FnZQAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:waterlily", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRvAAAACAQAbmFtZRMAbWluZWNyYWZ0OndhdGVybGlseQQJAG5hbWVfaGFzaEHgC4c1SXg0AwoAbmV0d29ya19pZOOerp8KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRvAAAACAQAbmFtZRMAbWluZWNyYWZ0OndhdGVybGlseQQJAG5hbWVfaGFzaEHgC4c1SXg0AwoAbmV0d29ya19pZOOerp8KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:seagrass", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAQAACAQAbmFtZRIAbWluZWNyYWZ0OnNlYWdyYXNzBAkAbmFtZV9oYXNoHSBFtoHdWxIDCgBuZXR3b3JrX2lkd3lhEAoGAHN0YXRlcwgOAHNlYV9ncmFzc190eXBlBwBkZWZhdWx0AAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAQAACAQAbmFtZRIAbWluZWNyYWZ0OnNlYWdyYXNzBAkAbmFtZV9oYXNoHSBFtoHdWxIDCgBuZXR3b3JrX2lkd3lhEAoGAHN0YXRlcwgOAHNlYV9ncmFzc190eXBlBwBkZWZhdWx0AAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:kelp" }, { "id": "minecraft:deadbush", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAAAACAQAbmFtZRIAbWluZWNyYWZ0OmRlYWRidXNoBAkAbmFtZV9oYXNoPFODe4IScnYDCgBuZXR3b3JrX2lkVfnl+goGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAAAACAQAbmFtZRIAbWluZWNyYWZ0OmRlYWRidXNoBAkAbmFtZV9oYXNoPFODe4IScnYDCgBuZXR3b3JrX2lkVfnl+goGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:bamboo", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhbWJvbwQJAG5hbWVfaGFzaBgpGmyzhedCAwoAbmV0d29ya19pZIZv1nYKBgBzdGF0ZXMBBwBhZ2VfYml0AAgQAGJhbWJvb19sZWFmX3NpemUJAG5vX2xlYXZlcwgWAGJhbWJvb19zdGFsa190aGlja25lc3MEAHRoaW4AAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhbWJvbwQJAG5hbWVfaGFzaBgpGmyzhedCAwoAbmV0d29ya19pZIZv1nYKBgBzdGF0ZXMBBwBhZ2VfYml0AAgQAGJhbWJvb19sZWFmX3NpemUJAG5vX2xlYXZlcwgWAGJhbWJvb19zdGFsa190aGlja25lc3MEAHRoaW4AAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:snow", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnNub3cECQBuYW1lX2hhc2gVHr5XXdETWAMKAG5ldHdvcmtfaWQ0zCeHCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnNub3cECQBuYW1lX2hhc2gVHr5XXdETWAMKAG5ldHdvcmtfaWQ0zCeHCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:ice", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAAAACAQAbmFtZQ0AbWluZWNyYWZ0OmljZQQJAG5hbWVfaGFzaNF26f+uUT29AwoAbmV0d29ya19pZOUMaQYKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAAAACAQAbmFtZQ0AbWluZWNyYWZ0OmljZQQJAG5hbWVfaGFzaNF26f+uUT29AwoAbmV0d29ya19pZOUMaQYKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:packed_ice", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAAAACAQAbmFtZRQAbWluZWNyYWZ0OnBhY2tlZF9pY2UECQBuYW1lX2hhc2hk4bu123ZrFgMKAG5ldHdvcmtfaWTr/ooaCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAAAACAQAbmFtZRQAbWluZWNyYWZ0OnBhY2tlZF9pY2UECQBuYW1lX2hhc2hk4bu123ZrFgMKAG5ldHdvcmtfaWTr/ooaCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:blue_ice", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQKAQAACAQAbmFtZRIAbWluZWNyYWZ0OmJsdWVfaWNlBAkAbmFtZV9oYXNo+EKxYgFhKcgDCgBuZXR3b3JrX2lkxfsA8goGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQKAQAACAQAbmFtZRIAbWluZWNyYWZ0OmJsdWVfaWNlBAkAbmFtZV9oYXNo+EKxYgFhKcgDCgBuZXR3b3JrX2lkxfsA8goGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:snow_layer", - "block_state_b64": "CgAAAwgAYmxvY2tfaWROAAAACAQAbmFtZRQAbWluZWNyYWZ0OnNub3dfbGF5ZXIECQBuYW1lX2hhc2hXka6atMYUCQMKAG5ldHdvcmtfaWRCrIPcCgYAc3RhdGVzAQsAY292ZXJlZF9iaXQAAwYAaGVpZ2h0AAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWROAAAACAQAbmFtZRQAbWluZWNyYWZ0OnNub3dfbGF5ZXIECQBuYW1lX2hhc2hXka6atMYUCQMKAG5ldHdvcmtfaWRCrIPcCgYAc3RhdGVzAQsAY292ZXJlZF9iaXQAAwYAaGVpZ2h0AAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:pointed_dripstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQzAgAACAQAbmFtZRsAbWluZWNyYWZ0OnBvaW50ZWRfZHJpcHN0b25lBAkAbmFtZV9oYXNoJMISzmHQgt8DCgBuZXR3b3JrX2lkbWrtYgoGAHN0YXRlcwgTAGRyaXBzdG9uZV90aGlja25lc3MDAHRpcAEHAGhhbmdpbmcBAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQzAgAACAQAbmFtZRsAbWluZWNyYWZ0OnBvaW50ZWRfZHJpcHN0b25lBAkAbmFtZV9oYXNoJMISzmHQgt8DCgBuZXR3b3JrX2lkbWrtYgoGAHN0YXRlcwgTAGRyaXBzdG9uZV90aGlja25lc3MDAHRpcAEHAGhhbmdpbmcBAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:dripstone_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AgAACAQAbmFtZRkAbWluZWNyYWZ0OmRyaXBzdG9uZV9ibG9jawQJAG5hbWVfaGFzaIIXnEqY77YsAwoAbmV0d29ya19pZMZi2kwKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AgAACAQAbmFtZRkAbWluZWNyYWZ0OmRyaXBzdG9uZV9ibG9jawQJAG5hbWVfaGFzaIIXnEqY77YsAwoAbmV0d29ya19pZMZi2kwKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:moss_carpet", - "block_state_b64": "CgAAAwgAYmxvY2tfaWROAgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vc3NfY2FycGV0BAkAbmFtZV9oYXNo/NEDxRPTshYDCgBuZXR3b3JrX2lkaGG3QwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWROAgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vc3NfY2FycGV0BAkAbmFtZV9oYXNo/NEDxRPTshYDCgBuZXR3b3JrX2lkaGG3QwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:moss_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ/AgAACAQAbmFtZRQAbWluZWNyYWZ0Om1vc3NfYmxvY2sECQBuYW1lX2hhc2iovcsPUYX2tgMKAG5ldHdvcmtfaWT3JSbfCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ/AgAACAQAbmFtZRQAbWluZWNyYWZ0Om1vc3NfYmxvY2sECQBuYW1lX2hhc2iovcsPUYX2tgMKAG5ldHdvcmtfaWT3JSbfCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { - "id": "minecraft:dirt_with_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ9AgAACAQAbmFtZRkAbWluZWNyYWZ0OmRpcnRfd2l0aF9yb290cwQJAG5hbWVfaGFzaLCNDYPviDCIAwoAbmV0d29ya19pZNCkwzoKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "id": "minecraft:pale_moss_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTxBAAACAQAbmFtZRoAbWluZWNyYWZ0OnBhbGVfbW9zc19jYXJwZXQECQBuYW1lX2hhc2g5SFufsjDdpAMKAG5ldHdvcmtfaWSwu2O/CgYAc3RhdGVzCBoAcGFsZV9tb3NzX2NhcnBldF9zaWRlX2Vhc3QEAG5vbmUIGwBwYWxlX21vc3NfY2FycGV0X3NpZGVfbm9ydGgEAG5vbmUIGwBwYWxlX21vc3NfY2FycGV0X3NpZGVfc291dGgEAG5vbmUIGgBwYWxlX21vc3NfY2FycGV0X3NpZGVfd2VzdAQAbm9uZQEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:pale_moss_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTwBAAACAQAbmFtZRkAbWluZWNyYWZ0OnBhbGVfbW9zc19ibG9jawQJAG5hbWVfaGFzaAv55craFDiRAwoAbmV0d29ya19pZNMKFzcKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:pale_hanging_moss", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTyBAAACAQAbmFtZRsAbWluZWNyYWZ0OnBhbGVfaGFuZ2luZ19tb3NzBAkAbmFtZV9oYXNoNjhSFL+E2aQDCgBuZXR3b3JrX2lkC5iPTgoGAHN0YXRlcwEDAHRpcAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:hanging_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ+AgAACAQAbmFtZRcAbWluZWNyYWZ0Omhhbmdpbmdfcm9vdHMECQBuYW1lX2hhc2jaXn+Y5UZpDAMKAG5ldHdvcmtfaWRU4c2vCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ+AgAACAQAbmFtZRcAbWluZWNyYWZ0Omhhbmdpbmdfcm9vdHMECQBuYW1lX2hhc2jaXn+Y5UZpDAMKAG5ldHdvcmtfaWRU4c2vCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:mangrove_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWThAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hbmdyb3ZlX3Jvb3RzBAkAbmFtZV9oYXNoa786PzQGZ6kDCgBuZXR3b3JrX2lklA0AHgoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWThAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hbmdyb3ZlX3Jvb3RzBAkAbmFtZV9oYXNoa786PzQGZ6kDCgBuZXR3b3JrX2lklA0AHgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:muddy_mangrove_roots", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAgAACAQAbmFtZR4AbWluZWNyYWZ0Om11ZGR5X21hbmdyb3ZlX3Jvb3RzBAkAbmFtZV9oYXNo9YApdHpo1RkDCgBuZXR3b3JrX2lkH0Oc4woGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAgAACAQAbmFtZR4AbWluZWNyYWZ0Om11ZGR5X21hbmdyb3ZlX3Jvb3RzBAkAbmFtZV9oYXNo9YApdHpo1RkDCgBuZXR3b3JrX2lkH0Oc4woGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:big_dripleaf", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRCAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJpZ19kcmlwbGVhZgQJAG5hbWVfaGFzaGBEhXjo6qSdAwoAbmV0d29ya19pZMETsb8KBgBzdGF0ZXMBEQBiaWdfZHJpcGxlYWZfaGVhZAEIEQBiaWdfZHJpcGxlYWZfdGlsdAQAbm9uZQgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRCAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJpZ19kcmlwbGVhZgQJAG5hbWVfaGFzaGBEhXjo6qSdAwoAbmV0d29ya19pZMETsb8KBgBzdGF0ZXMBEQBiaWdfZHJpcGxlYWZfaGVhZAEIEQBiaWdfZHJpcGxlYWZfdGlsdAQAbm9uZQgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:small_dripleaf_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAgAACAQAbmFtZR4AbWluZWNyYWZ0OnNtYWxsX2RyaXBsZWFmX2Jsb2NrBAkAbmFtZV9oYXNojxRAgXP9uWADCgBuZXR3b3JrX2lkozbVPwoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24EAGVhc3QBDwB1cHBlcl9ibG9ja19iaXQBAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAgAACAQAbmFtZR4AbWluZWNyYWZ0OnNtYWxsX2RyaXBsZWFmX2Jsb2NrBAkAbmFtZV9oYXNojxRAgXP9uWADCgBuZXR3b3JrX2lkozbVPwoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24EAGVhc3QBDwB1cHBlcl9ibG9ja19iaXQBAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:spore_blossom", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRAAgAACAQAbmFtZRcAbWluZWNyYWZ0OnNwb3JlX2Jsb3Nzb20ECQBuYW1lX2hhc2il3U72Gbco2gMKAG5ldHdvcmtfaWSbbbgcCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRAAgAACAQAbmFtZRcAbWluZWNyYWZ0OnNwb3JlX2Jsb3Nzb20ECQBuYW1lX2hhc2il3U72Gbco2gMKAG5ldHdvcmtfaWSbbbgcCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:azalea", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAgAACAQAbmFtZRAAbWluZWNyYWZ0OmF6YWxlYQQJAG5hbWVfaGFzaNyUl+BW9JrBAwoAbmV0d29ya19pZO/XZtQKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAgAACAQAbmFtZRAAbWluZWNyYWZ0OmF6YWxlYQQJAG5hbWVfaGFzaNyUl+BW9JrBAwoAbmV0d29ya19pZO/XZtQKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:flowering_azalea", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAgAACAQAbmFtZRoAbWluZWNyYWZ0OmZsb3dlcmluZ19hemFsZWEECQBuYW1lX2hhc2ie9r33wz8kiwMKAG5ldHdvcmtfaWQ3ij0VCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAgAACAQAbmFtZRoAbWluZWNyYWZ0OmZsb3dlcmluZ19hemFsZWEECQBuYW1lX2hhc2ie9r33wz8kiwMKAG5ldHdvcmtfaWQ3ij0VCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:glow_lichen", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSaAgAACAQAbmFtZRUAbWluZWNyYWZ0Omdsb3dfbGljaGVuBAkAbmFtZV9oYXNobyPUrIYlo44DCgBuZXR3b3JrX2lkCh8lSAoGAHN0YXRlcwMZAG11bHRpX2ZhY2VfZGlyZWN0aW9uX2JpdHM/AAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSaAgAACAQAbmFtZRUAbWluZWNyYWZ0Omdsb3dfbGljaGVuBAkAbmFtZV9oYXNobyPUrIYlo44DCgBuZXR3b3JrX2lkCh8lSAoGAHN0YXRlcwMZAG11bHRpX2ZhY2VfZGlyZWN0aW9uX2JpdHM/AAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:amethyst_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAgAACAQAbmFtZRgAbWluZWNyYWZ0OmFtZXRoeXN0X2Jsb2NrBAkAbmFtZV9oYXNob+JK1iiAthcDCgBuZXR3b3JrX2lk8HtpzgoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAgAACAQAbmFtZRgAbWluZWNyYWZ0OmFtZXRoeXN0X2Jsb2NrBAkAbmFtZV9oYXNob+JK1iiAthcDCgBuZXR3b3JrX2lk8HtpzgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:budding_amethyst", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRHAgAACAQAbmFtZRoAbWluZWNyYWZ0OmJ1ZGRpbmdfYW1ldGh5c3QECQBuYW1lX2hhc2gJvAwfI14fxgMKAG5ldHdvcmtfaWTQYqfACgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRHAgAACAQAbmFtZRoAbWluZWNyYWZ0OmJ1ZGRpbmdfYW1ldGh5c3QECQBuYW1lX2hhc2gJvAwfI14fxgMKAG5ldHdvcmtfaWTQYqfACgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:amethyst_cluster", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAgAACAQAbmFtZRoAbWluZWNyYWZ0OmFtZXRoeXN0X2NsdXN0ZXIECQBuYW1lX2hhc2jK82S88Jgm8wMKAG5ldHdvcmtfaWSCPMPGCgYAc3RhdGVzCBQAbWluZWNyYWZ0OmJsb2NrX2ZhY2UCAHVwAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAgAACAQAbmFtZRoAbWluZWNyYWZ0OmFtZXRoeXN0X2NsdXN0ZXIECQBuYW1lX2hhc2jK82S88Jgm8wMKAG5ldHdvcmtfaWSCPMPGCgYAc3RhdGVzCBQAbWluZWNyYWZ0OmJsb2NrX2ZhY2UCAHVwAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:large_amethyst_bud", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAgAACAQAbmFtZRwAbWluZWNyYWZ0OmxhcmdlX2FtZXRoeXN0X2J1ZAQJAG5hbWVfaGFzaAHhdpWD+sd5AwoAbmV0d29ya19pZKkQxOcKBgBzdGF0ZXMIFABtaW5lY3JhZnQ6YmxvY2tfZmFjZQIAdXAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAgAACAQAbmFtZRwAbWluZWNyYWZ0OmxhcmdlX2FtZXRoeXN0X2J1ZAQJAG5hbWVfaGFzaAHhdpWD+sd5AwoAbmV0d29ya19pZKkQxOcKBgBzdGF0ZXMIFABtaW5lY3JhZnQ6YmxvY2tfZmFjZQIAdXAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:medium_amethyst_bud", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRKAgAACAQAbmFtZR0AbWluZWNyYWZ0Om1lZGl1bV9hbWV0aHlzdF9idWQECQBuYW1lX2hhc2g5lBGtC0DzZQMKAG5ldHdvcmtfaWSYiP4gCgYAc3RhdGVzCBQAbWluZWNyYWZ0OmJsb2NrX2ZhY2UCAHVwAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRKAgAACAQAbmFtZR0AbWluZWNyYWZ0Om1lZGl1bV9hbWV0aHlzdF9idWQECQBuYW1lX2hhc2g5lBGtC0DzZQMKAG5ldHdvcmtfaWSYiP4gCgYAc3RhdGVzCBQAbWluZWNyYWZ0OmJsb2NrX2ZhY2UCAHVwAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:small_amethyst_bud", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRLAgAACAQAbmFtZRwAbWluZWNyYWZ0OnNtYWxsX2FtZXRoeXN0X2J1ZAQJAG5hbWVfaGFzaEnb4+q9PO4YAwoAbmV0d29ya19pZGWzxrQKBgBzdGF0ZXMIFABtaW5lY3JhZnQ6YmxvY2tfZmFjZQIAdXAAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:tuff", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAgAACAQAbmFtZQ4AbWluZWNyYWZ0OnR1ZmYECQBuYW1lX2hhc2h1Rwc1XYsBGwMKAG5ldHdvcmtfaWRwQGn0CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:tuff_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAwAACAQAbmFtZRUAbWluZWNyYWZ0OnR1ZmZfc3RhaXJzBAkAbmFtZV9oYXNoKjyNUBjcfZsDCgBuZXR3b3JrX2lk+LsycgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:tuff_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAwAACAQAbmFtZRMAbWluZWNyYWZ0OnR1ZmZfc2xhYgQJAG5hbWVfaGFzaIhCGdlIsnMUAwoAbmV0d29ya19pZN1dUL4KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:tuff_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAwAACAQAbmFtZRMAbWluZWNyYWZ0OnR1ZmZfd2FsbAQJAG5hbWVfaGFzaMyeeu1IRf03AwoAbmV0d29ya19pZDkIrosKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:chiseled_tuff", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoaXNlbGVkX3R1ZmYECQBuYW1lX2hhc2iVliOT8OTQ9AMKAG5ldHdvcmtfaWTLNKOiCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:polished_tuff", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAwAACAQAbmFtZRcAbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmYECQBuYW1lX2hhc2hyaLe/KEVZ0gMKAG5ldHdvcmtfaWTcX3NrCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:polished_tuff_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTuAwAACAQAbmFtZR4AbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmZfc3RhaXJzBAkAbmFtZV9oYXNo8yuah8QI1dcDCgBuZXR3b3JrX2lkjLoU4AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:polished_tuff_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTsAwAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmZfc2xhYgQJAG5hbWVfaGFzaLXdb48YvAsHAwoAbmV0d29ya19pZAnJ7W0KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:polished_tuff_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTvAwAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmZfd2FsbAQJAG5hbWVfaGFzaJVZj6QYWXUrAwoAbmV0d29ya19pZLU7dooKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:tuff_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAwAACAQAbmFtZRUAbWluZWNyYWZ0OnR1ZmZfYnJpY2tzBAkAbmFtZV9oYXNo/hbQ+mXSK7wDCgBuZXR3b3JrX2lk6gmIwQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:tuff_brick_stairs", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT0AwAACAQAbmFtZRsAbWluZWNyYWZ0OnR1ZmZfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNoWJpkAurUfKwDCgBuZXR3b3JrX2lkUMcjiwoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:tuff_brick_slab", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTyAwAACAQAbmFtZRkAbWluZWNyYWZ0OnR1ZmZfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaLqPMjVCv5dIAwoAbmV0d29ya19pZOmeRhcKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24HHhUBAA==" - }, - { - "id": "minecraft:tuff_brick_wall", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT1AwAACAQAbmFtZRkAbWluZWNyYWZ0OnR1ZmZfYnJpY2tfd2FsbAQJAG5hbWVfaGFzaIL0IyNCOsonAwoAbmV0d29ya19pZJW4T5UKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uBx4VAQA=" - }, - { - "id": "minecraft:chiseled_tuff_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT2AwAACAQAbmFtZR4AbWluZWNyYWZ0OmNoaXNlbGVkX3R1ZmZfYnJpY2tzBAkAbmFtZV9oYXNo3oQw6gmxYuADCgBuZXR3b3JrX2lkm3D8AgoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRLAgAACAQAbmFtZRwAbWluZWNyYWZ0OnNtYWxsX2FtZXRoeXN0X2J1ZAQJAG5hbWVfaGFzaEnb4+q9PO4YAwoAbmV0d29ya19pZGWzxrQKBgBzdGF0ZXMIFABtaW5lY3JhZnQ6YmxvY2tfZmFjZQIAdXAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:calcite", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAgAACAQAbmFtZREAbWluZWNyYWZ0OmNhbGNpdGUECQBuYW1lX2hhc2ixKLu8ZIdzDQMKAG5ldHdvcmtfaWQlSbJDCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAgAACAQAbmFtZREAbWluZWNyYWZ0OmNhbGNpdGUECQBuYW1lX2hhc2ixKLu8ZIdzDQMKAG5ldHdvcmtfaWQlSbJDCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:chicken" @@ -2746,35 +2845,31 @@ }, { "id": "minecraft:brown_mushroom", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQnAAAACAQAbmFtZRgAbWluZWNyYWZ0OmJyb3duX211c2hyb29tBAkAbmFtZV9oYXNonYw/FO78WDoDCgBuZXR3b3JrX2lkLh1OXAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQnAAAACAQAbmFtZRgAbWluZWNyYWZ0OmJyb3duX211c2hyb29tBAkAbmFtZV9oYXNonYw/FO78WDoDCgBuZXR3b3JrX2lkLh1OXAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:red_mushroom", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAAAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZF9tdXNocm9vbQQJAG5hbWVfaGFzaPpzJua7669xAwoAbmV0d29ya19pZCvWPYkKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAAAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZF9tdXNocm9vbQQJAG5hbWVfaGFzaPpzJua7669xAwoAbmV0d29ya19pZCvWPYkKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:crimson_fungus", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fZnVuZ3VzBAkAbmFtZV9oYXNolIcCUuFM2u0DCgBuZXR3b3JrX2lkD2NN0QoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fZnVuZ3VzBAkAbmFtZV9oYXNolIcCUuFM2u0DCgBuZXR3b3JrX2lkD2NN0QoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:warped_fungus", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9mdW5ndXMECQBuYW1lX2hhc2gq8bSnRVTAFgMKAG5ldHdvcmtfaWTkwS+rCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9mdW5ndXMECQBuYW1lX2hhc2gq8bSnRVTAFgMKAG5ldHdvcmtfaWTkwS+rCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:brown_mushroom_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAAAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkdOMhDAoGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cw4AAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAAAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkdOMhDAoGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cw4AAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:red_mushroom_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAAAACAQAbmFtZRwAbWluZWNyYWZ0OnJlZF9tdXNocm9vbV9ibG9jawQJAG5hbWVfaGFzaJTTyJbth9M9AwoAbmV0d29ya19pZM+AyboKBgBzdGF0ZXMDEgBodWdlX211c2hyb29tX2JpdHMOAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAAAACAQAbmFtZRwAbWluZWNyYWZ0OnJlZF9tdXNocm9vbV9ibG9jawQJAG5hbWVfaGFzaJTTyJbth9M9AwoAbmV0d29ya19pZM+AyboKBgBzdGF0ZXMDEgBodWdlX211c2hyb29tX2JpdHMOAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { - "id": "minecraft:brown_mushroom_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAAAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkbdt3CAoGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cw8AAAAAAwcAdmVyc2lvbgceFQEA" - }, - { - "id": "minecraft:brown_mushroom_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAAAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkSrMl9goGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cwAAAAAAAwcAdmVyc2lvbgceFQEA" + "id": "minecraft:mushroom_stem", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTvBAAACAQAbmFtZRcAbWluZWNyYWZ0Om11c2hyb29tX3N0ZW0ECQBuYW1lX2hhc2i2SozhK9NLpgMKAG5ldHdvcmtfaWTTVND+CgYAc3RhdGVzAxIAaHVnZV9tdXNocm9vbV9iaXRzDwAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:egg" @@ -2793,82 +2888,86 @@ }, { "id": "minecraft:web", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAAAACAQAbmFtZQ0AbWluZWNyYWZ0OndlYgQJAG5hbWVfaGFzaA4GKQCvG4i9AwoAbmV0d29ya19pZApt+jgKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAAAACAQAbmFtZQ0AbWluZWNyYWZ0OndlYgQJAG5hbWVfaGFzaA4GKQCvG4i9AwoAbmV0d29ya19pZApt+jgKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:spider_eye" }, { "id": "minecraft:mob_spawner", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ0AAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vYl9zcGF3bmVyBAkAbmFtZV9oYXNoNwGrCV/Fkh8DCgBuZXR3b3JrX2lkM1wTmgoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ0AAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vYl9zcGF3bmVyBAkAbmFtZV9oYXNoNwGrCV/Fkh8DCgBuZXR3b3JrX2lkM1wTmgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:trial_spawner", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6AgAACAQAbmFtZRcAbWluZWNyYWZ0OnRyaWFsX3NwYXduZXIECQBuYW1lX2hhc2iNLRPB4ACz+QMKAG5ldHdvcmtfaWTWFYHGCgYAc3RhdGVzAQcAb21pbm91cwADEwB0cmlhbF9zcGF3bmVyX3N0YXRlAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6AgAACAQAbmFtZRcAbWluZWNyYWZ0OnRyaWFsX3NwYXduZXIECQBuYW1lX2hhc2iNLRPB4ACz+QMKAG5ldHdvcmtfaWTWFYHGCgYAc3RhdGVzAQcAb21pbm91cwADEwB0cmlhbF9zcGF3bmVyX3N0YXRlAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:vault", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5AgAACAQAbmFtZQ8AbWluZWNyYWZ0OnZhdWx0BAkAbmFtZV9oYXNoCAp9n3IAyqcDCgBuZXR3b3JrX2lk6/P+vwoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAQcAb21pbm91cwAICwB2YXVsdF9zdGF0ZQgAaW5hY3RpdmUAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5AgAACAQAbmFtZQ8AbWluZWNyYWZ0OnZhdWx0BAkAbmFtZV9oYXNoCAp9n3IAyqcDCgBuZXR3b3JrX2lk6/P+vwoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAQcAb21pbm91cwAICwB2YXVsdF9zdGF0ZQgAaW5hY3RpdmUAAwcAdmVyc2lvbgEoFQEA" + }, + { + "id": "minecraft:creaking_heart", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTzBAAACAQAbmFtZRgAbWluZWNyYWZ0OmNyZWFraW5nX2hlYXJ0BAkAbmFtZV9oYXNoQcOV0pmSMeADCgBuZXR3b3JrX2lkYfFBiQoGAHN0YXRlcwEGAGFjdGl2ZQABBwBuYXR1cmFsAAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:end_portal_frame", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AAAACAQAbmFtZRoAbWluZWNyYWZ0OmVuZF9wb3J0YWxfZnJhbWUECQBuYW1lX2hhc2gqofyUIjGOpQMKAG5ldHdvcmtfaWRbGHf8CgYAc3RhdGVzARIAZW5kX3BvcnRhbF9leWVfYml0AAgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AAAACAQAbmFtZRoAbWluZWNyYWZ0OmVuZF9wb3J0YWxfZnJhbWUECQBuYW1lX2hhc2gqofyUIjGOpQMKAG5ldHdvcmtfaWRbGHf8CgYAc3RhdGVzARIAZW5kX3BvcnRhbF9leWVfYml0AAgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:infested_stone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRgAbWluZWNyYWZ0OmluZmVzdGVkX3N0b25lBAkAbmFtZV9oYXNoxnRcHDu4zqQDCgBuZXR3b3JrX2lkpfcnsgoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRgAbWluZWNyYWZ0OmluZmVzdGVkX3N0b25lBAkAbmFtZV9oYXNoxnRcHDu4zqQDCgBuZXR3b3JrX2lkpfcnsgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:infested_cobblestone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRZBAAACAQAbmFtZR4AbWluZWNyYWZ0OmluZmVzdGVkX2NvYmJsZXN0b25lBAkAbmFtZV9oYXNoy+LVCKG2kVMDCgBuZXR3b3JrX2lkpn+icAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRZBAAACAQAbmFtZR4AbWluZWNyYWZ0OmluZmVzdGVkX2NvYmJsZXN0b25lBAkAbmFtZV9oYXNoy+LVCKG2kVMDCgBuZXR3b3JrX2lkpn+icAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:infested_stone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRaBAAACAQAbmFtZR8AbWluZWNyYWZ0OmluZmVzdGVkX3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaBMnals7a32CAwoAbmV0d29ya19pZNHi2UYKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRaBAAACAQAbmFtZR8AbWluZWNyYWZ0OmluZmVzdGVkX3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaBMnals7a32CAwoAbmV0d29ya19pZNHi2UYKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:infested_mossy_stone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRbBAAACAQAbmFtZSUAbWluZWNyYWZ0OmluZmVzdGVkX21vc3N5X3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaAmJk+HmVq0rAwoAbmV0d29ya19pZAVH8/sKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRbBAAACAQAbmFtZSUAbWluZWNyYWZ0OmluZmVzdGVkX21vc3N5X3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaAmJk+HmVq0rAwoAbmV0d29ya19pZAVH8/sKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:infested_cracked_stone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRcBAAACAQAbmFtZScAbWluZWNyYWZ0OmluZmVzdGVkX2NyYWNrZWRfc3RvbmVfYnJpY2tzBAkAbmFtZV9oYXNoMyc60XcfcyoDCgBuZXR3b3JrX2lkaW+kbQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRcBAAACAQAbmFtZScAbWluZWNyYWZ0OmluZmVzdGVkX2NyYWNrZWRfc3RvbmVfYnJpY2tzBAkAbmFtZV9oYXNoMyc60XcfcyoDCgBuZXR3b3JrX2lkaW+kbQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:infested_chiseled_stone_bricks", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRdBAAACAQAbmFtZSgAbWluZWNyYWZ0OmluZmVzdGVkX2NoaXNlbGVkX3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaNUvNIIg9dZbAwoAbmV0d29ya19pZCajGicKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRdBAAACAQAbmFtZSgAbWluZWNyYWZ0OmluZmVzdGVkX2NoaXNlbGVkX3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaNUvNIIg9dZbAwoAbmV0d29ya19pZCajGicKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:infested_deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAgAACAQAbmFtZRwAbWluZWNyYWZ0OmluZmVzdGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaICF2VYccxF1AwoAbmV0d29ya19pZDa/624KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAgAACAQAbmFtZRwAbWluZWNyYWZ0OmluZmVzdGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaICF2VYccxF1AwoAbmV0d29ya19pZDa/624KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:dragon_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AAAACAQAbmFtZRQAbWluZWNyYWZ0OmRyYWdvbl9lZ2cECQBuYW1lX2hhc2inMzXrV+/e1wMKAG5ldHdvcmtfaWTgO1yRCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AAAACAQAbmFtZRQAbWluZWNyYWZ0OmRyYWdvbl9lZ2cECQBuYW1lX2hhc2inMzXrV+/e1wMKAG5ldHdvcmtfaWTgO1yRCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:turtle_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAQAACAQAbmFtZRQAbWluZWNyYWZ0OnR1cnRsZV9lZ2cECQBuYW1lX2hhc2iwSRcxOJIJ9gMKAG5ldHdvcmtfaWSIRNUhCgYAc3RhdGVzCA0AY3JhY2tlZF9zdGF0ZQkAbm9fY3JhY2tzCBAAdHVydGxlX2VnZ19jb3VudAcAb25lX2VnZwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAQAACAQAbmFtZRQAbWluZWNyYWZ0OnR1cnRsZV9lZ2cECQBuYW1lX2hhc2iwSRcxOJIJ9gMKAG5ldHdvcmtfaWSIRNUhCgYAc3RhdGVzCA0AY3JhY2tlZF9zdGF0ZQkAbm9fY3JhY2tzCBAAdHVydGxlX2VnZ19jb3VudAcAb25lX2VnZwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:sniffer_egg", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRTAwAACAQAbmFtZRUAbWluZWNyYWZ0OnNuaWZmZXJfZWdnBAkAbmFtZV9oYXNoY1lozc8lPcYDCgBuZXR3b3JrX2lk7yb/2QoGAHN0YXRlcwgNAGNyYWNrZWRfc3RhdGUJAG5vX2NyYWNrcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRTAwAACAQAbmFtZRUAbWluZWNyYWZ0OnNuaWZmZXJfZWdnBAkAbmFtZV9oYXNoY1lozc8lPcYDCgBuZXR3b3JrX2lk7yb/2QoGAHN0YXRlcwgNAGNyYWNrZWRfc3RhdGUJAG5vX2NyYWNrcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:frog_spawn", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAgAACAQAbmFtZRQAbWluZWNyYWZ0OmZyb2dfc3Bhd24ECQBuYW1lX2hhc2iWmd7idp3ZZwMKAG5ldHdvcmtfaWRFzJudCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAgAACAQAbmFtZRQAbWluZWNyYWZ0OmZyb2dfc3Bhd24ECQBuYW1lX2hhc2iWmd7idp3ZZwMKAG5ldHdvcmtfaWRFzJudCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:pearlescent_froglight", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAgAACAQAbmFtZR8AbWluZWNyYWZ0OnBlYXJsZXNjZW50X2Zyb2dsaWdodAQJAG5hbWVfaGFzaKkcFRyycYGyAwoAbmV0d29ya19pZJqYakAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAgAACAQAbmFtZR8AbWluZWNyYWZ0OnBlYXJsZXNjZW50X2Zyb2dsaWdodAQJAG5hbWVfaGFzaKkcFRyycYGyAwoAbmV0d29ya19pZJqYakAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:verdant_froglight", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAgAACAQAbmFtZRsAbWluZWNyYWZ0OnZlcmRhbnRfZnJvZ2xpZ2h0BAkAbmFtZV9oYXNoA+eXuTBohrQDCgBuZXR3b3JrX2lkDIVnsQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAgAACAQAbmFtZRsAbWluZWNyYWZ0OnZlcmRhbnRfZnJvZ2xpZ2h0BAkAbmFtZV9oYXNoA+eXuTBohrQDCgBuZXR3b3JrX2lkDIVnsQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:ochre_froglight", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAgAACAQAbmFtZRkAbWluZWNyYWZ0Om9jaHJlX2Zyb2dsaWdodAQJAG5hbWVfaGFzaMY59kjPe+c3AwoAbmV0d29ya19pZO2TD50KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAgAACAQAbmFtZRkAbWluZWNyYWZ0Om9jaHJlX2Zyb2dsaWdodAQJAG5hbWVfaGFzaMY59kjPe+c3AwoAbmV0d29ya19pZO2TD50KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:chicken_spawn_egg" @@ -3104,40 +3203,43 @@ { "id": "minecraft:bogged_spawn_egg" }, + { + "id": "minecraft:creaking_spawn_egg" + }, { "id": "minecraft:obsidian", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQxAAAACAQAbmFtZRIAbWluZWNyYWZ0Om9ic2lkaWFuBAkAbmFtZV9oYXNoiz4qrb8QjyEDCgBuZXR3b3JrX2lkuqnPpQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQxAAAACAQAbmFtZRIAbWluZWNyYWZ0Om9ic2lkaWFuBAkAbmFtZV9oYXNoiz4qrb8QjyEDCgBuZXR3b3JrX2lkuqnPpQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:crying_obsidian", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAgAACAQAbmFtZRkAbWluZWNyYWZ0OmNyeWluZ19vYnNpZGlhbgQJAG5hbWVfaGFzaKT0JlA7Z1K+AwoAbmV0d29ya19pZCjbPV4KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAgAACAQAbmFtZRkAbWluZWNyYWZ0OmNyeWluZ19vYnNpZGlhbgQJAG5hbWVfaGFzaKT0JlA7Z1K+AwoAbmV0d29ya19pZCjbPV4KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:bedrock", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAAAACAQAbmFtZREAbWluZWNyYWZ0OmJlZHJvY2sECQBuYW1lX2hhc2hWfFrh4LVtxwMKAG5ldHdvcmtfaWT7fKz1CgYAc3RhdGVzAQ4AaW5maW5pYnVybl9iaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAAAACAQAbmFtZREAbWluZWNyYWZ0OmJlZHJvY2sECQBuYW1lX2hhc2hWfFrh4LVtxwMKAG5ldHdvcmtfaWT7fKz1CgYAc3RhdGVzAQ4AaW5maW5pYnVybl9iaXQAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:soul_sand", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNvdWxfc2FuZAQJAG5hbWVfaGFzaMaf+bccu+KTAwoAbmV0d29ya19pZBQSHrMKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNvdWxfc2FuZAQJAG5hbWVfaGFzaMaf+bccu+KTAwoAbmV0d29ya19pZBQSHrMKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:magma", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAAAACAQAbmFtZQ8AbWluZWNyYWZ0Om1hZ21hBAkAbmFtZV9oYXNoqyTjKaIsWfYDCgBuZXR3b3JrX2lkyfWAZgoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAAAACAQAbmFtZQ8AbWluZWNyYWZ0Om1hZ21hBAkAbmFtZV9oYXNoqyTjKaIsWfYDCgBuZXR3b3JrX2lkyfWAZgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:nether_wart" }, { "id": "minecraft:end_stone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AAAACAQAbmFtZRMAbWluZWNyYWZ0OmVuZF9zdG9uZQQJAG5hbWVfaGFzaH1J9jA39GJNAwoAbmV0d29ya19pZFeFQ7UKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AAAACAQAbmFtZRMAbWluZWNyYWZ0OmVuZF9zdG9uZQQJAG5hbWVfaGFzaH1J9jA39GJNAwoAbmV0d29ya19pZFeFQ7UKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:chorus_flower", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAAAACAQAbmFtZRcAbWluZWNyYWZ0OmNob3J1c19mbG93ZXIECQBuYW1lX2hhc2iMpSodli5uawMKAG5ldHdvcmtfaWRnd1ZWCgYAc3RhdGVzAwMAYWdlAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAAAACAQAbmFtZRcAbWluZWNyYWZ0OmNob3J1c19mbG93ZXIECQBuYW1lX2hhc2iMpSodli5uawMKAG5ldHdvcmtfaWRnd1ZWCgYAc3RhdGVzAwMAYWdlAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:chorus_plant", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAAAACAQAbmFtZRYAbWluZWNyYWZ0OmNob3J1c19wbGFudAQJAG5hbWVfaGFzaJhSrmNGKwaMAwoAbmV0d29ya19pZA3uVqMKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAAAACAQAbmFtZRYAbWluZWNyYWZ0OmNob3J1c19wbGFudAQJAG5hbWVfaGFzaJhSrmNGKwaMAwoAbmV0d29ya19pZA3uVqMKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:chorus_fruit" @@ -3147,79 +3249,79 @@ }, { "id": "minecraft:sponge", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAAAACAQAbmFtZRAAbWluZWNyYWZ0OnNwb25nZQQJAG5hbWVfaGFzaLrd2ScYRDMiAwoAbmV0d29ya19pZNmQW/oKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAAAACAQAbmFtZRAAbWluZWNyYWZ0OnNwb25nZQQJAG5hbWVfaGFzaLrd2ScYRDMiAwoAbmV0d29ya19pZNmQW/oKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:wet_sponge", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTXBAAACAQAbmFtZRQAbWluZWNyYWZ0OndldF9zcG9uZ2UECQBuYW1lX2hhc2htp6nKpSHcAgMKAG5ldHdvcmtfaWQaW+fCCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTXBAAACAQAbmFtZRQAbWluZWNyYWZ0OndldF9zcG9uZ2UECQBuYW1lX2hhc2htp6nKpSHcAgMKAG5ldHdvcmtfaWQaW+fCCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:tube_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRoAbWluZWNyYWZ0OnR1YmVfY29yYWxfYmxvY2sECQBuYW1lX2hhc2iGkaiR7Eot4wMKAG5ldHdvcmtfaWQPNJ6sCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRoAbWluZWNyYWZ0OnR1YmVfY29yYWxfYmxvY2sECQBuYW1lX2hhc2iGkaiR7Eot4wMKAG5ldHdvcmtfaWQPNJ6sCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:brain_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRQBAAACAQAbmFtZRsAbWluZWNyYWZ0OmJyYWluX2NvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoeDNAK18yUo4DCgBuZXR3b3JrX2lkloN1vgoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRQBAAACAQAbmFtZRsAbWluZWNyYWZ0OmJyYWluX2NvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoeDNAK18yUo4DCgBuZXR3b3JrX2lkloN1vgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:bubble_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRRBAAACAQAbmFtZRwAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaAI2mwMlvcNbAwoAbmV0d29ya19pZBlkxKIKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRRBAAACAQAbmFtZRwAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaAI2mwMlvcNbAwoAbmV0d29ya19pZBlkxKIKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:fire_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRSBAAACAQAbmFtZRoAbWluZWNyYWZ0OmZpcmVfY29yYWxfYmxvY2sECQBuYW1lX2hhc2gg1gLeXLmKaAMKAG5ldHdvcmtfaWSp3W57CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRSBAAACAQAbmFtZRoAbWluZWNyYWZ0OmZpcmVfY29yYWxfYmxvY2sECQBuYW1lX2hhc2gg1gLeXLmKaAMKAG5ldHdvcmtfaWSp3W57CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:horn_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRTBAAACAQAbmFtZRoAbWluZWNyYWZ0Omhvcm5fY29yYWxfYmxvY2sECQBuYW1lX2hhc2hnZSLRWUwGhAMKAG5ldHdvcmtfaWRSK6ccCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRTBAAACAQAbmFtZRoAbWluZWNyYWZ0Omhvcm5fY29yYWxfYmxvY2sECQBuYW1lX2hhc2hnZSLRWUwGhAMKAG5ldHdvcmtfaWRSK6ccCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:dead_tube_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRUBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaB9+lY3hAkNNAwoAbmV0d29ya19pZF0hKKYKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRUBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaB9+lY3hAkNNAwoAbmV0d29ya19pZF0hKKYKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:dead_brain_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRVBAAACAQAbmFtZSAAbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWxfYmxvY2sECQBuYW1lX2hhc2iHyDn52AO8uwMKAG5ldHdvcmtfaWQw7yCaCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRVBAAACAQAbmFtZSAAbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWxfYmxvY2sECQBuYW1lX2hhc2iHyDn52AO8uwMKAG5ldHdvcmtfaWQw7yCaCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:dead_bubble_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRWBAAACAQAbmFtZSEAbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsX2Jsb2NrBAkAbmFtZV9oYXNotwkk/ITrsjADCgBuZXR3b3JrX2lk56mXUgoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRWBAAACAQAbmFtZSEAbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsX2Jsb2NrBAkAbmFtZV9oYXNotwkk/ITrsjADCgBuZXR3b3JrX2lk56mXUgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:dead_fire_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRXBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaG0qHxbIrBEyAwoAbmV0d29ya19pZFvnH88KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRXBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaG0qHxbIrBEyAwoAbmV0d29ya19pZFvnH88KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:dead_horn_coral_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRYBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaL7D8bu4Fm+0AwoAbmV0d29ya19pZEALRLoKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRYBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaL7D8bu4Fm+0AwoAbmV0d29ya19pZEALRLoKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:sculk", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAgAACAQAbmFtZQ8AbWluZWNyYWZ0OnNjdWxrBAkAbmFtZV9oYXNo2Lq7T5yQF8kDCgBuZXR3b3JrX2lkyqUPPgoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAgAACAQAbmFtZQ8AbWluZWNyYWZ0OnNjdWxrBAkAbmFtZV9oYXNo2Lq7T5yQF8kDCgBuZXR3b3JrX2lkyqUPPgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:sculk_vein", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAgAACAQAbmFtZRQAbWluZWNyYWZ0OnNjdWxrX3ZlaW4ECQBuYW1lX2hhc2gJUdhVooV4zwMKAG5ldHdvcmtfaWSUfn1XCgYAc3RhdGVzAxkAbXVsdGlfZmFjZV9kaXJlY3Rpb25fYml0cwAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAgAACAQAbmFtZRQAbWluZWNyYWZ0OnNjdWxrX3ZlaW4ECQBuYW1lX2hhc2gJUdhVooV4zwMKAG5ldHdvcmtfaWSUfn1XCgYAc3RhdGVzAxkAbXVsdGlfZmFjZV9kaXJlY3Rpb25fYml0cwAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:sculk_catalyst", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAgAACAQAbmFtZRgAbWluZWNyYWZ0OnNjdWxrX2NhdGFseXN0BAkAbmFtZV9oYXNo+gCpbrCHST4DCgBuZXR3b3JrX2lkMJ2n/woGAHN0YXRlcwEFAGJsb29tAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAgAACAQAbmFtZRgAbWluZWNyYWZ0OnNjdWxrX2NhdGFseXN0BAkAbmFtZV9oYXNo+gCpbrCHST4DCgBuZXR3b3JrX2lkMJ2n/woGAHN0YXRlcwEFAGJsb29tAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:sculk_shrieker", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTMAgAACAQAbmFtZRgAbWluZWNyYWZ0OnNjdWxrX3Nocmlla2VyBAkAbmFtZV9oYXNo5OXtyObniQ4DCgBuZXR3b3JrX2lkxapoNAoGAHN0YXRlcwEGAGFjdGl2ZQABCgBjYW5fc3VtbW9uAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTMAgAACAQAbmFtZRgAbWluZWNyYWZ0OnNjdWxrX3Nocmlla2VyBAkAbmFtZV9oYXNo5OXtyObniQ4DCgBuZXR3b3JrX2lkxapoNAoGAHN0YXRlcwEGAGFjdGl2ZQABCgBjYW5fc3VtbW9uAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:sculk_sensor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQyAgAACAQAbmFtZRYAbWluZWNyYWZ0OnNjdWxrX3NlbnNvcgQJAG5hbWVfaGFzaCkmHreeTgNnAwoAbmV0d29ya19pZLj2WPcKBgBzdGF0ZXMDEgBzY3Vsa19zZW5zb3JfcGhhc2UAAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQyAgAACAQAbmFtZRYAbWluZWNyYWZ0OnNjdWxrX3NlbnNvcgQJAG5hbWVfaGFzaCkmHreeTgNnAwoAbmV0d29ya19pZLj2WPcKBgBzdGF0ZXMDEgBzY3Vsa19zZW5zb3JfcGhhc2UAAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:calibrated_sculk_sensor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAwAACAQAbmFtZSEAbWluZWNyYWZ0OmNhbGlicmF0ZWRfc2N1bGtfc2Vuc29yBAkAbmFtZV9oYXNoffAcXXN/iJUDCgBuZXR3b3JrX2lkwOx3QQoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAxIAc2N1bGtfc2Vuc29yX3BoYXNlAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAwAACAQAbmFtZSEAbWluZWNyYWZ0OmNhbGlicmF0ZWRfc2N1bGtfc2Vuc29yBAkAbmFtZV9oYXNoffAcXXN/iJUDCgBuZXR3b3JrX2lkwOx3QQoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAxIAc2N1bGtfc2Vuc29yX3BoYXNlAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:reinforced_deepslate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTRAgAACAQAbmFtZR4AbWluZWNyYWZ0OnJlaW5mb3JjZWRfZGVlcHNsYXRlBAkAbmFtZV9oYXNoldDmj91EapQDCgBuZXR3b3JrX2lkHIt+aQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTRAgAACAQAbmFtZR4AbWluZWNyYWZ0OnJlaW5mb3JjZWRfZGVlcHNsYXRlBAkAbmFtZV9oYXNoldDmj91EapQDCgBuZXR3b3JrX2lkHIt+aQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:leather_helmet" @@ -3563,25 +3665,6 @@ "id": "minecraft:arrow", "damage": 47 }, - { - "id": "minecraft:ominous_bottle" - }, - { - "id": "minecraft:ominous_bottle", - "damage": 1 - }, - { - "id": "minecraft:ominous_bottle", - "damage": 2 - }, - { - "id": "minecraft:ominous_bottle", - "damage": 3 - }, - { - "id": "minecraft:ominous_bottle", - "damage": 4 - }, { "id": "minecraft:shield" }, @@ -3707,6 +3790,57 @@ { "id": "minecraft:saddle" }, + { + "id": "minecraft:bundle" + }, + { + "id": "minecraft:white_bundle" + }, + { + "id": "minecraft:light_gray_bundle" + }, + { + "id": "minecraft:gray_bundle" + }, + { + "id": "minecraft:black_bundle" + }, + { + "id": "minecraft:brown_bundle" + }, + { + "id": "minecraft:red_bundle" + }, + { + "id": "minecraft:orange_bundle" + }, + { + "id": "minecraft:yellow_bundle" + }, + { + "id": "minecraft:lime_bundle" + }, + { + "id": "minecraft:green_bundle" + }, + { + "id": "minecraft:cyan_bundle" + }, + { + "id": "minecraft:light_blue_bundle" + }, + { + "id": "minecraft:blue_bundle" + }, + { + "id": "minecraft:purple_bundle" + }, + { + "id": "minecraft:magenta_bundle" + }, + { + "id": "minecraft:pink_bundle" + }, { "id": "minecraft:leather_horse_armor" }, @@ -4301,6 +4435,25 @@ "id": "minecraft:lingering_potion", "damage": 46 }, + { + "id": "minecraft:ominous_bottle" + }, + { + "id": "minecraft:ominous_bottle", + "damage": 1 + }, + { + "id": "minecraft:ominous_bottle", + "damage": 2 + }, + { + "id": "minecraft:ominous_bottle", + "damage": 3 + }, + { + "id": "minecraft:ominous_bottle", + "damage": 4 + }, { "id": "minecraft:spyglass" }, @@ -4375,119 +4528,119 @@ }, { "id": "minecraft:torch", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQyAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnRvcmNoBAkAbmFtZV9oYXNoagn7rmDBzisDCgBuZXR3b3JrX2lk+BwwuQoGAHN0YXRlcwgWAHRvcmNoX2ZhY2luZ19kaXJlY3Rpb24HAHVua25vd24AAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQyAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnRvcmNoBAkAbmFtZV9oYXNoagn7rmDBzisDCgBuZXR3b3JrX2lk+BwwuQoGAHN0YXRlcwgWAHRvcmNoX2ZhY2luZ19kaXJlY3Rpb24HAHVua25vd24AAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:soul_torch", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQLAgAACAQAbmFtZRQAbWluZWNyYWZ0OnNvdWxfdG9yY2gECQBuYW1lX2hhc2huixOT04BRdQMKAG5ldHdvcmtfaWShbFILCgYAc3RhdGVzCBYAdG9yY2hfZmFjaW5nX2RpcmVjdGlvbgcAdW5rbm93bgADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQLAgAACAQAbmFtZRQAbWluZWNyYWZ0OnNvdWxfdG9yY2gECQBuYW1lX2hhc2huixOT04BRdQMKAG5ldHdvcmtfaWShbFILCgYAc3RhdGVzCBYAdG9yY2hfZmFjaW5nX2RpcmVjdGlvbgcAdW5rbm93bgADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:sea_pickle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAQAACAQAbmFtZRQAbWluZWNyYWZ0OnNlYV9waWNrbGUECQBuYW1lX2hhc2iONEfZJB+glgMKAG5ldHdvcmtfaWSINWQyCgYAc3RhdGVzAw0AY2x1c3Rlcl9jb3VudAAAAAABCABkZWFkX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAQAACAQAbmFtZRQAbWluZWNyYWZ0OnNlYV9waWNrbGUECQBuYW1lX2hhc2iONEfZJB+glgMKAG5ldHdvcmtfaWSINWQyCgYAc3RhdGVzAw0AY2x1c3Rlcl9jb3VudAAAAAABCABkZWFkX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:lantern", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTPAQAACAQAbmFtZREAbWluZWNyYWZ0OmxhbnRlcm4ECQBuYW1lX2hhc2hMw44VI2HWygMKAG5ldHdvcmtfaWRkjQvzCgYAc3RhdGVzAQcAaGFuZ2luZwAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTPAQAACAQAbmFtZREAbWluZWNyYWZ0OmxhbnRlcm4ECQBuYW1lX2hhc2hMw44VI2HWygMKAG5ldHdvcmtfaWRkjQvzCgYAc3RhdGVzAQcAaGFuZ2luZwAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:soul_lantern", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQMAgAACAQAbmFtZRYAbWluZWNyYWZ0OnNvdWxfbGFudGVybgQJAG5hbWVfaGFzaGjIpjxk9z+RAwoAbmV0d29ya19pZGfoP8cKBgBzdGF0ZXMBBwBoYW5naW5nAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQMAgAACAQAbmFtZRYAbWluZWNyYWZ0OnNvdWxfbGFudGVybgQJAG5hbWVfaGFzaGjIpjxk9z+RAwoAbmV0d29ya19pZGfoP8cKBgBzdGF0ZXMBBwBoYW5naW5nAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAgAACAQAbmFtZRAAbWluZWNyYWZ0OmNhbmRsZQQJAG5hbWVfaGFzaHPd+MsNdWTfAwoAbmV0d29ya19pZHsBMA0KBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAgAACAQAbmFtZRAAbWluZWNyYWZ0OmNhbmRsZQQJAG5hbWVfaGFzaHPd+MsNdWTfAwoAbmV0d29ya19pZHsBMA0KBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:white_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWScAgAACAQAbmFtZRYAbWluZWNyYWZ0OndoaXRlX2NhbmRsZQQJAG5hbWVfaGFzaN1EG5Q1mHiEAwoAbmV0d29ya19pZKN1mmgKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWScAgAACAQAbmFtZRYAbWluZWNyYWZ0OndoaXRlX2NhbmRsZQQJAG5hbWVfaGFzaN1EG5Q1mHiEAwoAbmV0d29ya19pZKN1mmgKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:orange_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSdAgAACAQAbmFtZRcAbWluZWNyYWZ0Om9yYW5nZV9jYW5kbGUECQBuYW1lX2hhc2jySEVWHgUIHQMKAG5ldHdvcmtfaWSfVz82CgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSdAgAACAQAbmFtZRcAbWluZWNyYWZ0Om9yYW5nZV9jYW5kbGUECQBuYW1lX2hhc2jySEVWHgUIHQMKAG5ldHdvcmtfaWSfVz82CgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:magenta_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hZ2VudGFfY2FuZGxlBAkAbmFtZV9oYXNoG0u6YIOoBSEDCgBuZXR3b3JrX2lk9xGNkQoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hZ2VudGFfY2FuZGxlBAkAbmFtZV9oYXNoG0u6YIOoBSEDCgBuZXR3b3JrX2lk9xGNkQoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:light_blue_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSfAgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FuZGxlBAkAbmFtZV9oYXNocXGeK0zgrG0DCgBuZXR3b3JrX2lk2m1y8goGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSfAgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FuZGxlBAkAbmFtZV9oYXNocXGeK0zgrG0DCgBuZXR3b3JrX2lk2m1y8goGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:yellow_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAgAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19jYW5kbGUECQBuYW1lX2hhc2i00dtusU3CqQMKAG5ldHdvcmtfaWR9LTmpCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAgAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19jYW5kbGUECQBuYW1lX2hhc2i00dtusU3CqQMKAG5ldHdvcmtfaWR9LTmpCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:lime_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWShAgAACAQAbmFtZRUAbWluZWNyYWZ0OmxpbWVfY2FuZGxlBAkAbmFtZV9oYXNokcmrw5xvz7ADCgBuZXR3b3JrX2lkIAUu6QoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAgAACAQAbmFtZRUAbWluZWNyYWZ0OmxpbWVfY2FuZGxlBAkAbmFtZV9oYXNokcmrw5xvz7ADCgBuZXR3b3JrX2lkIAUu6QoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:pink_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAgAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfY2FuZGxlBAkAbmFtZV9oYXNoQJdEY4sZ0dwDCgBuZXR3b3JrX2lk23Rn5AoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAgAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfY2FuZGxlBAkAbmFtZV9oYXNoQJdEY4sZ0dwDCgBuZXR3b3JrX2lk23Rn5AoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:gray_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAgAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXlfY2FuZGxlBAkAbmFtZV9oYXNoS5poSo9wBDEDCgBuZXR3b3JrX2lk3trRCAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAgAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXlfY2FuZGxlBAkAbmFtZV9oYXNoS5poSo9wBDEDCgBuZXR3b3JrX2lk3trRCAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:light_gray_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FuZGxlBAkAbmFtZV9oYXNo9ruTZLBNMasDCgBuZXR3b3JrX2lkb6DOegoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FuZGxlBAkAbmFtZV9oYXNo9ruTZLBNMasDCgBuZXR3b3JrX2lkb6DOegoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:cyan_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAgAACAQAbmFtZRUAbWluZWNyYWZ0OmN5YW5fY2FuZGxlBAkAbmFtZV9oYXNoc/M8PNVcjOwDCgBuZXR3b3JrX2lkZoIQOQoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAgAACAQAbmFtZRUAbWluZWNyYWZ0OmN5YW5fY2FuZGxlBAkAbmFtZV9oYXNoc/M8PNVcjOwDCgBuZXR3b3JrX2lkZoIQOQoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:purple_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSmAgAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnBsZV9jYW5kbGUECQBuYW1lX2hhc2jaI3xUW0/myQMKAG5ldHdvcmtfaWSnLI2BCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSmAgAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnBsZV9jYW5kbGUECQBuYW1lX2hhc2jaI3xUW0/myQMKAG5ldHdvcmtfaWSnLI2BCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:blue_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAgAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfY2FuZGxlBAkAbmFtZV9oYXNoAASSPW6TgQADCgBuZXR3b3JrX2lkrxrjQAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAgAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfY2FuZGxlBAkAbmFtZV9oYXNoAASSPW6TgQADCgBuZXR3b3JrX2lkrxrjQAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:brown_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJyb3duX2NhbmRsZQQJAG5hbWVfaGFzaDia0l6s1+WYAwoAbmV0d29ya19pZKSkBXYKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJyb3duX2NhbmRsZQQJAG5hbWVfaGFzaDia0l6s1+WYAwoAbmV0d29ya19pZKSkBXYKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:green_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAgAACAQAbmFtZRYAbWluZWNyYWZ0OmdyZWVuX2NhbmRsZQQJAG5hbWVfaGFzaLeFPO1l+fIoAwoAbmV0d29ya19pZBkznDsKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAgAACAQAbmFtZRYAbWluZWNyYWZ0OmdyZWVuX2NhbmRsZQQJAG5hbWVfaGFzaLeFPO1l+fIoAwoAbmV0d29ya19pZBkznDsKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:red_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9jYW5kbGUECQBuYW1lX2hhc2jjAQpGf59ZdwMKAG5ldHdvcmtfaWRbb88GCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9jYW5kbGUECQBuYW1lX2hhc2jjAQpGf59ZdwMKAG5ldHdvcmtfaWRbb88GCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:black_candle", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJsYWNrX2NhbmRsZQQJAG5hbWVfaGFzaB+wRDpOqREKAwoAbmV0d29ya19pZNnOnuEKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJsYWNrX2NhbmRsZQQJAG5hbWVfaGFzaB+wRDpOqREKAwoAbmV0d29ya19pZNnOnuEKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:crafting_table", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6AAAACAQAbmFtZRgAbWluZWNyYWZ0OmNyYWZ0aW5nX3RhYmxlBAkAbmFtZV9oYXNoe76VAmjvbpYDCgBuZXR3b3JrX2lkwCxwaAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6AAAACAQAbmFtZRgAbWluZWNyYWZ0OmNyYWZ0aW5nX3RhYmxlBAkAbmFtZV9oYXNoe76VAmjvbpYDCgBuZXR3b3JrX2lkwCxwaAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:cartography_table", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTHAQAACAQAbmFtZRsAbWluZWNyYWZ0OmNhcnRvZ3JhcGh5X3RhYmxlBAkAbmFtZV9oYXNomaWiiD/znP8DCgBuZXR3b3JrX2lkI6FzMwoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTHAQAACAQAbmFtZRsAbWluZWNyYWZ0OmNhcnRvZ3JhcGh5X3RhYmxlBAkAbmFtZV9oYXNomaWiiD/znP8DCgBuZXR3b3JrX2lkI6FzMwoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:fletching_table", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAQAACAQAbmFtZRkAbWluZWNyYWZ0OmZsZXRjaGluZ190YWJsZQQJAG5hbWVfaGFzaPFibh8unKyUAwoAbmV0d29ya19pZJ2mW0oKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAQAACAQAbmFtZRkAbWluZWNyYWZ0OmZsZXRjaGluZ190YWJsZQQJAG5hbWVfaGFzaPFibh8unKyUAwoAbmV0d29ya19pZJ2mW0oKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:smithing_table", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAQAACAQAbmFtZRgAbWluZWNyYWZ0OnNtaXRoaW5nX3RhYmxlBAkAbmFtZV9oYXNo4tFES2xOXEYDCgBuZXR3b3JrX2lkXWMBzQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAQAACAQAbmFtZRgAbWluZWNyYWZ0OnNtaXRoaW5nX3RhYmxlBAkAbmFtZV9oYXNo4tFES2xOXEYDCgBuZXR3b3JrX2lkXWMBzQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:beehive", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAQAACAQAbmFtZREAbWluZWNyYWZ0OmJlZWhpdmUECQBuYW1lX2hhc2hCcqn12UbNpwMKAG5ldHdvcmtfaWR/idcaCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAMLAGhvbmV5X2xldmVsAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAQAACAQAbmFtZREAbWluZWNyYWZ0OmJlZWhpdmUECQBuYW1lX2hhc2hCcqn12UbNpwMKAG5ldHdvcmtfaWR/idcaCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAMLAGhvbmV5X2xldmVsAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:suspicious_sand", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAwAACAQAbmFtZRkAbWluZWNyYWZ0OnN1c3BpY2lvdXNfc2FuZAQJAG5hbWVfaGFzaL67QsuvLP00AwoAbmV0d29ya19pZKnkaIAKBgBzdGF0ZXMDEABicnVzaGVkX3Byb2dyZXNzAAAAAAEHAGhhbmdpbmcBAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAwAACAQAbmFtZRkAbWluZWNyYWZ0OnN1c3BpY2lvdXNfc2FuZAQJAG5hbWVfaGFzaL67QsuvLP00AwoAbmV0d29ya19pZKnkaIAKBgBzdGF0ZXMDEABicnVzaGVkX3Byb2dyZXNzAAAAAAEHAGhhbmdpbmcBAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:suspicious_gravel", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AwAACAQAbmFtZRsAbWluZWNyYWZ0OnN1c3BpY2lvdXNfZ3JhdmVsBAkAbmFtZV9oYXNoJSVbGNk7C3oDCgBuZXR3b3JrX2lkvIEJAAoGAHN0YXRlcwMQAGJydXNoZWRfcHJvZ3Jlc3MAAAAAAQcAaGFuZ2luZwEAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AwAACAQAbmFtZRsAbWluZWNyYWZ0OnN1c3BpY2lvdXNfZ3JhdmVsBAkAbmFtZV9oYXNoJSVbGNk7C3oDCgBuZXR3b3JrX2lkvIEJAAoGAHN0YXRlcwMQAGJydXNoZWRfcHJvZ3Jlc3MAAAAAAQcAaGFuZ2luZwEAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:campfire" @@ -4497,156 +4650,156 @@ }, { "id": "minecraft:furnace", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ9AAAACAQAbmFtZREAbWluZWNyYWZ0OmZ1cm5hY2UECQBuYW1lX2hhc2ioOQrludYY8wMKAG5ldHdvcmtfaWRZxnDOCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ9AAAACAQAbmFtZREAbWluZWNyYWZ0OmZ1cm5hY2UECQBuYW1lX2hhc2ioOQrludYY8wMKAG5ldHdvcmtfaWRZxnDOCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:blast_furnace", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTDAQAACAQAbmFtZRcAbWluZWNyYWZ0OmJsYXN0X2Z1cm5hY2UECQBuYW1lX2hhc2ivDbnjkpGm5QMKAG5ldHdvcmtfaWTcEbV/CgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTDAQAACAQAbmFtZRcAbWluZWNyYWZ0OmJsYXN0X2Z1cm5hY2UECQBuYW1lX2hhc2ivDbnjkpGm5QMKAG5ldHdvcmtfaWTcEbV/CgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:smoker", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAQAACAQAbmFtZRAAbWluZWNyYWZ0OnNtb2tlcgQJAG5hbWVfaGFzaJd1rDMkRWomAwoAbmV0d29ya19pZGWswMwKBgBzdGF0ZXMIHABtaW5lY3JhZnQ6Y2FyZGluYWxfZGlyZWN0aW9uBQBzb3V0aAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAQAACAQAbmFtZRAAbWluZWNyYWZ0OnNtb2tlcgQJAG5hbWVfaGFzaJd1rDMkRWomAwoAbmV0d29ya19pZGWswMwKBgBzdGF0ZXMIHABtaW5lY3JhZnQ6Y2FyZGluYWxfZGlyZWN0aW9uBQBzb3V0aAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:respawn_anchor", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJlc3Bhd25fYW5jaG9yBAkAbmFtZV9oYXNoZOdcjW05qigDCgBuZXR3b3JrX2lkmhMcaQoGAHN0YXRlcwMVAHJlc3Bhd25fYW5jaG9yX2NoYXJnZQAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJlc3Bhd25fYW5jaG9yBAkAbmFtZV9oYXNoZOdcjW05qigDCgBuZXR3b3JrX2lkmhMcaQoGAHN0YXRlcwMVAHJlc3Bhd25fYW5jaG9yX2NoYXJnZQAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:brewing_stand" }, { "id": "minecraft:anvil", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lkqXzNjwoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lkqXzNjwoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:chipped_anvil", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS+BAAACAQAbmFtZRcAbWluZWNyYWZ0OmNoaXBwZWRfYW52aWwECQBuYW1lX2hhc2ge+QY3vlS/eQMKAG5ldHdvcmtfaWRJ15iUCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWS+BAAACAQAbmFtZRcAbWluZWNyYWZ0OmNoaXBwZWRfYW52aWwECQBuYW1lX2hhc2ge+QY3vlS/eQMKAG5ldHdvcmtfaWRJ15iUCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:damaged_anvil", - "block_state_b64": "CgAAAwgAYmxvY2tfaWS/BAAACAQAbmFtZRcAbWluZWNyYWZ0OmRhbWFnZWRfYW52aWwECQBuYW1lX2hhc2imJ12Be2V8+AMKAG5ldHdvcmtfaWRh5SHkCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWS/BAAACAQAbmFtZRcAbWluZWNyYWZ0OmRhbWFnZWRfYW52aWwECQBuYW1lX2hhc2imJ12Be2V8+AMKAG5ldHdvcmtfaWRh5SHkCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:grindstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTCAQAACAQAbmFtZRQAbWluZWNyYWZ0OmdyaW5kc3RvbmUECQBuYW1lX2hhc2id56zc0nk99wMKAG5ldHdvcmtfaWS4Es07CgYAc3RhdGVzCAoAYXR0YWNobWVudAgAc3RhbmRpbmcDCQBkaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTCAQAACAQAbmFtZRQAbWluZWNyYWZ0OmdyaW5kc3RvbmUECQBuYW1lX2hhc2id56zc0nk99wMKAG5ldHdvcmtfaWS4Es07CgYAc3RhdGVzCAoAYXR0YWNobWVudAgAc3RhbmRpbmcDCQBkaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:enchanting_table", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR0AAAACAQAbmFtZRoAbWluZWNyYWZ0OmVuY2hhbnRpbmdfdGFibGUECQBuYW1lX2hhc2jgIx24VLvMvwMKAG5ldHdvcmtfaWRliFFJCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWR0AAAACAQAbmFtZRoAbWluZWNyYWZ0OmVuY2hhbnRpbmdfdGFibGUECQBuYW1lX2hhc2jgIx24VLvMvwMKAG5ldHdvcmtfaWRliFFJCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:bookshelf", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAAAACAQAbmFtZRMAbWluZWNyYWZ0OmJvb2tzaGVsZgQJAG5hbWVfaGFzaDU04DrgJCS9AwoAbmV0d29ya19pZBcWwIwKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAAAACAQAbmFtZRMAbWluZWNyYWZ0OmJvb2tzaGVsZgQJAG5hbWVfaGFzaDU04DrgJCS9AwoAbmV0d29ya19pZBcWwIwKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:chiseled_bookshelf", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAwAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX2Jvb2tzaGVsZgQJAG5hbWVfaGFzaNXDBnsIsywYAwoAbmV0d29ya19pZIprt5IKBgBzdGF0ZXMDDABib29rc19zdG9yZWQAAAAAAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAwAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX2Jvb2tzaGVsZgQJAG5hbWVfaGFzaNXDBnsIsywYAwoAbmV0d29ya19pZIprt5IKBgBzdGF0ZXMDDABib29rc19zdG9yZWQAAAAAAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:lectern", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTBAQAACAQAbmFtZREAbWluZWNyYWZ0OmxlY3Rlcm4ECQBuYW1lX2hhc2j5Z4Mmi/1QxAMKAG5ldHdvcmtfaWR4JfDHCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgBCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTBAQAACAQAbmFtZREAbWluZWNyYWZ0OmxlY3Rlcm4ECQBuYW1lX2hhc2j5Z4Mmi/1QxAMKAG5ldHdvcmtfaWR4JfDHCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgBCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:cauldron" }, { "id": "minecraft:composter", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAQAACAQAbmFtZRMAbWluZWNyYWZ0OmNvbXBvc3RlcgQJAG5hbWVfaGFzaPAADHptzeWJAwoAbmV0d29ya19pZHIL6i4KBgBzdGF0ZXMDFABjb21wb3N0ZXJfZmlsbF9sZXZlbAAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAQAACAQAbmFtZRMAbWluZWNyYWZ0OmNvbXBvc3RlcgQJAG5hbWVfaGFzaPAADHptzeWJAwoAbmV0d29ya19pZHIL6i4KBgBzdGF0ZXMDFABjb21wb3N0ZXJfZmlsbF9sZXZlbAAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:chest", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2AAAACAQAbmFtZQ8AbWluZWNyYWZ0OmNoZXN0BAkAbmFtZV9oYXNog9ozMxlcA88DCgBuZXR3b3JrX2lkDkOFvAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2AAAACAQAbmFtZQ8AbWluZWNyYWZ0OmNoZXN0BAkAbmFtZV9oYXNog9ozMxlcA88DCgBuZXR3b3JrX2lkDkOFvAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:trapped_chest", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAAAACAQAbmFtZRcAbWluZWNyYWZ0OnRyYXBwZWRfY2hlc3QECQBuYW1lX2hhc2g2qpF9stsEjgMKAG5ldHdvcmtfaWTjJWYxCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAbm9ydGgAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAAAACAQAbmFtZRcAbWluZWNyYWZ0OnRyYXBwZWRfY2hlc3QECQBuYW1lX2hhc2g2qpF9stsEjgMKAG5ldHdvcmtfaWTjJWYxCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAbm9ydGgAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:ender_chest", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAAAACAQAbmFtZRUAbWluZWNyYWZ0OmVuZGVyX2NoZXN0BAkAbmFtZV9oYXNohEZzOFdg0WUDCgBuZXR3b3JrX2lkx4jiSQoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAAAACAQAbmFtZRUAbWluZWNyYWZ0OmVuZGVyX2NoZXN0BAkAbmFtZV9oYXNohEZzOFdg0WUDCgBuZXR3b3JrX2lkx4jiSQoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:barrel", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhcnJlbAQJAG5hbWVfaGFzaHDkRPGymiRqAwoAbmV0d29ya19pZPnxzgsKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhcnJlbAQJAG5hbWVfaGFzaHDkRPGymiRqAwoAbmV0d29ya19pZPnxzgsKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:undyed_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAAAACAQAbmFtZRwAbWluZWNyYWZ0OnVuZHllZF9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaOC9mypm/MlBAwoAbmV0d29ya19pZJ8rxp0KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAAAACAQAbmFtZRwAbWluZWNyYWZ0OnVuZHllZF9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaOC9mypm/MlBAwoAbmV0d29ya19pZJ8rxp0KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:white_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAAAACAQAbmFtZRsAbWluZWNyYWZ0OndoaXRlX3NodWxrZXJfYm94BAkAbmFtZV9oYXNosK79m1rPUBwDCgBuZXR3b3JrX2lkjrET6goGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAAAACAQAbmFtZRsAbWluZWNyYWZ0OndoaXRlX3NodWxrZXJfYm94BAkAbmFtZV9oYXNosK79m1rPUBwDCgBuZXR3b3JrX2lkjrET6goGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:light_gray_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAwAACAQAbmFtZSAAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2iBe5zq7PxHmgMKAG5ldHdvcmtfaWSCVJv0CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAwAACAQAbmFtZSAAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2iBe5zq7PxHmgMKAG5ldHdvcmtfaWSCVJv0CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:gray_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRqAwAACAQAbmFtZRoAbWluZWNyYWZ0OmdyYXlfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2ga2s8ctjHUhgMKAG5ldHdvcmtfaWS3WMsWCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRqAwAACAQAbmFtZRoAbWluZWNyYWZ0OmdyYXlfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2ga2s8ctjHUhgMKAG5ldHdvcmtfaWS3WMsWCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:black_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRyAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJsYWNrX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoPm03OZphrp8DCgBuZXR3b3JrX2lkXHztNAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRyAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJsYWNrX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoPm03OZphrp8DCgBuZXR3b3JrX2lkXHztNAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:brown_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRvAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJyb3duX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoT3DD6qAL9cADCgBuZXR3b3JrX2lkaXxpYQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRvAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJyb3duX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoT3DD6qAL9cADCgBuZXR3b3JrX2lkaXxpYQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:red_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRxAwAACAQAbmFtZRkAbWluZWNyYWZ0OnJlZF9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaMIlKSCzqSZoAwoAbmV0d29ya19pZNrf+icKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRxAwAACAQAbmFtZRkAbWluZWNyYWZ0OnJlZF9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaMIlKSCzqSZoAwoAbmV0d29ya19pZNrf+icKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:orange_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAwAACAQAbmFtZRwAbWluZWNyYWZ0Om9yYW5nZV9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaG2MAXU67wGrAwoAbmV0d29ya19pZGoO05gKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAwAACAQAbmFtZRwAbWluZWNyYWZ0Om9yYW5nZV9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaG2MAXU67wGrAwoAbmV0d29ya19pZGoO05gKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:yellow_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRnAwAACAQAbmFtZRwAbWluZWNyYWZ0OnllbGxvd19zaHVsa2VyX2JveAQJAG5hbWVfaGFzaIsLwQHYjcIEAwoAbmV0d29ya19pZBCBSiYKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRnAwAACAQAbmFtZRwAbWluZWNyYWZ0OnllbGxvd19zaHVsa2VyX2JveAQJAG5hbWVfaGFzaIsLwQHYjcIEAwoAbmV0d29ya19pZBCBSiYKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:lime_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRoAwAACAQAbmFtZRoAbWluZWNyYWZ0OmxpbWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2hUwBkg+faUGAMKAG5ldHdvcmtfaWRJeKqqCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRoAwAACAQAbmFtZRoAbWluZWNyYWZ0OmxpbWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2hUwBkg+faUGAMKAG5ldHdvcmtfaWRJeKqqCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:green_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRwAwAACAQAbmFtZRsAbWluZWNyYWZ0OmdyZWVuX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoZgUeT3LupLUDCgBuZXR3b3JrX2lkzJiohQoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRwAwAACAQAbmFtZRsAbWluZWNyYWZ0OmdyZWVuX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoZgUeT3LupLUDCgBuZXR3b3JrX2lkzJiohQoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:cyan_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAwAACAQAbmFtZRoAbWluZWNyYWZ0OmN5YW5fc2h1bGtlcl9ib3gECQBuYW1lX2hhc2gSfbjteXg5yAMKAG5ldHdvcmtfaWTHeliECgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAwAACAQAbmFtZRoAbWluZWNyYWZ0OmN5YW5fc2h1bGtlcl9ib3gECQBuYW1lX2hhc2gSfbjteXg5yAMKAG5ldHdvcmtfaWTHeliECgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:light_blue_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAwAACAQAbmFtZSAAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2h0VFCX0qsRxQMKAG5ldHdvcmtfaWQXD8U0CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAwAACAQAbmFtZSAAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2h0VFCX0qsRxQMKAG5ldHdvcmtfaWQXD8U0CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:blue_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJsdWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2hn9gS0XIe6rAMKAG5ldHdvcmtfaWTO4PJaCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJsdWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2hn9gS0XIe6rAMKAG5ldHdvcmtfaWTO4PJaCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:purple_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAwAACAQAbmFtZRwAbWluZWNyYWZ0OnB1cnBsZV9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaEV/lkNPxRDdAwoAbmV0d29ya19pZFK25GAKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAwAACAQAbmFtZRwAbWluZWNyYWZ0OnB1cnBsZV9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaEV/lkNPxRDdAwoAbmV0d29ya19pZFK25GAKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:magenta_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAwAACAQAbmFtZR0AbWluZWNyYWZ0Om1hZ2VudGFfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2iqWM7IJHxcFgMKAG5ldHdvcmtfaWTyyudTCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAwAACAQAbmFtZR0AbWluZWNyYWZ0Om1hZ2VudGFfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2iqWM7IJHxcFgMKAG5ldHdvcmtfaWTyyudTCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:pink_shulker_box", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRpAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBpbmtfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2in1tkJ1GNcZgMKAG5ldHdvcmtfaWQOEGXjCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRpAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBpbmtfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2in1tkJ1GNcZgMKAG5ldHdvcmtfaWQOEGXjCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:armor_stand" }, { "id": "minecraft:noteblock", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAAAACAQAbmFtZRMAbWluZWNyYWZ0Om5vdGVibG9jawQJAG5hbWVfaGFzaHPA8dBBH0UaAwoAbmV0d29ya19pZH1U5QkKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAAAACAQAbmFtZRMAbWluZWNyYWZ0Om5vdGVibG9jawQJAG5hbWVfaGFzaHPA8dBBH0UaAwoAbmV0d29ya19pZH1U5QkKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:jukebox", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAAAACAQAbmFtZREAbWluZWNyYWZ0Omp1a2Vib3gECQBuYW1lX2hhc2ieAIPExf/ZfgMKAG5ldHdvcmtfaWSmR7JfCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAAAACAQAbmFtZREAbWluZWNyYWZ0Omp1a2Vib3gECQBuYW1lX2hhc2ieAIPExf/ZfgMKAG5ldHdvcmtfaWSmR7JfCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:music_disc_13" @@ -4713,15 +4866,15 @@ }, { "id": "minecraft:glowstone", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRZAAAACAQAbmFtZRMAbWluZWNyYWZ0Omdsb3dzdG9uZQQJAG5hbWVfaGFzaFYqXNkefIlPAwoAbmV0d29ya19pZGT7WYYKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRZAAAACAQAbmFtZRMAbWluZWNyYWZ0Omdsb3dzdG9uZQQJAG5hbWVfaGFzaFYqXNkefIlPAwoAbmV0d29ya19pZGT7WYYKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:redstone_lamp", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZHN0b25lX2xhbXAECQBuYW1lX2hhc2hJ9V80caPvEgMKAG5ldHdvcmtfaWRvNPwnCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZHN0b25lX2xhbXAECQBuYW1lX2hhc2hJ9V80caPvEgMKAG5ldHdvcmtfaWRvNPwnCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:sea_lantern", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAAAACAQAbmFtZRUAbWluZWNyYWZ0OnNlYV9sYW50ZXJuBAkAbmFtZV9oYXNoLPsv1TX9M+QDCgBuZXR3b3JrX2lk1PPVyAoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAAAACAQAbmFtZRUAbWluZWNyYWZ0OnNlYV9sYW50ZXJuBAkAbmFtZV9oYXNoLPsv1TX9M+QDCgBuZXR3b3JrX2lk1PPVyAoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:oak_sign" @@ -4747,6 +4900,9 @@ { "id": "minecraft:cherry_sign" }, + { + "id": "minecraft:pale_oak_sign" + }, { "id": "minecraft:bamboo_sign" }, @@ -4780,6 +4936,9 @@ { "id": "minecraft:cherry_hanging_sign" }, + { + "id": "minecraft:pale_oak_hanging_sign" + }, { "id": "minecraft:bamboo_hanging_sign" }, @@ -4841,47 +5000,48 @@ "id": "minecraft:tadpole_bucket" }, { - "id": "minecraft:skull", - "damage": 3 + "id": "minecraft:player_head", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTGBAAACAQAbmFtZRUAbWluZWNyYWZ0OnBsYXllcl9oZWFkBAkAbmFtZV9oYXNonFwZb7CL8EYDCgBuZXR3b3JrX2lkZeAXqAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { - "id": "minecraft:skull", - "damage": 2 + "id": "minecraft:zombie_head", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTFBAAACAQAbmFtZRUAbWluZWNyYWZ0OnpvbWJpZV9oZWFkBAkAbmFtZV9oYXNoixuENYuaGgEDCgBuZXR3b3JrX2lk0NsHDgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { - "id": "minecraft:skull", - "damage": 4 + "id": "minecraft:creeper_head", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTHBAAACAQAbmFtZRYAbWluZWNyYWZ0OmNyZWVwZXJfaGVhZAQJAG5hbWVfaGFzaCvAGFMS/RqVAwoAbmV0d29ya19pZEfskXYKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { - "id": "minecraft:skull", - "damage": 5 + "id": "minecraft:dragon_head", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTIBAAACAQAbmFtZRUAbWluZWNyYWZ0OmRyYWdvbl9oZWFkBAkAbmFtZV9oYXNozjh6bGRaa5UDCgBuZXR3b3JrX2lk/zjetgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { - "id": "minecraft:skull" + "id": "minecraft:skeleton_skull", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAAAACAQAbmFtZRgAbWluZWNyYWZ0OnNrZWxldG9uX3NrdWxsBAkAbmFtZV9oYXNo3+kbzeMgg4kDCgBuZXR3b3JrX2lk/RqWbwoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { - "id": "minecraft:skull", - "damage": 1 + "id": "minecraft:wither_skeleton_skull", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTEBAAACAQAbmFtZR8AbWluZWNyYWZ0OndpdGhlcl9za2VsZXRvbl9za3VsbAQJAG5hbWVfaGFzaEcZrUyy9cfRAwoAbmV0d29ya19pZJZ2G/oKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { - "id": "minecraft:skull", - "damage": 6 + "id": "minecraft:piglin_head", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTJBAAACAQAbmFtZRUAbWluZWNyYWZ0OnBpZ2xpbl9oZWFkBAkAbmFtZV9oYXNo+jUCKgb5DskDCgBuZXR3b3JrX2lkQ1ETVwoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:beacon", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAAAACAQAbmFtZRAAbWluZWNyYWZ0OmJlYWNvbgQJAG5hbWVfaGFzaACwhhfSkdkHAwoAbmV0d29ya19pZF8jfiEKBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAAAACAQAbmFtZRAAbWluZWNyYWZ0OmJlYWNvbgQJAG5hbWVfaGFzaACwhhfSkdkHAwoAbmV0d29ya19pZF8jfiEKBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:bell", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAQAACAQAbmFtZQ4AbWluZWNyYWZ0OmJlbGwECQBuYW1lX2hhc2iPqsgDXRcsxAMKAG5ldHdvcmtfaWT7zhOoCgYAc3RhdGVzCAoAYXR0YWNobWVudAgAc3RhbmRpbmcDCQBkaXJlY3Rpb24AAAAAAQoAdG9nZ2xlX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAQAACAQAbmFtZQ4AbWluZWNyYWZ0OmJlbGwECQBuYW1lX2hhc2iPqsgDXRcsxAMKAG5ldHdvcmtfaWT7zhOoCgYAc3RhdGVzCAoAYXR0YWNobWVudAgAc3RhbmRpbmcDCQBkaXJlY3Rpb24AAAAAAQoAdG9nZ2xlX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:conduit", - "block_state_b64": "CgAAAwgAYmxvY2tfaWScAQAACAQAbmFtZREAbWluZWNyYWZ0OmNvbmR1aXQECQBuYW1lX2hhc2jqxKAxq2EaWQMKAG5ldHdvcmtfaWTWcBVnCgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWScAQAACAQAbmFtZREAbWluZWNyYWZ0OmNvbmR1aXQECQBuYW1lX2hhc2jqxKAxq2EaWQMKAG5ldHdvcmtfaWTWcBVnCgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:stonecutter_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lY3V0dGVyX2Jsb2NrBAkAbmFtZV9oYXNoQAXTbAM3MeYDCgBuZXR3b3JrX2lkWS4RjAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lY3V0dGVyX2Jsb2NrBAkAbmFtZV9oYXNoQAXTbAM3MeYDCgBuZXR3b3JrX2lkWS4RjAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:coal" @@ -4937,6 +5097,9 @@ { "id": "minecraft:netherbrick" }, + { + "id": "minecraft:resin_brick" + }, { "id": "minecraft:prismarine_shard" }, @@ -4993,7 +5156,7 @@ }, { "id": "minecraft:heavy_core", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ7AgAACAQAbmFtZRQAbWluZWNyYWZ0OmhlYXZ5X2NvcmUECQBuYW1lX2hhc2hhz/uNCtrC2QMKAG5ldHdvcmtfaWRaFu+8CgYAc3RhdGVzAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ7AgAACAQAbmFtZRQAbWluZWNyYWZ0OmhlYXZ5X2NvcmUECQBuYW1lX2hhc2hhz/uNCtrC2QMKAG5ldHdvcmtfaWRaFu+8CgYAc3RhdGVzAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:blaze_powder" @@ -5030,11 +5193,11 @@ }, { "id": "minecraft:end_rod", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTQAAAACAQAbmFtZREAbWluZWNyYWZ0OmVuZF9yb2QECQBuYW1lX2hhc2jx/q5cEA0hmQMKAG5ldHdvcmtfaWQ2eM8kCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTQAAAACAQAbmFtZREAbWluZWNyYWZ0OmVuZF9yb2QECQBuYW1lX2hhc2jx/q5cEA0hmQMKAG5ldHdvcmtfaWQ2eM8kCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:lightning_rod", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ3AgAACAQAbmFtZRcAbWluZWNyYWZ0OmxpZ2h0bmluZ19yb2QECQBuYW1lX2hhc2ioXQF1xvfHNQMKAG5ldHdvcmtfaWRLuHyACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ3AgAACAQAbmFtZRcAbWluZWNyYWZ0OmxpZ2h0bmluZ19yb2QECQBuYW1lX2hhc2ioXQF1xvfHNQMKAG5ldHdvcmtfaWRLuHyACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:end_crystal" @@ -5048,9 +5211,6 @@ { "id": "minecraft:writable_book" }, - { - "id": "minecraft:trial_key" - }, { "id": "minecraft:enchanted_book", "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAEAAAA=" @@ -5563,6 +5723,9 @@ { "id": "minecraft:cherry_boat" }, + { + "id": "minecraft:pale_oak_boat" + }, { "id": "minecraft:bamboo_raft" }, @@ -5590,24 +5753,27 @@ { "id": "minecraft:cherry_chest_boat" }, + { + "id": "minecraft:pale_oak_chest_boat" + }, { "id": "minecraft:bamboo_chest_raft" }, { "id": "minecraft:rail", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRCAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnJhaWwECQBuYW1lX2hhc2hUzmhUXYJDUQMKAG5ldHdvcmtfaWR+Sp6YCgYAc3RhdGVzAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRCAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnJhaWwECQBuYW1lX2hhc2hUzmhUXYJDUQMKAG5ldHdvcmtfaWR+Sp6YCgYAc3RhdGVzAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:golden_rail", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQbAAAACAQAbmFtZRUAbWluZWNyYWZ0OmdvbGRlbl9yYWlsBAkAbmFtZV9oYXNoOoV5MaKipoUDCgBuZXR3b3JrX2lkfAcxLwoGAHN0YXRlcwENAHJhaWxfZGF0YV9iaXQAAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQbAAAACAQAbmFtZRUAbWluZWNyYWZ0OmdvbGRlbl9yYWlsBAkAbmFtZV9oYXNoOoV5MaKipoUDCgBuZXR3b3JrX2lkfAcxLwoGAHN0YXRlcwENAHJhaWxfZGF0YV9iaXQAAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:detector_rail", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQcAAAACAQAbmFtZRcAbWluZWNyYWZ0OmRldGVjdG9yX3JhaWwECQBuYW1lX2hhc2gVUk31qOysUQMKAG5ldHdvcmtfaWRVW/aICgYAc3RhdGVzAQ0AcmFpbF9kYXRhX2JpdAADDgByYWlsX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQcAAAACAQAbmFtZRcAbWluZWNyYWZ0OmRldGVjdG9yX3JhaWwECQBuYW1lX2hhc2gVUk31qOysUQMKAG5ldHdvcmtfaWRVW/aICgYAc3RhdGVzAQ0AcmFpbF9kYXRhX2JpdAADDgByYWlsX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:activator_rail", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AAAACAQAbmFtZRgAbWluZWNyYWZ0OmFjdGl2YXRvcl9yYWlsBAkAbmFtZV9oYXNosIL91qriCRkDCgBuZXR3b3JrX2lkZfckmwoGAHN0YXRlcwENAHJhaWxfZGF0YV9iaXQAAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AAAACAQAbmFtZRgAbWluZWNyYWZ0OmFjdGl2YXRvcl9yYWlsBAkAbmFtZV9oYXNosIL91qriCRkDCgBuZXR3b3JrX2lkZfckmwoGAHN0YXRlcwENAHJhaWxfZGF0YV9iaXQAAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:minecart" @@ -5626,139 +5792,147 @@ }, { "id": "minecraft:redstone_block", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSYAAAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZHN0b25lX2Jsb2NrBAkAbmFtZV9oYXNoRhULL0r8o0sDCgBuZXR3b3JrX2lklayOHgoGAHN0YXRlcwADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSYAAAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZHN0b25lX2Jsb2NrBAkAbmFtZV9oYXNoRhULL0r8o0sDCgBuZXR3b3JrX2lklayOHgoGAHN0YXRlcwADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:redstone_torch", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAAAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZHN0b25lX3RvcmNoBAkAbmFtZV9oYXNoizFRjpYMIDgDCgBuZXR3b3JrX2lkuHz7yAoGAHN0YXRlcwgWAHRvcmNoX2ZhY2luZ19kaXJlY3Rpb24HAHVua25vd24AAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAAAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZHN0b25lX3RvcmNoBAkAbmFtZV9oYXNoizFRjpYMIDgDCgBuZXR3b3JrX2lkuHz7yAoGAHN0YXRlcwgWAHRvcmNoX2ZhY2luZ19kaXJlY3Rpb24HAHVua25vd24AAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:lever", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmxldmVyBAkAbmFtZV9oYXNoGMJeLJsUMLYDCgBuZXR3b3JrX2lkEF/GuAoGAHN0YXRlcwgPAGxldmVyX2RpcmVjdGlvbg4AZG93bl9lYXN0X3dlc3QBCABvcGVuX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmxldmVyBAkAbmFtZV9oYXNoGMJeLJsUMLYDCgBuZXR3b3JrX2lkEF/GuAoGAHN0YXRlcwgPAGxldmVyX2RpcmVjdGlvbg4AZG93bl9lYXN0X3dlc3QBCABvcGVuX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:wooden_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAAAACAQAbmFtZRcAbWluZWNyYWZ0Ondvb2Rlbl9idXR0b24ECQBuYW1lX2hhc2hR7PgSTQt0sQMKAG5ldHdvcmtfaWSU07kYCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAAAACAQAbmFtZRcAbWluZWNyYWZ0Ondvb2Rlbl9idXR0b24ECQBuYW1lX2hhc2hR7PgSTQt0sQMKAG5ldHdvcmtfaWSU07kYCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:spruce_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAQAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9idXR0b24ECQBuYW1lX2hhc2jBW9Z8aYE7YQMKAG5ldHdvcmtfaWTkUIGuCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAQAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9idXR0b24ECQBuYW1lX2hhc2jBW9Z8aYE7YQMKAG5ldHdvcmtfaWTkUIGuCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:birch_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSMAQAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX2J1dHRvbgQJAG5hbWVfaGFzaJXYgGuSHbTwAwoAbmV0d29ya19pZGWp3yoKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSMAQAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX2J1dHRvbgQJAG5hbWVfaGFzaJXYgGuSHbTwAwoAbmV0d29ya19pZGWp3yoKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:jungle_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSOAQAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9idXR0b24ECQBuYW1lX2hhc2iCgNANcJs+BQMKAG5ldHdvcmtfaWT9fImWCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSOAQAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9idXR0b24ECQBuYW1lX2hhc2iCgNANcJs+BQMKAG5ldHdvcmtfaWT9fImWCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:acacia_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAQAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9idXR0b24ECQBuYW1lX2hhc2gVvmcT7LTO0wMKAG5ldHdvcmtfaWRQnxIJCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAQAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9idXR0b24ECQBuYW1lX2hhc2gVvmcT7LTO0wMKAG5ldHdvcmtfaWRQnxIJCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:dark_oak_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSNAQAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX2J1dHRvbgQJAG5hbWVfaGFzaIV10ZGGrCIEAwoAbmV0d29ya19pZN5vAmIKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSNAQAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX2J1dHRvbgQJAG5hbWVfaGFzaIV10ZGGrCIEAwoAbmV0d29ya19pZN5vAmIKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:mangrove_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX2J1dHRvbgQJAG5hbWVfaGFzaNzeYYKLgOzJAwoAbmV0d29ya19pZAFEGQ0KBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX2J1dHRvbgQJAG5hbWVfaGFzaNzeYYKLgOzJAwoAbmV0d29ya19pZAFEGQ0KBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:cherry_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9idXR0b24ECQBuYW1lX2hhc2j2/IHjeAbUcwMKAG5ldHdvcmtfaWRJ1irQCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9idXR0b24ECQBuYW1lX2hhc2j2/IHjeAbUcwMKAG5ldHdvcmtfaWRJ1irQCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:pale_oak_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTcBAAACAQAbmFtZRkAbWluZWNyYWZ0OnBhbGVfb2FrX2J1dHRvbgQJAG5hbWVfaGFzaLk54s7RtGHgAwoAbmV0d29ya19pZNLO6ZwKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:bamboo_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT+AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19idXR0b24ECQBuYW1lX2hhc2j7AddMi+6nsgMKAG5ldHdvcmtfaWSa9w4/CgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWT+AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19idXR0b24ECQBuYW1lX2hhc2j7AddMi+6nsgMKAG5ldHdvcmtfaWSa9w4/CgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:stone_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAAAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX2J1dHRvbgQJAG5hbWVfaGFzaM4ejMctmvohAwoAbmV0d29ya19pZMw+aC0KBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAAAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX2J1dHRvbgQJAG5hbWVfaGFzaM4ejMctmvohAwoAbmV0d29ya19pZMw+aC0KBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:crimson_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fYnV0dG9uBAkAbmFtZV9oYXNofnjYHaYIeWgDCgBuZXR3b3JrX2lk+n1vyQoGAHN0YXRlcwESAGJ1dHRvbl9wcmVzc2VkX2JpdAADEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fYnV0dG9uBAkAbmFtZV9oYXNofnjYHaYIeWgDCgBuZXR3b3JrX2lk+n1vyQoGAHN0YXRlcwESAGJ1dHRvbl9wcmVzc2VkX2JpdAADEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:warped_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9idXR0b24ECQBuYW1lX2hhc2jwkV2EU6Cn1QMKAG5ldHdvcmtfaWTnHnk1CgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9idXR0b24ECQBuYW1lX2hhc2jwkV2EU6Cn1QMKAG5ldHdvcmtfaWTnHnk1CgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:polished_blackstone_button", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQnAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnV0dG9uBAkAbmFtZV9oYXNojmxzQKS0S/EDCgBuZXR3b3JrX2lkDtQ95woGAHN0YXRlcwESAGJ1dHRvbl9wcmVzc2VkX2JpdAADEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQnAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnV0dG9uBAkAbmFtZV9oYXNojmxzQKS0S/EDCgBuZXR3b3JrX2lkDtQ95woGAHN0YXRlcwESAGJ1dHRvbl9wcmVzc2VkX2JpdAADEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:tripwire_hook", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAAAACAQAbmFtZRcAbWluZWNyYWZ0OnRyaXB3aXJlX2hvb2sECQBuYW1lX2hhc2gQdp+oGZLNnAMKAG5ldHdvcmtfaWSy+1KJCgYAc3RhdGVzAQwAYXR0YWNoZWRfYml0AAMJAGRpcmVjdGlvbgAAAAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAAAACAQAbmFtZRcAbWluZWNyYWZ0OnRyaXB3aXJlX2hvb2sECQBuYW1lX2hhc2gQdp+oGZLNnAMKAG5ldHdvcmtfaWSy+1KJCgYAc3RhdGVzAQwAYXR0YWNoZWRfYml0AAMJAGRpcmVjdGlvbgAAAAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:wooden_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAAAACAQAbmFtZR8AbWluZWNyYWZ0Ondvb2Rlbl9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaGkGs5kCuA74AwoAbmV0d29ya19pZDRzPNwKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAAAACAQAbmFtZR8AbWluZWNyYWZ0Ondvb2Rlbl9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaGkGs5kCuA74AwoAbmV0d29ya19pZDRzPNwKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:spruce_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAQAACAQAbmFtZR8AbWluZWNyYWZ0OnNwcnVjZV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaNmwuq549fJKAwoAbmV0d29ya19pZLQMCw0KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAQAACAQAbmFtZR8AbWluZWNyYWZ0OnNwcnVjZV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaNmwuq549fJKAwoAbmV0d29ya19pZLQMCw0KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:birch_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSWAQAACAQAbmFtZR4AbWluZWNyYWZ0OmJpcmNoX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNorQkT9kDdlTwDCgBuZXR3b3JrX2lkH0G97AoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSWAQAACAQAbmFtZR4AbWluZWNyYWZ0OmJpcmNoX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNorQkT9kDdlTwDCgBuZXR3b3JrX2lkH0G97AoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:jungle_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSYAQAACAQAbmFtZR8AbWluZWNyYWZ0Omp1bmdsZV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaJ7DcteCkb8/AwoAbmV0d29ya19pZLdPBSAKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSYAQAACAQAbmFtZR8AbWluZWNyYWZ0Omp1bmdsZV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaJ7DcteCkb8/AwoAbmV0d29ya19pZLdPBSAKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:acacia_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSVAQAACAQAbmFtZR8AbWluZWNyYWZ0OmFjYWNpYV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaC2frZtfoYqCAwoAbmV0d29ya19pZIDdI18KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSVAQAACAQAbmFtZR8AbWluZWNyYWZ0OmFjYWNpYV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaC2frZtfoYqCAwoAbmV0d29ya19pZIDdI18KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:dark_oak_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAQAACAQAbmFtZSEAbWluZWNyYWZ0OmRhcmtfb2FrX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoHUCJsTy52pwDCgBuZXR3b3JrX2lkKpi8rAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAQAACAQAbmFtZSEAbWluZWNyYWZ0OmRhcmtfb2FrX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoHUCJsTy52pwDCgBuZXR3b3JrX2lkKpi8rAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:mangrove_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAgAACAQAbmFtZSEAbWluZWNyYWZ0Om1hbmdyb3ZlX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoiDsTfJaX100DCgBuZXR3b3JrX2lkuwWDyQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAgAACAQAbmFtZSEAbWluZWNyYWZ0Om1hbmdyb3ZlX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoiDsTfJaX100DCgBuZXR3b3JrX2lkuwWDyQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:cherry_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAwAACAQAbmFtZR8AbWluZWNyYWZ0OmNoZXJyeV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaALMqYEZDUQHAwoAbmV0d29ya19pZPNT+r0KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAwAACAQAbmFtZR8AbWluZWNyYWZ0OmNoZXJyeV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaALMqYEZDUQHAwoAbmV0d29ya19pZPNT+r0KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24BKBUBAA==" + }, + { + "id": "minecraft:pale_oak_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTkBAAACAQAbmFtZSEAbWluZWNyYWZ0OnBhbGVfb2FrX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNo8cvY7evY5xkDCgBuZXR3b3JrX2lkDmW0uAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:bamboo_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJhbWJvb19wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaNvxJ7NIAaqlAwoAbmV0d29ya19pZIZ8XnYKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJhbWJvb19wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaNvxJ7NIAaqlAwoAbmV0d29ya19pZIZ8XnYKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:crimson_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAgAACAQAbmFtZSAAbWluZWNyYWZ0OmNyaW1zb25fcHJlc3N1cmVfcGxhdGUECQBuYW1lX2hhc2hqBDVDAd31/gMKAG5ldHdvcmtfaWRmV18LCgYAc3RhdGVzAw8AcmVkc3RvbmVfc2lnbmFsAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAgAACAQAbmFtZSAAbWluZWNyYWZ0OmNyaW1zb25fcHJlc3N1cmVfcGxhdGUECQBuYW1lX2hhc2hqBDVDAd31/gMKAG5ldHdvcmtfaWRmV18LCgYAc3RhdGVzAw8AcmVkc3RvbmVfc2lnbmFsAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:warped_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAgAACAQAbmFtZR8AbWluZWNyYWZ0OndhcnBlZF9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaBxFoQksWtYUAwoAbmV0d29ya19pZJVRoIcKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAgAACAQAbmFtZR8AbWluZWNyYWZ0OndhcnBlZF9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaBxFoQksWtYUAwoAbmV0d29ya19pZJVRoIcKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:stone_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0b25lX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNounJuTBUTrU8DCgBuZXR3b3JrX2lkjDydwQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0b25lX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNounJuTBUTrU8DCgBuZXR3b3JrX2lkjDydwQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:light_weighted_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSTAAAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X3dlaWdodGVkX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoOyOJkNxLtkEDCgBuZXR3b3JrX2lkrr2AjgoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSTAAAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X3dlaWdodGVkX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoOyOJkNxLtkEDCgBuZXR3b3JrX2lkrr2AjgoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:heavy_weighted_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAAAACAQAbmFtZScAbWluZWNyYWZ0OmhlYXZ5X3dlaWdodGVkX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoltgDmDvTajUDCgBuZXR3b3JrX2lkFxVKuQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAAAACAQAbmFtZScAbWluZWNyYWZ0OmhlYXZ5X3dlaWdodGVkX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoltgDmDvTajUDCgBuZXR3b3JrX2lkFxVKuQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:polished_blackstone_pressure_plate", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAgAACAQAbmFtZSwAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfcHJlc3N1cmVfcGxhdGUECQBuYW1lX2hhc2h65Ci6/CeGqwMKAG5ldHdvcmtfaWTaSW5xCgYAc3RhdGVzAw8AcmVkc3RvbmVfc2lnbmFsAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAgAACAQAbmFtZSwAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfcHJlc3N1cmVfcGxhdGUECQBuYW1lX2hhc2h65Ci6/CeGqwMKAG5ldHdvcmtfaWTaSW5xCgYAc3RhdGVzAw8AcmVkc3RvbmVfc2lnbmFsAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:observer", - "block_state_b64": "CgAAAwgAYmxvY2tfaWT7AAAACAQAbmFtZRIAbWluZWNyYWZ0Om9ic2VydmVyBAkAbmFtZV9oYXNoYhlh1lpmHTgDCgBuZXR3b3JrX2lkQEh55goGAHN0YXRlcwgaAG1pbmVjcmFmdDpmYWNpbmdfZGlyZWN0aW9uBABkb3duAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWT7AAAACAQAbmFtZRIAbWluZWNyYWZ0Om9ic2VydmVyBAkAbmFtZV9oYXNoYhlh1lpmHTgDCgBuZXR3b3JrX2lkQEh55goGAHN0YXRlcwgaAG1pbmVjcmFmdDpmYWNpbmdfZGlyZWN0aW9uBABkb3duAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:daylight_detector", - "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAAAACAQAbmFtZRsAbWluZWNyYWZ0OmRheWxpZ2h0X2RldGVjdG9yBAkAbmFtZV9oYXNoV0F0s7B7PVgDCgBuZXR3b3JrX2lkri5afQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAAAACAQAbmFtZRsAbWluZWNyYWZ0OmRheWxpZ2h0X2RldGVjdG9yBAkAbmFtZV9oYXNoV0F0s7B7PVgDCgBuZXR3b3JrX2lkri5afQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:repeater" @@ -5771,34 +5945,34 @@ }, { "id": "minecraft:dropper", - "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AAAACAQAbmFtZREAbWluZWNyYWZ0OmRyb3BwZXIECQBuYW1lX2hhc2joXP7XqU0l3QMKAG5ldHdvcmtfaWQfQN6zCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgMAAAABDQB0cmlnZ2VyZWRfYml0AAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AAAACAQAbmFtZREAbWluZWNyYWZ0OmRyb3BwZXIECQBuYW1lX2hhc2joXP7XqU0l3QMKAG5ldHdvcmtfaWQfQN6zCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgMAAAABDQB0cmlnZ2VyZWRfYml0AAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:dispenser", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAAAACAQAbmFtZRMAbWluZWNyYWZ0OmRpc3BlbnNlcgQJAG5hbWVfaGFzaP1RR+zAbYP2AwoAbmV0d29ya19pZGAayD0KBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAwAAAAENAHRyaWdnZXJlZF9iaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAAAACAQAbmFtZRMAbWluZWNyYWZ0OmRpc3BlbnNlcgQJAG5hbWVfaGFzaP1RR+zAbYP2AwoAbmV0d29ya19pZGAayD0KBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAwAAAAENAHRyaWdnZXJlZF9iaXQAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:crafter", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4AgAACAQAbmFtZREAbWluZWNyYWZ0OmNyYWZ0ZXIECQBuYW1lX2hhc2iLCT/rJmRN8QMKAG5ldHdvcmtfaWTPTbvrCgYAc3RhdGVzAQgAY3JhZnRpbmcACAsAb3JpZW50YXRpb24JAGRvd25fZWFzdAENAHRyaWdnZXJlZF9iaXQAAAMHAHZlcnNpb24HHhUBAA==" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4AgAACAQAbmFtZREAbWluZWNyYWZ0OmNyYWZ0ZXIECQBuYW1lX2hhc2iLCT/rJmRN8QMKAG5ldHdvcmtfaWTPTbvrCgYAc3RhdGVzAQgAY3JhZnRpbmcACAsAb3JpZW50YXRpb24JAGRvd25fZWFzdAENAHRyaWdnZXJlZF9iaXQAAAMHAHZlcnNpb24BKBUBAA==" }, { "id": "minecraft:piston", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQhAAAACAQAbmFtZRAAbWluZWNyYWZ0OnBpc3RvbgQJAG5hbWVfaGFzaDs3AFh1fL0uAwoAbmV0d29ya19pZLD/5XQKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAQAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQhAAAACAQAbmFtZRAAbWluZWNyYWZ0OnBpc3RvbgQJAG5hbWVfaGFzaDs3AFh1fL0uAwoAbmV0d29ya19pZLD/5XQKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAQAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:sticky_piston", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQdAAAACAQAbmFtZRcAbWluZWNyYWZ0OnN0aWNreV9waXN0b24ECQBuYW1lX2hhc2hPFJFJSiJ0ZQMKAG5ldHdvcmtfaWT/MzCJCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgEAAAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQdAAAACAQAbmFtZRcAbWluZWNyYWZ0OnN0aWNreV9waXN0b24ECQBuYW1lX2hhc2hPFJFJSiJ0ZQMKAG5ldHdvcmtfaWT/MzCJCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgEAAAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:tnt", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAAAACAQAbmFtZQ0AbWluZWNyYWZ0OnRudAQJAG5hbWVfaGFzaEYOHwCvJH29AwoAbmV0d29ya19pZAXzHyUKBgBzdGF0ZXMBCwBleHBsb2RlX2JpdAAAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAAAACAQAbmFtZQ0AbWluZWNyYWZ0OnRudAQJAG5hbWVfaGFzaEYOHwCvJH29AwoAbmV0d29ya19pZAXzHyUKBgBzdGF0ZXMBCwBleHBsb2RlX2JpdAAAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:name_tag" }, { "id": "minecraft:loom", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAQAACAQAbmFtZQ4AbWluZWNyYWZ0Omxvb20ECQBuYW1lX2hhc2i7DKjAXNq8TAMKAG5ldHdvcmtfaWR/49HXCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAQAACAQAbmFtZQ4AbWluZWNyYWZ0Omxvb20ECQBuYW1lX2hhc2i7DKjAXNq8TAMKAG5ldHdvcmtfaWR/49HXCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" }, { "id": "minecraft:banner", @@ -6192,11 +6366,17 @@ }, { "id": "minecraft:target", - "block_state_b64": "CgAAAwgAYmxvY2tfaWTuAQAACAQAbmFtZRAAbWluZWNyYWZ0OnRhcmdldAQJAG5hbWVfaGFzaJc66SVbYlaxAwoAbmV0d29ya19pZPBozs0KBgBzdGF0ZXMAAwcAdmVyc2lvbgceFQEA" + "block_state_b64": "CgAAAwgAYmxvY2tfaWTuAQAACAQAbmFtZRAAbWluZWNyYWZ0OnRhcmdldAQJAG5hbWVfaGFzaJc66SVbYlaxAwoAbmV0d29ya19pZPBozs0KBgBzdGF0ZXMAAwcAdmVyc2lvbgEoFQEA" }, { "id": "minecraft:decorated_pot", - "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAwAACAQAbmFtZRcAbWluZWNyYWZ0OmRlY29yYXRlZF9wb3QECQBuYW1lX2hhc2jjQgckn8VTvwMKAG5ldHdvcmtfaWRwvkUUCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uBx4VAQA=" + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAwAACAQAbmFtZRcAbWluZWNyYWZ0OmRlY29yYXRlZF9wb3QECQBuYW1lX2hhc2jjQgckn8VTvwMKAG5ldHdvcmtfaWRwvkUUCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uASgVAQA=" + }, + { + "id": "minecraft:trial_key" + }, + { + "id": "minecraft:ominous_trial_key" }, { "id": "minecraft:lodestone_compass" @@ -6206,9 +6386,6 @@ }, { "id": "minecraft:ender_dragon_spawn_egg" - }, - { - "id": "minecraft:ominous_trial_key" } ] -} \ No newline at end of file +} diff --git a/core/src/main/resources/bedrock/entity_identifiers.dat b/core/src/main/resources/bedrock/entity_identifiers.dat index 90ca16be3d6ee478d83e971414d8f9bc59c55f00..2dd5602491f79aaa74aa73fcbeace6cd434ab6ae 100644 GIT binary patch delta 60 zcmez6u*;E`i-D6ZGbJapxP+^TX|f}u#N;#F+#3zp6edm(p1hZZn=iR2H8DFgFP)jW QC^KcrWJ5WT$z}>J06+;6%>V!Z delta 34 qcmdnx_{)Kpi-D6ZGbJapxP+^LX|f}u#N;#F+#3zp6egD`xBvjTv<gQ6 diff --git a/core/src/main/resources/bedrock/item_tags.1_20_80.json b/core/src/main/resources/bedrock/item_tags.1_20_80.json deleted file mode 100644 index 4203c96c1..000000000 --- a/core/src/main/resources/bedrock/item_tags.1_20_80.json +++ /dev/null @@ -1,784 +0,0 @@ -{ - "minecraft:arrow": [ - "minecraft:arrow" - ], - "minecraft:banner": [ - "minecraft:banner" - ], - "minecraft:boat": [ - "minecraft:oak_boat", - "minecraft:birch_boat", - "minecraft:jungle_boat", - "minecraft:spruce_boat", - "minecraft:mangrove_boat", - "minecraft:acacia_boat", - "minecraft:oak_chest_boat", - "minecraft:dark_oak_boat", - "minecraft:birch_chest_boat", - "minecraft:jungle_chest_boat", - "minecraft:spruce_chest_boat", - "minecraft:acacia_chest_boat", - "minecraft:dark_oak_chest_boat", - "minecraft:mangrove_chest_boat", - "minecraft:cherry_boat", - "minecraft:cherry_chest_boat", - "minecraft:bamboo_raft", - "minecraft:bamboo_chest_raft" - ], - "minecraft:boats": [ - "minecraft:oak_boat", - "minecraft:birch_boat", - "minecraft:jungle_boat", - "minecraft:spruce_boat", - "minecraft:mangrove_boat", - "minecraft:acacia_boat", - "minecraft:oak_chest_boat", - "minecraft:dark_oak_boat", - "minecraft:birch_chest_boat", - "minecraft:jungle_chest_boat", - "minecraft:spruce_chest_boat", - "minecraft:acacia_chest_boat", - "minecraft:dark_oak_chest_boat", - "minecraft:mangrove_chest_boat", - "minecraft:cherry_boat", - "minecraft:cherry_chest_boat", - "minecraft:bamboo_raft", - "minecraft:bamboo_chest_raft" - ], - "minecraft:bookshelf_books": [ - "minecraft:book", - "minecraft:writable_book", - "minecraft:enchanted_book", - "minecraft:written_book" - ], - "minecraft:chainmail_tier": [ - "minecraft:chainmail_helmet", - "minecraft:chainmail_leggings", - "minecraft:chainmail_chestplate", - "minecraft:chainmail_boots" - ], - "minecraft:chest_boat": [], - "minecraft:coals": [ - "minecraft:coal", - "minecraft:charcoal" - ], - "minecraft:crimson_stems": [ - "minecraft:crimson_hyphae", - "minecraft:stripped_crimson_hyphae", - "minecraft:crimson_stem", - "minecraft:stripped_crimson_stem" - ], - "minecraft:decorated_pot_sherds": [ - "minecraft:blade_pottery_sherd", - "minecraft:brick", - "minecraft:angler_pottery_sherd", - "minecraft:burn_pottery_sherd", - "minecraft:archer_pottery_sherd", - "minecraft:arms_up_pottery_sherd", - "minecraft:heartbreak_pottery_sherd", - "minecraft:brewer_pottery_sherd", - "minecraft:danger_pottery_sherd", - "minecraft:explorer_pottery_sherd", - "minecraft:friend_pottery_sherd", - "minecraft:heart_pottery_sherd", - "minecraft:howl_pottery_sherd", - "minecraft:miner_pottery_sherd", - "minecraft:mourner_pottery_sherd", - "minecraft:plenty_pottery_sherd", - "minecraft:skull_pottery_sherd", - "minecraft:prize_pottery_sherd", - "minecraft:sheaf_pottery_sherd", - "minecraft:shelter_pottery_sherd", - "minecraft:snort_pottery_sherd" - ], - "minecraft:diamond_tier": [ - "minecraft:diamond_axe", - "minecraft:diamond_sword", - "minecraft:diamond_pickaxe", - "minecraft:diamond_shovel", - "minecraft:diamond_hoe", - "minecraft:diamond_helmet", - "minecraft:diamond_chestplate", - "minecraft:diamond_leggings", - "minecraft:diamond_boots" - ], - "minecraft:digger": [ - "minecraft:stone_pickaxe", - "minecraft:iron_pickaxe", - "minecraft:iron_shovel", - "minecraft:iron_axe", - "minecraft:wooden_shovel", - "minecraft:wooden_pickaxe", - "minecraft:stone_shovel", - "minecraft:wooden_axe", - "minecraft:stone_axe", - "minecraft:diamond_shovel", - "minecraft:diamond_pickaxe", - "minecraft:diamond_axe", - "minecraft:golden_shovel", - "minecraft:golden_pickaxe", - "minecraft:golden_axe", - "minecraft:wooden_hoe", - "minecraft:stone_hoe", - "minecraft:iron_hoe", - "minecraft:diamond_hoe", - "minecraft:golden_hoe", - "minecraft:netherite_shovel", - "minecraft:netherite_pickaxe", - "minecraft:netherite_axe", - "minecraft:netherite_hoe" - ], - "minecraft:door": [ - "minecraft:wooden_door", - "minecraft:iron_door", - "minecraft:spruce_door", - "minecraft:birch_door", - "minecraft:crimson_door", - "minecraft:jungle_door", - "minecraft:dark_oak_door", - "minecraft:acacia_door", - "minecraft:mangrove_door", - "minecraft:warped_door", - "minecraft:cherry_door", - "minecraft:bamboo_door" - ], - "minecraft:golden_tier": [ - "minecraft:golden_sword", - "minecraft:golden_hoe", - "minecraft:golden_shovel", - "minecraft:golden_chestplate", - "minecraft:golden_pickaxe", - "minecraft:golden_axe", - "minecraft:golden_leggings", - "minecraft:golden_helmet", - "minecraft:golden_boots" - ], - "minecraft:hanging_actor": [ - "minecraft:painting" - ], - "minecraft:hanging_sign": [ - "minecraft:cherry_hanging_sign", - "minecraft:oak_hanging_sign", - "minecraft:crimson_hanging_sign", - "minecraft:acacia_hanging_sign", - "minecraft:spruce_hanging_sign", - "minecraft:birch_hanging_sign", - "minecraft:jungle_hanging_sign", - "minecraft:dark_oak_hanging_sign", - "minecraft:warped_hanging_sign", - "minecraft:mangrove_hanging_sign", - "minecraft:bamboo_hanging_sign" - ], - "minecraft:horse_armor": [ - "minecraft:leather_horse_armor", - "minecraft:iron_horse_armor", - "minecraft:golden_horse_armor", - "minecraft:diamond_horse_armor" - ], - "minecraft:iron_tier": [ - "minecraft:iron_pickaxe", - "minecraft:iron_shovel", - "minecraft:iron_sword", - "minecraft:iron_axe", - "minecraft:iron_hoe", - "minecraft:iron_chestplate", - "minecraft:iron_helmet", - "minecraft:iron_leggings", - "minecraft:iron_boots" - ], - "minecraft:is_armor": [ - "minecraft:leather_boots", - "minecraft:leather_leggings", - "minecraft:leather_helmet", - "minecraft:leather_chestplate", - "minecraft:chainmail_leggings", - "minecraft:elytra", - "minecraft:chainmail_helmet", - "minecraft:chainmail_chestplate", - "minecraft:chainmail_boots", - "minecraft:iron_helmet", - "minecraft:iron_chestplate", - "minecraft:iron_leggings", - "minecraft:iron_boots", - "minecraft:diamond_helmet", - "minecraft:diamond_chestplate", - "minecraft:diamond_leggings", - "minecraft:diamond_boots", - "minecraft:golden_helmet", - "minecraft:golden_chestplate", - "minecraft:golden_leggings", - "minecraft:golden_boots", - "minecraft:turtle_helmet", - "minecraft:netherite_helmet", - "minecraft:netherite_chestplate", - "minecraft:netherite_leggings", - "minecraft:netherite_boots" - ], - "minecraft:is_axe": [ - "minecraft:iron_axe", - "minecraft:wooden_axe", - "minecraft:diamond_axe", - "minecraft:netherite_axe", - "minecraft:stone_axe", - "minecraft:golden_axe" - ], - "minecraft:is_cooked": [ - "minecraft:cooked_porkchop", - "minecraft:cooked_cod", - "minecraft:rabbit_stew", - "minecraft:cooked_salmon", - "minecraft:cooked_beef", - "minecraft:cooked_chicken", - "minecraft:cooked_rabbit", - "minecraft:cooked_mutton" - ], - "minecraft:is_fish": [ - "minecraft:cod", - "minecraft:salmon", - "minecraft:tropical_fish", - "minecraft:pufferfish", - "minecraft:cooked_salmon", - "minecraft:cooked_cod" - ], - "minecraft:is_food": [ - "minecraft:porkchop", - "minecraft:cooked_mutton", - "minecraft:apple", - "minecraft:golden_apple", - "minecraft:dried_kelp", - "minecraft:cooked_porkchop", - "minecraft:mushroom_stew", - "minecraft:enchanted_golden_apple", - "minecraft:bread", - "minecraft:cookie", - "minecraft:melon_slice", - "minecraft:beef", - "minecraft:cooked_beef", - "minecraft:chicken", - "minecraft:cooked_chicken", - "minecraft:rotten_flesh", - "minecraft:carrot", - "minecraft:potato", - "minecraft:baked_potato", - "minecraft:golden_carrot", - "minecraft:pumpkin_pie", - "minecraft:beetroot", - "minecraft:beetroot_soup", - "minecraft:sweet_berries", - "minecraft:rabbit", - "minecraft:cooked_rabbit", - "minecraft:rabbit_stew", - "minecraft:mutton" - ], - "minecraft:is_hoe": [ - "minecraft:wooden_hoe", - "minecraft:stone_hoe", - "minecraft:iron_hoe", - "minecraft:netherite_hoe", - "minecraft:diamond_hoe", - "minecraft:golden_hoe" - ], - "minecraft:is_meat": [ - "minecraft:rotten_flesh", - "minecraft:porkchop", - "minecraft:cooked_mutton", - "minecraft:cooked_porkchop", - "minecraft:cooked_chicken", - "minecraft:beef", - "minecraft:rabbit", - "minecraft:cooked_beef", - "minecraft:chicken", - "minecraft:cooked_rabbit", - "minecraft:rabbit_stew", - "minecraft:mutton" - ], - "minecraft:is_minecart": [ - "minecraft:minecart", - "minecraft:tnt_minecart", - "minecraft:chest_minecart", - "minecraft:hopper_minecart", - "minecraft:command_block_minecart" - ], - "minecraft:is_pickaxe": [ - "minecraft:iron_pickaxe", - "minecraft:stone_pickaxe", - "minecraft:netherite_pickaxe", - "minecraft:wooden_pickaxe", - "minecraft:diamond_pickaxe", - "minecraft:golden_pickaxe" - ], - "minecraft:is_shovel": [ - "minecraft:iron_shovel", - "minecraft:golden_shovel", - "minecraft:wooden_shovel", - "minecraft:stone_shovel", - "minecraft:diamond_shovel", - "minecraft:netherite_shovel" - ], - "minecraft:is_sword": [ - "minecraft:iron_sword", - "minecraft:wooden_sword", - "minecraft:stone_sword", - "minecraft:golden_sword", - "minecraft:diamond_sword", - "minecraft:netherite_sword" - ], - "minecraft:is_tool": [ - "minecraft:iron_pickaxe", - "minecraft:iron_shovel", - "minecraft:iron_sword", - "minecraft:stone_hoe", - "minecraft:iron_axe", - "minecraft:wooden_sword", - "minecraft:diamond_hoe", - "minecraft:wooden_shovel", - "minecraft:golden_sword", - "minecraft:wooden_pickaxe", - "minecraft:wooden_axe", - "minecraft:stone_sword", - "minecraft:stone_shovel", - "minecraft:stone_pickaxe", - "minecraft:stone_axe", - "minecraft:diamond_sword", - "minecraft:diamond_axe", - "minecraft:diamond_shovel", - "minecraft:diamond_pickaxe", - "minecraft:golden_shovel", - "minecraft:golden_pickaxe", - "minecraft:golden_axe", - "minecraft:wooden_hoe", - "minecraft:netherite_sword", - "minecraft:iron_hoe", - "minecraft:golden_hoe", - "minecraft:netherite_shovel", - "minecraft:netherite_pickaxe", - "minecraft:netherite_axe", - "minecraft:netherite_hoe" - ], - "minecraft:is_trident": [ - "minecraft:trident" - ], - "minecraft:leather_tier": [ - "minecraft:leather_helmet", - "minecraft:leather_leggings", - "minecraft:leather_boots", - "minecraft:leather_chestplate" - ], - "minecraft:lectern_books": [ - "minecraft:writable_book", - "minecraft:written_book" - ], - "minecraft:logs": [ - "minecraft:oak_log", - "minecraft:stripped_oak_wood", - "minecraft:spruce_log", - "minecraft:crimson_stem", - "minecraft:birch_log", - "minecraft:jungle_log", - "minecraft:dark_oak_wood", - "minecraft:oak_wood", - "minecraft:dark_oak_log", - "minecraft:acacia_log", - "minecraft:spruce_wood", - "minecraft:stripped_spruce_wood", - "minecraft:birch_wood", - "minecraft:stripped_birch_wood", - "minecraft:warped_hyphae", - "minecraft:jungle_wood", - "minecraft:stripped_jungle_wood", - "minecraft:stripped_warped_stem", - "minecraft:acacia_wood", - "minecraft:stripped_acacia_wood", - "minecraft:stripped_dark_oak_wood", - "minecraft:mangrove_log", - "minecraft:stripped_spruce_log", - "minecraft:stripped_dark_oak_log", - "minecraft:stripped_jungle_log", - "minecraft:stripped_crimson_stem", - "minecraft:mangrove_wood", - "minecraft:stripped_mangrove_wood", - "minecraft:crimson_hyphae", - "minecraft:stripped_cherry_log", - "minecraft:stripped_cherry_wood", - "minecraft:stripped_acacia_log", - "minecraft:stripped_warped_hyphae", - "minecraft:stripped_birch_log", - "minecraft:warped_stem", - "minecraft:stripped_crimson_hyphae", - "minecraft:cherry_wood", - "minecraft:stripped_oak_log", - "minecraft:cherry_log", - "minecraft:stripped_mangrove_log" - ], - "minecraft:logs_that_burn": [ - "minecraft:oak_log", - "minecraft:stripped_oak_wood", - "minecraft:spruce_log", - "minecraft:birch_log", - "minecraft:jungle_log", - "minecraft:dark_oak_wood", - "minecraft:oak_wood", - "minecraft:dark_oak_log", - "minecraft:acacia_log", - "minecraft:spruce_wood", - "minecraft:stripped_spruce_wood", - "minecraft:birch_wood", - "minecraft:stripped_birch_wood", - "minecraft:jungle_wood", - "minecraft:stripped_jungle_wood", - "minecraft:acacia_wood", - "minecraft:stripped_acacia_wood", - "minecraft:stripped_dark_oak_wood", - "minecraft:mangrove_log", - "minecraft:stripped_spruce_log", - "minecraft:stripped_dark_oak_log", - "minecraft:stripped_jungle_log", - "minecraft:mangrove_wood", - "minecraft:stripped_mangrove_wood", - "minecraft:stripped_cherry_log", - "minecraft:stripped_cherry_wood", - "minecraft:stripped_acacia_log", - "minecraft:stripped_birch_log", - "minecraft:cherry_wood", - "minecraft:stripped_oak_log", - "minecraft:cherry_log", - "minecraft:stripped_mangrove_log" - ], - "minecraft:mangrove_logs": [ - "minecraft:mangrove_log", - "minecraft:mangrove_wood", - "minecraft:stripped_mangrove_wood", - "minecraft:stripped_mangrove_log" - ], - "minecraft:music_disc": [ - "minecraft:music_disc_stal", - "minecraft:music_disc_13", - "minecraft:music_disc_cat", - "minecraft:music_disc_11", - "minecraft:music_disc_blocks", - "minecraft:music_disc_mellohi", - "minecraft:music_disc_chirp", - "minecraft:music_disc_ward", - "minecraft:music_disc_far", - "minecraft:music_disc_mall", - "minecraft:music_disc_strad", - "minecraft:music_disc_wait", - "minecraft:music_disc_otherside", - "minecraft:music_disc_pigstep", - "minecraft:music_disc_5", - "minecraft:music_disc_relic" - ], - "minecraft:netherite_tier": [ - "minecraft:netherite_chestplate", - "minecraft:netherite_axe", - "minecraft:netherite_sword", - "minecraft:netherite_hoe", - "minecraft:netherite_shovel", - "minecraft:netherite_pickaxe", - "minecraft:netherite_helmet", - "minecraft:netherite_leggings", - "minecraft:netherite_boots" - ], - "minecraft:piglin_loved": [], - "minecraft:piglin_repellents": [], - "minecraft:planks": [ - "minecraft:dark_oak_planks", - "minecraft:oak_planks", - "minecraft:warped_planks", - "minecraft:spruce_planks", - "minecraft:birch_planks", - "minecraft:jungle_planks", - "minecraft:mangrove_planks", - "minecraft:acacia_planks", - "minecraft:crimson_planks", - "minecraft:bamboo_planks", - "minecraft:cherry_planks" - ], - "minecraft:sand": [ - "minecraft:sand" - ], - "minecraft:sign": [ - "minecraft:dark_oak_sign", - "minecraft:oak_sign", - "minecraft:spruce_sign", - "minecraft:crimson_sign", - "minecraft:birch_sign", - "minecraft:jungle_sign", - "minecraft:warped_sign", - "minecraft:bamboo_sign", - "minecraft:acacia_sign", - "minecraft:mangrove_sign", - "minecraft:crimson_hanging_sign", - "minecraft:cherry_sign", - "minecraft:acacia_hanging_sign", - "minecraft:cherry_hanging_sign", - "minecraft:oak_hanging_sign", - "minecraft:spruce_hanging_sign", - "minecraft:birch_hanging_sign", - "minecraft:jungle_hanging_sign", - "minecraft:dark_oak_hanging_sign", - "minecraft:warped_hanging_sign", - "minecraft:mangrove_hanging_sign", - "minecraft:bamboo_hanging_sign" - ], - "minecraft:soul_fire_base_blocks": [ - "minecraft:soul_soil", - "minecraft:soul_sand" - ], - "minecraft:spawn_egg": [ - "minecraft:zombie_villager_spawn_egg", - "minecraft:ender_dragon_spawn_egg", - "minecraft:zombie_horse_spawn_egg", - "minecraft:creeper_spawn_egg", - "minecraft:chicken_spawn_egg", - "minecraft:skeleton_spawn_egg", - "minecraft:cow_spawn_egg", - "minecraft:pig_spawn_egg", - "minecraft:dolphin_spawn_egg", - "minecraft:sheep_spawn_egg", - "minecraft:slime_spawn_egg", - "minecraft:wolf_spawn_egg", - "minecraft:phantom_spawn_egg", - "minecraft:mooshroom_spawn_egg", - "minecraft:agent_spawn_egg", - "minecraft:enderman_spawn_egg", - "minecraft:silverfish_spawn_egg", - "minecraft:zoglin_spawn_egg", - "minecraft:fox_spawn_egg", - "minecraft:spider_spawn_egg", - "minecraft:zombie_spawn_egg", - "minecraft:bat_spawn_egg", - "minecraft:zombie_pigman_spawn_egg", - "minecraft:villager_spawn_egg", - "minecraft:vex_spawn_egg", - "minecraft:llama_spawn_egg", - "minecraft:squid_spawn_egg", - "minecraft:cat_spawn_egg", - "minecraft:ocelot_spawn_egg", - "minecraft:witch_spawn_egg", - "minecraft:ghast_spawn_egg", - "minecraft:allay_spawn_egg", - "minecraft:strider_spawn_egg", - "minecraft:magma_cube_spawn_egg", - "minecraft:blaze_spawn_egg", - "minecraft:cave_spider_spawn_egg", - "minecraft:guardian_spawn_egg", - "minecraft:horse_spawn_egg", - "minecraft:husk_spawn_egg", - "minecraft:rabbit_spawn_egg", - "minecraft:endermite_spawn_egg", - "minecraft:mule_spawn_egg", - "minecraft:stray_spawn_egg", - "minecraft:wither_skeleton_spawn_egg", - "minecraft:donkey_spawn_egg", - "minecraft:skeleton_horse_spawn_egg", - "minecraft:shulker_spawn_egg", - "minecraft:npc_spawn_egg", - "minecraft:elder_guardian_spawn_egg", - "minecraft:polar_bear_spawn_egg", - "minecraft:cod_spawn_egg", - "minecraft:vindicator_spawn_egg", - "minecraft:evoker_spawn_egg", - "minecraft:parrot_spawn_egg", - "minecraft:tropical_fish_spawn_egg", - "minecraft:pufferfish_spawn_egg", - "minecraft:salmon_spawn_egg", - "minecraft:drowned_spawn_egg", - "minecraft:turtle_spawn_egg", - "minecraft:piglin_spawn_egg", - "minecraft:panda_spawn_egg", - "minecraft:pillager_spawn_egg", - "minecraft:wandering_trader_spawn_egg", - "minecraft:ravager_spawn_egg", - "minecraft:bee_spawn_egg", - "minecraft:hoglin_spawn_egg", - "minecraft:piglin_brute_spawn_egg", - "minecraft:sniffer_spawn_egg", - "minecraft:axolotl_spawn_egg", - "minecraft:goat_spawn_egg", - "minecraft:glow_squid_spawn_egg", - "minecraft:iron_golem_spawn_egg", - "minecraft:snow_golem_spawn_egg", - "minecraft:wither_spawn_egg", - "minecraft:frog_spawn_egg", - "minecraft:tadpole_spawn_egg", - "minecraft:warden_spawn_egg", - "minecraft:trader_llama_spawn_egg", - "minecraft:camel_spawn_egg", - "minecraft:armadillo_spawn_egg", - "minecraft:spawn_egg" - ], - "minecraft:stone_bricks": [ - "minecraft:stonebrick" - ], - "minecraft:stone_crafting_materials": [ - "minecraft:cobblestone", - "minecraft:cobbled_deepslate", - "minecraft:blackstone" - ], - "minecraft:stone_tier": [ - "minecraft:stone_sword", - "minecraft:stone_shovel", - "minecraft:stone_pickaxe", - "minecraft:stone_axe", - "minecraft:stone_hoe" - ], - "minecraft:stone_tool_materials": [ - "minecraft:cobblestone", - "minecraft:cobbled_deepslate", - "minecraft:blackstone" - ], - "minecraft:transform_materials": [ - "minecraft:netherite_ingot" - ], - "minecraft:transform_templates": [ - "minecraft:netherite_upgrade_smithing_template" - ], - "minecraft:transformable_items": [ - "minecraft:diamond_axe", - "minecraft:diamond_sword", - "minecraft:diamond_pickaxe", - "minecraft:diamond_shovel", - "minecraft:diamond_hoe", - "minecraft:diamond_helmet", - "minecraft:diamond_chestplate", - "minecraft:diamond_leggings", - "minecraft:diamond_boots", - "minecraft:golden_boots" - ], - "minecraft:trim_materials": [ - "minecraft:diamond", - "minecraft:emerald", - "minecraft:iron_ingot", - "minecraft:quartz", - "minecraft:lapis_lazuli", - "minecraft:gold_ingot", - "minecraft:redstone", - "minecraft:copper_ingot", - "minecraft:netherite_ingot", - "minecraft:amethyst_shard" - ], - "minecraft:trim_templates": [ - "minecraft:tide_armor_trim_smithing_template", - "minecraft:sentry_armor_trim_smithing_template", - "minecraft:coast_armor_trim_smithing_template", - "minecraft:dune_armor_trim_smithing_template", - "minecraft:wild_armor_trim_smithing_template", - "minecraft:ward_armor_trim_smithing_template", - "minecraft:eye_armor_trim_smithing_template", - "minecraft:vex_armor_trim_smithing_template", - "minecraft:snout_armor_trim_smithing_template", - "minecraft:rib_armor_trim_smithing_template", - "minecraft:spire_armor_trim_smithing_template", - "minecraft:silence_armor_trim_smithing_template", - "minecraft:wayfinder_armor_trim_smithing_template", - "minecraft:raiser_armor_trim_smithing_template", - "minecraft:shaper_armor_trim_smithing_template", - "minecraft:host_armor_trim_smithing_template" - ], - "minecraft:trimmable_armors": [ - "minecraft:leather_boots", - "minecraft:leather_leggings", - "minecraft:leather_helmet", - "minecraft:leather_chestplate", - "minecraft:chainmail_leggings", - "minecraft:chainmail_helmet", - "minecraft:chainmail_chestplate", - "minecraft:chainmail_boots", - "minecraft:iron_helmet", - "minecraft:iron_chestplate", - "minecraft:iron_leggings", - "minecraft:iron_boots", - "minecraft:diamond_helmet", - "minecraft:diamond_chestplate", - "minecraft:diamond_leggings", - "minecraft:diamond_boots", - "minecraft:golden_helmet", - "minecraft:golden_chestplate", - "minecraft:golden_leggings", - "minecraft:golden_boots", - "minecraft:turtle_helmet", - "minecraft:netherite_helmet", - "minecraft:netherite_chestplate", - "minecraft:netherite_leggings", - "minecraft:netherite_boots" - ], - "minecraft:vibration_damper": [ - "minecraft:pink_wool", - "minecraft:lime_wool", - "minecraft:white_wool", - "minecraft:magenta_wool", - "minecraft:red_wool", - "minecraft:orange_wool", - "minecraft:yellow_carpet", - "minecraft:light_blue_wool", - "minecraft:yellow_wool", - "minecraft:gray_wool", - "minecraft:light_gray_wool", - "minecraft:cyan_wool", - "minecraft:purple_wool", - "minecraft:purple_carpet", - "minecraft:blue_wool", - "minecraft:brown_wool", - "minecraft:green_wool", - "minecraft:black_wool", - "minecraft:white_carpet", - "minecraft:orange_carpet", - "minecraft:magenta_carpet", - "minecraft:light_blue_carpet", - "minecraft:lime_carpet", - "minecraft:pink_carpet", - "minecraft:gray_carpet", - "minecraft:light_gray_carpet", - "minecraft:cyan_carpet", - "minecraft:blue_carpet", - "minecraft:brown_carpet", - "minecraft:green_carpet", - "minecraft:red_carpet", - "minecraft:black_carpet" - ], - "minecraft:warped_stems": [ - "minecraft:stripped_warped_hyphae", - "minecraft:warped_hyphae", - "minecraft:stripped_warped_stem", - "minecraft:warped_stem" - ], - "minecraft:wooden_slabs": [ - "minecraft:mangrove_slab", - "minecraft:birch_slab", - "minecraft:cherry_slab", - "minecraft:jungle_slab", - "minecraft:spruce_slab", - "minecraft:bamboo_slab", - "minecraft:oak_slab", - "minecraft:acacia_slab", - "minecraft:dark_oak_slab", - "minecraft:crimson_slab", - "minecraft:warped_slab" - ], - "minecraft:wooden_tier": [ - "minecraft:wooden_sword", - "minecraft:wooden_shovel", - "minecraft:wooden_pickaxe", - "minecraft:wooden_axe", - "minecraft:wooden_hoe" - ], - "minecraft:wool": [ - "minecraft:pink_wool", - "minecraft:lime_wool", - "minecraft:white_wool", - "minecraft:magenta_wool", - "minecraft:red_wool", - "minecraft:orange_wool", - "minecraft:light_blue_wool", - "minecraft:yellow_wool", - "minecraft:gray_wool", - "minecraft:light_gray_wool", - "minecraft:cyan_wool", - "minecraft:purple_wool", - "minecraft:blue_wool", - "minecraft:brown_wool", - "minecraft:green_wool", - "minecraft:black_wool" - ] -} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/item_tags.1_21_0.json b/core/src/main/resources/bedrock/item_tags.1_21_0.json deleted file mode 100644 index 5fac99114..000000000 --- a/core/src/main/resources/bedrock/item_tags.1_21_0.json +++ /dev/null @@ -1,802 +0,0 @@ -{ - "minecraft:arrow": [ - "minecraft:arrow" - ], - "minecraft:banner": [ - "minecraft:banner" - ], - "minecraft:boat": [ - "minecraft:cherry_chest_boat", - "minecraft:oak_chest_boat", - "minecraft:mangrove_boat", - "minecraft:oak_boat", - "minecraft:birch_boat", - "minecraft:jungle_boat", - "minecraft:spruce_boat", - "minecraft:acacia_boat", - "minecraft:dark_oak_boat", - "minecraft:birch_chest_boat", - "minecraft:jungle_chest_boat", - "minecraft:spruce_chest_boat", - "minecraft:acacia_chest_boat", - "minecraft:dark_oak_chest_boat", - "minecraft:mangrove_chest_boat", - "minecraft:cherry_boat", - "minecraft:bamboo_raft", - "minecraft:bamboo_chest_raft" - ], - "minecraft:boats": [ - "minecraft:cherry_chest_boat", - "minecraft:oak_chest_boat", - "minecraft:mangrove_boat", - "minecraft:oak_boat", - "minecraft:birch_boat", - "minecraft:jungle_boat", - "minecraft:spruce_boat", - "minecraft:acacia_boat", - "minecraft:dark_oak_boat", - "minecraft:birch_chest_boat", - "minecraft:jungle_chest_boat", - "minecraft:spruce_chest_boat", - "minecraft:acacia_chest_boat", - "minecraft:dark_oak_chest_boat", - "minecraft:mangrove_chest_boat", - "minecraft:cherry_boat", - "minecraft:bamboo_raft", - "minecraft:bamboo_chest_raft" - ], - "minecraft:bookshelf_books": [ - "minecraft:written_book", - "minecraft:book", - "minecraft:writable_book", - "minecraft:enchanted_book" - ], - "minecraft:chainmail_tier": [ - "minecraft:chainmail_helmet", - "minecraft:chainmail_chestplate", - "minecraft:chainmail_leggings", - "minecraft:chainmail_boots" - ], - "minecraft:coals": [ - "minecraft:coal", - "minecraft:charcoal" - ], - "minecraft:crimson_stems": [ - "minecraft:stripped_crimson_stem", - "minecraft:crimson_hyphae", - "minecraft:crimson_stem", - "minecraft:stripped_crimson_hyphae" - ], - "minecraft:decorated_pot_sherds": [ - "minecraft:skull_pottery_sherd", - "minecraft:angler_pottery_sherd", - "minecraft:prize_pottery_sherd", - "minecraft:mourner_pottery_sherd", - "minecraft:arms_up_pottery_sherd", - "minecraft:burn_pottery_sherd", - "minecraft:snort_pottery_sherd", - "minecraft:brick", - "minecraft:heartbreak_pottery_sherd", - "minecraft:miner_pottery_sherd", - "minecraft:brewer_pottery_sherd", - "minecraft:plenty_pottery_sherd", - "minecraft:scrape_pottery_sherd", - "minecraft:howl_pottery_sherd", - "minecraft:explorer_pottery_sherd", - "minecraft:archer_pottery_sherd", - "minecraft:blade_pottery_sherd", - "minecraft:danger_pottery_sherd", - "minecraft:flow_pottery_sherd", - "minecraft:friend_pottery_sherd", - "minecraft:guster_pottery_sherd", - "minecraft:heart_pottery_sherd", - "minecraft:sheaf_pottery_sherd", - "minecraft:shelter_pottery_sherd" - ], - "minecraft:diamond_tier": [ - "minecraft:diamond_sword", - "minecraft:diamond_shovel", - "minecraft:diamond_pickaxe", - "minecraft:diamond_axe", - "minecraft:mace", - "minecraft:diamond_hoe", - "minecraft:diamond_helmet", - "minecraft:diamond_chestplate", - "minecraft:diamond_leggings", - "minecraft:diamond_boots" - ], - "minecraft:digger": [ - "minecraft:iron_pickaxe", - "minecraft:wooden_pickaxe", - "minecraft:wooden_shovel", - "minecraft:iron_axe", - "minecraft:iron_shovel", - "minecraft:stone_shovel", - "minecraft:wooden_axe", - "minecraft:stone_pickaxe", - "minecraft:stone_axe", - "minecraft:diamond_shovel", - "minecraft:diamond_pickaxe", - "minecraft:diamond_axe", - "minecraft:golden_shovel", - "minecraft:golden_pickaxe", - "minecraft:golden_axe", - "minecraft:wooden_hoe", - "minecraft:stone_hoe", - "minecraft:iron_hoe", - "minecraft:diamond_hoe", - "minecraft:golden_hoe", - "minecraft:netherite_pickaxe", - "minecraft:netherite_shovel", - "minecraft:netherite_axe", - "minecraft:netherite_hoe" - ], - "minecraft:door": [ - "minecraft:warped_door", - "minecraft:waxed_weathered_copper_door", - "minecraft:wooden_door", - "minecraft:iron_door", - "minecraft:mangrove_door", - "minecraft:exposed_copper_door", - "minecraft:bamboo_door", - "minecraft:weathered_copper_door", - "minecraft:jungle_door", - "minecraft:spruce_door", - "minecraft:birch_door", - "minecraft:acacia_door", - "minecraft:dark_oak_door", - "minecraft:crimson_door", - "minecraft:cherry_door", - "minecraft:copper_door", - "minecraft:oxidized_copper_door", - "minecraft:waxed_copper_door", - "minecraft:waxed_exposed_copper_door", - "minecraft:waxed_oxidized_copper_door" - ], - "minecraft:golden_tier": [ - "minecraft:golden_sword", - "minecraft:golden_shovel", - "minecraft:golden_pickaxe", - "minecraft:golden_axe", - "minecraft:golden_hoe", - "minecraft:golden_helmet", - "minecraft:golden_chestplate", - "minecraft:golden_leggings", - "minecraft:golden_boots" - ], - "minecraft:hanging_actor": [ - "minecraft:painting" - ], - "minecraft:hanging_sign": [ - "minecraft:mangrove_hanging_sign", - "minecraft:bamboo_hanging_sign", - "minecraft:spruce_hanging_sign", - "minecraft:birch_hanging_sign", - "minecraft:cherry_hanging_sign", - "minecraft:oak_hanging_sign", - "minecraft:jungle_hanging_sign", - "minecraft:acacia_hanging_sign", - "minecraft:dark_oak_hanging_sign", - "minecraft:crimson_hanging_sign", - "minecraft:warped_hanging_sign" - ], - "minecraft:horse_armor": [ - "minecraft:golden_horse_armor", - "minecraft:leather_horse_armor", - "minecraft:iron_horse_armor", - "minecraft:diamond_horse_armor" - ], - "minecraft:iron_tier": [ - "minecraft:iron_sword", - "minecraft:iron_pickaxe", - "minecraft:iron_axe", - "minecraft:iron_shovel", - "minecraft:iron_hoe", - "minecraft:iron_helmet", - "minecraft:iron_chestplate", - "minecraft:iron_leggings", - "minecraft:iron_boots" - ], - "minecraft:is_armor": [ - "minecraft:netherite_boots", - "minecraft:chainmail_helmet", - "minecraft:elytra", - "minecraft:leather_helmet", - "minecraft:leather_chestplate", - "minecraft:leather_leggings", - "minecraft:leather_boots", - "minecraft:chainmail_chestplate", - "minecraft:chainmail_leggings", - "minecraft:chainmail_boots", - "minecraft:iron_helmet", - "minecraft:iron_chestplate", - "minecraft:iron_leggings", - "minecraft:iron_boots", - "minecraft:diamond_helmet", - "minecraft:diamond_chestplate", - "minecraft:diamond_leggings", - "minecraft:diamond_boots", - "minecraft:golden_helmet", - "minecraft:golden_chestplate", - "minecraft:golden_leggings", - "minecraft:golden_boots", - "minecraft:turtle_helmet", - "minecraft:netherite_chestplate", - "minecraft:netherite_leggings", - "minecraft:netherite_helmet" - ], - "minecraft:is_axe": [ - "minecraft:iron_axe", - "minecraft:wooden_axe", - "minecraft:stone_axe", - "minecraft:diamond_axe", - "minecraft:golden_axe", - "minecraft:netherite_axe" - ], - "minecraft:is_cooked": [ - "minecraft:cooked_cod", - "minecraft:cooked_porkchop", - "minecraft:cooked_rabbit", - "minecraft:cooked_salmon", - "minecraft:cooked_beef", - "minecraft:cooked_chicken", - "minecraft:rabbit_stew", - "minecraft:cooked_mutton" - ], - "minecraft:is_fish": [ - "minecraft:cooked_cod", - "minecraft:cod", - "minecraft:salmon", - "minecraft:tropical_fish", - "minecraft:pufferfish", - "minecraft:cooked_salmon" - ], - "minecraft:is_food": [ - "minecraft:rabbit", - "minecraft:cooked_porkchop", - "minecraft:mushroom_stew", - "minecraft:beetroot", - "minecraft:apple", - "minecraft:carrot", - "minecraft:chicken", - "minecraft:potato", - "minecraft:enchanted_golden_apple", - "minecraft:sweet_berries", - "minecraft:golden_apple", - "minecraft:bread", - "minecraft:porkchop", - "minecraft:cookie", - "minecraft:cooked_rabbit", - "minecraft:beef", - "minecraft:dried_kelp", - "minecraft:beetroot_soup", - "minecraft:melon_slice", - "minecraft:cooked_beef", - "minecraft:rotten_flesh", - "minecraft:cooked_chicken", - "minecraft:baked_potato", - "minecraft:golden_carrot", - "minecraft:pumpkin_pie", - "minecraft:rabbit_stew", - "minecraft:cooked_mutton", - "minecraft:mutton" - ], - "minecraft:is_hoe": [ - "minecraft:wooden_hoe", - "minecraft:stone_hoe", - "minecraft:iron_hoe", - "minecraft:diamond_hoe", - "minecraft:golden_hoe", - "minecraft:netherite_hoe" - ], - "minecraft:is_meat": [ - "minecraft:rabbit", - "minecraft:cooked_porkchop", - "minecraft:chicken", - "minecraft:porkchop", - "minecraft:cooked_rabbit", - "minecraft:beef", - "minecraft:cooked_beef", - "minecraft:rotten_flesh", - "minecraft:cooked_chicken", - "minecraft:rabbit_stew", - "minecraft:cooked_mutton", - "minecraft:mutton" - ], - "minecraft:is_minecart": [ - "minecraft:command_block_minecart", - "minecraft:minecart", - "minecraft:chest_minecart", - "minecraft:tnt_minecart", - "minecraft:hopper_minecart" - ], - "minecraft:is_pickaxe": [ - "minecraft:iron_pickaxe", - "minecraft:wooden_pickaxe", - "minecraft:stone_pickaxe", - "minecraft:diamond_pickaxe", - "minecraft:golden_pickaxe", - "minecraft:netherite_pickaxe" - ], - "minecraft:is_shovel": [ - "minecraft:wooden_shovel", - "minecraft:iron_shovel", - "minecraft:stone_shovel", - "minecraft:diamond_shovel", - "minecraft:golden_shovel", - "minecraft:netherite_shovel" - ], - "minecraft:is_sword": [ - "minecraft:iron_sword", - "minecraft:stone_sword", - "minecraft:wooden_sword", - "minecraft:diamond_sword", - "minecraft:mace", - "minecraft:golden_sword", - "minecraft:netherite_sword" - ], - "minecraft:is_tool": [ - "minecraft:iron_sword", - "minecraft:iron_pickaxe", - "minecraft:wooden_pickaxe", - "minecraft:wooden_shovel", - "minecraft:stone_sword", - "minecraft:iron_axe", - "minecraft:iron_shovel", - "minecraft:stone_shovel", - "minecraft:wooden_sword", - "minecraft:wooden_axe", - "minecraft:stone_pickaxe", - "minecraft:stone_axe", - "minecraft:diamond_sword", - "minecraft:diamond_shovel", - "minecraft:diamond_pickaxe", - "minecraft:diamond_axe", - "minecraft:mace", - "minecraft:golden_sword", - "minecraft:golden_shovel", - "minecraft:golden_pickaxe", - "minecraft:golden_axe", - "minecraft:wooden_hoe", - "minecraft:stone_hoe", - "minecraft:iron_hoe", - "minecraft:diamond_hoe", - "minecraft:golden_hoe", - "minecraft:netherite_sword", - "minecraft:netherite_pickaxe", - "minecraft:netherite_shovel", - "minecraft:netherite_axe", - "minecraft:netherite_hoe" - ], - "minecraft:is_trident": [ - "minecraft:trident" - ], - "minecraft:leather_tier": [ - "minecraft:leather_helmet", - "minecraft:leather_chestplate", - "minecraft:leather_leggings", - "minecraft:leather_boots" - ], - "minecraft:lectern_books": [ - "minecraft:written_book", - "minecraft:writable_book" - ], - "minecraft:logs": [ - "minecraft:stripped_oak_log", - "minecraft:mangrove_wood", - "minecraft:spruce_wood", - "minecraft:stripped_cherry_wood", - "minecraft:stripped_crimson_stem", - "minecraft:stripped_spruce_wood", - "minecraft:spruce_log", - "minecraft:acacia_wood", - "minecraft:stripped_acacia_wood", - "minecraft:stripped_warped_hyphae", - "minecraft:acacia_log", - "minecraft:oak_log", - "minecraft:birch_log", - "minecraft:jungle_log", - "minecraft:dark_oak_log", - "minecraft:jungle_wood", - "minecraft:stripped_jungle_wood", - "minecraft:oak_wood", - "minecraft:stripped_oak_wood", - "minecraft:birch_wood", - "minecraft:stripped_birch_wood", - "minecraft:dark_oak_wood", - "minecraft:stripped_dark_oak_wood", - "minecraft:stripped_dark_oak_log", - "minecraft:mangrove_log", - "minecraft:stripped_jungle_log", - "minecraft:stripped_mangrove_wood", - "minecraft:crimson_hyphae", - "minecraft:stripped_cherry_log", - "minecraft:stripped_birch_log", - "minecraft:stripped_acacia_log", - "minecraft:crimson_stem", - "minecraft:warped_hyphae", - "minecraft:stripped_spruce_log", - "minecraft:warped_stem", - "minecraft:stripped_crimson_hyphae", - "minecraft:cherry_wood", - "minecraft:cherry_log", - "minecraft:stripped_warped_stem", - "minecraft:stripped_mangrove_log" - ], - "minecraft:logs_that_burn": [ - "minecraft:stripped_oak_log", - "minecraft:mangrove_wood", - "minecraft:spruce_wood", - "minecraft:stripped_cherry_wood", - "minecraft:stripped_spruce_wood", - "minecraft:spruce_log", - "minecraft:acacia_wood", - "minecraft:stripped_acacia_wood", - "minecraft:acacia_log", - "minecraft:oak_log", - "minecraft:birch_log", - "minecraft:jungle_log", - "minecraft:dark_oak_log", - "minecraft:jungle_wood", - "minecraft:stripped_jungle_wood", - "minecraft:oak_wood", - "minecraft:stripped_oak_wood", - "minecraft:birch_wood", - "minecraft:stripped_birch_wood", - "minecraft:dark_oak_wood", - "minecraft:stripped_dark_oak_wood", - "minecraft:stripped_dark_oak_log", - "minecraft:mangrove_log", - "minecraft:stripped_jungle_log", - "minecraft:stripped_mangrove_wood", - "minecraft:stripped_cherry_log", - "minecraft:stripped_birch_log", - "minecraft:stripped_acacia_log", - "minecraft:stripped_spruce_log", - "minecraft:cherry_wood", - "minecraft:cherry_log", - "minecraft:stripped_mangrove_log" - ], - "minecraft:mangrove_logs": [ - "minecraft:mangrove_wood", - "minecraft:mangrove_log", - "minecraft:stripped_mangrove_wood", - "minecraft:stripped_mangrove_log" - ], - "minecraft:music_disc": [ - "minecraft:music_disc_ward", - "minecraft:music_disc_strad", - "minecraft:music_disc_chirp", - "minecraft:music_disc_creator_music_box", - "minecraft:music_disc_mall", - "minecraft:music_disc_pigstep", - "minecraft:music_disc_wait", - "minecraft:music_disc_11", - "minecraft:music_disc_stal", - "minecraft:music_disc_13", - "minecraft:music_disc_cat", - "minecraft:music_disc_blocks", - "minecraft:music_disc_far", - "minecraft:music_disc_mellohi", - "minecraft:music_disc_otherside", - "minecraft:music_disc_5", - "minecraft:music_disc_relic", - "minecraft:music_disc_creator", - "minecraft:music_disc_precipice" - ], - "minecraft:netherite_tier": [ - "minecraft:netherite_boots", - "minecraft:netherite_sword", - "minecraft:netherite_chestplate", - "minecraft:netherite_pickaxe", - "minecraft:netherite_leggings", - "minecraft:netherite_shovel", - "minecraft:netherite_axe", - "minecraft:netherite_hoe", - "minecraft:netherite_helmet" - ], - "minecraft:planks": [ - "minecraft:spruce_planks", - "minecraft:oak_planks", - "minecraft:mangrove_planks", - "minecraft:birch_planks", - "minecraft:jungle_planks", - "minecraft:acacia_planks", - "minecraft:dark_oak_planks", - "minecraft:bamboo_planks", - "minecraft:warped_planks", - "minecraft:crimson_planks", - "minecraft:cherry_planks" - ], - "minecraft:sand": [ - "minecraft:sand" - ], - "minecraft:sign": [ - "minecraft:bamboo_sign", - "minecraft:mangrove_hanging_sign", - "minecraft:cherry_sign", - "minecraft:oak_sign", - "minecraft:bamboo_hanging_sign", - "minecraft:warped_sign", - "minecraft:spruce_sign", - "minecraft:spruce_hanging_sign", - "minecraft:acacia_sign", - "minecraft:birch_hanging_sign", - "minecraft:birch_sign", - "minecraft:jungle_sign", - "minecraft:dark_oak_sign", - "minecraft:mangrove_sign", - "minecraft:crimson_sign", - "minecraft:cherry_hanging_sign", - "minecraft:oak_hanging_sign", - "minecraft:jungle_hanging_sign", - "minecraft:acacia_hanging_sign", - "minecraft:dark_oak_hanging_sign", - "minecraft:crimson_hanging_sign", - "minecraft:warped_hanging_sign" - ], - "minecraft:soul_fire_base_blocks": [ - "minecraft:soul_sand", - "minecraft:soul_soil" - ], - "minecraft:spawn_egg": [ - "minecraft:enderman_spawn_egg", - "minecraft:ravager_spawn_egg", - "minecraft:strider_spawn_egg", - "minecraft:slime_spawn_egg", - "minecraft:glow_squid_spawn_egg", - "minecraft:pillager_spawn_egg", - "minecraft:blaze_spawn_egg", - "minecraft:witch_spawn_egg", - "minecraft:horse_spawn_egg", - "minecraft:polar_bear_spawn_egg", - "minecraft:zoglin_spawn_egg", - "minecraft:stray_spawn_egg", - "minecraft:zombie_pigman_spawn_egg", - "minecraft:snow_golem_spawn_egg", - "minecraft:panda_spawn_egg", - "minecraft:axolotl_spawn_egg", - "minecraft:agent_spawn_egg", - "minecraft:shulker_spawn_egg", - "minecraft:vindicator_spawn_egg", - "minecraft:evoker_spawn_egg", - "minecraft:parrot_spawn_egg", - "minecraft:wolf_spawn_egg", - "minecraft:elder_guardian_spawn_egg", - "minecraft:silverfish_spawn_egg", - "minecraft:tadpole_spawn_egg", - "minecraft:cow_spawn_egg", - "minecraft:bogged_spawn_egg", - "minecraft:ocelot_spawn_egg", - "minecraft:bee_spawn_egg", - "minecraft:piglin_brute_spawn_egg", - "minecraft:rabbit_spawn_egg", - "minecraft:camel_spawn_egg", - "minecraft:creeper_spawn_egg", - "minecraft:drowned_spawn_egg", - "minecraft:chicken_spawn_egg", - "minecraft:pig_spawn_egg", - "minecraft:sheep_spawn_egg", - "minecraft:mooshroom_spawn_egg", - "minecraft:skeleton_spawn_egg", - "minecraft:spider_spawn_egg", - "minecraft:zombie_spawn_egg", - "minecraft:villager_spawn_egg", - "minecraft:squid_spawn_egg", - "minecraft:bat_spawn_egg", - "minecraft:ghast_spawn_egg", - "minecraft:magma_cube_spawn_egg", - "minecraft:cave_spider_spawn_egg", - "minecraft:endermite_spawn_egg", - "minecraft:guardian_spawn_egg", - "minecraft:husk_spawn_egg", - "minecraft:piglin_spawn_egg", - "minecraft:wither_skeleton_spawn_egg", - "minecraft:donkey_spawn_egg", - "minecraft:mule_spawn_egg", - "minecraft:skeleton_horse_spawn_egg", - "minecraft:zombie_horse_spawn_egg", - "minecraft:npc_spawn_egg", - "minecraft:breeze_spawn_egg", - "minecraft:llama_spawn_egg", - "minecraft:vex_spawn_egg", - "minecraft:warden_spawn_egg", - "minecraft:zombie_villager_spawn_egg", - "minecraft:tropical_fish_spawn_egg", - "minecraft:cod_spawn_egg", - "minecraft:pufferfish_spawn_egg", - "minecraft:salmon_spawn_egg", - "minecraft:dolphin_spawn_egg", - "minecraft:turtle_spawn_egg", - "minecraft:phantom_spawn_egg", - "minecraft:cat_spawn_egg", - "minecraft:fox_spawn_egg", - "minecraft:wandering_trader_spawn_egg", - "minecraft:hoglin_spawn_egg", - "minecraft:sniffer_spawn_egg", - "minecraft:goat_spawn_egg", - "minecraft:iron_golem_spawn_egg", - "minecraft:ender_dragon_spawn_egg", - "minecraft:wither_spawn_egg", - "minecraft:frog_spawn_egg", - "minecraft:allay_spawn_egg", - "minecraft:trader_llama_spawn_egg", - "minecraft:armadillo_spawn_egg", - "minecraft:spawn_egg" - ], - "minecraft:stone_bricks": [ - "minecraft:stonebrick" - ], - "minecraft:stone_crafting_materials": [ - "minecraft:cobblestone", - "minecraft:cobbled_deepslate", - "minecraft:blackstone" - ], - "minecraft:stone_tier": [ - "minecraft:stone_sword", - "minecraft:stone_shovel", - "minecraft:stone_pickaxe", - "minecraft:stone_axe", - "minecraft:stone_hoe" - ], - "minecraft:stone_tool_materials": [ - "minecraft:cobblestone", - "minecraft:cobbled_deepslate", - "minecraft:blackstone" - ], - "minecraft:transform_materials": [ - "minecraft:netherite_ingot" - ], - "minecraft:transform_templates": [ - "minecraft:netherite_upgrade_smithing_template" - ], - "minecraft:transformable_items": [ - "minecraft:diamond_sword", - "minecraft:diamond_shovel", - "minecraft:diamond_pickaxe", - "minecraft:diamond_axe", - "minecraft:diamond_hoe", - "minecraft:diamond_helmet", - "minecraft:diamond_chestplate", - "minecraft:diamond_leggings", - "minecraft:diamond_boots", - "minecraft:golden_boots" - ], - "minecraft:trim_materials": [ - "minecraft:gold_ingot", - "minecraft:iron_ingot", - "minecraft:diamond", - "minecraft:redstone", - "minecraft:netherite_ingot", - "minecraft:lapis_lazuli", - "minecraft:quartz", - "minecraft:copper_ingot", - "minecraft:emerald", - "minecraft:amethyst_shard" - ], - "minecraft:trim_templates": [ - "minecraft:vex_armor_trim_smithing_template", - "minecraft:wild_armor_trim_smithing_template", - "minecraft:flow_armor_trim_smithing_template", - "minecraft:raiser_armor_trim_smithing_template", - "minecraft:silence_armor_trim_smithing_template", - "minecraft:coast_armor_trim_smithing_template", - "minecraft:snout_armor_trim_smithing_template", - "minecraft:dune_armor_trim_smithing_template", - "minecraft:rib_armor_trim_smithing_template", - "minecraft:host_armor_trim_smithing_template", - "minecraft:bolt_armor_trim_smithing_template", - "minecraft:shaper_armor_trim_smithing_template", - "minecraft:eye_armor_trim_smithing_template", - "minecraft:spire_armor_trim_smithing_template", - "minecraft:sentry_armor_trim_smithing_template", - "minecraft:ward_armor_trim_smithing_template", - "minecraft:tide_armor_trim_smithing_template", - "minecraft:wayfinder_armor_trim_smithing_template" - ], - "minecraft:trimmable_armors": [ - "minecraft:netherite_boots", - "minecraft:chainmail_helmet", - "minecraft:leather_helmet", - "minecraft:leather_chestplate", - "minecraft:leather_leggings", - "minecraft:leather_boots", - "minecraft:chainmail_chestplate", - "minecraft:chainmail_leggings", - "minecraft:chainmail_boots", - "minecraft:iron_helmet", - "minecraft:iron_chestplate", - "minecraft:iron_leggings", - "minecraft:iron_boots", - "minecraft:diamond_helmet", - "minecraft:diamond_chestplate", - "minecraft:diamond_leggings", - "minecraft:diamond_boots", - "minecraft:golden_helmet", - "minecraft:golden_chestplate", - "minecraft:golden_leggings", - "minecraft:golden_boots", - "minecraft:turtle_helmet", - "minecraft:netherite_chestplate", - "minecraft:netherite_leggings", - "minecraft:netherite_helmet" - ], - "minecraft:vibration_damper": [ - "minecraft:black_carpet", - "minecraft:blue_carpet", - "minecraft:pink_carpet", - "minecraft:lime_carpet", - "minecraft:green_wool", - "minecraft:cyan_carpet", - "minecraft:orange_wool", - "minecraft:white_carpet", - "minecraft:purple_carpet", - "minecraft:yellow_carpet", - "minecraft:light_gray_wool", - "minecraft:magenta_carpet", - "minecraft:purple_wool", - "minecraft:gray_wool", - "minecraft:red_carpet", - "minecraft:brown_carpet", - "minecraft:light_blue_wool", - "minecraft:white_wool", - "minecraft:magenta_wool", - "minecraft:yellow_wool", - "minecraft:lime_wool", - "minecraft:pink_wool", - "minecraft:cyan_wool", - "minecraft:blue_wool", - "minecraft:brown_wool", - "minecraft:red_wool", - "minecraft:black_wool", - "minecraft:orange_carpet", - "minecraft:light_blue_carpet", - "minecraft:gray_carpet", - "minecraft:light_gray_carpet", - "minecraft:green_carpet" - ], - "minecraft:warped_stems": [ - "minecraft:stripped_warped_hyphae", - "minecraft:warped_hyphae", - "minecraft:warped_stem", - "minecraft:stripped_warped_stem" - ], - "minecraft:wooden_slabs": [ - "minecraft:birch_slab", - "minecraft:oak_slab", - "minecraft:spruce_slab", - "minecraft:bamboo_slab", - "minecraft:warped_slab", - "minecraft:mangrove_slab", - "minecraft:cherry_slab", - "minecraft:jungle_slab", - "minecraft:acacia_slab", - "minecraft:dark_oak_slab", - "minecraft:crimson_slab" - ], - "minecraft:wooden_tier": [ - "minecraft:wooden_pickaxe", - "minecraft:wooden_shovel", - "minecraft:wooden_sword", - "minecraft:wooden_axe", - "minecraft:wooden_hoe" - ], - "minecraft:wool": [ - "minecraft:green_wool", - "minecraft:orange_wool", - "minecraft:light_gray_wool", - "minecraft:purple_wool", - "minecraft:gray_wool", - "minecraft:light_blue_wool", - "minecraft:white_wool", - "minecraft:magenta_wool", - "minecraft:yellow_wool", - "minecraft:lime_wool", - "minecraft:pink_wool", - "minecraft:cyan_wool", - "minecraft:blue_wool", - "minecraft:brown_wool", - "minecraft:red_wool", - "minecraft:black_wool" - ] -} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/item_tags.1_21_20.json b/core/src/main/resources/bedrock/item_tags.1_21_20.json deleted file mode 100644 index faad0ed0c..000000000 --- a/core/src/main/resources/bedrock/item_tags.1_21_20.json +++ /dev/null @@ -1,806 +0,0 @@ -{ - "minecraft:arrow": [ - "minecraft:arrow" - ], - "minecraft:banner": [ - "minecraft:banner" - ], - "minecraft:boat": [ - "minecraft:cherry_chest_boat", - "minecraft:oak_chest_boat", - "minecraft:mangrove_boat", - "minecraft:oak_boat", - "minecraft:birch_boat", - "minecraft:jungle_boat", - "minecraft:spruce_boat", - "minecraft:acacia_boat", - "minecraft:dark_oak_boat", - "minecraft:birch_chest_boat", - "minecraft:jungle_chest_boat", - "minecraft:spruce_chest_boat", - "minecraft:acacia_chest_boat", - "minecraft:dark_oak_chest_boat", - "minecraft:mangrove_chest_boat", - "minecraft:cherry_boat", - "minecraft:bamboo_raft", - "minecraft:bamboo_chest_raft" - ], - "minecraft:boats": [ - "minecraft:cherry_chest_boat", - "minecraft:oak_chest_boat", - "minecraft:mangrove_boat", - "minecraft:oak_boat", - "minecraft:birch_boat", - "minecraft:jungle_boat", - "minecraft:spruce_boat", - "minecraft:acacia_boat", - "minecraft:dark_oak_boat", - "minecraft:birch_chest_boat", - "minecraft:jungle_chest_boat", - "minecraft:spruce_chest_boat", - "minecraft:acacia_chest_boat", - "minecraft:dark_oak_chest_boat", - "minecraft:mangrove_chest_boat", - "minecraft:cherry_boat", - "minecraft:bamboo_raft", - "minecraft:bamboo_chest_raft" - ], - "minecraft:bookshelf_books": [ - "minecraft:written_book", - "minecraft:book", - "minecraft:writable_book", - "minecraft:enchanted_book" - ], - "minecraft:chainmail_tier": [ - "minecraft:chainmail_helmet", - "minecraft:chainmail_chestplate", - "minecraft:chainmail_leggings", - "minecraft:chainmail_boots" - ], - "minecraft:coals": [ - "minecraft:coal", - "minecraft:charcoal" - ], - "minecraft:crimson_stems": [ - "minecraft:stripped_crimson_stem", - "minecraft:crimson_hyphae", - "minecraft:crimson_stem", - "minecraft:stripped_crimson_hyphae" - ], - "minecraft:decorated_pot_sherds": [ - "minecraft:angler_pottery_sherd", - "minecraft:skull_pottery_sherd", - "minecraft:prize_pottery_sherd", - "minecraft:mourner_pottery_sherd", - "minecraft:arms_up_pottery_sherd", - "minecraft:burn_pottery_sherd", - "minecraft:snort_pottery_sherd", - "minecraft:brick", - "minecraft:heartbreak_pottery_sherd", - "minecraft:miner_pottery_sherd", - "minecraft:brewer_pottery_sherd", - "minecraft:plenty_pottery_sherd", - "minecraft:scrape_pottery_sherd", - "minecraft:howl_pottery_sherd", - "minecraft:explorer_pottery_sherd", - "minecraft:archer_pottery_sherd", - "minecraft:blade_pottery_sherd", - "minecraft:danger_pottery_sherd", - "minecraft:flow_pottery_sherd", - "minecraft:friend_pottery_sherd", - "minecraft:guster_pottery_sherd", - "minecraft:heart_pottery_sherd", - "minecraft:sheaf_pottery_sherd", - "minecraft:shelter_pottery_sherd" - ], - "minecraft:diamond_tier": [ - "minecraft:diamond_sword", - "minecraft:diamond_shovel", - "minecraft:diamond_pickaxe", - "minecraft:diamond_axe", - "minecraft:mace", - "minecraft:diamond_hoe", - "minecraft:diamond_helmet", - "minecraft:diamond_chestplate", - "minecraft:diamond_leggings", - "minecraft:diamond_boots" - ], - "minecraft:digger": [ - "minecraft:iron_pickaxe", - "minecraft:wooden_pickaxe", - "minecraft:wooden_shovel", - "minecraft:iron_axe", - "minecraft:iron_shovel", - "minecraft:stone_shovel", - "minecraft:wooden_axe", - "minecraft:stone_pickaxe", - "minecraft:stone_axe", - "minecraft:diamond_shovel", - "minecraft:diamond_pickaxe", - "minecraft:diamond_axe", - "minecraft:golden_shovel", - "minecraft:golden_pickaxe", - "minecraft:golden_axe", - "minecraft:wooden_hoe", - "minecraft:stone_hoe", - "minecraft:iron_hoe", - "minecraft:diamond_hoe", - "minecraft:golden_hoe", - "minecraft:netherite_pickaxe", - "minecraft:netherite_shovel", - "minecraft:netherite_axe", - "minecraft:netherite_hoe" - ], - "minecraft:door": [ - "minecraft:warped_door", - "minecraft:waxed_weathered_copper_door", - "minecraft:wooden_door", - "minecraft:iron_door", - "minecraft:mangrove_door", - "minecraft:exposed_copper_door", - "minecraft:bamboo_door", - "minecraft:weathered_copper_door", - "minecraft:jungle_door", - "minecraft:spruce_door", - "minecraft:birch_door", - "minecraft:acacia_door", - "minecraft:dark_oak_door", - "minecraft:crimson_door", - "minecraft:cherry_door", - "minecraft:copper_door", - "minecraft:oxidized_copper_door", - "minecraft:waxed_copper_door", - "minecraft:waxed_exposed_copper_door", - "minecraft:waxed_oxidized_copper_door" - ], - "minecraft:golden_tier": [ - "minecraft:golden_sword", - "minecraft:golden_shovel", - "minecraft:golden_pickaxe", - "minecraft:golden_axe", - "minecraft:golden_hoe", - "minecraft:golden_helmet", - "minecraft:golden_chestplate", - "minecraft:golden_leggings", - "minecraft:golden_boots" - ], - "minecraft:hanging_actor": [ - "minecraft:painting" - ], - "minecraft:hanging_sign": [ - "minecraft:mangrove_hanging_sign", - "minecraft:bamboo_hanging_sign", - "minecraft:spruce_hanging_sign", - "minecraft:birch_hanging_sign", - "minecraft:cherry_hanging_sign", - "minecraft:oak_hanging_sign", - "minecraft:jungle_hanging_sign", - "minecraft:acacia_hanging_sign", - "minecraft:dark_oak_hanging_sign", - "minecraft:crimson_hanging_sign", - "minecraft:warped_hanging_sign" - ], - "minecraft:horse_armor": [ - "minecraft:golden_horse_armor", - "minecraft:leather_horse_armor", - "minecraft:iron_horse_armor", - "minecraft:diamond_horse_armor" - ], - "minecraft:iron_tier": [ - "minecraft:iron_sword", - "minecraft:iron_pickaxe", - "minecraft:iron_axe", - "minecraft:iron_shovel", - "minecraft:iron_hoe", - "minecraft:iron_helmet", - "minecraft:iron_chestplate", - "minecraft:iron_leggings", - "minecraft:iron_boots" - ], - "minecraft:is_armor": [ - "minecraft:netherite_boots", - "minecraft:chainmail_helmet", - "minecraft:elytra", - "minecraft:leather_helmet", - "minecraft:leather_chestplate", - "minecraft:leather_leggings", - "minecraft:leather_boots", - "minecraft:chainmail_chestplate", - "minecraft:chainmail_leggings", - "minecraft:chainmail_boots", - "minecraft:iron_helmet", - "minecraft:iron_chestplate", - "minecraft:iron_leggings", - "minecraft:iron_boots", - "minecraft:diamond_helmet", - "minecraft:diamond_chestplate", - "minecraft:diamond_leggings", - "minecraft:diamond_boots", - "minecraft:golden_helmet", - "minecraft:golden_chestplate", - "minecraft:golden_leggings", - "minecraft:golden_boots", - "minecraft:turtle_helmet", - "minecraft:netherite_chestplate", - "minecraft:netherite_leggings", - "minecraft:netherite_helmet" - ], - "minecraft:is_axe": [ - "minecraft:iron_axe", - "minecraft:wooden_axe", - "minecraft:stone_axe", - "minecraft:diamond_axe", - "minecraft:golden_axe", - "minecraft:netherite_axe" - ], - "minecraft:is_cooked": [ - "minecraft:cooked_cod", - "minecraft:cooked_porkchop", - "minecraft:cooked_rabbit", - "minecraft:cooked_salmon", - "minecraft:cooked_beef", - "minecraft:cooked_chicken", - "minecraft:rabbit_stew", - "minecraft:cooked_mutton" - ], - "minecraft:is_fish": [ - "minecraft:cooked_cod", - "minecraft:cod", - "minecraft:salmon", - "minecraft:tropical_fish", - "minecraft:pufferfish", - "minecraft:cooked_salmon" - ], - "minecraft:is_food": [ - "minecraft:beetroot", - "minecraft:apple", - "minecraft:carrot", - "minecraft:chicken", - "minecraft:potato", - "minecraft:enchanted_golden_apple", - "minecraft:sweet_berries", - "minecraft:golden_carrot", - "minecraft:golden_apple", - "minecraft:rabbit", - "minecraft:cooked_porkchop", - "minecraft:mushroom_stew", - "minecraft:bread", - "minecraft:porkchop", - "minecraft:cookie", - "minecraft:cooked_rabbit", - "minecraft:beef", - "minecraft:dried_kelp", - "minecraft:beetroot_soup", - "minecraft:melon_slice", - "minecraft:cooked_beef", - "minecraft:rotten_flesh", - "minecraft:cooked_chicken", - "minecraft:baked_potato", - "minecraft:pumpkin_pie", - "minecraft:rabbit_stew", - "minecraft:cooked_mutton", - "minecraft:mutton" - ], - "minecraft:is_hoe": [ - "minecraft:wooden_hoe", - "minecraft:stone_hoe", - "minecraft:iron_hoe", - "minecraft:diamond_hoe", - "minecraft:golden_hoe", - "minecraft:netherite_hoe" - ], - "minecraft:is_meat": [ - "minecraft:chicken", - "minecraft:rabbit", - "minecraft:cooked_porkchop", - "minecraft:porkchop", - "minecraft:cooked_rabbit", - "minecraft:beef", - "minecraft:cooked_beef", - "minecraft:rotten_flesh", - "minecraft:cooked_chicken", - "minecraft:rabbit_stew", - "minecraft:cooked_mutton", - "minecraft:mutton" - ], - "minecraft:is_minecart": [ - "minecraft:command_block_minecart", - "minecraft:minecart", - "minecraft:chest_minecart", - "minecraft:tnt_minecart", - "minecraft:hopper_minecart" - ], - "minecraft:is_pickaxe": [ - "minecraft:iron_pickaxe", - "minecraft:wooden_pickaxe", - "minecraft:stone_pickaxe", - "minecraft:diamond_pickaxe", - "minecraft:golden_pickaxe", - "minecraft:netherite_pickaxe" - ], - "minecraft:is_shovel": [ - "minecraft:wooden_shovel", - "minecraft:iron_shovel", - "minecraft:stone_shovel", - "minecraft:diamond_shovel", - "minecraft:golden_shovel", - "minecraft:netherite_shovel" - ], - "minecraft:is_sword": [ - "minecraft:iron_sword", - "minecraft:stone_sword", - "minecraft:wooden_sword", - "minecraft:diamond_sword", - "minecraft:mace", - "minecraft:golden_sword", - "minecraft:netherite_sword" - ], - "minecraft:is_tool": [ - "minecraft:iron_sword", - "minecraft:iron_pickaxe", - "minecraft:wooden_pickaxe", - "minecraft:wooden_shovel", - "minecraft:stone_sword", - "minecraft:iron_axe", - "minecraft:iron_shovel", - "minecraft:stone_shovel", - "minecraft:wooden_sword", - "minecraft:wooden_axe", - "minecraft:stone_pickaxe", - "minecraft:stone_axe", - "minecraft:diamond_sword", - "minecraft:diamond_shovel", - "minecraft:diamond_pickaxe", - "minecraft:diamond_axe", - "minecraft:mace", - "minecraft:golden_sword", - "minecraft:golden_shovel", - "minecraft:golden_pickaxe", - "minecraft:golden_axe", - "minecraft:wooden_hoe", - "minecraft:stone_hoe", - "minecraft:iron_hoe", - "minecraft:diamond_hoe", - "minecraft:golden_hoe", - "minecraft:netherite_sword", - "minecraft:netherite_pickaxe", - "minecraft:netherite_shovel", - "minecraft:netherite_axe", - "minecraft:netherite_hoe" - ], - "minecraft:is_trident": [ - "minecraft:trident" - ], - "minecraft:leather_tier": [ - "minecraft:leather_helmet", - "minecraft:leather_chestplate", - "minecraft:leather_leggings", - "minecraft:leather_boots" - ], - "minecraft:lectern_books": [ - "minecraft:written_book", - "minecraft:writable_book" - ], - "minecraft:logs": [ - "minecraft:mangrove_wood", - "minecraft:spruce_wood", - "minecraft:stripped_cherry_wood", - "minecraft:stripped_crimson_stem", - "minecraft:stripped_spruce_wood", - "minecraft:spruce_log", - "minecraft:acacia_wood", - "minecraft:stripped_acacia_wood", - "minecraft:stripped_warped_hyphae", - "minecraft:acacia_log", - "minecraft:stripped_warped_stem", - "minecraft:oak_log", - "minecraft:birch_log", - "minecraft:jungle_log", - "minecraft:dark_oak_log", - "minecraft:jungle_wood", - "minecraft:stripped_jungle_wood", - "minecraft:oak_wood", - "minecraft:birch_wood", - "minecraft:dark_oak_wood", - "minecraft:stripped_oak_wood", - "minecraft:stripped_birch_wood", - "minecraft:stripped_dark_oak_wood", - "minecraft:stripped_oak_log", - "minecraft:stripped_dark_oak_log", - "minecraft:mangrove_log", - "minecraft:stripped_jungle_log", - "minecraft:stripped_mangrove_wood", - "minecraft:crimson_hyphae", - "minecraft:stripped_cherry_log", - "minecraft:stripped_birch_log", - "minecraft:stripped_acacia_log", - "minecraft:crimson_stem", - "minecraft:warped_hyphae", - "minecraft:stripped_spruce_log", - "minecraft:warped_stem", - "minecraft:stripped_crimson_hyphae", - "minecraft:cherry_wood", - "minecraft:cherry_log", - "minecraft:stripped_mangrove_log" - ], - "minecraft:logs_that_burn": [ - "minecraft:mangrove_wood", - "minecraft:spruce_wood", - "minecraft:stripped_cherry_wood", - "minecraft:stripped_spruce_wood", - "minecraft:spruce_log", - "minecraft:acacia_wood", - "minecraft:stripped_acacia_wood", - "minecraft:acacia_log", - "minecraft:oak_log", - "minecraft:birch_log", - "minecraft:jungle_log", - "minecraft:dark_oak_log", - "minecraft:jungle_wood", - "minecraft:stripped_jungle_wood", - "minecraft:oak_wood", - "minecraft:birch_wood", - "minecraft:dark_oak_wood", - "minecraft:stripped_oak_wood", - "minecraft:stripped_birch_wood", - "minecraft:stripped_dark_oak_wood", - "minecraft:stripped_oak_log", - "minecraft:stripped_dark_oak_log", - "minecraft:mangrove_log", - "minecraft:stripped_jungle_log", - "minecraft:stripped_mangrove_wood", - "minecraft:stripped_cherry_log", - "minecraft:stripped_birch_log", - "minecraft:stripped_acacia_log", - "minecraft:stripped_spruce_log", - "minecraft:cherry_wood", - "minecraft:cherry_log", - "minecraft:stripped_mangrove_log" - ], - "minecraft:mangrove_logs": [ - "minecraft:mangrove_wood", - "minecraft:mangrove_log", - "minecraft:stripped_mangrove_wood", - "minecraft:stripped_mangrove_log" - ], - "minecraft:music_disc": [ - "minecraft:music_disc_ward", - "minecraft:music_disc_strad", - "minecraft:music_disc_chirp", - "minecraft:music_disc_creator_music_box", - "minecraft:music_disc_mall", - "minecraft:music_disc_pigstep", - "minecraft:music_disc_wait", - "minecraft:music_disc_11", - "minecraft:music_disc_stal", - "minecraft:music_disc_13", - "minecraft:music_disc_cat", - "minecraft:music_disc_blocks", - "minecraft:music_disc_far", - "minecraft:music_disc_mellohi", - "minecraft:music_disc_otherside", - "minecraft:music_disc_5", - "minecraft:music_disc_relic", - "minecraft:music_disc_creator", - "minecraft:music_disc_precipice" - ], - "minecraft:netherite_tier": [ - "minecraft:netherite_boots", - "minecraft:netherite_sword", - "minecraft:netherite_chestplate", - "minecraft:netherite_pickaxe", - "minecraft:netherite_leggings", - "minecraft:netherite_shovel", - "minecraft:netherite_axe", - "minecraft:netherite_hoe", - "minecraft:netherite_helmet" - ], - "minecraft:planks": [ - "minecraft:spruce_planks", - "minecraft:oak_planks", - "minecraft:mangrove_planks", - "minecraft:dark_oak_planks", - "minecraft:birch_planks", - "minecraft:jungle_planks", - "minecraft:acacia_planks", - "minecraft:bamboo_planks", - "minecraft:warped_planks", - "minecraft:crimson_planks", - "minecraft:cherry_planks" - ], - "minecraft:sand": [ - "minecraft:sand", - "minecraft:red_sand" - ], - "minecraft:sign": [ - "minecraft:bamboo_sign", - "minecraft:mangrove_hanging_sign", - "minecraft:cherry_sign", - "minecraft:oak_sign", - "minecraft:bamboo_hanging_sign", - "minecraft:warped_sign", - "minecraft:spruce_sign", - "minecraft:spruce_hanging_sign", - "minecraft:acacia_sign", - "minecraft:birch_hanging_sign", - "minecraft:birch_sign", - "minecraft:jungle_sign", - "minecraft:dark_oak_sign", - "minecraft:mangrove_sign", - "minecraft:crimson_sign", - "minecraft:cherry_hanging_sign", - "minecraft:oak_hanging_sign", - "minecraft:jungle_hanging_sign", - "minecraft:acacia_hanging_sign", - "minecraft:dark_oak_hanging_sign", - "minecraft:crimson_hanging_sign", - "minecraft:warped_hanging_sign" - ], - "minecraft:soul_fire_base_blocks": [ - "minecraft:soul_soil", - "minecraft:soul_sand" - ], - "minecraft:spawn_egg": [ - "minecraft:enderman_spawn_egg", - "minecraft:strider_spawn_egg", - "minecraft:ravager_spawn_egg", - "minecraft:slime_spawn_egg", - "minecraft:glow_squid_spawn_egg", - "minecraft:pillager_spawn_egg", - "minecraft:blaze_spawn_egg", - "minecraft:witch_spawn_egg", - "minecraft:horse_spawn_egg", - "minecraft:polar_bear_spawn_egg", - "minecraft:zoglin_spawn_egg", - "minecraft:stray_spawn_egg", - "minecraft:zombie_pigman_spawn_egg", - "minecraft:snow_golem_spawn_egg", - "minecraft:panda_spawn_egg", - "minecraft:axolotl_spawn_egg", - "minecraft:agent_spawn_egg", - "minecraft:shulker_spawn_egg", - "minecraft:vindicator_spawn_egg", - "minecraft:evoker_spawn_egg", - "minecraft:parrot_spawn_egg", - "minecraft:wolf_spawn_egg", - "minecraft:elder_guardian_spawn_egg", - "minecraft:silverfish_spawn_egg", - "minecraft:tadpole_spawn_egg", - "minecraft:cow_spawn_egg", - "minecraft:bogged_spawn_egg", - "minecraft:ocelot_spawn_egg", - "minecraft:bee_spawn_egg", - "minecraft:piglin_brute_spawn_egg", - "minecraft:rabbit_spawn_egg", - "minecraft:camel_spawn_egg", - "minecraft:creeper_spawn_egg", - "minecraft:drowned_spawn_egg", - "minecraft:chicken_spawn_egg", - "minecraft:pig_spawn_egg", - "minecraft:sheep_spawn_egg", - "minecraft:mooshroom_spawn_egg", - "minecraft:skeleton_spawn_egg", - "minecraft:spider_spawn_egg", - "minecraft:zombie_spawn_egg", - "minecraft:villager_spawn_egg", - "minecraft:squid_spawn_egg", - "minecraft:bat_spawn_egg", - "minecraft:ghast_spawn_egg", - "minecraft:magma_cube_spawn_egg", - "minecraft:cave_spider_spawn_egg", - "minecraft:endermite_spawn_egg", - "minecraft:guardian_spawn_egg", - "minecraft:husk_spawn_egg", - "minecraft:piglin_spawn_egg", - "minecraft:wither_skeleton_spawn_egg", - "minecraft:donkey_spawn_egg", - "minecraft:mule_spawn_egg", - "minecraft:skeleton_horse_spawn_egg", - "minecraft:zombie_horse_spawn_egg", - "minecraft:npc_spawn_egg", - "minecraft:breeze_spawn_egg", - "minecraft:llama_spawn_egg", - "minecraft:vex_spawn_egg", - "minecraft:warden_spawn_egg", - "minecraft:zombie_villager_spawn_egg", - "minecraft:tropical_fish_spawn_egg", - "minecraft:cod_spawn_egg", - "minecraft:pufferfish_spawn_egg", - "minecraft:salmon_spawn_egg", - "minecraft:dolphin_spawn_egg", - "minecraft:turtle_spawn_egg", - "minecraft:phantom_spawn_egg", - "minecraft:cat_spawn_egg", - "minecraft:fox_spawn_egg", - "minecraft:wandering_trader_spawn_egg", - "minecraft:hoglin_spawn_egg", - "minecraft:sniffer_spawn_egg", - "minecraft:goat_spawn_egg", - "minecraft:iron_golem_spawn_egg", - "minecraft:ender_dragon_spawn_egg", - "minecraft:wither_spawn_egg", - "minecraft:frog_spawn_egg", - "minecraft:allay_spawn_egg", - "minecraft:trader_llama_spawn_egg", - "minecraft:armadillo_spawn_egg", - "minecraft:spawn_egg" - ], - "minecraft:stone_bricks": [ - "minecraft:mossy_stone_bricks", - "minecraft:stone_bricks", - "minecraft:cracked_stone_bricks", - "minecraft:chiseled_stone_bricks" - ], - "minecraft:stone_crafting_materials": [ - "minecraft:cobblestone", - "minecraft:cobbled_deepslate", - "minecraft:blackstone" - ], - "minecraft:stone_tier": [ - "minecraft:stone_sword", - "minecraft:stone_shovel", - "minecraft:stone_pickaxe", - "minecraft:stone_axe", - "minecraft:stone_hoe" - ], - "minecraft:stone_tool_materials": [ - "minecraft:cobblestone", - "minecraft:cobbled_deepslate", - "minecraft:blackstone" - ], - "minecraft:transform_materials": [ - "minecraft:netherite_ingot" - ], - "minecraft:transform_templates": [ - "minecraft:netherite_upgrade_smithing_template" - ], - "minecraft:transformable_items": [ - "minecraft:diamond_sword", - "minecraft:diamond_shovel", - "minecraft:diamond_pickaxe", - "minecraft:diamond_axe", - "minecraft:diamond_hoe", - "minecraft:diamond_helmet", - "minecraft:diamond_chestplate", - "minecraft:diamond_leggings", - "minecraft:diamond_boots", - "minecraft:golden_boots" - ], - "minecraft:trim_materials": [ - "minecraft:gold_ingot", - "minecraft:iron_ingot", - "minecraft:diamond", - "minecraft:redstone", - "minecraft:netherite_ingot", - "minecraft:lapis_lazuli", - "minecraft:quartz", - "minecraft:copper_ingot", - "minecraft:emerald", - "minecraft:amethyst_shard" - ], - "minecraft:trim_templates": [ - "minecraft:vex_armor_trim_smithing_template", - "minecraft:wild_armor_trim_smithing_template", - "minecraft:flow_armor_trim_smithing_template", - "minecraft:raiser_armor_trim_smithing_template", - "minecraft:silence_armor_trim_smithing_template", - "minecraft:coast_armor_trim_smithing_template", - "minecraft:snout_armor_trim_smithing_template", - "minecraft:dune_armor_trim_smithing_template", - "minecraft:rib_armor_trim_smithing_template", - "minecraft:host_armor_trim_smithing_template", - "minecraft:bolt_armor_trim_smithing_template", - "minecraft:shaper_armor_trim_smithing_template", - "minecraft:eye_armor_trim_smithing_template", - "minecraft:spire_armor_trim_smithing_template", - "minecraft:sentry_armor_trim_smithing_template", - "minecraft:ward_armor_trim_smithing_template", - "minecraft:tide_armor_trim_smithing_template", - "minecraft:wayfinder_armor_trim_smithing_template" - ], - "minecraft:trimmable_armors": [ - "minecraft:netherite_boots", - "minecraft:chainmail_helmet", - "minecraft:leather_helmet", - "minecraft:leather_chestplate", - "minecraft:leather_leggings", - "minecraft:leather_boots", - "minecraft:chainmail_chestplate", - "minecraft:chainmail_leggings", - "minecraft:chainmail_boots", - "minecraft:iron_helmet", - "minecraft:iron_chestplate", - "minecraft:iron_leggings", - "minecraft:iron_boots", - "minecraft:diamond_helmet", - "minecraft:diamond_chestplate", - "minecraft:diamond_leggings", - "minecraft:diamond_boots", - "minecraft:golden_helmet", - "minecraft:golden_chestplate", - "minecraft:golden_leggings", - "minecraft:golden_boots", - "minecraft:turtle_helmet", - "minecraft:netherite_chestplate", - "minecraft:netherite_leggings", - "minecraft:netherite_helmet" - ], - "minecraft:vibration_damper": [ - "minecraft:black_carpet", - "minecraft:blue_carpet", - "minecraft:pink_carpet", - "minecraft:lime_carpet", - "minecraft:green_wool", - "minecraft:cyan_carpet", - "minecraft:orange_wool", - "minecraft:white_carpet", - "minecraft:purple_carpet", - "minecraft:yellow_carpet", - "minecraft:light_gray_wool", - "minecraft:magenta_carpet", - "minecraft:purple_wool", - "minecraft:gray_wool", - "minecraft:red_carpet", - "minecraft:brown_carpet", - "minecraft:light_blue_wool", - "minecraft:white_wool", - "minecraft:magenta_wool", - "minecraft:yellow_wool", - "minecraft:lime_wool", - "minecraft:pink_wool", - "minecraft:cyan_wool", - "minecraft:blue_wool", - "minecraft:brown_wool", - "minecraft:red_wool", - "minecraft:black_wool", - "minecraft:orange_carpet", - "minecraft:light_blue_carpet", - "minecraft:gray_carpet", - "minecraft:light_gray_carpet", - "minecraft:green_carpet" - ], - "minecraft:warped_stems": [ - "minecraft:stripped_warped_hyphae", - "minecraft:stripped_warped_stem", - "minecraft:warped_hyphae", - "minecraft:warped_stem" - ], - "minecraft:wooden_slabs": [ - "minecraft:birch_slab", - "minecraft:oak_slab", - "minecraft:spruce_slab", - "minecraft:bamboo_slab", - "minecraft:warped_slab", - "minecraft:mangrove_slab", - "minecraft:cherry_slab", - "minecraft:jungle_slab", - "minecraft:acacia_slab", - "minecraft:dark_oak_slab", - "minecraft:crimson_slab" - ], - "minecraft:wooden_tier": [ - "minecraft:wooden_pickaxe", - "minecraft:wooden_shovel", - "minecraft:wooden_sword", - "minecraft:wooden_axe", - "minecraft:wooden_hoe" - ], - "minecraft:wool": [ - "minecraft:green_wool", - "minecraft:orange_wool", - "minecraft:light_gray_wool", - "minecraft:purple_wool", - "minecraft:gray_wool", - "minecraft:light_blue_wool", - "minecraft:white_wool", - "minecraft:magenta_wool", - "minecraft:yellow_wool", - "minecraft:lime_wool", - "minecraft:pink_wool", - "minecraft:cyan_wool", - "minecraft:blue_wool", - "minecraft:brown_wool", - "minecraft:red_wool", - "minecraft:black_wool" - ] -} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/item_tags.1_21_30.json b/core/src/main/resources/bedrock/item_tags.1_21_50.json similarity index 99% rename from core/src/main/resources/bedrock/item_tags.1_21_30.json rename to core/src/main/resources/bedrock/item_tags.1_21_50.json index cff3f2556..d9e63ed26 100644 --- a/core/src/main/resources/bedrock/item_tags.1_21_30.json +++ b/core/src/main/resources/bedrock/item_tags.1_21_50.json @@ -68,10 +68,10 @@ "minecraft:stripped_crimson_hyphae" ], "minecraft:decorated_pot_sherds": [ - "minecraft:angler_pottery_sherd", "minecraft:skull_pottery_sherd", - "minecraft:prize_pottery_sherd", "minecraft:mourner_pottery_sherd", + "minecraft:angler_pottery_sherd", + "minecraft:prize_pottery_sherd", "minecraft:arms_up_pottery_sherd", "minecraft:burn_pottery_sherd", "minecraft:snort_pottery_sherd", @@ -106,13 +106,13 @@ "minecraft:diamond_boots" ], "minecraft:digger": [ - "minecraft:iron_pickaxe", - "minecraft:wooden_pickaxe", - "minecraft:wooden_shovel", - "minecraft:iron_axe", "minecraft:iron_shovel", - "minecraft:stone_shovel", + "minecraft:wooden_pickaxe", + "minecraft:iron_pickaxe", + "minecraft:iron_axe", + "minecraft:wooden_shovel", "minecraft:wooden_axe", + "minecraft:stone_shovel", "minecraft:stone_pickaxe", "minecraft:stone_axe", "minecraft:diamond_shovel", @@ -132,15 +132,15 @@ "minecraft:netherite_hoe" ], "minecraft:door": [ + "minecraft:weathered_copper_door", "minecraft:warped_door", - "minecraft:waxed_weathered_copper_door", "minecraft:wooden_door", + "minecraft:jungle_door", + "minecraft:waxed_weathered_copper_door", "minecraft:iron_door", "minecraft:mangrove_door", "minecraft:exposed_copper_door", "minecraft:bamboo_door", - "minecraft:weathered_copper_door", - "minecraft:jungle_door", "minecraft:spruce_door", "minecraft:birch_door", "minecraft:acacia_door", @@ -181,23 +181,24 @@ "minecraft:warped_hanging_sign" ], "minecraft:horse_armor": [ + "minecraft:iron_horse_armor", "minecraft:golden_horse_armor", "minecraft:leather_horse_armor", - "minecraft:iron_horse_armor", "minecraft:diamond_horse_armor" ], "minecraft:iron_tier": [ + "minecraft:iron_chestplate", + "minecraft:iron_shovel", "minecraft:iron_sword", "minecraft:iron_pickaxe", "minecraft:iron_axe", - "minecraft:iron_shovel", "minecraft:iron_hoe", "minecraft:iron_helmet", - "minecraft:iron_chestplate", "minecraft:iron_leggings", "minecraft:iron_boots" ], "minecraft:is_armor": [ + "minecraft:iron_chestplate", "minecraft:netherite_boots", "minecraft:chainmail_helmet", "minecraft:elytra", @@ -209,7 +210,6 @@ "minecraft:chainmail_leggings", "minecraft:chainmail_boots", "minecraft:iron_helmet", - "minecraft:iron_chestplate", "minecraft:iron_leggings", "minecraft:iron_boots", "minecraft:diamond_helmet", @@ -236,8 +236,8 @@ "minecraft:is_cooked": [ "minecraft:cooked_cod", "minecraft:cooked_porkchop", - "minecraft:cooked_rabbit", "minecraft:cooked_salmon", + "minecraft:cooked_rabbit", "minecraft:cooked_beef", "minecraft:cooked_chicken", "minecraft:rabbit_stew", @@ -245,25 +245,25 @@ ], "minecraft:is_fish": [ "minecraft:cooked_cod", + "minecraft:cooked_salmon", "minecraft:cod", "minecraft:salmon", "minecraft:tropical_fish", - "minecraft:pufferfish", - "minecraft:cooked_salmon" + "minecraft:pufferfish" ], "minecraft:is_food": [ - "minecraft:golden_carrot", - "minecraft:carrot", - "minecraft:chicken", - "minecraft:apple", - "minecraft:beetroot", - "minecraft:potato", - "minecraft:enchanted_golden_apple", - "minecraft:sweet_berries", - "minecraft:golden_apple", "minecraft:rabbit", "minecraft:cooked_porkchop", "minecraft:mushroom_stew", + "minecraft:potato", + "minecraft:enchanted_golden_apple", + "minecraft:golden_carrot", + "minecraft:carrot", + "minecraft:chicken", + "minecraft:beetroot", + "minecraft:sweet_berries", + "minecraft:apple", + "minecraft:golden_apple", "minecraft:bread", "minecraft:porkchop", "minecraft:cookie", @@ -290,9 +290,9 @@ "minecraft:netherite_hoe" ], "minecraft:is_meat": [ - "minecraft:chicken", "minecraft:rabbit", "minecraft:cooked_porkchop", + "minecraft:chicken", "minecraft:porkchop", "minecraft:cooked_rabbit", "minecraft:beef", @@ -311,41 +311,42 @@ "minecraft:hopper_minecart" ], "minecraft:is_pickaxe": [ - "minecraft:iron_pickaxe", "minecraft:wooden_pickaxe", + "minecraft:iron_pickaxe", "minecraft:stone_pickaxe", "minecraft:diamond_pickaxe", "minecraft:golden_pickaxe", "minecraft:netherite_pickaxe" ], "minecraft:is_shovel": [ - "minecraft:wooden_shovel", "minecraft:iron_shovel", + "minecraft:wooden_shovel", "minecraft:stone_shovel", "minecraft:diamond_shovel", "minecraft:golden_shovel", "minecraft:netherite_shovel" ], "minecraft:is_sword": [ + "minecraft:netherite_sword", "minecraft:iron_sword", - "minecraft:stone_sword", "minecraft:wooden_sword", + "minecraft:stone_sword", "minecraft:diamond_sword", "minecraft:mace", - "minecraft:golden_sword", - "minecraft:netherite_sword" + "minecraft:golden_sword" ], "minecraft:is_tool": [ - "minecraft:iron_sword", - "minecraft:iron_pickaxe", - "minecraft:wooden_pickaxe", - "minecraft:wooden_shovel", - "minecraft:stone_sword", - "minecraft:iron_axe", + "minecraft:netherite_sword", "minecraft:iron_shovel", - "minecraft:stone_shovel", + "minecraft:iron_sword", + "minecraft:wooden_pickaxe", + "minecraft:iron_pickaxe", + "minecraft:iron_axe", "minecraft:wooden_sword", + "minecraft:wooden_shovel", "minecraft:wooden_axe", + "minecraft:stone_sword", + "minecraft:stone_shovel", "minecraft:stone_pickaxe", "minecraft:stone_axe", "minecraft:diamond_sword", @@ -362,7 +363,6 @@ "minecraft:iron_hoe", "minecraft:diamond_hoe", "minecraft:golden_hoe", - "minecraft:netherite_sword", "minecraft:netherite_pickaxe", "minecraft:netherite_shovel", "minecraft:netherite_axe", @@ -465,16 +465,16 @@ ], "minecraft:music_disc": [ "minecraft:music_disc_ward", + "minecraft:music_disc_stal", + "minecraft:music_disc_wait", + "minecraft:music_disc_cat", "minecraft:music_disc_strad", "minecraft:music_disc_chirp", - "minecraft:music_disc_creator_music_box", "minecraft:music_disc_mall", + "minecraft:music_disc_creator_music_box", "minecraft:music_disc_pigstep", - "minecraft:music_disc_wait", "minecraft:music_disc_11", - "minecraft:music_disc_stal", "minecraft:music_disc_13", - "minecraft:music_disc_cat", "minecraft:music_disc_blocks", "minecraft:music_disc_far", "minecraft:music_disc_mellohi", @@ -485,8 +485,8 @@ "minecraft:music_disc_precipice" ], "minecraft:netherite_tier": [ - "minecraft:netherite_boots", "minecraft:netherite_sword", + "minecraft:netherite_boots", "minecraft:netherite_chestplate", "minecraft:netherite_pickaxe", "minecraft:netherite_leggings", @@ -513,6 +513,7 @@ "minecraft:red_sand" ], "minecraft:sign": [ + "minecraft:jungle_sign", "minecraft:bamboo_sign", "minecraft:mangrove_hanging_sign", "minecraft:cherry_sign", @@ -524,7 +525,6 @@ "minecraft:acacia_sign", "minecraft:birch_hanging_sign", "minecraft:birch_sign", - "minecraft:jungle_sign", "minecraft:dark_oak_sign", "minecraft:mangrove_sign", "minecraft:crimson_sign", @@ -542,16 +542,19 @@ ], "minecraft:spawn_egg": [ "minecraft:enderman_spawn_egg", - "minecraft:strider_spawn_egg", + "minecraft:endermite_spawn_egg", + "minecraft:tropical_fish_spawn_egg", "minecraft:ravager_spawn_egg", + "minecraft:pufferfish_spawn_egg", + "minecraft:zoglin_spawn_egg", + "minecraft:strider_spawn_egg", "minecraft:slime_spawn_egg", "minecraft:glow_squid_spawn_egg", - "minecraft:pillager_spawn_egg", "minecraft:blaze_spawn_egg", "minecraft:witch_spawn_egg", "minecraft:horse_spawn_egg", "minecraft:polar_bear_spawn_egg", - "minecraft:zoglin_spawn_egg", + "minecraft:pillager_spawn_egg", "minecraft:stray_spawn_egg", "minecraft:zombie_pigman_spawn_egg", "minecraft:snow_golem_spawn_egg", @@ -588,7 +591,6 @@ "minecraft:ghast_spawn_egg", "minecraft:magma_cube_spawn_egg", "minecraft:cave_spider_spawn_egg", - "minecraft:endermite_spawn_egg", "minecraft:guardian_spawn_egg", "minecraft:husk_spawn_egg", "minecraft:piglin_spawn_egg", @@ -603,9 +605,7 @@ "minecraft:vex_spawn_egg", "minecraft:warden_spawn_egg", "minecraft:zombie_villager_spawn_egg", - "minecraft:tropical_fish_spawn_egg", "minecraft:cod_spawn_egg", - "minecraft:pufferfish_spawn_egg", "minecraft:salmon_spawn_egg", "minecraft:dolphin_spawn_egg", "minecraft:turtle_spawn_egg", @@ -667,9 +667,9 @@ "minecraft:golden_boots" ], "minecraft:trim_materials": [ - "minecraft:gold_ingot", - "minecraft:iron_ingot", "minecraft:diamond", + "minecraft:iron_ingot", + "minecraft:gold_ingot", "minecraft:redstone", "minecraft:netherite_ingot", "minecraft:lapis_lazuli", @@ -679,26 +679,27 @@ "minecraft:amethyst_shard" ], "minecraft:trim_templates": [ + "minecraft:coast_armor_trim_smithing_template", "minecraft:vex_armor_trim_smithing_template", "minecraft:wild_armor_trim_smithing_template", "minecraft:flow_armor_trim_smithing_template", - "minecraft:raiser_armor_trim_smithing_template", "minecraft:silence_armor_trim_smithing_template", - "minecraft:coast_armor_trim_smithing_template", "minecraft:snout_armor_trim_smithing_template", "minecraft:dune_armor_trim_smithing_template", "minecraft:rib_armor_trim_smithing_template", "minecraft:host_armor_trim_smithing_template", - "minecraft:bolt_armor_trim_smithing_template", - "minecraft:shaper_armor_trim_smithing_template", "minecraft:eye_armor_trim_smithing_template", "minecraft:spire_armor_trim_smithing_template", "minecraft:sentry_armor_trim_smithing_template", "minecraft:ward_armor_trim_smithing_template", "minecraft:tide_armor_trim_smithing_template", - "minecraft:wayfinder_armor_trim_smithing_template" + "minecraft:wayfinder_armor_trim_smithing_template", + "minecraft:raiser_armor_trim_smithing_template", + "minecraft:shaper_armor_trim_smithing_template", + "minecraft:bolt_armor_trim_smithing_template" ], "minecraft:trimmable_armors": [ + "minecraft:iron_chestplate", "minecraft:netherite_boots", "minecraft:chainmail_helmet", "minecraft:leather_helmet", @@ -709,7 +710,6 @@ "minecraft:chainmail_leggings", "minecraft:chainmail_boots", "minecraft:iron_helmet", - "minecraft:iron_chestplate", "minecraft:iron_leggings", "minecraft:iron_boots", "minecraft:diamond_helmet", @@ -727,9 +727,9 @@ ], "minecraft:vibration_damper": [ "minecraft:black_carpet", - "minecraft:blue_carpet", "minecraft:pink_carpet", "minecraft:lime_carpet", + "minecraft:blue_carpet", "minecraft:green_wool", "minecraft:cyan_carpet", "minecraft:orange_wool", @@ -780,8 +780,8 @@ ], "minecraft:wooden_tier": [ "minecraft:wooden_pickaxe", - "minecraft:wooden_shovel", "minecraft:wooden_sword", + "minecraft:wooden_shovel", "minecraft:wooden_axe", "minecraft:wooden_hoe" ], @@ -803,4 +803,4 @@ "minecraft:red_wool", "minecraft:black_wool" ] -} \ No newline at end of file +} diff --git a/core/src/main/resources/bedrock/runtime_item_states.1_20_80.json b/core/src/main/resources/bedrock/runtime_item_states.1_20_80.json deleted file mode 100644 index 4db89f62b..000000000 --- a/core/src/main/resources/bedrock/runtime_item_states.1_20_80.json +++ /dev/null @@ -1,6274 +0,0 @@ -[ - { - "name": "minecraft:acacia_boat", - "id": 384 - }, - { - "name": "minecraft:acacia_button", - "id": -140 - }, - { - "name": "minecraft:acacia_chest_boat", - "id": 657 - }, - { - "name": "minecraft:acacia_door", - "id": 569 - }, - { - "name": "minecraft:acacia_double_slab", - "id": -812 - }, - { - "name": "minecraft:acacia_fence", - "id": -575 - }, - { - "name": "minecraft:acacia_fence_gate", - "id": 187 - }, - { - "name": "minecraft:acacia_hanging_sign", - "id": -504 - }, - { - "name": "minecraft:acacia_leaves", - "id": 161 - }, - { - "name": "minecraft:acacia_log", - "id": 162 - }, - { - "name": "minecraft:acacia_planks", - "id": -742 - }, - { - "name": "minecraft:acacia_pressure_plate", - "id": -150 - }, - { - "name": "minecraft:acacia_sapling", - "id": -828 - }, - { - "name": "minecraft:acacia_sign", - "id": 592 - }, - { - "name": "minecraft:acacia_slab", - "id": -807 - }, - { - "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:acacia_wood", - "id": -817 - }, - { - "name": "minecraft:activator_rail", - "id": 126 - }, - { - "name": "minecraft:agent_spawn_egg", - "id": 494 - }, - { - "name": "minecraft:air", - "id": -158 - }, - { - "name": "minecraft:allay_spawn_egg", - "id": 646 - }, - { - "name": "minecraft:allium", - "id": -831 - }, - { - "name": "minecraft:allow", - "id": 210 - }, - { - "name": "minecraft:amethyst_block", - "id": -327 - }, - { - "name": "minecraft:amethyst_cluster", - "id": -329 - }, - { - "name": "minecraft:amethyst_shard", - "id": 639 - }, - { - "name": "minecraft:ancient_debris", - "id": -271 - }, - { - "name": "minecraft:andesite", - "id": -594 - }, - { - "name": "minecraft:andesite_stairs", - "id": -171 - }, - { - "name": "minecraft:angler_pottery_sherd", - "id": 671 - }, - { - "name": "minecraft:anvil", - "id": 145 - }, - { - "name": "minecraft:apple", - "id": 257 - }, - { - "name": "minecraft:archer_pottery_sherd", - "id": 672 - }, - { - "name": "minecraft:armadillo_scute", - "id": 717 - }, - { - "name": "minecraft:armadillo_spawn_egg", - "id": 716 - }, - { - "name": "minecraft:armor_stand", - "id": 565 - }, - { - "name": "minecraft:arms_up_pottery_sherd", - "id": 673 - }, - { - "name": "minecraft:arrow", - "id": 304 - }, - { - "name": "minecraft:axolotl_bucket", - "id": 373 - }, - { - "name": "minecraft:axolotl_spawn_egg", - "id": 509 - }, - { - "name": "minecraft:azalea", - "id": -337 - }, - { - "name": "minecraft:azalea_leaves", - "id": -324 - }, - { - "name": "minecraft:azalea_leaves_flowered", - "id": -325 - }, - { - "name": "minecraft:azure_bluet", - "id": -832 - }, - { - "name": "minecraft:baked_potato", - "id": 282 - }, - { - "name": "minecraft:balloon", - "id": 613 - }, - { - "name": "minecraft:bamboo", - "id": -163 - }, - { - "name": "minecraft:bamboo_block", - "id": -527 - }, - { - "name": "minecraft:bamboo_button", - "id": -511 - }, - { - "name": "minecraft:bamboo_chest_raft", - "id": 669 - }, - { - "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": 668 - }, - { - "name": "minecraft:bamboo_sapling", - "id": -164 - }, - { - "name": "minecraft:bamboo_sign", - "id": 667 - }, - { - "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": 580 - }, - { - "name": "minecraft:banner_pattern", - "id": 744 - }, - { - "name": "minecraft:barrel", - "id": -203 - }, - { - "name": "minecraft:barrier", - "id": -161 - }, - { - "name": "minecraft:basalt", - "id": -234 - }, - { - "name": "minecraft:bat_spawn_egg", - "id": 459 - }, - { - "name": "minecraft:beacon", - "id": 138 - }, - { - "name": "minecraft:bed", - "id": 423 - }, - { - "name": "minecraft:bedrock", - "id": 7 - }, - { - "name": "minecraft:bee_nest", - "id": -218 - }, - { - "name": "minecraft:bee_spawn_egg", - "id": 501 - }, - { - "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": 381 - }, - { - "name": "minecraft:birch_button", - "id": -141 - }, - { - "name": "minecraft:birch_chest_boat", - "id": 654 - }, - { - "name": "minecraft:birch_door", - "id": 567 - }, - { - "name": "minecraft:birch_double_slab", - "id": -810 - }, - { - "name": "minecraft:birch_fence", - "id": -576 - }, - { - "name": "minecraft:birch_fence_gate", - "id": 184 - }, - { - "name": "minecraft:birch_hanging_sign", - "id": -502 - }, - { - "name": "minecraft:birch_leaves", - "id": -801 - }, - { - "name": "minecraft:birch_log", - "id": -570 - }, - { - "name": "minecraft:birch_planks", - "id": -740 - }, - { - "name": "minecraft:birch_pressure_plate", - "id": -151 - }, - { - "name": "minecraft:birch_sapling", - "id": -826 - }, - { - "name": "minecraft:birch_sign", - "id": 590 - }, - { - "name": "minecraft:birch_slab", - "id": -805 - }, - { - "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:birch_wood", - "id": -815 - }, - { - "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": 400 - }, - { - "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": 674 - }, - { - "name": "minecraft:blast_furnace", - "id": -196 - }, - { - "name": "minecraft:blaze_powder", - "id": 435 - }, - { - "name": "minecraft:blaze_rod", - "id": 428 - }, - { - "name": "minecraft:blaze_spawn_egg", - "id": 462 - }, - { - "name": "minecraft:bleach", - "id": 611 - }, - { - "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": 404 - }, - { - "name": "minecraft:blue_glazed_terracotta", - "id": 231 - }, - { - "name": "minecraft:blue_ice", - "id": -11 - }, - { - "name": "minecraft:blue_orchid", - "id": -830 - }, - { - "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": 742 - }, - { - "name": "minecraft:bogged_spawn_egg", - "id": 469 - }, - { - "name": "minecraft:bolt_armor_trim_smithing_template", - "id": 713 - }, - { - "name": "minecraft:bone", - "id": 420 - }, - { - "name": "minecraft:bone_block", - "id": 216 - }, - { - "name": "minecraft:bone_meal", - "id": 416 - }, - { - "name": "minecraft:book", - "id": 392 - }, - { - "name": "minecraft:bookshelf", - "id": 47 - }, - { - "name": "minecraft:border_block", - "id": 212 - }, - { - "name": "minecraft:bordure_indented_banner_pattern", - "id": 599 - }, - { - "name": "minecraft:bow", - "id": 303 - }, - { - "name": "minecraft:bowl", - "id": 325 - }, - { - "name": "minecraft:brain_coral", - "id": -581 - }, - { - "name": "minecraft:brain_coral_fan", - "id": -840 - }, - { - "name": "minecraft:bread", - "id": 262 - }, - { - "name": "minecraft:breeze_rod", - "id": 429 - }, - { - "name": "minecraft:breeze_spawn_egg", - "id": 508 - }, - { - "name": "minecraft:brewer_pottery_sherd", - "id": 675 - }, - { - "name": "minecraft:brewing_stand", - "id": 437 - }, - { - "name": "minecraft:brick", - "id": 388 - }, - { - "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": 403 - }, - { - "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": 694 - }, - { - "name": "minecraft:bubble_column", - "id": -160 - }, - { - "name": "minecraft:bubble_coral", - "id": -582 - }, - { - "name": "minecraft:bubble_coral_fan", - "id": -841 - }, - { - "name": "minecraft:bucket", - "id": 364 - }, - { - "name": "minecraft:budding_amethyst", - "id": -328 - }, - { - "name": "minecraft:burn_pottery_sherd", - "id": 676 - }, - { - "name": "minecraft:cactus", - "id": 81 - }, - { - "name": "minecraft:cake", - "id": 422 - }, - { - "name": "minecraft:calcite", - "id": -326 - }, - { - "name": "minecraft:calibrated_sculk_sensor", - "id": -580 - }, - { - "name": "minecraft:camel_spawn_egg", - "id": 670 - }, - { - "name": "minecraft:camera", - "id": 608 - }, - { - "name": "minecraft:campfire", - "id": 604 - }, - { - "name": "minecraft:candle", - "id": -412 - }, - { - "name": "minecraft:candle_cake", - "id": -429 - }, - { - "name": "minecraft:carpet", - "id": 721 - }, - { - "name": "minecraft:carrot", - "id": 280 - }, - { - "name": "minecraft:carrot_on_a_stick", - "id": 530 - }, - { - "name": "minecraft:carrots", - "id": 141 - }, - { - "name": "minecraft:cartography_table", - "id": -200 - }, - { - "name": "minecraft:carved_pumpkin", - "id": -155 - }, - { - "name": "minecraft:cat_spawn_egg", - "id": 495 - }, - { - "name": "minecraft:cauldron", - "id": 438 - }, - { - "name": "minecraft:cave_spider_spawn_egg", - "id": 463 - }, - { - "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": 634 - }, - { - "name": "minecraft:chain_command_block", - "id": 189 - }, - { - "name": "minecraft:chainmail_boots", - "id": 346 - }, - { - "name": "minecraft:chainmail_chestplate", - "id": 344 - }, - { - "name": "minecraft:chainmail_helmet", - "id": 343 - }, - { - "name": "minecraft:chainmail_leggings", - "id": 345 - }, - { - "name": "minecraft:charcoal", - "id": 306 - }, - { - "name": "minecraft:chemical_heat", - "id": 192 - }, - { - "name": "minecraft:chemistry_table", - "id": 238 - }, - { - "name": "minecraft:cherry_boat", - "id": 664 - }, - { - "name": "minecraft:cherry_button", - "id": -530 - }, - { - "name": "minecraft:cherry_chest_boat", - "id": 665 - }, - { - "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": 666 - }, - { - "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": 660 - }, - { - "name": "minecraft:chest_minecart", - "id": 394 - }, - { - "name": "minecraft:chicken", - "id": 276 - }, - { - "name": "minecraft:chicken_spawn_egg", - "id": 441 - }, - { - "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": 571 - }, - { - "name": "minecraft:chorus_plant", - "id": 240 - }, - { - "name": "minecraft:clay", - "id": 82 - }, - { - "name": "minecraft:clay_ball", - "id": 389 - }, - { - "name": "minecraft:client_request_placeholder_block", - "id": -465 - }, - { - "name": "minecraft:clock", - "id": 398 - }, - { - "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": 698 - }, - { - "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": 417 - }, - { - "name": "minecraft:cod", - "id": 265 - }, - { - "name": "minecraft:cod_bucket", - "id": 368 - }, - { - "name": "minecraft:cod_spawn_egg", - "id": 487 - }, - { - "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": 576 - }, - { - "name": "minecraft:comparator", - "id": 535 - }, - { - "name": "minecraft:compass", - "id": 396 - }, - { - "name": "minecraft:composter", - "id": -213 - }, - { - "name": "minecraft:compound", - "id": 609 - }, - { - "name": "minecraft:concrete", - "id": 734 - }, - { - "name": "minecraft:concrete_powder", - "id": 735 - }, - { - "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": 564 - }, - { - "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": 517 - }, - { - "name": "minecraft:copper_ore", - "id": -311 - }, - { - "name": "minecraft:copper_trapdoor", - "id": -792 - }, - { - "name": "minecraft:coral", - "id": 732 - }, - { - "name": "minecraft:coral_block", - "id": -132 - }, - { - "name": "minecraft:coral_fan", - "id": 724 - }, - { - "name": "minecraft:coral_fan_dead", - "id": 725 - }, - { - "name": "minecraft:coral_fan_hang", - "id": -135 - }, - { - "name": "minecraft:coral_fan_hang2", - "id": -136 - }, - { - "name": "minecraft:coral_fan_hang3", - "id": -137 - }, - { - "name": "minecraft:cornflower", - "id": -838 - }, - { - "name": "minecraft:cow_spawn_egg", - "id": 442 - }, - { - "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": 595 - }, - { - "name": "minecraft:creeper_spawn_egg", - "id": 447 - }, - { - "name": "minecraft:crimson_button", - "id": -260 - }, - { - "name": "minecraft:crimson_door", - "id": 631 - }, - { - "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": 629 - }, - { - "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": 588 - }, - { - "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": 406 - }, - { - "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": 677 - }, - { - "name": "minecraft:dark_oak_boat", - "id": 385 - }, - { - "name": "minecraft:dark_oak_button", - "id": -142 - }, - { - "name": "minecraft:dark_oak_chest_boat", - "id": 658 - }, - { - "name": "minecraft:dark_oak_door", - "id": 570 - }, - { - "name": "minecraft:dark_oak_double_slab", - "id": -813 - }, - { - "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_leaves", - "id": -803 - }, - { - "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_sapling", - "id": -829 - }, - { - "name": "minecraft:dark_oak_sign", - "id": 593 - }, - { - "name": "minecraft:dark_oak_slab", - "id": -808 - }, - { - "name": "minecraft:dark_oak_stairs", - "id": 164 - }, - { - "name": "minecraft:dark_oak_trapdoor", - "id": -147 - }, - { - "name": "minecraft:dark_oak_wood", - "id": -818 - }, - { - "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_brain_coral_fan", - "id": -844 - }, - { - "name": "minecraft:dead_bubble_coral", - "id": -587 - }, - { - "name": "minecraft:dead_bubble_coral_fan", - "id": -845 - }, - { - "name": "minecraft:dead_fire_coral", - "id": -588 - }, - { - "name": "minecraft:dead_fire_coral_fan", - "id": -846 - }, - { - "name": "minecraft:dead_horn_coral", - "id": -589 - }, - { - "name": "minecraft:dead_horn_coral_fan", - "id": -847 - }, - { - "name": "minecraft:dead_tube_coral", - "id": -585 - }, - { - "name": "minecraft:dead_tube_coral_fan", - "id": -134 - }, - { - "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": 354 - }, - { - "name": "minecraft:diamond_chestplate", - "id": 352 - }, - { - "name": "minecraft:diamond_helmet", - "id": 351 - }, - { - "name": "minecraft:diamond_hoe", - "id": 336 - }, - { - "name": "minecraft:diamond_horse_armor", - "id": 546 - }, - { - "name": "minecraft:diamond_leggings", - "id": 353 - }, - { - "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": 652 - }, - { - "name": "minecraft:dispenser", - "id": 23 - }, - { - "name": "minecraft:dolphin_spawn_egg", - "id": 491 - }, - { - "name": "minecraft:donkey_spawn_egg", - "id": 472 - }, - { - "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:dragon_breath", - "id": 573 - }, - { - "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": 490 - }, - { - "name": "minecraft:dune_armor_trim_smithing_template", - "id": 697 - }, - { - "name": "minecraft:dye", - "id": 743 - }, - { - "name": "minecraft:echo_shard", - "id": 662 - }, - { - "name": "minecraft:egg", - "id": 395 - }, - { - "name": "minecraft:elder_guardian_spawn_egg", - "id": 478 - }, - { - "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": 577 - }, - { - "name": "minecraft:emerald", - "id": 525 - }, - { - "name": "minecraft:emerald_block", - "id": 133 - }, - { - "name": "minecraft:emerald_ore", - "id": 129 - }, - { - "name": "minecraft:empty_map", - "id": 528 - }, - { - "name": "minecraft:enchanted_book", - "id": 534 - }, - { - "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": 746 - }, - { - "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": 514 - }, - { - "name": "minecraft:ender_eye", - "id": 439 - }, - { - "name": "minecraft:ender_pearl", - "id": 427 - }, - { - "name": "minecraft:enderman_spawn_egg", - "id": 448 - }, - { - "name": "minecraft:endermite_spawn_egg", - "id": 466 - }, - { - "name": "minecraft:evoker_spawn_egg", - "id": 482 - }, - { - "name": "minecraft:experience_bottle", - "id": 521 - }, - { - "name": "minecraft:explorer_pottery_sherd", - "id": 678 - }, - { - "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": 701 - }, - { - "name": "minecraft:farmland", - "id": 60 - }, - { - "name": "minecraft:feather", - "id": 331 - }, - { - "name": "minecraft:fence", - "id": 723 - }, - { - "name": "minecraft:fence_gate", - "id": 107 - }, - { - "name": "minecraft:fermented_spider_eye", - "id": 434 - }, - { - "name": "minecraft:field_masoned_banner_pattern", - "id": 598 - }, - { - "name": "minecraft:filled_map", - "id": 425 - }, - { - "name": "minecraft:fire", - "id": 51 - }, - { - "name": "minecraft:fire_charge", - "id": 522 - }, - { - "name": "minecraft:fire_coral", - "id": -583 - }, - { - "name": "minecraft:fire_coral_fan", - "id": -842 - }, - { - "name": "minecraft:firework_rocket", - "id": 532 - }, - { - "name": "minecraft:firework_star", - "id": 533 - }, - { - "name": "minecraft:fishing_rod", - "id": 397 - }, - { - "name": "minecraft:fletching_table", - "id": -201 - }, - { - "name": "minecraft:flint", - "id": 360 - }, - { - "name": "minecraft:flint_and_steel", - "id": 302 - }, - { - "name": "minecraft:flow_armor_trim_smithing_template", - "id": 712 - }, - { - "name": "minecraft:flow_banner_pattern", - "id": 602 - }, - { - "name": "minecraft:flow_pottery_sherd", - "id": 679 - }, - { - "name": "minecraft:flower_banner_pattern", - "id": 594 - }, - { - "name": "minecraft:flower_pot", - "id": 527 - }, - { - "name": "minecraft:flowering_azalea", - "id": -338 - }, - { - "name": "minecraft:flowing_lava", - "id": 10 - }, - { - "name": "minecraft:flowing_water", - "id": 8 - }, - { - "name": "minecraft:fox_spawn_egg", - "id": 497 - }, - { - "name": "minecraft:frame", - "id": 526 - }, - { - "name": "minecraft:friend_pottery_sherd", - "id": 680 - }, - { - "name": "minecraft:frog_spawn", - "id": -468 - }, - { - "name": "minecraft:frog_spawn_egg", - "id": 643 - }, - { - "name": "minecraft:frosted_ice", - "id": 207 - }, - { - "name": "minecraft:furnace", - "id": 61 - }, - { - "name": "minecraft:ghast_spawn_egg", - "id": 460 - }, - { - "name": "minecraft:ghast_tear", - "id": 430 - }, - { - "name": "minecraft:gilded_blackstone", - "id": -281 - }, - { - "name": "minecraft:glass", - "id": 20 - }, - { - "name": "minecraft:glass_bottle", - "id": 433 - }, - { - "name": "minecraft:glass_pane", - "id": 102 - }, - { - "name": "minecraft:glistering_melon_slice", - "id": 440 - }, - { - "name": "minecraft:globe_banner_pattern", - "id": 601 - }, - { - "name": "minecraft:glow_berries", - "id": 747 - }, - { - "name": "minecraft:glow_frame", - "id": 638 - }, - { - "name": "minecraft:glow_ink_sac", - "id": 516 - }, - { - "name": "minecraft:glow_lichen", - "id": -411 - }, - { - "name": "minecraft:glow_squid_spawn_egg", - "id": 511 - }, - { - "name": "minecraft:glow_stick", - "id": 616 - }, - { - "name": "minecraft:glowingobsidian", - "id": 246 - }, - { - "name": "minecraft:glowstone", - "id": 89 - }, - { - "name": "minecraft:glowstone_dust", - "id": 399 - }, - { - "name": "minecraft:goat_horn", - "id": 642 - }, - { - "name": "minecraft:goat_spawn_egg", - "id": 510 - }, - { - "name": "minecraft:gold_block", - "id": 41 - }, - { - "name": "minecraft:gold_ingot", - "id": 309 - }, - { - "name": "minecraft:gold_nugget", - "id": 431 - }, - { - "name": "minecraft:gold_ore", - "id": 14 - }, - { - "name": "minecraft:golden_apple", - "id": 259 - }, - { - "name": "minecraft:golden_axe", - "id": 329 - }, - { - "name": "minecraft:golden_boots", - "id": 358 - }, - { - "name": "minecraft:golden_carrot", - "id": 284 - }, - { - "name": "minecraft:golden_chestplate", - "id": 356 - }, - { - "name": "minecraft:golden_helmet", - "id": 355 - }, - { - "name": "minecraft:golden_hoe", - "id": 337 - }, - { - "name": "minecraft:golden_horse_armor", - "id": 545 - }, - { - "name": "minecraft:golden_leggings", - "id": 357 - }, - { - "name": "minecraft:golden_pickaxe", - "id": 328 - }, - { - "name": "minecraft:golden_rail", - "id": 27 - }, - { - "name": "minecraft:golden_shovel", - "id": 327 - }, - { - "name": "minecraft:golden_sword", - "id": 326 - }, - { - "name": "minecraft:granite", - "id": -590 - }, - { - "name": "minecraft:granite_stairs", - "id": -169 - }, - { - "name": "minecraft:grass_block", - "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": 408 - }, - { - "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": 402 - }, - { - "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": 467 - }, - { - "name": "minecraft:gunpowder", - "id": 332 - }, - { - "name": "minecraft:guster_banner_pattern", - "id": 603 - }, - { - "name": "minecraft:guster_pottery_sherd", - "id": 681 - }, - { - "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": 740 - }, - { - "name": "minecraft:hard_stained_glass_pane", - "id": 741 - }, - { - "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": 584 - }, - { - "name": "minecraft:heart_pottery_sherd", - "id": 682 - }, - { - "name": "minecraft:heartbreak_pottery_sherd", - "id": 683 - }, - { - "name": "minecraft:heavy_core", - "id": -316 - }, - { - "name": "minecraft:heavy_weighted_pressure_plate", - "id": 148 - }, - { - "name": "minecraft:hoglin_spawn_egg", - "id": 503 - }, - { - "name": "minecraft:honey_block", - "id": -220 - }, - { - "name": "minecraft:honey_bottle", - "id": 607 - }, - { - "name": "minecraft:honeycomb", - "id": 606 - }, - { - "name": "minecraft:honeycomb_block", - "id": -221 - }, - { - "name": "minecraft:hopper", - "id": 540 - }, - { - "name": "minecraft:hopper_minecart", - "id": 539 - }, - { - "name": "minecraft:horn_coral", - "id": -584 - }, - { - "name": "minecraft:horn_coral_fan", - "id": -843 - }, - { - "name": "minecraft:horse_spawn_egg", - "id": 464 - }, - { - "name": "minecraft:host_armor_trim_smithing_template", - "id": 711 - }, - { - "name": "minecraft:howl_pottery_sherd", - "id": 684 - }, - { - "name": "minecraft:husk_spawn_egg", - "id": 470 - }, - { - "name": "minecraft:ice", - "id": 79 - }, - { - "name": "minecraft:ice_bomb", - "id": 610 - }, - { - "name": "minecraft:infested_deepslate", - "id": -454 - }, - { - "name": "minecraft:info_update", - "id": 248 - }, - { - "name": "minecraft:info_update2", - "id": 249 - }, - { - "name": "minecraft:ink_sac", - "id": 418 - }, - { - "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": 350 - }, - { - "name": "minecraft:iron_chestplate", - "id": 348 - }, - { - "name": "minecraft:iron_door", - "id": 376 - }, - { - "name": "minecraft:iron_golem_spawn_egg", - "id": 512 - }, - { - "name": "minecraft:iron_helmet", - "id": 347 - }, - { - "name": "minecraft:iron_hoe", - "id": 335 - }, - { - "name": "minecraft:iron_horse_armor", - "id": 544 - }, - { - "name": "minecraft:iron_ingot", - "id": 308 - }, - { - "name": "minecraft:iron_leggings", - "id": 349 - }, - { - "name": "minecraft:iron_nugget", - "id": 582 - }, - { - "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": 382 - }, - { - "name": "minecraft:jungle_button", - "id": -143 - }, - { - "name": "minecraft:jungle_chest_boat", - "id": 655 - }, - { - "name": "minecraft:jungle_door", - "id": 568 - }, - { - "name": "minecraft:jungle_double_slab", - "id": -811 - }, - { - "name": "minecraft:jungle_fence", - "id": -578 - }, - { - "name": "minecraft:jungle_fence_gate", - "id": 185 - }, - { - "name": "minecraft:jungle_hanging_sign", - "id": -503 - }, - { - "name": "minecraft:jungle_leaves", - "id": -802 - }, - { - "name": "minecraft:jungle_log", - "id": -571 - }, - { - "name": "minecraft:jungle_planks", - "id": -741 - }, - { - "name": "minecraft:jungle_pressure_plate", - "id": -153 - }, - { - "name": "minecraft:jungle_sapling", - "id": -827 - }, - { - "name": "minecraft:jungle_sign", - "id": 591 - }, - { - "name": "minecraft:jungle_slab", - "id": -806 - }, - { - "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:jungle_wood", - "id": -816 - }, - { - "name": "minecraft:kelp", - "id": 387 - }, - { - "name": "minecraft:ladder", - "id": 65 - }, - { - "name": "minecraft:lantern", - "id": -208 - }, - { - "name": "minecraft:lapis_block", - "id": 22 - }, - { - "name": "minecraft:lapis_lazuli", - "id": 419 - }, - { - "name": "minecraft:lapis_ore", - "id": 21 - }, - { - "name": "minecraft:large_amethyst_bud", - "id": -330 - }, - { - "name": "minecraft:lava", - "id": 11 - }, - { - "name": "minecraft:lava_bucket", - "id": 367 - }, - { - "name": "minecraft:lead", - "id": 560 - }, - { - "name": "minecraft:leather", - "id": 386 - }, - { - "name": "minecraft:leather_boots", - "id": 342 - }, - { - "name": "minecraft:leather_chestplate", - "id": 340 - }, - { - "name": "minecraft:leather_helmet", - "id": 339 - }, - { - "name": "minecraft:leather_horse_armor", - "id": 543 - }, - { - "name": "minecraft:leather_leggings", - "id": 341 - }, - { - "name": "minecraft:leaves", - "id": 727 - }, - { - "name": "minecraft:leaves2", - "id": 728 - }, - { - "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": 412 - }, - { - "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": 407 - }, - { - "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:lily_of_the_valley", - "id": -839 - }, - { - "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": 410 - }, - { - "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": 575 - }, - { - "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": 480 - }, - { - "name": "minecraft:lodestone", - "id": -222 - }, - { - "name": "minecraft:lodestone_compass", - "id": 617 - }, - { - "name": "minecraft:log", - "id": 722 - }, - { - "name": "minecraft:log2", - "id": 733 - }, - { - "name": "minecraft:loom", - "id": -204 - }, - { - "name": "minecraft:mace", - "id": 323 - }, - { - "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": 413 - }, - { - "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": 436 - }, - { - "name": "minecraft:magma_cube_spawn_egg", - "id": 461 - }, - { - "name": "minecraft:mangrove_boat", - "id": 650 - }, - { - "name": "minecraft:mangrove_button", - "id": -487 - }, - { - "name": "minecraft:mangrove_chest_boat", - "id": 659 - }, - { - "name": "minecraft:mangrove_door", - "id": 648 - }, - { - "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": 649 - }, - { - "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": 614 - }, - { - "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": 365 - }, - { - "name": "minecraft:minecart", - "id": 374 - }, - { - "name": "minecraft:miner_pottery_sherd", - "id": 685 - }, - { - "name": "minecraft:mob_spawner", - "id": 52 - }, - { - "name": "minecraft:mojang_banner_pattern", - "id": 597 - }, - { - "name": "minecraft:monster_egg", - "id": 97 - }, - { - "name": "minecraft:mooshroom_spawn_egg", - "id": 446 - }, - { - "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": 686 - }, - { - "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": 473 - }, - { - "name": "minecraft:mushroom_stew", - "id": 261 - }, - { - "name": "minecraft:music_disc_11", - "id": 557 - }, - { - "name": "minecraft:music_disc_13", - "id": 547 - }, - { - "name": "minecraft:music_disc_5", - "id": 651 - }, - { - "name": "minecraft:music_disc_blocks", - "id": 549 - }, - { - "name": "minecraft:music_disc_cat", - "id": 548 - }, - { - "name": "minecraft:music_disc_chirp", - "id": 550 - }, - { - "name": "minecraft:music_disc_far", - "id": 551 - }, - { - "name": "minecraft:music_disc_mall", - "id": 552 - }, - { - "name": "minecraft:music_disc_mellohi", - "id": 553 - }, - { - "name": "minecraft:music_disc_otherside", - "id": 641 - }, - { - "name": "minecraft:music_disc_pigstep", - "id": 635 - }, - { - "name": "minecraft:music_disc_relic", - "id": 714 - }, - { - "name": "minecraft:music_disc_stal", - "id": 554 - }, - { - "name": "minecraft:music_disc_strad", - "id": 555 - }, - { - "name": "minecraft:music_disc_wait", - "id": 558 - }, - { - "name": "minecraft:music_disc_ward", - "id": 556 - }, - { - "name": "minecraft:mutton", - "id": 563 - }, - { - "name": "minecraft:mycelium", - "id": 110 - }, - { - "name": "minecraft:name_tag", - "id": 561 - }, - { - "name": "minecraft:nautilus_shell", - "id": 583 - }, - { - "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": 636 - }, - { - "name": "minecraft:nether_star", - "id": 531 - }, - { - "name": "minecraft:nether_wart", - "id": 295 - }, - { - "name": "minecraft:nether_wart_block", - "id": 214 - }, - { - "name": "minecraft:netherbrick", - "id": 536 - }, - { - "name": "minecraft:netherite_axe", - "id": 621 - }, - { - "name": "minecraft:netherite_block", - "id": -270 - }, - { - "name": "minecraft:netherite_boots", - "id": 627 - }, - { - "name": "minecraft:netherite_chestplate", - "id": 625 - }, - { - "name": "minecraft:netherite_helmet", - "id": 624 - }, - { - "name": "minecraft:netherite_hoe", - "id": 622 - }, - { - "name": "minecraft:netherite_ingot", - "id": 623 - }, - { - "name": "minecraft:netherite_leggings", - "id": 626 - }, - { - "name": "minecraft:netherite_pickaxe", - "id": 620 - }, - { - "name": "minecraft:netherite_scrap", - "id": 628 - }, - { - "name": "minecraft:netherite_shovel", - "id": 619 - }, - { - "name": "minecraft:netherite_sword", - "id": 618 - }, - { - "name": "minecraft:netherite_upgrade_smithing_template", - "id": 695 - }, - { - "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": 477 - }, - { - "name": "minecraft:oak_boat", - "id": 380 - }, - { - "name": "minecraft:oak_chest_boat", - "id": 653 - }, - { - "name": "minecraft:oak_double_slab", - "id": 157 - }, - { - "name": "minecraft:oak_fence", - "id": 85 - }, - { - "name": "minecraft:oak_hanging_sign", - "id": -500 - }, - { - "name": "minecraft:oak_leaves", - "id": 18 - }, - { - "name": "minecraft:oak_log", - "id": 17 - }, - { - "name": "minecraft:oak_planks", - "id": 5 - }, - { - "name": "minecraft:oak_sapling", - "id": 6 - }, - { - "name": "minecraft:oak_sign", - "id": 362 - }, - { - "name": "minecraft:oak_slab", - "id": 158 - }, - { - "name": "minecraft:oak_stairs", - "id": 53 - }, - { - "name": "minecraft:oak_wood", - "id": -212 - }, - { - "name": "minecraft:observer", - "id": 251 - }, - { - "name": "minecraft:obsidian", - "id": 49 - }, - { - "name": "minecraft:ocelot_spawn_egg", - "id": 457 - }, - { - "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": 414 - }, - { - "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_tulip", - "id": -834 - }, - { - "name": "minecraft:orange_wool", - "id": -557 - }, - { - "name": "minecraft:oxeye_daisy", - "id": -837 - }, - { - "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": 361 - }, - { - "name": "minecraft:panda_spawn_egg", - "id": 496 - }, - { - "name": "minecraft:paper", - "id": 391 - }, - { - "name": "minecraft:parrot_spawn_egg", - "id": 485 - }, - { - "name": "minecraft:pearlescent_froglight", - "id": -469 - }, - { - "name": "minecraft:phantom_membrane", - "id": 587 - }, - { - "name": "minecraft:phantom_spawn_egg", - "id": 493 - }, - { - "name": "minecraft:pig_spawn_egg", - "id": 443 - }, - { - "name": "minecraft:piglin_banner_pattern", - "id": 600 - }, - { - "name": "minecraft:piglin_brute_spawn_egg", - "id": 506 - }, - { - "name": "minecraft:piglin_spawn_egg", - "id": 504 - }, - { - "name": "minecraft:pillager_spawn_egg", - "id": 498 - }, - { - "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": 409 - }, - { - "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_tulip", - "id": -836 - }, - { - "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": 731 - }, - { - "name": "minecraft:plenty_pottery_sherd", - "id": 687 - }, - { - "name": "minecraft:podzol", - "id": 243 - }, - { - "name": "minecraft:pointed_dripstone", - "id": -308 - }, - { - "name": "minecraft:poisonous_potato", - "id": 283 - }, - { - "name": "minecraft:polar_bear_spawn_egg", - "id": 479 - }, - { - "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": 572 - }, - { - "name": "minecraft:poppy", - "id": 38 - }, - { - "name": "minecraft:porkchop", - "id": 263 - }, - { - "name": "minecraft:portal", - "id": 90 - }, - { - "name": "minecraft:potato", - "id": 281 - }, - { - "name": "minecraft:potatoes", - "id": 142 - }, - { - "name": "minecraft:potion", - "id": 432 - }, - { - "name": "minecraft:powder_snow", - "id": -306 - }, - { - "name": "minecraft:powder_snow_bucket", - "id": 372 - }, - { - "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": 562 - }, - { - "name": "minecraft:prismarine_shard", - "id": 578 - }, - { - "name": "minecraft:prismarine_stairs", - "id": -2 - }, - { - "name": "minecraft:prize_pottery_sherd", - "id": 688 - }, - { - "name": "minecraft:pufferfish", - "id": 268 - }, - { - "name": "minecraft:pufferfish_bucket", - "id": 371 - }, - { - "name": "minecraft:pufferfish_spawn_egg", - "id": 488 - }, - { - "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": 405 - }, - { - "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": 537 - }, - { - "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": 541 - }, - { - "name": "minecraft:rabbit_hide", - "id": 542 - }, - { - "name": "minecraft:rabbit_spawn_egg", - "id": 465 - }, - { - "name": "minecraft:rabbit_stew", - "id": 291 - }, - { - "name": "minecraft:rail", - "id": 66 - }, - { - "name": "minecraft:raiser_armor_trim_smithing_template", - "id": 709 - }, - { - "name": "minecraft:rapid_fertilizer", - "id": 612 - }, - { - "name": "minecraft:ravager_spawn_egg", - "id": 500 - }, - { - "name": "minecraft:raw_copper", - "id": 520 - }, - { - "name": "minecraft:raw_copper_block", - "id": -452 - }, - { - "name": "minecraft:raw_gold", - "id": 519 - }, - { - "name": "minecraft:raw_gold_block", - "id": -453 - }, - { - "name": "minecraft:raw_iron", - "id": 518 - }, - { - "name": "minecraft:raw_iron_block", - "id": -451 - }, - { - "name": "minecraft:recovery_compass", - "id": 661 - }, - { - "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": 401 - }, - { - "name": "minecraft:red_flower", - "id": 730 - }, - { - "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_tulip", - "id": -833 - }, - { - "name": "minecraft:red_wool", - "id": -556 - }, - { - "name": "minecraft:redstone", - "id": 377 - }, - { - "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": 424 - }, - { - "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": 705 - }, - { - "name": "minecraft:rotten_flesh", - "id": 278 - }, - { - "name": "minecraft:saddle", - "id": 375 - }, - { - "name": "minecraft:salmon", - "id": 266 - }, - { - "name": "minecraft:salmon_bucket", - "id": 369 - }, - { - "name": "minecraft:salmon_spawn_egg", - "id": 489 - }, - { - "name": "minecraft:sand", - "id": 12 - }, - { - "name": "minecraft:sandstone", - "id": 24 - }, - { - "name": "minecraft:sandstone_stairs", - "id": 128 - }, - { - "name": "minecraft:sapling", - "id": 726 - }, - { - "name": "minecraft:scaffolding", - "id": -165 - }, - { - "name": "minecraft:scrape_pottery_sherd", - "id": 689 - }, - { - "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": 696 - }, - { - "name": "minecraft:shaper_armor_trim_smithing_template", - "id": 710 - }, - { - "name": "minecraft:sheaf_pottery_sherd", - "id": 690 - }, - { - "name": "minecraft:shears", - "id": 426 - }, - { - "name": "minecraft:sheep_spawn_egg", - "id": 444 - }, - { - "name": "minecraft:shelter_pottery_sherd", - "id": 691 - }, - { - "name": "minecraft:shield", - "id": 359 - }, - { - "name": "minecraft:shroomlight", - "id": -230 - }, - { - "name": "minecraft:shulker_box", - "id": 738 - }, - { - "name": "minecraft:shulker_shell", - "id": 579 - }, - { - "name": "minecraft:shulker_spawn_egg", - "id": 476 - }, - { - "name": "minecraft:silence_armor_trim_smithing_template", - "id": 707 - }, - { - "name": "minecraft:silver_glazed_terracotta", - "id": 228 - }, - { - "name": "minecraft:silverfish_spawn_egg", - "id": 449 - }, - { - "name": "minecraft:skeleton_horse_spawn_egg", - "id": 474 - }, - { - "name": "minecraft:skeleton_spawn_egg", - "id": 450 - }, - { - "name": "minecraft:skull", - "id": 529 - }, - { - "name": "minecraft:skull_banner_pattern", - "id": 596 - }, - { - "name": "minecraft:skull_pottery_sherd", - "id": 692 - }, - { - "name": "minecraft:slime", - "id": 165 - }, - { - "name": "minecraft:slime_ball", - "id": 393 - }, - { - "name": "minecraft:slime_spawn_egg", - "id": 451 - }, - { - "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": 507 - }, - { - "name": "minecraft:snort_pottery_sherd", - "id": 693 - }, - { - "name": "minecraft:snout_armor_trim_smithing_template", - "id": 704 - }, - { - "name": "minecraft:snow", - "id": 80 - }, - { - "name": "minecraft:snow_golem_spawn_egg", - "id": 513 - }, - { - "name": "minecraft:snow_layer", - "id": 78 - }, - { - "name": "minecraft:snowball", - "id": 378 - }, - { - "name": "minecraft:soul_campfire", - "id": 637 - }, - { - "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": 615 - }, - { - "name": "minecraft:spawn_egg", - "id": 745 - }, - { - "name": "minecraft:spider_eye", - "id": 279 - }, - { - "name": "minecraft:spider_spawn_egg", - "id": 452 - }, - { - "name": "minecraft:spire_armor_trim_smithing_template", - "id": 706 - }, - { - "name": "minecraft:splash_potion", - "id": 574 - }, - { - "name": "minecraft:sponge", - "id": 19 - }, - { - "name": "minecraft:spore_blossom", - "id": -321 - }, - { - "name": "minecraft:spruce_boat", - "id": 383 - }, - { - "name": "minecraft:spruce_button", - "id": -144 - }, - { - "name": "minecraft:spruce_chest_boat", - "id": 656 - }, - { - "name": "minecraft:spruce_door", - "id": 566 - }, - { - "name": "minecraft:spruce_double_slab", - "id": -809 - }, - { - "name": "minecraft:spruce_fence", - "id": -579 - }, - { - "name": "minecraft:spruce_fence_gate", - "id": 183 - }, - { - "name": "minecraft:spruce_hanging_sign", - "id": -501 - }, - { - "name": "minecraft:spruce_leaves", - "id": -800 - }, - { - "name": "minecraft:spruce_log", - "id": -569 - }, - { - "name": "minecraft:spruce_planks", - "id": -739 - }, - { - "name": "minecraft:spruce_pressure_plate", - "id": -154 - }, - { - "name": "minecraft:spruce_sapling", - "id": -825 - }, - { - "name": "minecraft:spruce_sign", - "id": 589 - }, - { - "name": "minecraft:spruce_slab", - "id": -804 - }, - { - "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:spruce_wood", - "id": -814 - }, - { - "name": "minecraft:spyglass", - "id": 640 - }, - { - "name": "minecraft:squid_spawn_egg", - "id": 456 - }, - { - "name": "minecraft:stained_glass", - "id": 736 - }, - { - "name": "minecraft:stained_glass_pane", - "id": 737 - }, - { - "name": "minecraft:stained_hardened_clay", - "id": 715 - }, - { - "name": "minecraft:standing_banner", - "id": 176 - }, - { - "name": "minecraft:standing_sign", - "id": 63 - }, - { - "name": "minecraft:stick", - "id": 324 - }, - { - "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": 334 - }, - { - "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": 468 - }, - { - "name": "minecraft:strider_spawn_egg", - "id": 502 - }, - { - "name": "minecraft:string", - "id": 330 - }, - { - "name": "minecraft:stripped_acacia_log", - "id": -8 - }, - { - "name": "minecraft:stripped_acacia_wood", - "id": -823 - }, - { - "name": "minecraft:stripped_bamboo_block", - "id": -528 - }, - { - "name": "minecraft:stripped_birch_log", - "id": -6 - }, - { - "name": "minecraft:stripped_birch_wood", - "id": -821 - }, - { - "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_dark_oak_wood", - "id": -824 - }, - { - "name": "minecraft:stripped_jungle_log", - "id": -7 - }, - { - "name": "minecraft:stripped_jungle_wood", - "id": -822 - }, - { - "name": "minecraft:stripped_mangrove_log", - "id": -485 - }, - { - "name": "minecraft:stripped_mangrove_wood", - "id": -498 - }, - { - "name": "minecraft:stripped_oak_log", - "id": -10 - }, - { - "name": "minecraft:stripped_oak_wood", - "id": -819 - }, - { - "name": "minecraft:stripped_spruce_log", - "id": -5 - }, - { - "name": "minecraft:stripped_spruce_wood", - "id": -820 - }, - { - "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": 421 - }, - { - "name": "minecraft:sugar_cane", - "id": 390 - }, - { - "name": "minecraft:suspicious_gravel", - "id": -573 - }, - { - "name": "minecraft:suspicious_sand", - "id": -529 - }, - { - "name": "minecraft:suspicious_stew", - "id": 605 - }, - { - "name": "minecraft:sweet_berries", - "id": 288 - }, - { - "name": "minecraft:sweet_berry_bush", - "id": -207 - }, - { - "name": "minecraft:tadpole_bucket", - "id": 645 - }, - { - "name": "minecraft:tadpole_spawn_egg", - "id": 644 - }, - { - "name": "minecraft:tallgrass", - "id": 31 - }, - { - "name": "minecraft:target", - "id": -239 - }, - { - "name": "minecraft:tide_armor_trim_smithing_template", - "id": 703 - }, - { - "name": "minecraft:tinted_glass", - "id": -334 - }, - { - "name": "minecraft:tnt", - "id": 46 - }, - { - "name": "minecraft:tnt_minecart", - "id": 538 - }, - { - "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": 581 - }, - { - "name": "minecraft:trader_llama_spawn_egg", - "id": 663 - }, - { - "name": "minecraft:trapdoor", - "id": 96 - }, - { - "name": "minecraft:trapped_chest", - "id": 146 - }, - { - "name": "minecraft:trial_key", - "id": 719 - }, - { - "name": "minecraft:trial_spawner", - "id": -315 - }, - { - "name": "minecraft:trident", - "id": 559 - }, - { - "name": "minecraft:trip_wire", - "id": 132 - }, - { - "name": "minecraft:tripwire_hook", - "id": 131 - }, - { - "name": "minecraft:tropical_fish", - "id": 267 - }, - { - "name": "minecraft:tropical_fish_bucket", - "id": 370 - }, - { - "name": "minecraft:tropical_fish_spawn_egg", - "id": 486 - }, - { - "name": "minecraft:tube_coral", - "id": -131 - }, - { - "name": "minecraft:tube_coral_fan", - "id": -133 - }, - { - "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": 586 - }, - { - "name": "minecraft:turtle_scute", - "id": 585 - }, - { - "name": "minecraft:turtle_spawn_egg", - "id": 492 - }, - { - "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:vault", - "id": -314 - }, - { - "name": "minecraft:verdant_froglight", - "id": -470 - }, - { - "name": "minecraft:vex_armor_trim_smithing_template", - "id": 702 - }, - { - "name": "minecraft:vex_spawn_egg", - "id": 483 - }, - { - "name": "minecraft:villager_spawn_egg", - "id": 455 - }, - { - "name": "minecraft:vindicator_spawn_egg", - "id": 481 - }, - { - "name": "minecraft:vine", - "id": 106 - }, - { - "name": "minecraft:wall_banner", - "id": 177 - }, - { - "name": "minecraft:wall_sign", - "id": 68 - }, - { - "name": "minecraft:wandering_trader_spawn_egg", - "id": 499 - }, - { - "name": "minecraft:ward_armor_trim_smithing_template", - "id": 700 - }, - { - "name": "minecraft:warden_spawn_egg", - "id": 647 - }, - { - "name": "minecraft:warped_button", - "id": -261 - }, - { - "name": "minecraft:warped_door", - "id": 632 - }, - { - "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": 633 - }, - { - "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": 630 - }, - { - "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": 366 - }, - { - "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": 708 - }, - { - "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": 338 - }, - { - "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": 415 - }, - { - "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_tulip", - "id": -835 - }, - { - "name": "minecraft:white_wool", - "id": 35 - }, - { - "name": "minecraft:wild_armor_trim_smithing_template", - "id": 699 - }, - { - "name": "minecraft:wind_charge", - "id": 379 - }, - { - "name": "minecraft:witch_spawn_egg", - "id": 458 - }, - { - "name": "minecraft:wither_rose", - "id": -216 - }, - { - "name": "minecraft:wither_skeleton_spawn_egg", - "id": 471 - }, - { - "name": "minecraft:wither_spawn_egg", - "id": 515 - }, - { - "name": "minecraft:wolf_armor", - "id": 718 - }, - { - "name": "minecraft:wolf_spawn_egg", - "id": 445 - }, - { - "name": "minecraft:wood", - "id": 739 - }, - { - "name": "minecraft:wooden_axe", - "id": 314 - }, - { - "name": "minecraft:wooden_button", - "id": 143 - }, - { - "name": "minecraft:wooden_door", - "id": 363 - }, - { - "name": "minecraft:wooden_hoe", - "id": 333 - }, - { - "name": "minecraft:wooden_pickaxe", - "id": 313 - }, - { - "name": "minecraft:wooden_pressure_plate", - "id": 72 - }, - { - "name": "minecraft:wooden_shovel", - "id": 312 - }, - { - "name": "minecraft:wooden_slab", - "id": 729 - }, - { - "name": "minecraft:wooden_sword", - "id": 311 - }, - { - "name": "minecraft:wool", - "id": 720 - }, - { - "name": "minecraft:writable_book", - "id": 523 - }, - { - "name": "minecraft:written_book", - "id": 524 - }, - { - "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": 411 - }, - { - "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": 505 - }, - { - "name": "minecraft:zombie_horse_spawn_egg", - "id": 475 - }, - { - "name": "minecraft:zombie_pigman_spawn_egg", - "id": 454 - }, - { - "name": "minecraft:zombie_spawn_egg", - "id": 453 - }, - { - "name": "minecraft:zombie_villager_spawn_egg", - "id": 484 - } -] \ No newline at end of file diff --git a/core/src/main/resources/bedrock/runtime_item_states.1_21_0.json b/core/src/main/resources/bedrock/runtime_item_states.1_21_0.json deleted file mode 100644 index 1430a5437..000000000 --- a/core/src/main/resources/bedrock/runtime_item_states.1_21_0.json +++ /dev/null @@ -1,6398 +0,0 @@ -[ - { - "name": "minecraft:acacia_boat", - "id": 387 - }, - { - "name": "minecraft:acacia_button", - "id": -140 - }, - { - "name": "minecraft:acacia_chest_boat", - "id": 661 - }, - { - "name": "minecraft:acacia_door", - "id": 572 - }, - { - "name": "minecraft:acacia_double_slab", - "id": -812 - }, - { - "name": "minecraft:acacia_fence", - "id": -575 - }, - { - "name": "minecraft:acacia_fence_gate", - "id": 187 - }, - { - "name": "minecraft:acacia_hanging_sign", - "id": -504 - }, - { - "name": "minecraft:acacia_leaves", - "id": 161 - }, - { - "name": "minecraft:acacia_log", - "id": 162 - }, - { - "name": "minecraft:acacia_planks", - "id": -742 - }, - { - "name": "minecraft:acacia_pressure_plate", - "id": -150 - }, - { - "name": "minecraft:acacia_sapling", - "id": -828 - }, - { - "name": "minecraft:acacia_sign", - "id": 595 - }, - { - "name": "minecraft:acacia_slab", - "id": -807 - }, - { - "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:acacia_wood", - "id": -817 - }, - { - "name": "minecraft:activator_rail", - "id": 126 - }, - { - "name": "minecraft:agent_spawn_egg", - "id": 497 - }, - { - "name": "minecraft:air", - "id": -158 - }, - { - "name": "minecraft:allay_spawn_egg", - "id": 650 - }, - { - "name": "minecraft:allium", - "id": -831 - }, - { - "name": "minecraft:allow", - "id": 210 - }, - { - "name": "minecraft:amethyst_block", - "id": -327 - }, - { - "name": "minecraft:amethyst_cluster", - "id": -329 - }, - { - "name": "minecraft:amethyst_shard", - "id": 643 - }, - { - "name": "minecraft:ancient_debris", - "id": -271 - }, - { - "name": "minecraft:andesite", - "id": -594 - }, - { - "name": "minecraft:andesite_stairs", - "id": -171 - }, - { - "name": "minecraft:angler_pottery_sherd", - "id": 675 - }, - { - "name": "minecraft:anvil", - "id": 145 - }, - { - "name": "minecraft:apple", - "id": 257 - }, - { - "name": "minecraft:archer_pottery_sherd", - "id": 676 - }, - { - "name": "minecraft:armadillo_scute", - "id": 721 - }, - { - "name": "minecraft:armadillo_spawn_egg", - "id": 720 - }, - { - "name": "minecraft:armor_stand", - "id": 568 - }, - { - "name": "minecraft:arms_up_pottery_sherd", - "id": 677 - }, - { - "name": "minecraft:arrow", - "id": 307 - }, - { - "name": "minecraft:axolotl_bucket", - "id": 376 - }, - { - "name": "minecraft:axolotl_spawn_egg", - "id": 512 - }, - { - "name": "minecraft:azalea", - "id": -337 - }, - { - "name": "minecraft:azalea_leaves", - "id": -324 - }, - { - "name": "minecraft:azalea_leaves_flowered", - "id": -325 - }, - { - "name": "minecraft:azure_bluet", - "id": -832 - }, - { - "name": "minecraft:baked_potato", - "id": 285 - }, - { - "name": "minecraft:balloon", - "id": 617 - }, - { - "name": "minecraft:bamboo", - "id": -163 - }, - { - "name": "minecraft:bamboo_block", - "id": -527 - }, - { - "name": "minecraft:bamboo_button", - "id": -511 - }, - { - "name": "minecraft:bamboo_chest_raft", - "id": 673 - }, - { - "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": 672 - }, - { - "name": "minecraft:bamboo_sapling", - "id": -164 - }, - { - "name": "minecraft:bamboo_sign", - "id": 671 - }, - { - "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": 583 - }, - { - "name": "minecraft:banner_pattern", - "id": 756 - }, - { - "name": "minecraft:barrel", - "id": -203 - }, - { - "name": "minecraft:barrier", - "id": -161 - }, - { - "name": "minecraft:basalt", - "id": -234 - }, - { - "name": "minecraft:bat_spawn_egg", - "id": 462 - }, - { - "name": "minecraft:beacon", - "id": 138 - }, - { - "name": "minecraft:bed", - "id": 426 - }, - { - "name": "minecraft:bedrock", - "id": 7 - }, - { - "name": "minecraft:bee_nest", - "id": -218 - }, - { - "name": "minecraft:bee_spawn_egg", - "id": 504 - }, - { - "name": "minecraft:beef", - "id": 277 - }, - { - "name": "minecraft:beehive", - "id": -219 - }, - { - "name": "minecraft:beetroot", - "id": 289 - }, - { - "name": "minecraft:beetroot_seeds", - "id": 299 - }, - { - "name": "minecraft:beetroot_soup", - "id": 290 - }, - { - "name": "minecraft:bell", - "id": -206 - }, - { - "name": "minecraft:big_dripleaf", - "id": -323 - }, - { - "name": "minecraft:birch_boat", - "id": 384 - }, - { - "name": "minecraft:birch_button", - "id": -141 - }, - { - "name": "minecraft:birch_chest_boat", - "id": 658 - }, - { - "name": "minecraft:birch_door", - "id": 570 - }, - { - "name": "minecraft:birch_double_slab", - "id": -810 - }, - { - "name": "minecraft:birch_fence", - "id": -576 - }, - { - "name": "minecraft:birch_fence_gate", - "id": 184 - }, - { - "name": "minecraft:birch_hanging_sign", - "id": -502 - }, - { - "name": "minecraft:birch_leaves", - "id": -801 - }, - { - "name": "minecraft:birch_log", - "id": -570 - }, - { - "name": "minecraft:birch_planks", - "id": -740 - }, - { - "name": "minecraft:birch_pressure_plate", - "id": -151 - }, - { - "name": "minecraft:birch_sapling", - "id": -826 - }, - { - "name": "minecraft:birch_sign", - "id": 593 - }, - { - "name": "minecraft:birch_slab", - "id": -805 - }, - { - "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:birch_wood", - "id": -815 - }, - { - "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": 403 - }, - { - "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": 678 - }, - { - "name": "minecraft:blast_furnace", - "id": -196 - }, - { - "name": "minecraft:blaze_powder", - "id": 438 - }, - { - "name": "minecraft:blaze_rod", - "id": 431 - }, - { - "name": "minecraft:blaze_spawn_egg", - "id": 465 - }, - { - "name": "minecraft:bleach", - "id": 615 - }, - { - "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": 407 - }, - { - "name": "minecraft:blue_glazed_terracotta", - "id": 231 - }, - { - "name": "minecraft:blue_ice", - "id": -11 - }, - { - "name": "minecraft:blue_orchid", - "id": -830 - }, - { - "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": 754 - }, - { - "name": "minecraft:bogged_spawn_egg", - "id": 472 - }, - { - "name": "minecraft:bolt_armor_trim_smithing_template", - "id": 717 - }, - { - "name": "minecraft:bone", - "id": 423 - }, - { - "name": "minecraft:bone_block", - "id": 216 - }, - { - "name": "minecraft:bone_meal", - "id": 419 - }, - { - "name": "minecraft:book", - "id": 395 - }, - { - "name": "minecraft:bookshelf", - "id": 47 - }, - { - "name": "minecraft:border_block", - "id": 212 - }, - { - "name": "minecraft:bordure_indented_banner_pattern", - "id": 602 - }, - { - "name": "minecraft:bow", - "id": 306 - }, - { - "name": "minecraft:bowl", - "id": 328 - }, - { - "name": "minecraft:brain_coral", - "id": -581 - }, - { - "name": "minecraft:brain_coral_block", - "id": -849 - }, - { - "name": "minecraft:brain_coral_fan", - "id": -840 - }, - { - "name": "minecraft:bread", - "id": 265 - }, - { - "name": "minecraft:breeze_rod", - "id": 432 - }, - { - "name": "minecraft:breeze_spawn_egg", - "id": 511 - }, - { - "name": "minecraft:brewer_pottery_sherd", - "id": 679 - }, - { - "name": "minecraft:brewing_stand", - "id": 440 - }, - { - "name": "minecraft:brick", - "id": 391 - }, - { - "name": "minecraft:brick_block", - "id": 45 - }, - { - "name": "minecraft:brick_slab", - "id": -874 - }, - { - "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": 406 - }, - { - "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": 698 - }, - { - "name": "minecraft:bubble_column", - "id": -160 - }, - { - "name": "minecraft:bubble_coral", - "id": -582 - }, - { - "name": "minecraft:bubble_coral_block", - "id": -850 - }, - { - "name": "minecraft:bubble_coral_fan", - "id": -841 - }, - { - "name": "minecraft:bucket", - "id": 367 - }, - { - "name": "minecraft:budding_amethyst", - "id": -328 - }, - { - "name": "minecraft:burn_pottery_sherd", - "id": 680 - }, - { - "name": "minecraft:cactus", - "id": 81 - }, - { - "name": "minecraft:cake", - "id": 425 - }, - { - "name": "minecraft:calcite", - "id": -326 - }, - { - "name": "minecraft:calibrated_sculk_sensor", - "id": -580 - }, - { - "name": "minecraft:camel_spawn_egg", - "id": 674 - }, - { - "name": "minecraft:camera", - "id": 612 - }, - { - "name": "minecraft:campfire", - "id": 607 - }, - { - "name": "minecraft:candle", - "id": -412 - }, - { - "name": "minecraft:candle_cake", - "id": -429 - }, - { - "name": "minecraft:carpet", - "id": 726 - }, - { - "name": "minecraft:carrot", - "id": 283 - }, - { - "name": "minecraft:carrot_on_a_stick", - "id": 533 - }, - { - "name": "minecraft:carrots", - "id": 141 - }, - { - "name": "minecraft:cartography_table", - "id": -200 - }, - { - "name": "minecraft:carved_pumpkin", - "id": -155 - }, - { - "name": "minecraft:cat_spawn_egg", - "id": 498 - }, - { - "name": "minecraft:cauldron", - "id": 441 - }, - { - "name": "minecraft:cave_spider_spawn_egg", - "id": 466 - }, - { - "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": 638 - }, - { - "name": "minecraft:chain_command_block", - "id": 189 - }, - { - "name": "minecraft:chainmail_boots", - "id": 349 - }, - { - "name": "minecraft:chainmail_chestplate", - "id": 347 - }, - { - "name": "minecraft:chainmail_helmet", - "id": 346 - }, - { - "name": "minecraft:chainmail_leggings", - "id": 348 - }, - { - "name": "minecraft:charcoal", - "id": 309 - }, - { - "name": "minecraft:chemical_heat", - "id": 192 - }, - { - "name": "minecraft:chemistry_table", - "id": 238 - }, - { - "name": "minecraft:cherry_boat", - "id": 668 - }, - { - "name": "minecraft:cherry_button", - "id": -530 - }, - { - "name": "minecraft:cherry_chest_boat", - "id": 669 - }, - { - "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": 670 - }, - { - "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": 664 - }, - { - "name": "minecraft:chest_minecart", - "id": 397 - }, - { - "name": "minecraft:chicken", - "id": 279 - }, - { - "name": "minecraft:chicken_spawn_egg", - "id": 444 - }, - { - "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": 574 - }, - { - "name": "minecraft:chorus_plant", - "id": 240 - }, - { - "name": "minecraft:clay", - "id": 82 - }, - { - "name": "minecraft:clay_ball", - "id": 392 - }, - { - "name": "minecraft:client_request_placeholder_block", - "id": -465 - }, - { - "name": "minecraft:clock", - "id": 401 - }, - { - "name": "minecraft:coal", - "id": 308 - }, - { - "name": "minecraft:coal_block", - "id": 173 - }, - { - "name": "minecraft:coal_ore", - "id": 16 - }, - { - "name": "minecraft:coast_armor_trim_smithing_template", - "id": 702 - }, - { - "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_slab", - "id": -873 - }, - { - "name": "minecraft:cobblestone_wall", - "id": 139 - }, - { - "name": "minecraft:cocoa", - "id": 127 - }, - { - "name": "minecraft:cocoa_beans", - "id": 420 - }, - { - "name": "minecraft:cod", - "id": 268 - }, - { - "name": "minecraft:cod_bucket", - "id": 371 - }, - { - "name": "minecraft:cod_spawn_egg", - "id": 490 - }, - { - "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": 579 - }, - { - "name": "minecraft:comparator", - "id": 538 - }, - { - "name": "minecraft:compass", - "id": 399 - }, - { - "name": "minecraft:composter", - "id": -213 - }, - { - "name": "minecraft:compound", - "id": 613 - }, - { - "name": "minecraft:concrete", - "id": 743 - }, - { - "name": "minecraft:concrete_powder", - "id": 744 - }, - { - "name": "minecraft:conduit", - "id": -157 - }, - { - "name": "minecraft:cooked_beef", - "id": 278 - }, - { - "name": "minecraft:cooked_chicken", - "id": 280 - }, - { - "name": "minecraft:cooked_cod", - "id": 272 - }, - { - "name": "minecraft:cooked_mutton", - "id": 567 - }, - { - "name": "minecraft:cooked_porkchop", - "id": 267 - }, - { - "name": "minecraft:cooked_rabbit", - "id": 293 - }, - { - "name": "minecraft:cooked_salmon", - "id": 273 - }, - { - "name": "minecraft:cookie", - "id": 275 - }, - { - "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": 520 - }, - { - "name": "minecraft:copper_ore", - "id": -311 - }, - { - "name": "minecraft:copper_trapdoor", - "id": -792 - }, - { - "name": "minecraft:coral", - "id": 740 - }, - { - "name": "minecraft:coral_block", - "id": 729 - }, - { - "name": "minecraft:coral_fan", - "id": 730 - }, - { - "name": "minecraft:coral_fan_dead", - "id": 731 - }, - { - "name": "minecraft:coral_fan_hang", - "id": -135 - }, - { - "name": "minecraft:coral_fan_hang2", - "id": -136 - }, - { - "name": "minecraft:coral_fan_hang3", - "id": -137 - }, - { - "name": "minecraft:cornflower", - "id": -838 - }, - { - "name": "minecraft:cow_spawn_egg", - "id": 445 - }, - { - "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": 598 - }, - { - "name": "minecraft:creeper_spawn_egg", - "id": 450 - }, - { - "name": "minecraft:crimson_button", - "id": -260 - }, - { - "name": "minecraft:crimson_door", - "id": 635 - }, - { - "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": 633 - }, - { - "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": 591 - }, - { - "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": 409 - }, - { - "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": 681 - }, - { - "name": "minecraft:dark_oak_boat", - "id": 388 - }, - { - "name": "minecraft:dark_oak_button", - "id": -142 - }, - { - "name": "minecraft:dark_oak_chest_boat", - "id": 662 - }, - { - "name": "minecraft:dark_oak_door", - "id": 573 - }, - { - "name": "minecraft:dark_oak_double_slab", - "id": -813 - }, - { - "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_leaves", - "id": -803 - }, - { - "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_sapling", - "id": -829 - }, - { - "name": "minecraft:dark_oak_sign", - "id": 596 - }, - { - "name": "minecraft:dark_oak_slab", - "id": -808 - }, - { - "name": "minecraft:dark_oak_stairs", - "id": 164 - }, - { - "name": "minecraft:dark_oak_trapdoor", - "id": -147 - }, - { - "name": "minecraft:dark_oak_wood", - "id": -818 - }, - { - "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_brain_coral_block", - "id": -854 - }, - { - "name": "minecraft:dead_brain_coral_fan", - "id": -844 - }, - { - "name": "minecraft:dead_bubble_coral", - "id": -587 - }, - { - "name": "minecraft:dead_bubble_coral_block", - "id": -855 - }, - { - "name": "minecraft:dead_bubble_coral_fan", - "id": -845 - }, - { - "name": "minecraft:dead_fire_coral", - "id": -588 - }, - { - "name": "minecraft:dead_fire_coral_block", - "id": -856 - }, - { - "name": "minecraft:dead_fire_coral_fan", - "id": -846 - }, - { - "name": "minecraft:dead_horn_coral", - "id": -589 - }, - { - "name": "minecraft:dead_horn_coral_block", - "id": -857 - }, - { - "name": "minecraft:dead_horn_coral_fan", - "id": -847 - }, - { - "name": "minecraft:dead_tube_coral", - "id": -585 - }, - { - "name": "minecraft:dead_tube_coral_block", - "id": -853 - }, - { - "name": "minecraft:dead_tube_coral_fan", - "id": -134 - }, - { - "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": 310 - }, - { - "name": "minecraft:diamond_axe", - "id": 325 - }, - { - "name": "minecraft:diamond_block", - "id": 57 - }, - { - "name": "minecraft:diamond_boots", - "id": 357 - }, - { - "name": "minecraft:diamond_chestplate", - "id": 355 - }, - { - "name": "minecraft:diamond_helmet", - "id": 354 - }, - { - "name": "minecraft:diamond_hoe", - "id": 339 - }, - { - "name": "minecraft:diamond_horse_armor", - "id": 549 - }, - { - "name": "minecraft:diamond_leggings", - "id": 356 - }, - { - "name": "minecraft:diamond_ore", - "id": 56 - }, - { - "name": "minecraft:diamond_pickaxe", - "id": 324 - }, - { - "name": "minecraft:diamond_shovel", - "id": 323 - }, - { - "name": "minecraft:diamond_sword", - "id": 322 - }, - { - "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": 656 - }, - { - "name": "minecraft:dispenser", - "id": 23 - }, - { - "name": "minecraft:dolphin_spawn_egg", - "id": 494 - }, - { - "name": "minecraft:donkey_spawn_egg", - "id": 475 - }, - { - "name": "minecraft:double_cut_copper_slab", - "id": -368 - }, - { - "name": "minecraft:double_plant", - "id": 738 - }, - { - "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:dragon_breath", - "id": 576 - }, - { - "name": "minecraft:dragon_egg", - "id": 122 - }, - { - "name": "minecraft:dried_kelp", - "id": 274 - }, - { - "name": "minecraft:dried_kelp_block", - "id": -139 - }, - { - "name": "minecraft:dripstone_block", - "id": -317 - }, - { - "name": "minecraft:dropper", - "id": 125 - }, - { - "name": "minecraft:drowned_spawn_egg", - "id": 493 - }, - { - "name": "minecraft:dune_armor_trim_smithing_template", - "id": 701 - }, - { - "name": "minecraft:dye", - "id": 755 - }, - { - "name": "minecraft:echo_shard", - "id": 666 - }, - { - "name": "minecraft:egg", - "id": 398 - }, - { - "name": "minecraft:elder_guardian_spawn_egg", - "id": 481 - }, - { - "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": 580 - }, - { - "name": "minecraft:emerald", - "id": 528 - }, - { - "name": "minecraft:emerald_block", - "id": 133 - }, - { - "name": "minecraft:emerald_ore", - "id": 129 - }, - { - "name": "minecraft:empty_map", - "id": 531 - }, - { - "name": "minecraft:enchanted_book", - "id": 537 - }, - { - "name": "minecraft:enchanted_golden_apple", - "id": 263 - }, - { - "name": "minecraft:enchanting_table", - "id": 116 - }, - { - "name": "minecraft:end_brick_stairs", - "id": -178 - }, - { - "name": "minecraft:end_bricks", - "id": 206 - }, - { - "name": "minecraft:end_crystal", - "id": 758 - }, - { - "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": 517 - }, - { - "name": "minecraft:ender_eye", - "id": 442 - }, - { - "name": "minecraft:ender_pearl", - "id": 430 - }, - { - "name": "minecraft:enderman_spawn_egg", - "id": 451 - }, - { - "name": "minecraft:endermite_spawn_egg", - "id": 469 - }, - { - "name": "minecraft:evoker_spawn_egg", - "id": 485 - }, - { - "name": "minecraft:experience_bottle", - "id": 524 - }, - { - "name": "minecraft:explorer_pottery_sherd", - "id": 682 - }, - { - "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": 705 - }, - { - "name": "minecraft:farmland", - "id": 60 - }, - { - "name": "minecraft:feather", - "id": 334 - }, - { - "name": "minecraft:fence", - "id": 728 - }, - { - "name": "minecraft:fence_gate", - "id": 107 - }, - { - "name": "minecraft:fermented_spider_eye", - "id": 437 - }, - { - "name": "minecraft:fern", - "id": -848 - }, - { - "name": "minecraft:field_masoned_banner_pattern", - "id": 601 - }, - { - "name": "minecraft:filled_map", - "id": 428 - }, - { - "name": "minecraft:fire", - "id": 51 - }, - { - "name": "minecraft:fire_charge", - "id": 525 - }, - { - "name": "minecraft:fire_coral", - "id": -583 - }, - { - "name": "minecraft:fire_coral_block", - "id": -851 - }, - { - "name": "minecraft:fire_coral_fan", - "id": -842 - }, - { - "name": "minecraft:firework_rocket", - "id": 535 - }, - { - "name": "minecraft:firework_star", - "id": 536 - }, - { - "name": "minecraft:fishing_rod", - "id": 400 - }, - { - "name": "minecraft:fletching_table", - "id": -201 - }, - { - "name": "minecraft:flint", - "id": 363 - }, - { - "name": "minecraft:flint_and_steel", - "id": 305 - }, - { - "name": "minecraft:flow_armor_trim_smithing_template", - "id": 716 - }, - { - "name": "minecraft:flow_banner_pattern", - "id": 605 - }, - { - "name": "minecraft:flow_pottery_sherd", - "id": 683 - }, - { - "name": "minecraft:flower_banner_pattern", - "id": 597 - }, - { - "name": "minecraft:flower_pot", - "id": 530 - }, - { - "name": "minecraft:flowering_azalea", - "id": -338 - }, - { - "name": "minecraft:flowing_lava", - "id": 10 - }, - { - "name": "minecraft:flowing_water", - "id": 8 - }, - { - "name": "minecraft:fox_spawn_egg", - "id": 500 - }, - { - "name": "minecraft:frame", - "id": 529 - }, - { - "name": "minecraft:friend_pottery_sherd", - "id": 684 - }, - { - "name": "minecraft:frog_spawn", - "id": -468 - }, - { - "name": "minecraft:frog_spawn_egg", - "id": 647 - }, - { - "name": "minecraft:frosted_ice", - "id": 207 - }, - { - "name": "minecraft:furnace", - "id": 61 - }, - { - "name": "minecraft:ghast_spawn_egg", - "id": 463 - }, - { - "name": "minecraft:ghast_tear", - "id": 433 - }, - { - "name": "minecraft:gilded_blackstone", - "id": -281 - }, - { - "name": "minecraft:glass", - "id": 20 - }, - { - "name": "minecraft:glass_bottle", - "id": 436 - }, - { - "name": "minecraft:glass_pane", - "id": 102 - }, - { - "name": "minecraft:glistering_melon_slice", - "id": 443 - }, - { - "name": "minecraft:globe_banner_pattern", - "id": 604 - }, - { - "name": "minecraft:glow_berries", - "id": 759 - }, - { - "name": "minecraft:glow_frame", - "id": 642 - }, - { - "name": "minecraft:glow_ink_sac", - "id": 519 - }, - { - "name": "minecraft:glow_lichen", - "id": -411 - }, - { - "name": "minecraft:glow_squid_spawn_egg", - "id": 514 - }, - { - "name": "minecraft:glow_stick", - "id": 620 - }, - { - "name": "minecraft:glowingobsidian", - "id": 246 - }, - { - "name": "minecraft:glowstone", - "id": 89 - }, - { - "name": "minecraft:glowstone_dust", - "id": 402 - }, - { - "name": "minecraft:goat_horn", - "id": 646 - }, - { - "name": "minecraft:goat_spawn_egg", - "id": 513 - }, - { - "name": "minecraft:gold_block", - "id": 41 - }, - { - "name": "minecraft:gold_ingot", - "id": 312 - }, - { - "name": "minecraft:gold_nugget", - "id": 434 - }, - { - "name": "minecraft:gold_ore", - "id": 14 - }, - { - "name": "minecraft:golden_apple", - "id": 262 - }, - { - "name": "minecraft:golden_axe", - "id": 332 - }, - { - "name": "minecraft:golden_boots", - "id": 361 - }, - { - "name": "minecraft:golden_carrot", - "id": 287 - }, - { - "name": "minecraft:golden_chestplate", - "id": 359 - }, - { - "name": "minecraft:golden_helmet", - "id": 358 - }, - { - "name": "minecraft:golden_hoe", - "id": 340 - }, - { - "name": "minecraft:golden_horse_armor", - "id": 548 - }, - { - "name": "minecraft:golden_leggings", - "id": 360 - }, - { - "name": "minecraft:golden_pickaxe", - "id": 331 - }, - { - "name": "minecraft:golden_rail", - "id": 27 - }, - { - "name": "minecraft:golden_shovel", - "id": 330 - }, - { - "name": "minecraft:golden_sword", - "id": 329 - }, - { - "name": "minecraft:granite", - "id": -590 - }, - { - "name": "minecraft:granite_stairs", - "id": -169 - }, - { - "name": "minecraft:grass_block", - "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": 411 - }, - { - "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": 405 - }, - { - "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": 470 - }, - { - "name": "minecraft:gunpowder", - "id": 335 - }, - { - "name": "minecraft:guster_banner_pattern", - "id": 606 - }, - { - "name": "minecraft:guster_pottery_sherd", - "id": 685 - }, - { - "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": 752 - }, - { - "name": "minecraft:hard_stained_glass_pane", - "id": 753 - }, - { - "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": 587 - }, - { - "name": "minecraft:heart_pottery_sherd", - "id": 686 - }, - { - "name": "minecraft:heartbreak_pottery_sherd", - "id": 687 - }, - { - "name": "minecraft:heavy_core", - "id": -316 - }, - { - "name": "minecraft:heavy_weighted_pressure_plate", - "id": 148 - }, - { - "name": "minecraft:hoglin_spawn_egg", - "id": 506 - }, - { - "name": "minecraft:honey_block", - "id": -220 - }, - { - "name": "minecraft:honey_bottle", - "id": 610 - }, - { - "name": "minecraft:honeycomb", - "id": 609 - }, - { - "name": "minecraft:honeycomb_block", - "id": -221 - }, - { - "name": "minecraft:hopper", - "id": 543 - }, - { - "name": "minecraft:hopper_minecart", - "id": 542 - }, - { - "name": "minecraft:horn_coral", - "id": -584 - }, - { - "name": "minecraft:horn_coral_block", - "id": -852 - }, - { - "name": "minecraft:horn_coral_fan", - "id": -843 - }, - { - "name": "minecraft:horse_spawn_egg", - "id": 467 - }, - { - "name": "minecraft:host_armor_trim_smithing_template", - "id": 715 - }, - { - "name": "minecraft:howl_pottery_sherd", - "id": 688 - }, - { - "name": "minecraft:husk_spawn_egg", - "id": 473 - }, - { - "name": "minecraft:ice", - "id": 79 - }, - { - "name": "minecraft:ice_bomb", - "id": 614 - }, - { - "name": "minecraft:infested_deepslate", - "id": -454 - }, - { - "name": "minecraft:info_update", - "id": 248 - }, - { - "name": "minecraft:info_update2", - "id": 249 - }, - { - "name": "minecraft:ink_sac", - "id": 421 - }, - { - "name": "minecraft:invisible_bedrock", - "id": 95 - }, - { - "name": "minecraft:iron_axe", - "id": 304 - }, - { - "name": "minecraft:iron_bars", - "id": 101 - }, - { - "name": "minecraft:iron_block", - "id": 42 - }, - { - "name": "minecraft:iron_boots", - "id": 353 - }, - { - "name": "minecraft:iron_chestplate", - "id": 351 - }, - { - "name": "minecraft:iron_door", - "id": 379 - }, - { - "name": "minecraft:iron_golem_spawn_egg", - "id": 515 - }, - { - "name": "minecraft:iron_helmet", - "id": 350 - }, - { - "name": "minecraft:iron_hoe", - "id": 338 - }, - { - "name": "minecraft:iron_horse_armor", - "id": 547 - }, - { - "name": "minecraft:iron_ingot", - "id": 311 - }, - { - "name": "minecraft:iron_leggings", - "id": 352 - }, - { - "name": "minecraft:iron_nugget", - "id": 585 - }, - { - "name": "minecraft:iron_ore", - "id": 15 - }, - { - "name": "minecraft:iron_pickaxe", - "id": 303 - }, - { - "name": "minecraft:iron_shovel", - "id": 302 - }, - { - "name": "minecraft:iron_sword", - "id": 313 - }, - { - "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": 385 - }, - { - "name": "minecraft:jungle_button", - "id": -143 - }, - { - "name": "minecraft:jungle_chest_boat", - "id": 659 - }, - { - "name": "minecraft:jungle_door", - "id": 571 - }, - { - "name": "minecraft:jungle_double_slab", - "id": -811 - }, - { - "name": "minecraft:jungle_fence", - "id": -578 - }, - { - "name": "minecraft:jungle_fence_gate", - "id": 185 - }, - { - "name": "minecraft:jungle_hanging_sign", - "id": -503 - }, - { - "name": "minecraft:jungle_leaves", - "id": -802 - }, - { - "name": "minecraft:jungle_log", - "id": -571 - }, - { - "name": "minecraft:jungle_planks", - "id": -741 - }, - { - "name": "minecraft:jungle_pressure_plate", - "id": -153 - }, - { - "name": "minecraft:jungle_sapling", - "id": -827 - }, - { - "name": "minecraft:jungle_sign", - "id": 594 - }, - { - "name": "minecraft:jungle_slab", - "id": -806 - }, - { - "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:jungle_wood", - "id": -816 - }, - { - "name": "minecraft:kelp", - "id": 390 - }, - { - "name": "minecraft:ladder", - "id": 65 - }, - { - "name": "minecraft:lantern", - "id": -208 - }, - { - "name": "minecraft:lapis_block", - "id": 22 - }, - { - "name": "minecraft:lapis_lazuli", - "id": 422 - }, - { - "name": "minecraft:lapis_ore", - "id": 21 - }, - { - "name": "minecraft:large_amethyst_bud", - "id": -330 - }, - { - "name": "minecraft:large_fern", - "id": -865 - }, - { - "name": "minecraft:lava", - "id": 11 - }, - { - "name": "minecraft:lava_bucket", - "id": 370 - }, - { - "name": "minecraft:lead", - "id": 563 - }, - { - "name": "minecraft:leather", - "id": 389 - }, - { - "name": "minecraft:leather_boots", - "id": 345 - }, - { - "name": "minecraft:leather_chestplate", - "id": 343 - }, - { - "name": "minecraft:leather_helmet", - "id": 342 - }, - { - "name": "minecraft:leather_horse_armor", - "id": 546 - }, - { - "name": "minecraft:leather_leggings", - "id": 344 - }, - { - "name": "minecraft:leaves", - "id": 733 - }, - { - "name": "minecraft:leaves2", - "id": 734 - }, - { - "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": 415 - }, - { - "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": 410 - }, - { - "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:lilac", - "id": -863 - }, - { - "name": "minecraft:lily_of_the_valley", - "id": -839 - }, - { - "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": 413 - }, - { - "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": 578 - }, - { - "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": 483 - }, - { - "name": "minecraft:lodestone", - "id": -222 - }, - { - "name": "minecraft:lodestone_compass", - "id": 621 - }, - { - "name": "minecraft:log", - "id": 727 - }, - { - "name": "minecraft:log2", - "id": 742 - }, - { - "name": "minecraft:loom", - "id": -204 - }, - { - "name": "minecraft:mace", - "id": 326 - }, - { - "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": 416 - }, - { - "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": 439 - }, - { - "name": "minecraft:magma_cube_spawn_egg", - "id": 464 - }, - { - "name": "minecraft:mangrove_boat", - "id": 654 - }, - { - "name": "minecraft:mangrove_button", - "id": -487 - }, - { - "name": "minecraft:mangrove_chest_boat", - "id": 663 - }, - { - "name": "minecraft:mangrove_door", - "id": 652 - }, - { - "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": 653 - }, - { - "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": 618 - }, - { - "name": "minecraft:medium_amethyst_bud", - "id": -331 - }, - { - "name": "minecraft:melon_block", - "id": 103 - }, - { - "name": "minecraft:melon_seeds", - "id": 297 - }, - { - "name": "minecraft:melon_slice", - "id": 276 - }, - { - "name": "minecraft:melon_stem", - "id": 105 - }, - { - "name": "minecraft:milk_bucket", - "id": 368 - }, - { - "name": "minecraft:minecart", - "id": 377 - }, - { - "name": "minecraft:miner_pottery_sherd", - "id": 689 - }, - { - "name": "minecraft:mob_spawner", - "id": 52 - }, - { - "name": "minecraft:mojang_banner_pattern", - "id": 600 - }, - { - "name": "minecraft:monster_egg", - "id": 97 - }, - { - "name": "minecraft:mooshroom_spawn_egg", - "id": 449 - }, - { - "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": 690 - }, - { - "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": 476 - }, - { - "name": "minecraft:mushroom_stew", - "id": 264 - }, - { - "name": "minecraft:music_disc_11", - "id": 560 - }, - { - "name": "minecraft:music_disc_13", - "id": 550 - }, - { - "name": "minecraft:music_disc_5", - "id": 655 - }, - { - "name": "minecraft:music_disc_blocks", - "id": 552 - }, - { - "name": "minecraft:music_disc_cat", - "id": 551 - }, - { - "name": "minecraft:music_disc_chirp", - "id": 553 - }, - { - "name": "minecraft:music_disc_creator", - "id": 749 - }, - { - "name": "minecraft:music_disc_creator_music_box", - "id": 750 - }, - { - "name": "minecraft:music_disc_far", - "id": 554 - }, - { - "name": "minecraft:music_disc_mall", - "id": 555 - }, - { - "name": "minecraft:music_disc_mellohi", - "id": 556 - }, - { - "name": "minecraft:music_disc_otherside", - "id": 645 - }, - { - "name": "minecraft:music_disc_pigstep", - "id": 639 - }, - { - "name": "minecraft:music_disc_precipice", - "id": 751 - }, - { - "name": "minecraft:music_disc_relic", - "id": 718 - }, - { - "name": "minecraft:music_disc_stal", - "id": 557 - }, - { - "name": "minecraft:music_disc_strad", - "id": 558 - }, - { - "name": "minecraft:music_disc_wait", - "id": 561 - }, - { - "name": "minecraft:music_disc_ward", - "id": 559 - }, - { - "name": "minecraft:mutton", - "id": 566 - }, - { - "name": "minecraft:mycelium", - "id": 110 - }, - { - "name": "minecraft:name_tag", - "id": 564 - }, - { - "name": "minecraft:nautilus_shell", - "id": 586 - }, - { - "name": "minecraft:nether_brick", - "id": 112 - }, - { - "name": "minecraft:nether_brick_fence", - "id": 113 - }, - { - "name": "minecraft:nether_brick_slab", - "id": -877 - }, - { - "name": "minecraft:nether_brick_stairs", - "id": 114 - }, - { - "name": "minecraft:nether_gold_ore", - "id": -288 - }, - { - "name": "minecraft:nether_sprouts", - "id": 640 - }, - { - "name": "minecraft:nether_star", - "id": 534 - }, - { - "name": "minecraft:nether_wart", - "id": 298 - }, - { - "name": "minecraft:nether_wart_block", - "id": 214 - }, - { - "name": "minecraft:netherbrick", - "id": 539 - }, - { - "name": "minecraft:netherite_axe", - "id": 625 - }, - { - "name": "minecraft:netherite_block", - "id": -270 - }, - { - "name": "minecraft:netherite_boots", - "id": 631 - }, - { - "name": "minecraft:netherite_chestplate", - "id": 629 - }, - { - "name": "minecraft:netherite_helmet", - "id": 628 - }, - { - "name": "minecraft:netherite_hoe", - "id": 626 - }, - { - "name": "minecraft:netherite_ingot", - "id": 627 - }, - { - "name": "minecraft:netherite_leggings", - "id": 630 - }, - { - "name": "minecraft:netherite_pickaxe", - "id": 624 - }, - { - "name": "minecraft:netherite_scrap", - "id": 632 - }, - { - "name": "minecraft:netherite_shovel", - "id": 623 - }, - { - "name": "minecraft:netherite_sword", - "id": 622 - }, - { - "name": "minecraft:netherite_upgrade_smithing_template", - "id": 699 - }, - { - "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": 480 - }, - { - "name": "minecraft:oak_boat", - "id": 383 - }, - { - "name": "minecraft:oak_chest_boat", - "id": 657 - }, - { - "name": "minecraft:oak_double_slab", - "id": 157 - }, - { - "name": "minecraft:oak_fence", - "id": 85 - }, - { - "name": "minecraft:oak_hanging_sign", - "id": -500 - }, - { - "name": "minecraft:oak_leaves", - "id": 18 - }, - { - "name": "minecraft:oak_log", - "id": 17 - }, - { - "name": "minecraft:oak_planks", - "id": 5 - }, - { - "name": "minecraft:oak_sapling", - "id": 6 - }, - { - "name": "minecraft:oak_sign", - "id": 365 - }, - { - "name": "minecraft:oak_slab", - "id": 158 - }, - { - "name": "minecraft:oak_stairs", - "id": 53 - }, - { - "name": "minecraft:oak_wood", - "id": -212 - }, - { - "name": "minecraft:observer", - "id": 251 - }, - { - "name": "minecraft:obsidian", - "id": 49 - }, - { - "name": "minecraft:ocelot_spawn_egg", - "id": 460 - }, - { - "name": "minecraft:ochre_froglight", - "id": -471 - }, - { - "name": "minecraft:ominous_bottle", - "id": 611 - }, - { - "name": "minecraft:ominous_trial_key", - "id": 258 - }, - { - "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": 417 - }, - { - "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_tulip", - "id": -834 - }, - { - "name": "minecraft:orange_wool", - "id": -557 - }, - { - "name": "minecraft:oxeye_daisy", - "id": -837 - }, - { - "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": 364 - }, - { - "name": "minecraft:panda_spawn_egg", - "id": 499 - }, - { - "name": "minecraft:paper", - "id": 394 - }, - { - "name": "minecraft:parrot_spawn_egg", - "id": 488 - }, - { - "name": "minecraft:pearlescent_froglight", - "id": -469 - }, - { - "name": "minecraft:peony", - "id": -867 - }, - { - "name": "minecraft:petrified_oak_slab", - "id": -902 - }, - { - "name": "minecraft:phantom_membrane", - "id": 590 - }, - { - "name": "minecraft:phantom_spawn_egg", - "id": 496 - }, - { - "name": "minecraft:pig_spawn_egg", - "id": 446 - }, - { - "name": "minecraft:piglin_banner_pattern", - "id": 603 - }, - { - "name": "minecraft:piglin_brute_spawn_egg", - "id": 509 - }, - { - "name": "minecraft:piglin_spawn_egg", - "id": 507 - }, - { - "name": "minecraft:pillager_spawn_egg", - "id": 501 - }, - { - "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": 412 - }, - { - "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_tulip", - "id": -836 - }, - { - "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": 301 - }, - { - "name": "minecraft:planks", - "id": 739 - }, - { - "name": "minecraft:plenty_pottery_sherd", - "id": 691 - }, - { - "name": "minecraft:podzol", - "id": 243 - }, - { - "name": "minecraft:pointed_dripstone", - "id": -308 - }, - { - "name": "minecraft:poisonous_potato", - "id": 286 - }, - { - "name": "minecraft:polar_bear_spawn_egg", - "id": 482 - }, - { - "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": 575 - }, - { - "name": "minecraft:poppy", - "id": 38 - }, - { - "name": "minecraft:porkchop", - "id": 266 - }, - { - "name": "minecraft:portal", - "id": 90 - }, - { - "name": "minecraft:potato", - "id": 284 - }, - { - "name": "minecraft:potatoes", - "id": 142 - }, - { - "name": "minecraft:potion", - "id": 435 - }, - { - "name": "minecraft:powder_snow", - "id": -306 - }, - { - "name": "minecraft:powder_snow_bucket", - "id": 375 - }, - { - "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": 565 - }, - { - "name": "minecraft:prismarine_shard", - "id": 581 - }, - { - "name": "minecraft:prismarine_stairs", - "id": -2 - }, - { - "name": "minecraft:prize_pottery_sherd", - "id": 692 - }, - { - "name": "minecraft:pufferfish", - "id": 271 - }, - { - "name": "minecraft:pufferfish_bucket", - "id": 374 - }, - { - "name": "minecraft:pufferfish_spawn_egg", - "id": 491 - }, - { - "name": "minecraft:pumpkin", - "id": 86 - }, - { - "name": "minecraft:pumpkin_pie", - "id": 288 - }, - { - "name": "minecraft:pumpkin_seeds", - "id": 296 - }, - { - "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": 408 - }, - { - "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": 540 - }, - { - "name": "minecraft:quartz_block", - "id": 155 - }, - { - "name": "minecraft:quartz_bricks", - "id": -304 - }, - { - "name": "minecraft:quartz_ore", - "id": 153 - }, - { - "name": "minecraft:quartz_slab", - "id": -876 - }, - { - "name": "minecraft:quartz_stairs", - "id": 156 - }, - { - "name": "minecraft:rabbit", - "id": 292 - }, - { - "name": "minecraft:rabbit_foot", - "id": 544 - }, - { - "name": "minecraft:rabbit_hide", - "id": 545 - }, - { - "name": "minecraft:rabbit_spawn_egg", - "id": 468 - }, - { - "name": "minecraft:rabbit_stew", - "id": 294 - }, - { - "name": "minecraft:rail", - "id": 66 - }, - { - "name": "minecraft:raiser_armor_trim_smithing_template", - "id": 713 - }, - { - "name": "minecraft:rapid_fertilizer", - "id": 616 - }, - { - "name": "minecraft:ravager_spawn_egg", - "id": 503 - }, - { - "name": "minecraft:raw_copper", - "id": 523 - }, - { - "name": "minecraft:raw_copper_block", - "id": -452 - }, - { - "name": "minecraft:raw_gold", - "id": 522 - }, - { - "name": "minecraft:raw_gold_block", - "id": -453 - }, - { - "name": "minecraft:raw_iron", - "id": 521 - }, - { - "name": "minecraft:raw_iron_block", - "id": -451 - }, - { - "name": "minecraft:recovery_compass", - "id": 665 - }, - { - "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": 404 - }, - { - "name": "minecraft:red_flower", - "id": 737 - }, - { - "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_tulip", - "id": -833 - }, - { - "name": "minecraft:red_wool", - "id": -556 - }, - { - "name": "minecraft:redstone", - "id": 380 - }, - { - "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": 427 - }, - { - "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": 709 - }, - { - "name": "minecraft:rose_bush", - "id": -866 - }, - { - "name": "minecraft:rotten_flesh", - "id": 281 - }, - { - "name": "minecraft:saddle", - "id": 378 - }, - { - "name": "minecraft:salmon", - "id": 269 - }, - { - "name": "minecraft:salmon_bucket", - "id": 372 - }, - { - "name": "minecraft:salmon_spawn_egg", - "id": 492 - }, - { - "name": "minecraft:sand", - "id": 12 - }, - { - "name": "minecraft:sandstone", - "id": 24 - }, - { - "name": "minecraft:sandstone_slab", - "id": -872 - }, - { - "name": "minecraft:sandstone_stairs", - "id": 128 - }, - { - "name": "minecraft:sapling", - "id": 732 - }, - { - "name": "minecraft:scaffolding", - "id": -165 - }, - { - "name": "minecraft:scrape_pottery_sherd", - "id": 693 - }, - { - "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": 700 - }, - { - "name": "minecraft:shaper_armor_trim_smithing_template", - "id": 714 - }, - { - "name": "minecraft:sheaf_pottery_sherd", - "id": 694 - }, - { - "name": "minecraft:shears", - "id": 429 - }, - { - "name": "minecraft:sheep_spawn_egg", - "id": 447 - }, - { - "name": "minecraft:shelter_pottery_sherd", - "id": 695 - }, - { - "name": "minecraft:shield", - "id": 362 - }, - { - "name": "minecraft:short_grass", - "id": 31 - }, - { - "name": "minecraft:shroomlight", - "id": -230 - }, - { - "name": "minecraft:shulker_box", - "id": 747 - }, - { - "name": "minecraft:shulker_shell", - "id": 582 - }, - { - "name": "minecraft:shulker_spawn_egg", - "id": 479 - }, - { - "name": "minecraft:silence_armor_trim_smithing_template", - "id": 711 - }, - { - "name": "minecraft:silver_glazed_terracotta", - "id": 228 - }, - { - "name": "minecraft:silverfish_spawn_egg", - "id": 452 - }, - { - "name": "minecraft:skeleton_horse_spawn_egg", - "id": 477 - }, - { - "name": "minecraft:skeleton_spawn_egg", - "id": 453 - }, - { - "name": "minecraft:skull", - "id": 532 - }, - { - "name": "minecraft:skull_banner_pattern", - "id": 599 - }, - { - "name": "minecraft:skull_pottery_sherd", - "id": 696 - }, - { - "name": "minecraft:slime", - "id": 165 - }, - { - "name": "minecraft:slime_ball", - "id": 396 - }, - { - "name": "minecraft:slime_spawn_egg", - "id": 454 - }, - { - "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:smooth_stone_slab", - "id": 44 - }, - { - "name": "minecraft:sniffer_egg", - "id": -596 - }, - { - "name": "minecraft:sniffer_spawn_egg", - "id": 510 - }, - { - "name": "minecraft:snort_pottery_sherd", - "id": 697 - }, - { - "name": "minecraft:snout_armor_trim_smithing_template", - "id": 708 - }, - { - "name": "minecraft:snow", - "id": 80 - }, - { - "name": "minecraft:snow_golem_spawn_egg", - "id": 516 - }, - { - "name": "minecraft:snow_layer", - "id": 78 - }, - { - "name": "minecraft:snowball", - "id": 381 - }, - { - "name": "minecraft:soul_campfire", - "id": 641 - }, - { - "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": 619 - }, - { - "name": "minecraft:spawn_egg", - "id": 757 - }, - { - "name": "minecraft:spider_eye", - "id": 282 - }, - { - "name": "minecraft:spider_spawn_egg", - "id": 455 - }, - { - "name": "minecraft:spire_armor_trim_smithing_template", - "id": 710 - }, - { - "name": "minecraft:splash_potion", - "id": 577 - }, - { - "name": "minecraft:sponge", - "id": 19 - }, - { - "name": "minecraft:spore_blossom", - "id": -321 - }, - { - "name": "minecraft:spruce_boat", - "id": 386 - }, - { - "name": "minecraft:spruce_button", - "id": -144 - }, - { - "name": "minecraft:spruce_chest_boat", - "id": 660 - }, - { - "name": "minecraft:spruce_door", - "id": 569 - }, - { - "name": "minecraft:spruce_double_slab", - "id": -809 - }, - { - "name": "minecraft:spruce_fence", - "id": -579 - }, - { - "name": "minecraft:spruce_fence_gate", - "id": 183 - }, - { - "name": "minecraft:spruce_hanging_sign", - "id": -501 - }, - { - "name": "minecraft:spruce_leaves", - "id": -800 - }, - { - "name": "minecraft:spruce_log", - "id": -569 - }, - { - "name": "minecraft:spruce_planks", - "id": -739 - }, - { - "name": "minecraft:spruce_pressure_plate", - "id": -154 - }, - { - "name": "minecraft:spruce_sapling", - "id": -825 - }, - { - "name": "minecraft:spruce_sign", - "id": 592 - }, - { - "name": "minecraft:spruce_slab", - "id": -804 - }, - { - "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:spruce_wood", - "id": -814 - }, - { - "name": "minecraft:spyglass", - "id": 644 - }, - { - "name": "minecraft:squid_spawn_egg", - "id": 459 - }, - { - "name": "minecraft:stained_glass", - "id": 745 - }, - { - "name": "minecraft:stained_glass_pane", - "id": 746 - }, - { - "name": "minecraft:stained_hardened_clay", - "id": 719 - }, - { - "name": "minecraft:standing_banner", - "id": 176 - }, - { - "name": "minecraft:standing_sign", - "id": 63 - }, - { - "name": "minecraft:stick", - "id": 327 - }, - { - "name": "minecraft:sticky_piston", - "id": 29 - }, - { - "name": "minecraft:sticky_piston_arm_collision", - "id": -217 - }, - { - "name": "minecraft:stone", - "id": 1 - }, - { - "name": "minecraft:stone_axe", - "id": 321 - }, - { - "name": "minecraft:stone_block_slab", - "id": 736 - }, - { - "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_slab", - "id": -875 - }, - { - "name": "minecraft:stone_brick_stairs", - "id": 109 - }, - { - "name": "minecraft:stone_button", - "id": 77 - }, - { - "name": "minecraft:stone_hoe", - "id": 337 - }, - { - "name": "minecraft:stone_pickaxe", - "id": 320 - }, - { - "name": "minecraft:stone_pressure_plate", - "id": 70 - }, - { - "name": "minecraft:stone_shovel", - "id": 319 - }, - { - "name": "minecraft:stone_stairs", - "id": 67 - }, - { - "name": "minecraft:stone_sword", - "id": 318 - }, - { - "name": "minecraft:stonebrick", - "id": 98 - }, - { - "name": "minecraft:stonecutter", - "id": 245 - }, - { - "name": "minecraft:stonecutter_block", - "id": -197 - }, - { - "name": "minecraft:stray_spawn_egg", - "id": 471 - }, - { - "name": "minecraft:strider_spawn_egg", - "id": 505 - }, - { - "name": "minecraft:string", - "id": 333 - }, - { - "name": "minecraft:stripped_acacia_log", - "id": -8 - }, - { - "name": "minecraft:stripped_acacia_wood", - "id": -823 - }, - { - "name": "minecraft:stripped_bamboo_block", - "id": -528 - }, - { - "name": "minecraft:stripped_birch_log", - "id": -6 - }, - { - "name": "minecraft:stripped_birch_wood", - "id": -821 - }, - { - "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_dark_oak_wood", - "id": -824 - }, - { - "name": "minecraft:stripped_jungle_log", - "id": -7 - }, - { - "name": "minecraft:stripped_jungle_wood", - "id": -822 - }, - { - "name": "minecraft:stripped_mangrove_log", - "id": -485 - }, - { - "name": "minecraft:stripped_mangrove_wood", - "id": -498 - }, - { - "name": "minecraft:stripped_oak_log", - "id": -10 - }, - { - "name": "minecraft:stripped_oak_wood", - "id": -819 - }, - { - "name": "minecraft:stripped_spruce_log", - "id": -5 - }, - { - "name": "minecraft:stripped_spruce_wood", - "id": -820 - }, - { - "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": 424 - }, - { - "name": "minecraft:sugar_cane", - "id": 393 - }, - { - "name": "minecraft:sunflower", - "id": 175 - }, - { - "name": "minecraft:suspicious_gravel", - "id": -573 - }, - { - "name": "minecraft:suspicious_sand", - "id": -529 - }, - { - "name": "minecraft:suspicious_stew", - "id": 608 - }, - { - "name": "minecraft:sweet_berries", - "id": 291 - }, - { - "name": "minecraft:sweet_berry_bush", - "id": -207 - }, - { - "name": "minecraft:tadpole_bucket", - "id": 649 - }, - { - "name": "minecraft:tadpole_spawn_egg", - "id": 648 - }, - { - "name": "minecraft:tall_grass", - "id": -864 - }, - { - "name": "minecraft:tallgrass", - "id": 741 - }, - { - "name": "minecraft:target", - "id": -239 - }, - { - "name": "minecraft:tide_armor_trim_smithing_template", - "id": 707 - }, - { - "name": "minecraft:tinted_glass", - "id": -334 - }, - { - "name": "minecraft:tnt", - "id": 46 - }, - { - "name": "minecraft:tnt_minecart", - "id": 541 - }, - { - "name": "minecraft:torch", - "id": 50 - }, - { - "name": "minecraft:torchflower", - "id": -568 - }, - { - "name": "minecraft:torchflower_crop", - "id": -567 - }, - { - "name": "minecraft:torchflower_seeds", - "id": 300 - }, - { - "name": "minecraft:totem_of_undying", - "id": 584 - }, - { - "name": "minecraft:trader_llama_spawn_egg", - "id": 667 - }, - { - "name": "minecraft:trapdoor", - "id": 96 - }, - { - "name": "minecraft:trapped_chest", - "id": 146 - }, - { - "name": "minecraft:trial_key", - "id": 259 - }, - { - "name": "minecraft:trial_spawner", - "id": -315 - }, - { - "name": "minecraft:trident", - "id": 562 - }, - { - "name": "minecraft:trip_wire", - "id": 132 - }, - { - "name": "minecraft:tripwire_hook", - "id": 131 - }, - { - "name": "minecraft:tropical_fish", - "id": 270 - }, - { - "name": "minecraft:tropical_fish_bucket", - "id": 373 - }, - { - "name": "minecraft:tropical_fish_spawn_egg", - "id": 489 - }, - { - "name": "minecraft:tube_coral", - "id": -131 - }, - { - "name": "minecraft:tube_coral_block", - "id": -132 - }, - { - "name": "minecraft:tube_coral_fan", - "id": -133 - }, - { - "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": 589 - }, - { - "name": "minecraft:turtle_scute", - "id": 588 - }, - { - "name": "minecraft:turtle_spawn_egg", - "id": 495 - }, - { - "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:vault", - "id": -314 - }, - { - "name": "minecraft:verdant_froglight", - "id": -470 - }, - { - "name": "minecraft:vex_armor_trim_smithing_template", - "id": 706 - }, - { - "name": "minecraft:vex_spawn_egg", - "id": 486 - }, - { - "name": "minecraft:villager_spawn_egg", - "id": 458 - }, - { - "name": "minecraft:vindicator_spawn_egg", - "id": 484 - }, - { - "name": "minecraft:vine", - "id": 106 - }, - { - "name": "minecraft:wall_banner", - "id": 177 - }, - { - "name": "minecraft:wall_sign", - "id": 68 - }, - { - "name": "minecraft:wandering_trader_spawn_egg", - "id": 502 - }, - { - "name": "minecraft:ward_armor_trim_smithing_template", - "id": 704 - }, - { - "name": "minecraft:warden_spawn_egg", - "id": 651 - }, - { - "name": "minecraft:warped_button", - "id": -261 - }, - { - "name": "minecraft:warped_door", - "id": 636 - }, - { - "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": 637 - }, - { - "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": 634 - }, - { - "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": 369 - }, - { - "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": 712 - }, - { - "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": 341 - }, - { - "name": "minecraft:wheat_seeds", - "id": 295 - }, - { - "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": 418 - }, - { - "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_tulip", - "id": -835 - }, - { - "name": "minecraft:white_wool", - "id": 35 - }, - { - "name": "minecraft:wild_armor_trim_smithing_template", - "id": 703 - }, - { - "name": "minecraft:wind_charge", - "id": 260 - }, - { - "name": "minecraft:witch_spawn_egg", - "id": 461 - }, - { - "name": "minecraft:wither_rose", - "id": -216 - }, - { - "name": "minecraft:wither_skeleton_spawn_egg", - "id": 474 - }, - { - "name": "minecraft:wither_spawn_egg", - "id": 518 - }, - { - "name": "minecraft:wolf_armor", - "id": 722 - }, - { - "name": "minecraft:wolf_spawn_egg", - "id": 448 - }, - { - "name": "minecraft:wood", - "id": 748 - }, - { - "name": "minecraft:wooden_axe", - "id": 317 - }, - { - "name": "minecraft:wooden_button", - "id": 143 - }, - { - "name": "minecraft:wooden_door", - "id": 366 - }, - { - "name": "minecraft:wooden_hoe", - "id": 336 - }, - { - "name": "minecraft:wooden_pickaxe", - "id": 316 - }, - { - "name": "minecraft:wooden_pressure_plate", - "id": 72 - }, - { - "name": "minecraft:wooden_shovel", - "id": 315 - }, - { - "name": "minecraft:wooden_slab", - "id": 735 - }, - { - "name": "minecraft:wooden_sword", - "id": 314 - }, - { - "name": "minecraft:wool", - "id": 725 - }, - { - "name": "minecraft:writable_book", - "id": 526 - }, - { - "name": "minecraft:written_book", - "id": 527 - }, - { - "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": 414 - }, - { - "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": 508 - }, - { - "name": "minecraft:zombie_horse_spawn_egg", - "id": 478 - }, - { - "name": "minecraft:zombie_pigman_spawn_egg", - "id": 457 - }, - { - "name": "minecraft:zombie_spawn_egg", - "id": 456 - }, - { - "name": "minecraft:zombie_villager_spawn_egg", - "id": 487 - } -] \ No newline at end of file diff --git a/core/src/main/resources/bedrock/runtime_item_states.1_21_20.json b/core/src/main/resources/bedrock/runtime_item_states.1_21_20.json deleted file mode 100644 index 72c682293..000000000 --- a/core/src/main/resources/bedrock/runtime_item_states.1_21_20.json +++ /dev/null @@ -1,6794 +0,0 @@ -[ - { - "name": "minecraft:acacia_boat", - "id": 388 - }, - { - "name": "minecraft:acacia_button", - "id": -140 - }, - { - "name": "minecraft:acacia_chest_boat", - "id": 662 - }, - { - "name": "minecraft:acacia_door", - "id": 573 - }, - { - "name": "minecraft:acacia_double_slab", - "id": -812 - }, - { - "name": "minecraft:acacia_fence", - "id": -575 - }, - { - "name": "minecraft:acacia_fence_gate", - "id": 187 - }, - { - "name": "minecraft:acacia_hanging_sign", - "id": -504 - }, - { - "name": "minecraft:acacia_leaves", - "id": 161 - }, - { - "name": "minecraft:acacia_log", - "id": 162 - }, - { - "name": "minecraft:acacia_planks", - "id": -742 - }, - { - "name": "minecraft:acacia_pressure_plate", - "id": -150 - }, - { - "name": "minecraft:acacia_sapling", - "id": -828 - }, - { - "name": "minecraft:acacia_sign", - "id": 596 - }, - { - "name": "minecraft:acacia_slab", - "id": -807 - }, - { - "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:acacia_wood", - "id": -817 - }, - { - "name": "minecraft:activator_rail", - "id": 126 - }, - { - "name": "minecraft:agent_spawn_egg", - "id": 498 - }, - { - "name": "minecraft:air", - "id": -158 - }, - { - "name": "minecraft:allay_spawn_egg", - "id": 651 - }, - { - "name": "minecraft:allium", - "id": -831 - }, - { - "name": "minecraft:allow", - "id": 210 - }, - { - "name": "minecraft:amethyst_block", - "id": -327 - }, - { - "name": "minecraft:amethyst_cluster", - "id": -329 - }, - { - "name": "minecraft:amethyst_shard", - "id": 644 - }, - { - "name": "minecraft:ancient_debris", - "id": -271 - }, - { - "name": "minecraft:andesite", - "id": -594 - }, - { - "name": "minecraft:andesite_double_slab", - "id": -920 - }, - { - "name": "minecraft:andesite_slab", - "id": -893 - }, - { - "name": "minecraft:andesite_stairs", - "id": -171 - }, - { - "name": "minecraft:angler_pottery_sherd", - "id": 676 - }, - { - "name": "minecraft:anvil", - "id": 145 - }, - { - "name": "minecraft:apple", - "id": 257 - }, - { - "name": "minecraft:archer_pottery_sherd", - "id": 677 - }, - { - "name": "minecraft:armadillo_scute", - "id": 722 - }, - { - "name": "minecraft:armadillo_spawn_egg", - "id": 721 - }, - { - "name": "minecraft:armor_stand", - "id": 569 - }, - { - "name": "minecraft:arms_up_pottery_sherd", - "id": 678 - }, - { - "name": "minecraft:arrow", - "id": 308 - }, - { - "name": "minecraft:axolotl_bucket", - "id": 377 - }, - { - "name": "minecraft:axolotl_spawn_egg", - "id": 513 - }, - { - "name": "minecraft:azalea", - "id": -337 - }, - { - "name": "minecraft:azalea_leaves", - "id": -324 - }, - { - "name": "minecraft:azalea_leaves_flowered", - "id": -325 - }, - { - "name": "minecraft:azure_bluet", - "id": -832 - }, - { - "name": "minecraft:baked_potato", - "id": 286 - }, - { - "name": "minecraft:balloon", - "id": 618 - }, - { - "name": "minecraft:bamboo", - "id": -163 - }, - { - "name": "minecraft:bamboo_block", - "id": -527 - }, - { - "name": "minecraft:bamboo_button", - "id": -511 - }, - { - "name": "minecraft:bamboo_chest_raft", - "id": 674 - }, - { - "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": 673 - }, - { - "name": "minecraft:bamboo_sapling", - "id": -164 - }, - { - "name": "minecraft:bamboo_sign", - "id": 672 - }, - { - "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": 584 - }, - { - "name": "minecraft:banner_pattern", - "id": 767 - }, - { - "name": "minecraft:barrel", - "id": -203 - }, - { - "name": "minecraft:barrier", - "id": -161 - }, - { - "name": "minecraft:basalt", - "id": -234 - }, - { - "name": "minecraft:bat_spawn_egg", - "id": 463 - }, - { - "name": "minecraft:beacon", - "id": 138 - }, - { - "name": "minecraft:bed", - "id": 427 - }, - { - "name": "minecraft:bedrock", - "id": 7 - }, - { - "name": "minecraft:bee_nest", - "id": -218 - }, - { - "name": "minecraft:bee_spawn_egg", - "id": 505 - }, - { - "name": "minecraft:beef", - "id": 278 - }, - { - "name": "minecraft:beehive", - "id": -219 - }, - { - "name": "minecraft:beetroot", - "id": 290 - }, - { - "name": "minecraft:beetroot_seeds", - "id": 300 - }, - { - "name": "minecraft:beetroot_soup", - "id": 291 - }, - { - "name": "minecraft:bell", - "id": -206 - }, - { - "name": "minecraft:big_dripleaf", - "id": -323 - }, - { - "name": "minecraft:birch_boat", - "id": 385 - }, - { - "name": "minecraft:birch_button", - "id": -141 - }, - { - "name": "minecraft:birch_chest_boat", - "id": 659 - }, - { - "name": "minecraft:birch_door", - "id": 571 - }, - { - "name": "minecraft:birch_double_slab", - "id": -810 - }, - { - "name": "minecraft:birch_fence", - "id": -576 - }, - { - "name": "minecraft:birch_fence_gate", - "id": 184 - }, - { - "name": "minecraft:birch_hanging_sign", - "id": -502 - }, - { - "name": "minecraft:birch_leaves", - "id": -801 - }, - { - "name": "minecraft:birch_log", - "id": -570 - }, - { - "name": "minecraft:birch_planks", - "id": -740 - }, - { - "name": "minecraft:birch_pressure_plate", - "id": -151 - }, - { - "name": "minecraft:birch_sapling", - "id": -826 - }, - { - "name": "minecraft:birch_sign", - "id": 594 - }, - { - "name": "minecraft:birch_slab", - "id": -805 - }, - { - "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:birch_wood", - "id": -815 - }, - { - "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": 404 - }, - { - "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": 679 - }, - { - "name": "minecraft:blast_furnace", - "id": -196 - }, - { - "name": "minecraft:blaze_powder", - "id": 439 - }, - { - "name": "minecraft:blaze_rod", - "id": 432 - }, - { - "name": "minecraft:blaze_spawn_egg", - "id": 466 - }, - { - "name": "minecraft:bleach", - "id": 616 - }, - { - "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": 408 - }, - { - "name": "minecraft:blue_glazed_terracotta", - "id": 231 - }, - { - "name": "minecraft:blue_ice", - "id": -11 - }, - { - "name": "minecraft:blue_orchid", - "id": -830 - }, - { - "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": 765 - }, - { - "name": "minecraft:bogged_spawn_egg", - "id": 473 - }, - { - "name": "minecraft:bolt_armor_trim_smithing_template", - "id": 718 - }, - { - "name": "minecraft:bone", - "id": 424 - }, - { - "name": "minecraft:bone_block", - "id": 216 - }, - { - "name": "minecraft:bone_meal", - "id": 420 - }, - { - "name": "minecraft:book", - "id": 396 - }, - { - "name": "minecraft:bookshelf", - "id": 47 - }, - { - "name": "minecraft:border_block", - "id": 212 - }, - { - "name": "minecraft:bordure_indented_banner_pattern", - "id": 603 - }, - { - "name": "minecraft:bow", - "id": 307 - }, - { - "name": "minecraft:bowl", - "id": 329 - }, - { - "name": "minecraft:brain_coral", - "id": -581 - }, - { - "name": "minecraft:brain_coral_block", - "id": -849 - }, - { - "name": "minecraft:brain_coral_fan", - "id": -840 - }, - { - "name": "minecraft:brain_coral_wall_fan", - "id": -904 - }, - { - "name": "minecraft:bread", - "id": 266 - }, - { - "name": "minecraft:breeze_rod", - "id": 261 - }, - { - "name": "minecraft:breeze_spawn_egg", - "id": 512 - }, - { - "name": "minecraft:brewer_pottery_sherd", - "id": 680 - }, - { - "name": "minecraft:brewing_stand", - "id": 441 - }, - { - "name": "minecraft:brick", - "id": 392 - }, - { - "name": "minecraft:brick_block", - "id": 45 - }, - { - "name": "minecraft:brick_double_slab", - "id": -880 - }, - { - "name": "minecraft:brick_slab", - "id": -874 - }, - { - "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": 407 - }, - { - "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": 699 - }, - { - "name": "minecraft:bubble_column", - "id": -160 - }, - { - "name": "minecraft:bubble_coral", - "id": -582 - }, - { - "name": "minecraft:bubble_coral_block", - "id": -850 - }, - { - "name": "minecraft:bubble_coral_fan", - "id": -841 - }, - { - "name": "minecraft:bubble_coral_wall_fan", - "id": -136 - }, - { - "name": "minecraft:bucket", - "id": 368 - }, - { - "name": "minecraft:budding_amethyst", - "id": -328 - }, - { - "name": "minecraft:burn_pottery_sherd", - "id": 681 - }, - { - "name": "minecraft:cactus", - "id": 81 - }, - { - "name": "minecraft:cake", - "id": 426 - }, - { - "name": "minecraft:calcite", - "id": -326 - }, - { - "name": "minecraft:calibrated_sculk_sensor", - "id": -580 - }, - { - "name": "minecraft:camel_spawn_egg", - "id": 675 - }, - { - "name": "minecraft:camera", - "id": 613 - }, - { - "name": "minecraft:campfire", - "id": 608 - }, - { - "name": "minecraft:candle", - "id": -412 - }, - { - "name": "minecraft:candle_cake", - "id": -429 - }, - { - "name": "minecraft:carpet", - "id": 727 - }, - { - "name": "minecraft:carrot", - "id": 284 - }, - { - "name": "minecraft:carrot_on_a_stick", - "id": 534 - }, - { - "name": "minecraft:carrots", - "id": 141 - }, - { - "name": "minecraft:cartography_table", - "id": -200 - }, - { - "name": "minecraft:carved_pumpkin", - "id": -155 - }, - { - "name": "minecraft:cat_spawn_egg", - "id": 499 - }, - { - "name": "minecraft:cauldron", - "id": 442 - }, - { - "name": "minecraft:cave_spider_spawn_egg", - "id": 467 - }, - { - "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": 639 - }, - { - "name": "minecraft:chain_command_block", - "id": 189 - }, - { - "name": "minecraft:chainmail_boots", - "id": 350 - }, - { - "name": "minecraft:chainmail_chestplate", - "id": 348 - }, - { - "name": "minecraft:chainmail_helmet", - "id": 347 - }, - { - "name": "minecraft:chainmail_leggings", - "id": 349 - }, - { - "name": "minecraft:charcoal", - "id": 310 - }, - { - "name": "minecraft:chemical_heat", - "id": 192 - }, - { - "name": "minecraft:chemistry_table", - "id": 238 - }, - { - "name": "minecraft:cherry_boat", - "id": 669 - }, - { - "name": "minecraft:cherry_button", - "id": -530 - }, - { - "name": "minecraft:cherry_chest_boat", - "id": 670 - }, - { - "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": 671 - }, - { - "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": 665 - }, - { - "name": "minecraft:chest_minecart", - "id": 398 - }, - { - "name": "minecraft:chicken", - "id": 280 - }, - { - "name": "minecraft:chicken_spawn_egg", - "id": 445 - }, - { - "name": "minecraft:chipped_anvil", - "id": -959 - }, - { - "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_quartz_block", - "id": -953 - }, - { - "name": "minecraft:chiseled_red_sandstone", - "id": -956 - }, - { - "name": "minecraft:chiseled_sandstone", - "id": -944 - }, - { - "name": "minecraft:chiseled_stone_bricks", - "id": -870 - }, - { - "name": "minecraft:chiseled_tuff", - "id": -753 - }, - { - "name": "minecraft:chiseled_tuff_bricks", - "id": -759 - }, - { - "name": "minecraft:chorus_flower", - "id": 200 - }, - { - "name": "minecraft:chorus_fruit", - "id": 575 - }, - { - "name": "minecraft:chorus_plant", - "id": 240 - }, - { - "name": "minecraft:clay", - "id": 82 - }, - { - "name": "minecraft:clay_ball", - "id": 393 - }, - { - "name": "minecraft:client_request_placeholder_block", - "id": -465 - }, - { - "name": "minecraft:clock", - "id": 402 - }, - { - "name": "minecraft:coal", - "id": 309 - }, - { - "name": "minecraft:coal_block", - "id": 173 - }, - { - "name": "minecraft:coal_ore", - "id": 16 - }, - { - "name": "minecraft:coarse_dirt", - "id": -962 - }, - { - "name": "minecraft:coast_armor_trim_smithing_template", - "id": 703 - }, - { - "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_double_slab", - "id": -879 - }, - { - "name": "minecraft:cobblestone_slab", - "id": -873 - }, - { - "name": "minecraft:cobblestone_wall", - "id": 139 - }, - { - "name": "minecraft:cocoa", - "id": 127 - }, - { - "name": "minecraft:cocoa_beans", - "id": 421 - }, - { - "name": "minecraft:cod", - "id": 269 - }, - { - "name": "minecraft:cod_bucket", - "id": 372 - }, - { - "name": "minecraft:cod_spawn_egg", - "id": 491 - }, - { - "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": 580 - }, - { - "name": "minecraft:comparator", - "id": 539 - }, - { - "name": "minecraft:compass", - "id": 400 - }, - { - "name": "minecraft:composter", - "id": -213 - }, - { - "name": "minecraft:compound", - "id": 614 - }, - { - "name": "minecraft:concrete", - "id": 753 - }, - { - "name": "minecraft:concrete_powder", - "id": 754 - }, - { - "name": "minecraft:conduit", - "id": -157 - }, - { - "name": "minecraft:cooked_beef", - "id": 279 - }, - { - "name": "minecraft:cooked_chicken", - "id": 281 - }, - { - "name": "minecraft:cooked_cod", - "id": 273 - }, - { - "name": "minecraft:cooked_mutton", - "id": 568 - }, - { - "name": "minecraft:cooked_porkchop", - "id": 268 - }, - { - "name": "minecraft:cooked_rabbit", - "id": 294 - }, - { - "name": "minecraft:cooked_salmon", - "id": 274 - }, - { - "name": "minecraft:cookie", - "id": 276 - }, - { - "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": 521 - }, - { - "name": "minecraft:copper_ore", - "id": -311 - }, - { - "name": "minecraft:copper_trapdoor", - "id": -792 - }, - { - "name": "minecraft:coral", - "id": 749 - }, - { - "name": "minecraft:coral_block", - "id": 731 - }, - { - "name": "minecraft:coral_fan", - "id": 740 - }, - { - "name": "minecraft:coral_fan_dead", - "id": 741 - }, - { - "name": "minecraft:cornflower", - "id": -838 - }, - { - "name": "minecraft:cow_spawn_egg", - "id": 446 - }, - { - "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:cracked_stone_bricks", - "id": -869 - }, - { - "name": "minecraft:crafter", - "id": -313 - }, - { - "name": "minecraft:crafting_table", - "id": 58 - }, - { - "name": "minecraft:creeper_banner_pattern", - "id": 599 - }, - { - "name": "minecraft:creeper_spawn_egg", - "id": 451 - }, - { - "name": "minecraft:crimson_button", - "id": -260 - }, - { - "name": "minecraft:crimson_door", - "id": 636 - }, - { - "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": 634 - }, - { - "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": 592 - }, - { - "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:cut_red_sandstone", - "id": -957 - }, - { - "name": "minecraft:cut_red_sandstone_double_slab", - "id": -928 - }, - { - "name": "minecraft:cut_red_sandstone_slab", - "id": -901 - }, - { - "name": "minecraft:cut_sandstone", - "id": -945 - }, - { - "name": "minecraft:cut_sandstone_double_slab", - "id": -927 - }, - { - "name": "minecraft:cut_sandstone_slab", - "id": -900 - }, - { - "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": 410 - }, - { - "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:damaged_anvil", - "id": -960 - }, - { - "name": "minecraft:dandelion", - "id": 37 - }, - { - "name": "minecraft:danger_pottery_sherd", - "id": 682 - }, - { - "name": "minecraft:dark_oak_boat", - "id": 389 - }, - { - "name": "minecraft:dark_oak_button", - "id": -142 - }, - { - "name": "minecraft:dark_oak_chest_boat", - "id": 663 - }, - { - "name": "minecraft:dark_oak_door", - "id": 574 - }, - { - "name": "minecraft:dark_oak_double_slab", - "id": -813 - }, - { - "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_leaves", - "id": -803 - }, - { - "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_sapling", - "id": -829 - }, - { - "name": "minecraft:dark_oak_sign", - "id": 597 - }, - { - "name": "minecraft:dark_oak_slab", - "id": -808 - }, - { - "name": "minecraft:dark_oak_stairs", - "id": 164 - }, - { - "name": "minecraft:dark_oak_trapdoor", - "id": -147 - }, - { - "name": "minecraft:dark_oak_wood", - "id": -818 - }, - { - "name": "minecraft:dark_prismarine", - "id": -947 - }, - { - "name": "minecraft:dark_prismarine_double_slab", - "id": -913 - }, - { - "name": "minecraft:dark_prismarine_slab", - "id": -886 - }, - { - "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_brain_coral_block", - "id": -854 - }, - { - "name": "minecraft:dead_brain_coral_fan", - "id": -844 - }, - { - "name": "minecraft:dead_brain_coral_wall_fan", - "id": -906 - }, - { - "name": "minecraft:dead_bubble_coral", - "id": -587 - }, - { - "name": "minecraft:dead_bubble_coral_block", - "id": -855 - }, - { - "name": "minecraft:dead_bubble_coral_fan", - "id": -845 - }, - { - "name": "minecraft:dead_bubble_coral_wall_fan", - "id": -908 - }, - { - "name": "minecraft:dead_fire_coral", - "id": -588 - }, - { - "name": "minecraft:dead_fire_coral_block", - "id": -856 - }, - { - "name": "minecraft:dead_fire_coral_fan", - "id": -846 - }, - { - "name": "minecraft:dead_fire_coral_wall_fan", - "id": -909 - }, - { - "name": "minecraft:dead_horn_coral", - "id": -589 - }, - { - "name": "minecraft:dead_horn_coral_block", - "id": -857 - }, - { - "name": "minecraft:dead_horn_coral_fan", - "id": -847 - }, - { - "name": "minecraft:dead_horn_coral_wall_fan", - "id": -910 - }, - { - "name": "minecraft:dead_tube_coral", - "id": -585 - }, - { - "name": "minecraft:dead_tube_coral_block", - "id": -853 - }, - { - "name": "minecraft:dead_tube_coral_fan", - "id": -134 - }, - { - "name": "minecraft:dead_tube_coral_wall_fan", - "id": -905 - }, - { - "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:deprecated_anvil", - "id": -961 - }, - { - "name": "minecraft:detector_rail", - "id": 28 - }, - { - "name": "minecraft:diamond", - "id": 311 - }, - { - "name": "minecraft:diamond_axe", - "id": 326 - }, - { - "name": "minecraft:diamond_block", - "id": 57 - }, - { - "name": "minecraft:diamond_boots", - "id": 358 - }, - { - "name": "minecraft:diamond_chestplate", - "id": 356 - }, - { - "name": "minecraft:diamond_helmet", - "id": 355 - }, - { - "name": "minecraft:diamond_hoe", - "id": 340 - }, - { - "name": "minecraft:diamond_horse_armor", - "id": 550 - }, - { - "name": "minecraft:diamond_leggings", - "id": 357 - }, - { - "name": "minecraft:diamond_ore", - "id": 56 - }, - { - "name": "minecraft:diamond_pickaxe", - "id": 325 - }, - { - "name": "minecraft:diamond_shovel", - "id": 324 - }, - { - "name": "minecraft:diamond_sword", - "id": 323 - }, - { - "name": "minecraft:diorite", - "id": -592 - }, - { - "name": "minecraft:diorite_double_slab", - "id": -921 - }, - { - "name": "minecraft:diorite_slab", - "id": -894 - }, - { - "name": "minecraft:diorite_stairs", - "id": -170 - }, - { - "name": "minecraft:dirt", - "id": 3 - }, - { - "name": "minecraft:dirt_with_roots", - "id": -318 - }, - { - "name": "minecraft:disc_fragment_5", - "id": 657 - }, - { - "name": "minecraft:dispenser", - "id": 23 - }, - { - "name": "minecraft:dolphin_spawn_egg", - "id": 495 - }, - { - "name": "minecraft:donkey_spawn_egg", - "id": 476 - }, - { - "name": "minecraft:double_cut_copper_slab", - "id": -368 - }, - { - "name": "minecraft:double_plant", - "id": 747 - }, - { - "name": "minecraft:double_stone_block_slab", - "id": 736 - }, - { - "name": "minecraft:double_stone_block_slab2", - "id": 737 - }, - { - "name": "minecraft:double_stone_block_slab3", - "id": 738 - }, - { - "name": "minecraft:double_stone_block_slab4", - "id": 739 - }, - { - "name": "minecraft:dragon_breath", - "id": 577 - }, - { - "name": "minecraft:dragon_egg", - "id": 122 - }, - { - "name": "minecraft:dried_kelp", - "id": 275 - }, - { - "name": "minecraft:dried_kelp_block", - "id": -139 - }, - { - "name": "minecraft:dripstone_block", - "id": -317 - }, - { - "name": "minecraft:dropper", - "id": 125 - }, - { - "name": "minecraft:drowned_spawn_egg", - "id": 494 - }, - { - "name": "minecraft:dune_armor_trim_smithing_template", - "id": 702 - }, - { - "name": "minecraft:dye", - "id": 766 - }, - { - "name": "minecraft:echo_shard", - "id": 667 - }, - { - "name": "minecraft:egg", - "id": 399 - }, - { - "name": "minecraft:elder_guardian_spawn_egg", - "id": 482 - }, - { - "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": 581 - }, - { - "name": "minecraft:emerald", - "id": 529 - }, - { - "name": "minecraft:emerald_block", - "id": 133 - }, - { - "name": "minecraft:emerald_ore", - "id": 129 - }, - { - "name": "minecraft:empty_map", - "id": 532 - }, - { - "name": "minecraft:enchanted_book", - "id": 538 - }, - { - "name": "minecraft:enchanted_golden_apple", - "id": 264 - }, - { - "name": "minecraft:enchanting_table", - "id": 116 - }, - { - "name": "minecraft:end_brick_stairs", - "id": -178 - }, - { - "name": "minecraft:end_bricks", - "id": 206 - }, - { - "name": "minecraft:end_crystal", - "id": 769 - }, - { - "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:end_stone_brick_double_slab", - "id": -167 - }, - { - "name": "minecraft:end_stone_brick_slab", - "id": -162 - }, - { - "name": "minecraft:ender_chest", - "id": 130 - }, - { - "name": "minecraft:ender_dragon_spawn_egg", - "id": 518 - }, - { - "name": "minecraft:ender_eye", - "id": 443 - }, - { - "name": "minecraft:ender_pearl", - "id": 431 - }, - { - "name": "minecraft:enderman_spawn_egg", - "id": 452 - }, - { - "name": "minecraft:endermite_spawn_egg", - "id": 470 - }, - { - "name": "minecraft:evoker_spawn_egg", - "id": 486 - }, - { - "name": "minecraft:experience_bottle", - "id": 525 - }, - { - "name": "minecraft:explorer_pottery_sherd", - "id": 683 - }, - { - "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": 706 - }, - { - "name": "minecraft:farmland", - "id": 60 - }, - { - "name": "minecraft:feather", - "id": 335 - }, - { - "name": "minecraft:fence", - "id": 729 - }, - { - "name": "minecraft:fence_gate", - "id": 107 - }, - { - "name": "minecraft:fermented_spider_eye", - "id": 438 - }, - { - "name": "minecraft:fern", - "id": -848 - }, - { - "name": "minecraft:field_masoned_banner_pattern", - "id": 602 - }, - { - "name": "minecraft:filled_map", - "id": 429 - }, - { - "name": "minecraft:fire", - "id": 51 - }, - { - "name": "minecraft:fire_charge", - "id": 526 - }, - { - "name": "minecraft:fire_coral", - "id": -583 - }, - { - "name": "minecraft:fire_coral_block", - "id": -851 - }, - { - "name": "minecraft:fire_coral_fan", - "id": -842 - }, - { - "name": "minecraft:fire_coral_wall_fan", - "id": -907 - }, - { - "name": "minecraft:firework_rocket", - "id": 536 - }, - { - "name": "minecraft:firework_star", - "id": 537 - }, - { - "name": "minecraft:fishing_rod", - "id": 401 - }, - { - "name": "minecraft:fletching_table", - "id": -201 - }, - { - "name": "minecraft:flint", - "id": 364 - }, - { - "name": "minecraft:flint_and_steel", - "id": 306 - }, - { - "name": "minecraft:flow_armor_trim_smithing_template", - "id": 717 - }, - { - "name": "minecraft:flow_banner_pattern", - "id": 606 - }, - { - "name": "minecraft:flow_pottery_sherd", - "id": 684 - }, - { - "name": "minecraft:flower_banner_pattern", - "id": 598 - }, - { - "name": "minecraft:flower_pot", - "id": 531 - }, - { - "name": "minecraft:flowering_azalea", - "id": -338 - }, - { - "name": "minecraft:flowing_lava", - "id": 10 - }, - { - "name": "minecraft:flowing_water", - "id": 8 - }, - { - "name": "minecraft:fox_spawn_egg", - "id": 501 - }, - { - "name": "minecraft:frame", - "id": 530 - }, - { - "name": "minecraft:friend_pottery_sherd", - "id": 685 - }, - { - "name": "minecraft:frog_spawn", - "id": -468 - }, - { - "name": "minecraft:frog_spawn_egg", - "id": 648 - }, - { - "name": "minecraft:frosted_ice", - "id": 207 - }, - { - "name": "minecraft:furnace", - "id": 61 - }, - { - "name": "minecraft:ghast_spawn_egg", - "id": 464 - }, - { - "name": "minecraft:ghast_tear", - "id": 434 - }, - { - "name": "minecraft:gilded_blackstone", - "id": -281 - }, - { - "name": "minecraft:glass", - "id": 20 - }, - { - "name": "minecraft:glass_bottle", - "id": 437 - }, - { - "name": "minecraft:glass_pane", - "id": 102 - }, - { - "name": "minecraft:glistering_melon_slice", - "id": 444 - }, - { - "name": "minecraft:globe_banner_pattern", - "id": 605 - }, - { - "name": "minecraft:glow_berries", - "id": 770 - }, - { - "name": "minecraft:glow_frame", - "id": 643 - }, - { - "name": "minecraft:glow_ink_sac", - "id": 520 - }, - { - "name": "minecraft:glow_lichen", - "id": -411 - }, - { - "name": "minecraft:glow_squid_spawn_egg", - "id": 515 - }, - { - "name": "minecraft:glow_stick", - "id": 621 - }, - { - "name": "minecraft:glowingobsidian", - "id": 246 - }, - { - "name": "minecraft:glowstone", - "id": 89 - }, - { - "name": "minecraft:glowstone_dust", - "id": 403 - }, - { - "name": "minecraft:goat_horn", - "id": 647 - }, - { - "name": "minecraft:goat_spawn_egg", - "id": 514 - }, - { - "name": "minecraft:gold_block", - "id": 41 - }, - { - "name": "minecraft:gold_ingot", - "id": 313 - }, - { - "name": "minecraft:gold_nugget", - "id": 435 - }, - { - "name": "minecraft:gold_ore", - "id": 14 - }, - { - "name": "minecraft:golden_apple", - "id": 263 - }, - { - "name": "minecraft:golden_axe", - "id": 333 - }, - { - "name": "minecraft:golden_boots", - "id": 362 - }, - { - "name": "minecraft:golden_carrot", - "id": 288 - }, - { - "name": "minecraft:golden_chestplate", - "id": 360 - }, - { - "name": "minecraft:golden_helmet", - "id": 359 - }, - { - "name": "minecraft:golden_hoe", - "id": 341 - }, - { - "name": "minecraft:golden_horse_armor", - "id": 549 - }, - { - "name": "minecraft:golden_leggings", - "id": 361 - }, - { - "name": "minecraft:golden_pickaxe", - "id": 332 - }, - { - "name": "minecraft:golden_rail", - "id": 27 - }, - { - "name": "minecraft:golden_shovel", - "id": 331 - }, - { - "name": "minecraft:golden_sword", - "id": 330 - }, - { - "name": "minecraft:granite", - "id": -590 - }, - { - "name": "minecraft:granite_double_slab", - "id": -923 - }, - { - "name": "minecraft:granite_slab", - "id": -896 - }, - { - "name": "minecraft:granite_stairs", - "id": -169 - }, - { - "name": "minecraft:grass_block", - "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": 412 - }, - { - "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": 406 - }, - { - "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": 471 - }, - { - "name": "minecraft:gunpowder", - "id": 336 - }, - { - "name": "minecraft:guster_banner_pattern", - "id": 607 - }, - { - "name": "minecraft:guster_pottery_sherd", - "id": 686 - }, - { - "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": 762 - }, - { - "name": "minecraft:hard_stained_glass_pane", - "id": 763 - }, - { - "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": 588 - }, - { - "name": "minecraft:heart_pottery_sherd", - "id": 687 - }, - { - "name": "minecraft:heartbreak_pottery_sherd", - "id": 688 - }, - { - "name": "minecraft:heavy_core", - "id": -316 - }, - { - "name": "minecraft:heavy_weighted_pressure_plate", - "id": 148 - }, - { - "name": "minecraft:hoglin_spawn_egg", - "id": 507 - }, - { - "name": "minecraft:honey_block", - "id": -220 - }, - { - "name": "minecraft:honey_bottle", - "id": 611 - }, - { - "name": "minecraft:honeycomb", - "id": 610 - }, - { - "name": "minecraft:honeycomb_block", - "id": -221 - }, - { - "name": "minecraft:hopper", - "id": 544 - }, - { - "name": "minecraft:hopper_minecart", - "id": 543 - }, - { - "name": "minecraft:horn_coral", - "id": -584 - }, - { - "name": "minecraft:horn_coral_block", - "id": -852 - }, - { - "name": "minecraft:horn_coral_fan", - "id": -843 - }, - { - "name": "minecraft:horn_coral_wall_fan", - "id": -137 - }, - { - "name": "minecraft:horse_spawn_egg", - "id": 468 - }, - { - "name": "minecraft:host_armor_trim_smithing_template", - "id": 716 - }, - { - "name": "minecraft:howl_pottery_sherd", - "id": 689 - }, - { - "name": "minecraft:husk_spawn_egg", - "id": 474 - }, - { - "name": "minecraft:ice", - "id": 79 - }, - { - "name": "minecraft:ice_bomb", - "id": 615 - }, - { - "name": "minecraft:infested_chiseled_stone_bricks", - "id": -862 - }, - { - "name": "minecraft:infested_cobblestone", - "id": -858 - }, - { - "name": "minecraft:infested_cracked_stone_bricks", - "id": -861 - }, - { - "name": "minecraft:infested_deepslate", - "id": -454 - }, - { - "name": "minecraft:infested_mossy_stone_bricks", - "id": -860 - }, - { - "name": "minecraft:infested_stone", - "id": 97 - }, - { - "name": "minecraft:infested_stone_bricks", - "id": -859 - }, - { - "name": "minecraft:info_update", - "id": 248 - }, - { - "name": "minecraft:info_update2", - "id": 249 - }, - { - "name": "minecraft:ink_sac", - "id": 422 - }, - { - "name": "minecraft:invisible_bedrock", - "id": 95 - }, - { - "name": "minecraft:iron_axe", - "id": 305 - }, - { - "name": "minecraft:iron_bars", - "id": 101 - }, - { - "name": "minecraft:iron_block", - "id": 42 - }, - { - "name": "minecraft:iron_boots", - "id": 354 - }, - { - "name": "minecraft:iron_chestplate", - "id": 352 - }, - { - "name": "minecraft:iron_door", - "id": 380 - }, - { - "name": "minecraft:iron_golem_spawn_egg", - "id": 516 - }, - { - "name": "minecraft:iron_helmet", - "id": 351 - }, - { - "name": "minecraft:iron_hoe", - "id": 339 - }, - { - "name": "minecraft:iron_horse_armor", - "id": 548 - }, - { - "name": "minecraft:iron_ingot", - "id": 312 - }, - { - "name": "minecraft:iron_leggings", - "id": 353 - }, - { - "name": "minecraft:iron_nugget", - "id": 586 - }, - { - "name": "minecraft:iron_ore", - "id": 15 - }, - { - "name": "minecraft:iron_pickaxe", - "id": 304 - }, - { - "name": "minecraft:iron_shovel", - "id": 303 - }, - { - "name": "minecraft:iron_sword", - "id": 314 - }, - { - "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": 386 - }, - { - "name": "minecraft:jungle_button", - "id": -143 - }, - { - "name": "minecraft:jungle_chest_boat", - "id": 660 - }, - { - "name": "minecraft:jungle_door", - "id": 572 - }, - { - "name": "minecraft:jungle_double_slab", - "id": -811 - }, - { - "name": "minecraft:jungle_fence", - "id": -578 - }, - { - "name": "minecraft:jungle_fence_gate", - "id": 185 - }, - { - "name": "minecraft:jungle_hanging_sign", - "id": -503 - }, - { - "name": "minecraft:jungle_leaves", - "id": -802 - }, - { - "name": "minecraft:jungle_log", - "id": -571 - }, - { - "name": "minecraft:jungle_planks", - "id": -741 - }, - { - "name": "minecraft:jungle_pressure_plate", - "id": -153 - }, - { - "name": "minecraft:jungle_sapling", - "id": -827 - }, - { - "name": "minecraft:jungle_sign", - "id": 595 - }, - { - "name": "minecraft:jungle_slab", - "id": -806 - }, - { - "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:jungle_wood", - "id": -816 - }, - { - "name": "minecraft:kelp", - "id": 391 - }, - { - "name": "minecraft:ladder", - "id": 65 - }, - { - "name": "minecraft:lantern", - "id": -208 - }, - { - "name": "minecraft:lapis_block", - "id": 22 - }, - { - "name": "minecraft:lapis_lazuli", - "id": 423 - }, - { - "name": "minecraft:lapis_ore", - "id": 21 - }, - { - "name": "minecraft:large_amethyst_bud", - "id": -330 - }, - { - "name": "minecraft:large_fern", - "id": -865 - }, - { - "name": "minecraft:lava", - "id": 11 - }, - { - "name": "minecraft:lava_bucket", - "id": 371 - }, - { - "name": "minecraft:lead", - "id": 564 - }, - { - "name": "minecraft:leather", - "id": 390 - }, - { - "name": "minecraft:leather_boots", - "id": 346 - }, - { - "name": "minecraft:leather_chestplate", - "id": 344 - }, - { - "name": "minecraft:leather_helmet", - "id": 343 - }, - { - "name": "minecraft:leather_horse_armor", - "id": 547 - }, - { - "name": "minecraft:leather_leggings", - "id": 345 - }, - { - "name": "minecraft:leaves", - "id": 743 - }, - { - "name": "minecraft:leaves2", - "id": 744 - }, - { - "name": "minecraft:lectern", - "id": -194 - }, - { - "name": "minecraft:lever", - "id": 69 - }, - { - "name": "minecraft:light_block", - "id": 764 - }, - { - "name": "minecraft:light_block_0", - "id": -215 - }, - { - "name": "minecraft:light_block_1", - "id": -929 - }, - { - "name": "minecraft:light_block_10", - "id": -938 - }, - { - "name": "minecraft:light_block_11", - "id": -939 - }, - { - "name": "minecraft:light_block_12", - "id": -940 - }, - { - "name": "minecraft:light_block_13", - "id": -941 - }, - { - "name": "minecraft:light_block_14", - "id": -942 - }, - { - "name": "minecraft:light_block_15", - "id": -943 - }, - { - "name": "minecraft:light_block_2", - "id": -930 - }, - { - "name": "minecraft:light_block_3", - "id": -931 - }, - { - "name": "minecraft:light_block_4", - "id": -932 - }, - { - "name": "minecraft:light_block_5", - "id": -933 - }, - { - "name": "minecraft:light_block_6", - "id": -934 - }, - { - "name": "minecraft:light_block_7", - "id": -935 - }, - { - "name": "minecraft:light_block_8", - "id": -936 - }, - { - "name": "minecraft:light_block_9", - "id": -937 - }, - { - "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": 416 - }, - { - "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": 411 - }, - { - "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:lilac", - "id": -863 - }, - { - "name": "minecraft:lily_of_the_valley", - "id": -839 - }, - { - "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": 414 - }, - { - "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": 579 - }, - { - "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": 484 - }, - { - "name": "minecraft:lodestone", - "id": -222 - }, - { - "name": "minecraft:lodestone_compass", - "id": 622 - }, - { - "name": "minecraft:log", - "id": 728 - }, - { - "name": "minecraft:log2", - "id": 751 - }, - { - "name": "minecraft:loom", - "id": -204 - }, - { - "name": "minecraft:mace", - "id": 327 - }, - { - "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": 417 - }, - { - "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": 440 - }, - { - "name": "minecraft:magma_cube_spawn_egg", - "id": 465 - }, - { - "name": "minecraft:mangrove_boat", - "id": 655 - }, - { - "name": "minecraft:mangrove_button", - "id": -487 - }, - { - "name": "minecraft:mangrove_chest_boat", - "id": 664 - }, - { - "name": "minecraft:mangrove_door", - "id": 653 - }, - { - "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": 654 - }, - { - "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": 619 - }, - { - "name": "minecraft:medium_amethyst_bud", - "id": -331 - }, - { - "name": "minecraft:melon_block", - "id": 103 - }, - { - "name": "minecraft:melon_seeds", - "id": 298 - }, - { - "name": "minecraft:melon_slice", - "id": 277 - }, - { - "name": "minecraft:melon_stem", - "id": 105 - }, - { - "name": "minecraft:milk_bucket", - "id": 369 - }, - { - "name": "minecraft:minecart", - "id": 378 - }, - { - "name": "minecraft:miner_pottery_sherd", - "id": 690 - }, - { - "name": "minecraft:mob_spawner", - "id": 52 - }, - { - "name": "minecraft:mojang_banner_pattern", - "id": 601 - }, - { - "name": "minecraft:monster_egg", - "id": 752 - }, - { - "name": "minecraft:mooshroom_spawn_egg", - "id": 450 - }, - { - "name": "minecraft:moss_block", - "id": -320 - }, - { - "name": "minecraft:moss_carpet", - "id": -335 - }, - { - "name": "minecraft:mossy_cobblestone", - "id": 48 - }, - { - "name": "minecraft:mossy_cobblestone_double_slab", - "id": -915 - }, - { - "name": "minecraft:mossy_cobblestone_slab", - "id": -888 - }, - { - "name": "minecraft:mossy_cobblestone_stairs", - "id": -179 - }, - { - "name": "minecraft:mossy_stone_brick_double_slab", - "id": -168 - }, - { - "name": "minecraft:mossy_stone_brick_slab", - "id": -166 - }, - { - "name": "minecraft:mossy_stone_brick_stairs", - "id": -175 - }, - { - "name": "minecraft:mossy_stone_bricks", - "id": -868 - }, - { - "name": "minecraft:mourner_pottery_sherd", - "id": 691 - }, - { - "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": 477 - }, - { - "name": "minecraft:mushroom_stew", - "id": 265 - }, - { - "name": "minecraft:music_disc_11", - "id": 561 - }, - { - "name": "minecraft:music_disc_13", - "id": 551 - }, - { - "name": "minecraft:music_disc_5", - "id": 656 - }, - { - "name": "minecraft:music_disc_blocks", - "id": 553 - }, - { - "name": "minecraft:music_disc_cat", - "id": 552 - }, - { - "name": "minecraft:music_disc_chirp", - "id": 554 - }, - { - "name": "minecraft:music_disc_creator", - "id": 759 - }, - { - "name": "minecraft:music_disc_creator_music_box", - "id": 760 - }, - { - "name": "minecraft:music_disc_far", - "id": 555 - }, - { - "name": "minecraft:music_disc_mall", - "id": 556 - }, - { - "name": "minecraft:music_disc_mellohi", - "id": 557 - }, - { - "name": "minecraft:music_disc_otherside", - "id": 646 - }, - { - "name": "minecraft:music_disc_pigstep", - "id": 640 - }, - { - "name": "minecraft:music_disc_precipice", - "id": 761 - }, - { - "name": "minecraft:music_disc_relic", - "id": 719 - }, - { - "name": "minecraft:music_disc_stal", - "id": 558 - }, - { - "name": "minecraft:music_disc_strad", - "id": 559 - }, - { - "name": "minecraft:music_disc_wait", - "id": 562 - }, - { - "name": "minecraft:music_disc_ward", - "id": 560 - }, - { - "name": "minecraft:mutton", - "id": 567 - }, - { - "name": "minecraft:mycelium", - "id": 110 - }, - { - "name": "minecraft:name_tag", - "id": 565 - }, - { - "name": "minecraft:nautilus_shell", - "id": 587 - }, - { - "name": "minecraft:nether_brick", - "id": 112 - }, - { - "name": "minecraft:nether_brick_double_slab", - "id": -883 - }, - { - "name": "minecraft:nether_brick_fence", - "id": 113 - }, - { - "name": "minecraft:nether_brick_slab", - "id": -877 - }, - { - "name": "minecraft:nether_brick_stairs", - "id": 114 - }, - { - "name": "minecraft:nether_gold_ore", - "id": -288 - }, - { - "name": "minecraft:nether_sprouts", - "id": 641 - }, - { - "name": "minecraft:nether_star", - "id": 535 - }, - { - "name": "minecraft:nether_wart", - "id": 299 - }, - { - "name": "minecraft:nether_wart_block", - "id": 214 - }, - { - "name": "minecraft:netherbrick", - "id": 540 - }, - { - "name": "minecraft:netherite_axe", - "id": 626 - }, - { - "name": "minecraft:netherite_block", - "id": -270 - }, - { - "name": "minecraft:netherite_boots", - "id": 632 - }, - { - "name": "minecraft:netherite_chestplate", - "id": 630 - }, - { - "name": "minecraft:netherite_helmet", - "id": 629 - }, - { - "name": "minecraft:netherite_hoe", - "id": 627 - }, - { - "name": "minecraft:netherite_ingot", - "id": 628 - }, - { - "name": "minecraft:netherite_leggings", - "id": 631 - }, - { - "name": "minecraft:netherite_pickaxe", - "id": 625 - }, - { - "name": "minecraft:netherite_scrap", - "id": 633 - }, - { - "name": "minecraft:netherite_shovel", - "id": 624 - }, - { - "name": "minecraft:netherite_sword", - "id": 623 - }, - { - "name": "minecraft:netherite_upgrade_smithing_template", - "id": 700 - }, - { - "name": "minecraft:netherrack", - "id": 87 - }, - { - "name": "minecraft:netherreactor", - "id": 247 - }, - { - "name": "minecraft:normal_stone_double_slab", - "id": -926 - }, - { - "name": "minecraft:normal_stone_slab", - "id": -899 - }, - { - "name": "minecraft:normal_stone_stairs", - "id": -180 - }, - { - "name": "minecraft:noteblock", - "id": 25 - }, - { - "name": "minecraft:npc_spawn_egg", - "id": 481 - }, - { - "name": "minecraft:oak_boat", - "id": 384 - }, - { - "name": "minecraft:oak_chest_boat", - "id": 658 - }, - { - "name": "minecraft:oak_double_slab", - "id": 157 - }, - { - "name": "minecraft:oak_fence", - "id": 85 - }, - { - "name": "minecraft:oak_hanging_sign", - "id": -500 - }, - { - "name": "minecraft:oak_leaves", - "id": 18 - }, - { - "name": "minecraft:oak_log", - "id": 17 - }, - { - "name": "minecraft:oak_planks", - "id": 5 - }, - { - "name": "minecraft:oak_sapling", - "id": 6 - }, - { - "name": "minecraft:oak_sign", - "id": 366 - }, - { - "name": "minecraft:oak_slab", - "id": 158 - }, - { - "name": "minecraft:oak_stairs", - "id": 53 - }, - { - "name": "minecraft:oak_wood", - "id": -212 - }, - { - "name": "minecraft:observer", - "id": 251 - }, - { - "name": "minecraft:obsidian", - "id": 49 - }, - { - "name": "minecraft:ocelot_spawn_egg", - "id": 461 - }, - { - "name": "minecraft:ochre_froglight", - "id": -471 - }, - { - "name": "minecraft:ominous_bottle", - "id": 612 - }, - { - "name": "minecraft:ominous_trial_key", - "id": 258 - }, - { - "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": 418 - }, - { - "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_tulip", - "id": -834 - }, - { - "name": "minecraft:orange_wool", - "id": -557 - }, - { - "name": "minecraft:oxeye_daisy", - "id": -837 - }, - { - "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": 365 - }, - { - "name": "minecraft:panda_spawn_egg", - "id": 500 - }, - { - "name": "minecraft:paper", - "id": 395 - }, - { - "name": "minecraft:parrot_spawn_egg", - "id": 489 - }, - { - "name": "minecraft:pearlescent_froglight", - "id": -469 - }, - { - "name": "minecraft:peony", - "id": -867 - }, - { - "name": "minecraft:petrified_oak_double_slab", - "id": -903 - }, - { - "name": "minecraft:petrified_oak_slab", - "id": -902 - }, - { - "name": "minecraft:phantom_membrane", - "id": 591 - }, - { - "name": "minecraft:phantom_spawn_egg", - "id": 497 - }, - { - "name": "minecraft:pig_spawn_egg", - "id": 447 - }, - { - "name": "minecraft:piglin_banner_pattern", - "id": 604 - }, - { - "name": "minecraft:piglin_brute_spawn_egg", - "id": 510 - }, - { - "name": "minecraft:piglin_spawn_egg", - "id": 508 - }, - { - "name": "minecraft:pillager_spawn_egg", - "id": 502 - }, - { - "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": 413 - }, - { - "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_tulip", - "id": -836 - }, - { - "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": 302 - }, - { - "name": "minecraft:planks", - "id": 748 - }, - { - "name": "minecraft:plenty_pottery_sherd", - "id": 692 - }, - { - "name": "minecraft:podzol", - "id": 243 - }, - { - "name": "minecraft:pointed_dripstone", - "id": -308 - }, - { - "name": "minecraft:poisonous_potato", - "id": 287 - }, - { - "name": "minecraft:polar_bear_spawn_egg", - "id": 483 - }, - { - "name": "minecraft:polished_andesite", - "id": -595 - }, - { - "name": "minecraft:polished_andesite_double_slab", - "id": -919 - }, - { - "name": "minecraft:polished_andesite_slab", - "id": -892 - }, - { - "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_double_slab", - "id": -922 - }, - { - "name": "minecraft:polished_diorite_slab", - "id": -895 - }, - { - "name": "minecraft:polished_diorite_stairs", - "id": -173 - }, - { - "name": "minecraft:polished_granite", - "id": -591 - }, - { - "name": "minecraft:polished_granite_double_slab", - "id": -924 - }, - { - "name": "minecraft:polished_granite_slab", - "id": -897 - }, - { - "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": 576 - }, - { - "name": "minecraft:poppy", - "id": 38 - }, - { - "name": "minecraft:porkchop", - "id": 267 - }, - { - "name": "minecraft:portal", - "id": 90 - }, - { - "name": "minecraft:potato", - "id": 285 - }, - { - "name": "minecraft:potatoes", - "id": 142 - }, - { - "name": "minecraft:potion", - "id": 436 - }, - { - "name": "minecraft:powder_snow", - "id": -306 - }, - { - "name": "minecraft:powder_snow_bucket", - "id": 376 - }, - { - "name": "minecraft:powered_comparator", - "id": 150 - }, - { - "name": "minecraft:powered_repeater", - "id": 94 - }, - { - "name": "minecraft:prismarine", - "id": 168 - }, - { - "name": "minecraft:prismarine_brick_double_slab", - "id": -914 - }, - { - "name": "minecraft:prismarine_brick_slab", - "id": -887 - }, - { - "name": "minecraft:prismarine_bricks", - "id": -948 - }, - { - "name": "minecraft:prismarine_bricks_stairs", - "id": -4 - }, - { - "name": "minecraft:prismarine_crystals", - "id": 566 - }, - { - "name": "minecraft:prismarine_double_slab", - "id": -912 - }, - { - "name": "minecraft:prismarine_shard", - "id": 582 - }, - { - "name": "minecraft:prismarine_slab", - "id": -885 - }, - { - "name": "minecraft:prismarine_stairs", - "id": -2 - }, - { - "name": "minecraft:prize_pottery_sherd", - "id": 693 - }, - { - "name": "minecraft:pufferfish", - "id": 272 - }, - { - "name": "minecraft:pufferfish_bucket", - "id": 375 - }, - { - "name": "minecraft:pufferfish_spawn_egg", - "id": 492 - }, - { - "name": "minecraft:pumpkin", - "id": 86 - }, - { - "name": "minecraft:pumpkin_pie", - "id": 289 - }, - { - "name": "minecraft:pumpkin_seeds", - "id": 297 - }, - { - "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": 409 - }, - { - "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_double_slab", - "id": -911 - }, - { - "name": "minecraft:purpur_slab", - "id": -884 - }, - { - "name": "minecraft:purpur_stairs", - "id": 203 - }, - { - "name": "minecraft:quartz", - "id": 541 - }, - { - "name": "minecraft:quartz_block", - "id": 155 - }, - { - "name": "minecraft:quartz_bricks", - "id": -304 - }, - { - "name": "minecraft:quartz_double_slab", - "id": -882 - }, - { - "name": "minecraft:quartz_ore", - "id": 153 - }, - { - "name": "minecraft:quartz_pillar", - "id": -954 - }, - { - "name": "minecraft:quartz_slab", - "id": -876 - }, - { - "name": "minecraft:quartz_stairs", - "id": 156 - }, - { - "name": "minecraft:rabbit", - "id": 293 - }, - { - "name": "minecraft:rabbit_foot", - "id": 545 - }, - { - "name": "minecraft:rabbit_hide", - "id": 546 - }, - { - "name": "minecraft:rabbit_spawn_egg", - "id": 469 - }, - { - "name": "minecraft:rabbit_stew", - "id": 295 - }, - { - "name": "minecraft:rail", - "id": 66 - }, - { - "name": "minecraft:raiser_armor_trim_smithing_template", - "id": 714 - }, - { - "name": "minecraft:rapid_fertilizer", - "id": 617 - }, - { - "name": "minecraft:ravager_spawn_egg", - "id": 504 - }, - { - "name": "minecraft:raw_copper", - "id": 524 - }, - { - "name": "minecraft:raw_copper_block", - "id": -452 - }, - { - "name": "minecraft:raw_gold", - "id": 523 - }, - { - "name": "minecraft:raw_gold_block", - "id": -453 - }, - { - "name": "minecraft:raw_iron", - "id": 522 - }, - { - "name": "minecraft:raw_iron_block", - "id": -451 - }, - { - "name": "minecraft:recovery_compass", - "id": 666 - }, - { - "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": 405 - }, - { - "name": "minecraft:red_flower", - "id": 746 - }, - { - "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_double_slab", - "id": -917 - }, - { - "name": "minecraft:red_nether_brick_slab", - "id": -890 - }, - { - "name": "minecraft:red_nether_brick_stairs", - "id": -184 - }, - { - "name": "minecraft:red_sand", - "id": -949 - }, - { - "name": "minecraft:red_sandstone", - "id": 179 - }, - { - "name": "minecraft:red_sandstone_double_slab", - "id": 181 - }, - { - "name": "minecraft:red_sandstone_slab", - "id": 182 - }, - { - "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_tulip", - "id": -833 - }, - { - "name": "minecraft:red_wool", - "id": -556 - }, - { - "name": "minecraft:redstone", - "id": 381 - }, - { - "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": 428 - }, - { - "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": 710 - }, - { - "name": "minecraft:rose_bush", - "id": -866 - }, - { - "name": "minecraft:rotten_flesh", - "id": 282 - }, - { - "name": "minecraft:saddle", - "id": 379 - }, - { - "name": "minecraft:salmon", - "id": 270 - }, - { - "name": "minecraft:salmon_bucket", - "id": 373 - }, - { - "name": "minecraft:salmon_spawn_egg", - "id": 493 - }, - { - "name": "minecraft:sand", - "id": 12 - }, - { - "name": "minecraft:sandstone", - "id": 24 - }, - { - "name": "minecraft:sandstone_double_slab", - "id": -878 - }, - { - "name": "minecraft:sandstone_slab", - "id": -872 - }, - { - "name": "minecraft:sandstone_stairs", - "id": 128 - }, - { - "name": "minecraft:sapling", - "id": 742 - }, - { - "name": "minecraft:scaffolding", - "id": -165 - }, - { - "name": "minecraft:scrape_pottery_sherd", - "id": 694 - }, - { - "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": 701 - }, - { - "name": "minecraft:shaper_armor_trim_smithing_template", - "id": 715 - }, - { - "name": "minecraft:sheaf_pottery_sherd", - "id": 695 - }, - { - "name": "minecraft:shears", - "id": 430 - }, - { - "name": "minecraft:sheep_spawn_egg", - "id": 448 - }, - { - "name": "minecraft:shelter_pottery_sherd", - "id": 696 - }, - { - "name": "minecraft:shield", - "id": 363 - }, - { - "name": "minecraft:short_grass", - "id": 31 - }, - { - "name": "minecraft:shroomlight", - "id": -230 - }, - { - "name": "minecraft:shulker_box", - "id": 757 - }, - { - "name": "minecraft:shulker_shell", - "id": 583 - }, - { - "name": "minecraft:shulker_spawn_egg", - "id": 480 - }, - { - "name": "minecraft:silence_armor_trim_smithing_template", - "id": 712 - }, - { - "name": "minecraft:silver_glazed_terracotta", - "id": 228 - }, - { - "name": "minecraft:silverfish_spawn_egg", - "id": 453 - }, - { - "name": "minecraft:skeleton_horse_spawn_egg", - "id": 478 - }, - { - "name": "minecraft:skeleton_spawn_egg", - "id": 454 - }, - { - "name": "minecraft:skull", - "id": 533 - }, - { - "name": "minecraft:skull_banner_pattern", - "id": 600 - }, - { - "name": "minecraft:skull_pottery_sherd", - "id": 697 - }, - { - "name": "minecraft:slime", - "id": 165 - }, - { - "name": "minecraft:slime_ball", - "id": 397 - }, - { - "name": "minecraft:slime_spawn_egg", - "id": 455 - }, - { - "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", - "id": -955 - }, - { - "name": "minecraft:smooth_quartz_double_slab", - "id": -925 - }, - { - "name": "minecraft:smooth_quartz_slab", - "id": -898 - }, - { - "name": "minecraft:smooth_quartz_stairs", - "id": -185 - }, - { - "name": "minecraft:smooth_red_sandstone", - "id": -958 - }, - { - "name": "minecraft:smooth_red_sandstone_double_slab", - "id": -918 - }, - { - "name": "minecraft:smooth_red_sandstone_slab", - "id": -891 - }, - { - "name": "minecraft:smooth_red_sandstone_stairs", - "id": -176 - }, - { - "name": "minecraft:smooth_sandstone", - "id": -946 - }, - { - "name": "minecraft:smooth_sandstone_double_slab", - "id": -916 - }, - { - "name": "minecraft:smooth_sandstone_slab", - "id": -889 - }, - { - "name": "minecraft:smooth_sandstone_stairs", - "id": -177 - }, - { - "name": "minecraft:smooth_stone", - "id": -183 - }, - { - "name": "minecraft:smooth_stone_double_slab", - "id": 43 - }, - { - "name": "minecraft:smooth_stone_slab", - "id": 44 - }, - { - "name": "minecraft:sniffer_egg", - "id": -596 - }, - { - "name": "minecraft:sniffer_spawn_egg", - "id": 511 - }, - { - "name": "minecraft:snort_pottery_sherd", - "id": 698 - }, - { - "name": "minecraft:snout_armor_trim_smithing_template", - "id": 709 - }, - { - "name": "minecraft:snow", - "id": 80 - }, - { - "name": "minecraft:snow_golem_spawn_egg", - "id": 517 - }, - { - "name": "minecraft:snow_layer", - "id": 78 - }, - { - "name": "minecraft:snowball", - "id": 382 - }, - { - "name": "minecraft:soul_campfire", - "id": 642 - }, - { - "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": 620 - }, - { - "name": "minecraft:spawn_egg", - "id": 768 - }, - { - "name": "minecraft:spider_eye", - "id": 283 - }, - { - "name": "minecraft:spider_spawn_egg", - "id": 456 - }, - { - "name": "minecraft:spire_armor_trim_smithing_template", - "id": 711 - }, - { - "name": "minecraft:splash_potion", - "id": 578 - }, - { - "name": "minecraft:sponge", - "id": 19 - }, - { - "name": "minecraft:spore_blossom", - "id": -321 - }, - { - "name": "minecraft:spruce_boat", - "id": 387 - }, - { - "name": "minecraft:spruce_button", - "id": -144 - }, - { - "name": "minecraft:spruce_chest_boat", - "id": 661 - }, - { - "name": "minecraft:spruce_door", - "id": 570 - }, - { - "name": "minecraft:spruce_double_slab", - "id": -809 - }, - { - "name": "minecraft:spruce_fence", - "id": -579 - }, - { - "name": "minecraft:spruce_fence_gate", - "id": 183 - }, - { - "name": "minecraft:spruce_hanging_sign", - "id": -501 - }, - { - "name": "minecraft:spruce_leaves", - "id": -800 - }, - { - "name": "minecraft:spruce_log", - "id": -569 - }, - { - "name": "minecraft:spruce_planks", - "id": -739 - }, - { - "name": "minecraft:spruce_pressure_plate", - "id": -154 - }, - { - "name": "minecraft:spruce_sapling", - "id": -825 - }, - { - "name": "minecraft:spruce_sign", - "id": 593 - }, - { - "name": "minecraft:spruce_slab", - "id": -804 - }, - { - "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:spruce_wood", - "id": -814 - }, - { - "name": "minecraft:spyglass", - "id": 645 - }, - { - "name": "minecraft:squid_spawn_egg", - "id": 460 - }, - { - "name": "minecraft:stained_glass", - "id": 755 - }, - { - "name": "minecraft:stained_glass_pane", - "id": 756 - }, - { - "name": "minecraft:stained_hardened_clay", - "id": 720 - }, - { - "name": "minecraft:standing_banner", - "id": 176 - }, - { - "name": "minecraft:standing_sign", - "id": 63 - }, - { - "name": "minecraft:stick", - "id": 328 - }, - { - "name": "minecraft:sticky_piston", - "id": 29 - }, - { - "name": "minecraft:sticky_piston_arm_collision", - "id": -217 - }, - { - "name": "minecraft:stone", - "id": 1 - }, - { - "name": "minecraft:stone_axe", - "id": 322 - }, - { - "name": "minecraft:stone_block_slab", - "id": 732 - }, - { - "name": "minecraft:stone_block_slab2", - "id": 733 - }, - { - "name": "minecraft:stone_block_slab3", - "id": 734 - }, - { - "name": "minecraft:stone_block_slab4", - "id": 735 - }, - { - "name": "minecraft:stone_brick_double_slab", - "id": -881 - }, - { - "name": "minecraft:stone_brick_slab", - "id": -875 - }, - { - "name": "minecraft:stone_brick_stairs", - "id": 109 - }, - { - "name": "minecraft:stone_bricks", - "id": 98 - }, - { - "name": "minecraft:stone_button", - "id": 77 - }, - { - "name": "minecraft:stone_hoe", - "id": 338 - }, - { - "name": "minecraft:stone_pickaxe", - "id": 321 - }, - { - "name": "minecraft:stone_pressure_plate", - "id": 70 - }, - { - "name": "minecraft:stone_shovel", - "id": 320 - }, - { - "name": "minecraft:stone_stairs", - "id": 67 - }, - { - "name": "minecraft:stone_sword", - "id": 319 - }, - { - "name": "minecraft:stonebrick", - "id": 730 - }, - { - "name": "minecraft:stonecutter", - "id": 245 - }, - { - "name": "minecraft:stonecutter_block", - "id": -197 - }, - { - "name": "minecraft:stray_spawn_egg", - "id": 472 - }, - { - "name": "minecraft:strider_spawn_egg", - "id": 506 - }, - { - "name": "minecraft:string", - "id": 334 - }, - { - "name": "minecraft:stripped_acacia_log", - "id": -8 - }, - { - "name": "minecraft:stripped_acacia_wood", - "id": -823 - }, - { - "name": "minecraft:stripped_bamboo_block", - "id": -528 - }, - { - "name": "minecraft:stripped_birch_log", - "id": -6 - }, - { - "name": "minecraft:stripped_birch_wood", - "id": -821 - }, - { - "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_dark_oak_wood", - "id": -824 - }, - { - "name": "minecraft:stripped_jungle_log", - "id": -7 - }, - { - "name": "minecraft:stripped_jungle_wood", - "id": -822 - }, - { - "name": "minecraft:stripped_mangrove_log", - "id": -485 - }, - { - "name": "minecraft:stripped_mangrove_wood", - "id": -498 - }, - { - "name": "minecraft:stripped_oak_log", - "id": -10 - }, - { - "name": "minecraft:stripped_oak_wood", - "id": -819 - }, - { - "name": "minecraft:stripped_spruce_log", - "id": -5 - }, - { - "name": "minecraft:stripped_spruce_wood", - "id": -820 - }, - { - "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": 425 - }, - { - "name": "minecraft:sugar_cane", - "id": 394 - }, - { - "name": "minecraft:sunflower", - "id": 175 - }, - { - "name": "minecraft:suspicious_gravel", - "id": -573 - }, - { - "name": "minecraft:suspicious_sand", - "id": -529 - }, - { - "name": "minecraft:suspicious_stew", - "id": 609 - }, - { - "name": "minecraft:sweet_berries", - "id": 292 - }, - { - "name": "minecraft:sweet_berry_bush", - "id": -207 - }, - { - "name": "minecraft:tadpole_bucket", - "id": 650 - }, - { - "name": "minecraft:tadpole_spawn_egg", - "id": 649 - }, - { - "name": "minecraft:tall_grass", - "id": -864 - }, - { - "name": "minecraft:tallgrass", - "id": 750 - }, - { - "name": "minecraft:target", - "id": -239 - }, - { - "name": "minecraft:tide_armor_trim_smithing_template", - "id": 708 - }, - { - "name": "minecraft:tinted_glass", - "id": -334 - }, - { - "name": "minecraft:tnt", - "id": 46 - }, - { - "name": "minecraft:tnt_minecart", - "id": 542 - }, - { - "name": "minecraft:torch", - "id": 50 - }, - { - "name": "minecraft:torchflower", - "id": -568 - }, - { - "name": "minecraft:torchflower_crop", - "id": -567 - }, - { - "name": "minecraft:torchflower_seeds", - "id": 301 - }, - { - "name": "minecraft:totem_of_undying", - "id": 585 - }, - { - "name": "minecraft:trader_llama_spawn_egg", - "id": 668 - }, - { - "name": "minecraft:trapdoor", - "id": 96 - }, - { - "name": "minecraft:trapped_chest", - "id": 146 - }, - { - "name": "minecraft:trial_key", - "id": 259 - }, - { - "name": "minecraft:trial_spawner", - "id": -315 - }, - { - "name": "minecraft:trident", - "id": 563 - }, - { - "name": "minecraft:trip_wire", - "id": 132 - }, - { - "name": "minecraft:tripwire_hook", - "id": 131 - }, - { - "name": "minecraft:tropical_fish", - "id": 271 - }, - { - "name": "minecraft:tropical_fish_bucket", - "id": 374 - }, - { - "name": "minecraft:tropical_fish_spawn_egg", - "id": 490 - }, - { - "name": "minecraft:tube_coral", - "id": -131 - }, - { - "name": "minecraft:tube_coral_block", - "id": -132 - }, - { - "name": "minecraft:tube_coral_fan", - "id": -133 - }, - { - "name": "minecraft:tube_coral_wall_fan", - "id": -135 - }, - { - "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": 590 - }, - { - "name": "minecraft:turtle_scute", - "id": 589 - }, - { - "name": "minecraft:turtle_spawn_egg", - "id": 496 - }, - { - "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:vault", - "id": -314 - }, - { - "name": "minecraft:verdant_froglight", - "id": -470 - }, - { - "name": "minecraft:vex_armor_trim_smithing_template", - "id": 707 - }, - { - "name": "minecraft:vex_spawn_egg", - "id": 487 - }, - { - "name": "minecraft:villager_spawn_egg", - "id": 459 - }, - { - "name": "minecraft:vindicator_spawn_egg", - "id": 485 - }, - { - "name": "minecraft:vine", - "id": 106 - }, - { - "name": "minecraft:wall_banner", - "id": 177 - }, - { - "name": "minecraft:wall_sign", - "id": 68 - }, - { - "name": "minecraft:wandering_trader_spawn_egg", - "id": 503 - }, - { - "name": "minecraft:ward_armor_trim_smithing_template", - "id": 705 - }, - { - "name": "minecraft:warden_spawn_egg", - "id": 652 - }, - { - "name": "minecraft:warped_button", - "id": -261 - }, - { - "name": "minecraft:warped_door", - "id": 637 - }, - { - "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": 638 - }, - { - "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": 635 - }, - { - "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": 370 - }, - { - "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": 713 - }, - { - "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": 342 - }, - { - "name": "minecraft:wheat_seeds", - "id": 296 - }, - { - "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": 419 - }, - { - "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_tulip", - "id": -835 - }, - { - "name": "minecraft:white_wool", - "id": 35 - }, - { - "name": "minecraft:wild_armor_trim_smithing_template", - "id": 704 - }, - { - "name": "minecraft:wind_charge", - "id": 260 - }, - { - "name": "minecraft:witch_spawn_egg", - "id": 462 - }, - { - "name": "minecraft:wither_rose", - "id": -216 - }, - { - "name": "minecraft:wither_skeleton_spawn_egg", - "id": 475 - }, - { - "name": "minecraft:wither_spawn_egg", - "id": 519 - }, - { - "name": "minecraft:wolf_armor", - "id": 723 - }, - { - "name": "minecraft:wolf_spawn_egg", - "id": 449 - }, - { - "name": "minecraft:wood", - "id": 758 - }, - { - "name": "minecraft:wooden_axe", - "id": 318 - }, - { - "name": "minecraft:wooden_button", - "id": 143 - }, - { - "name": "minecraft:wooden_door", - "id": 367 - }, - { - "name": "minecraft:wooden_hoe", - "id": 337 - }, - { - "name": "minecraft:wooden_pickaxe", - "id": 317 - }, - { - "name": "minecraft:wooden_pressure_plate", - "id": 72 - }, - { - "name": "minecraft:wooden_shovel", - "id": 316 - }, - { - "name": "minecraft:wooden_slab", - "id": 745 - }, - { - "name": "minecraft:wooden_sword", - "id": 315 - }, - { - "name": "minecraft:wool", - "id": 726 - }, - { - "name": "minecraft:writable_book", - "id": 527 - }, - { - "name": "minecraft:written_book", - "id": 528 - }, - { - "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": 415 - }, - { - "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": 509 - }, - { - "name": "minecraft:zombie_horse_spawn_egg", - "id": 479 - }, - { - "name": "minecraft:zombie_pigman_spawn_egg", - "id": 458 - }, - { - "name": "minecraft:zombie_spawn_egg", - "id": 457 - }, - { - "name": "minecraft:zombie_villager_spawn_egg", - "id": 488 - } -] \ No newline at end of file diff --git a/core/src/main/resources/bedrock/runtime_item_states.1_21_30.json b/core/src/main/resources/bedrock/runtime_item_states.1_21_50.json similarity index 96% rename from core/src/main/resources/bedrock/runtime_item_states.1_21_30.json rename to core/src/main/resources/bedrock/runtime_item_states.1_21_50.json index 55bbe0a00..763286430 100644 --- a/core/src/main/resources/bedrock/runtime_item_states.1_21_30.json +++ b/core/src/main/resources/bedrock/runtime_item_states.1_21_50.json @@ -1,7 +1,7 @@ [ { "name": "minecraft:acacia_boat", - "id": 388 + "id": 405 }, { "name": "minecraft:acacia_button", @@ -9,11 +9,11 @@ }, { "name": "minecraft:acacia_chest_boat", - "id": 662 + "id": 679 }, { "name": "minecraft:acacia_door", - "id": 573 + "id": 589 }, { "name": "minecraft:acacia_double_slab", @@ -53,7 +53,7 @@ }, { "name": "minecraft:acacia_sign", - "id": 596 + "id": 612 }, { "name": "minecraft:acacia_slab", @@ -85,7 +85,7 @@ }, { "name": "minecraft:agent_spawn_egg", - "id": 498 + "id": 515 }, { "name": "minecraft:air", @@ -93,7 +93,7 @@ }, { "name": "minecraft:allay_spawn_egg", - "id": 651 + "id": 668 }, { "name": "minecraft:allium", @@ -113,7 +113,7 @@ }, { "name": "minecraft:amethyst_shard", - "id": 644 + "id": 661 }, { "name": "minecraft:ancient_debris", @@ -141,7 +141,7 @@ }, { "name": "minecraft:angler_pottery_sherd", - "id": 676 + "id": 693 }, { "name": "minecraft:anvil", @@ -149,39 +149,39 @@ }, { "name": "minecraft:apple", - "id": 261 + "id": 278 }, { "name": "minecraft:archer_pottery_sherd", - "id": 677 + "id": 694 }, { "name": "minecraft:armadillo_scute", - "id": 722 + "id": 740 }, { "name": "minecraft:armadillo_spawn_egg", - "id": 721 + "id": 739 }, { "name": "minecraft:armor_stand", - "id": 569 + "id": 585 }, { "name": "minecraft:arms_up_pottery_sherd", - "id": 678 + "id": 695 }, { "name": "minecraft:arrow", - "id": 308 + "id": 325 }, { "name": "minecraft:axolotl_bucket", - "id": 377 + "id": 394 }, { "name": "minecraft:axolotl_spawn_egg", - "id": 513 + "id": 530 }, { "name": "minecraft:azalea", @@ -201,11 +201,11 @@ }, { "name": "minecraft:baked_potato", - "id": 286 + "id": 303 }, { "name": "minecraft:balloon", - "id": 618 + "id": 635 }, { "name": "minecraft:bamboo", @@ -221,7 +221,7 @@ }, { "name": "minecraft:bamboo_chest_raft", - "id": 674 + "id": 691 }, { "name": "minecraft:bamboo_door", @@ -269,7 +269,7 @@ }, { "name": "minecraft:bamboo_raft", - "id": 673 + "id": 690 }, { "name": "minecraft:bamboo_sapling", @@ -277,7 +277,7 @@ }, { "name": "minecraft:bamboo_sign", - "id": 672 + "id": 689 }, { "name": "minecraft:bamboo_slab", @@ -301,11 +301,11 @@ }, { "name": "minecraft:banner", - "id": 584 + "id": 600 }, { "name": "minecraft:banner_pattern", - "id": 770 + "id": 793 }, { "name": "minecraft:barrel", @@ -321,7 +321,7 @@ }, { "name": "minecraft:bat_spawn_egg", - "id": 463 + "id": 480 }, { "name": "minecraft:beacon", @@ -329,7 +329,7 @@ }, { "name": "minecraft:bed", - "id": 427 + "id": 444 }, { "name": "minecraft:bedrock", @@ -341,11 +341,11 @@ }, { "name": "minecraft:bee_spawn_egg", - "id": 505 + "id": 522 }, { "name": "minecraft:beef", - "id": 278 + "id": 295 }, { "name": "minecraft:beehive", @@ -353,15 +353,15 @@ }, { "name": "minecraft:beetroot", - "id": 290 + "id": 307 }, { "name": "minecraft:beetroot_seeds", - "id": 300 + "id": 317 }, { "name": "minecraft:beetroot_soup", - "id": 291 + "id": 308 }, { "name": "minecraft:bell", @@ -373,7 +373,7 @@ }, { "name": "minecraft:birch_boat", - "id": 385 + "id": 402 }, { "name": "minecraft:birch_button", @@ -381,11 +381,11 @@ }, { "name": "minecraft:birch_chest_boat", - "id": 659 + "id": 676 }, { "name": "minecraft:birch_door", - "id": 571 + "id": 587 }, { "name": "minecraft:birch_double_slab", @@ -425,7 +425,7 @@ }, { "name": "minecraft:birch_sign", - "id": 594 + "id": 610 }, { "name": "minecraft:birch_slab", @@ -451,6 +451,10 @@ "name": "minecraft:birch_wood", "id": -815 }, + { + "name": "minecraft:black_bundle", + "id": 257 + }, { "name": "minecraft:black_candle", "id": -428 @@ -473,7 +477,7 @@ }, { "name": "minecraft:black_dye", - "id": 404 + "id": 421 }, { "name": "minecraft:black_glazed_terracotta", @@ -521,7 +525,7 @@ }, { "name": "minecraft:blade_pottery_sherd", - "id": 679 + "id": 696 }, { "name": "minecraft:blast_furnace", @@ -529,19 +533,23 @@ }, { "name": "minecraft:blaze_powder", - "id": 439 + "id": 456 }, { "name": "minecraft:blaze_rod", - "id": 432 + "id": 449 }, { "name": "minecraft:blaze_spawn_egg", - "id": 466 + "id": 483 }, { "name": "minecraft:bleach", - "id": 616 + "id": 633 + }, + { + "name": "minecraft:blue_bundle", + "id": 258 }, { "name": "minecraft:blue_candle", @@ -565,7 +573,7 @@ }, { "name": "minecraft:blue_dye", - "id": 408 + "id": 425 }, { "name": "minecraft:blue_glazed_terracotta", @@ -599,21 +607,25 @@ "name": "minecraft:blue_wool", "id": -563 }, + { + "name": "minecraft:board", + "id": 629 + }, { "name": "minecraft:boat", - "id": 768 + "id": 791 }, { "name": "minecraft:bogged_spawn_egg", - "id": 473 + "id": 490 }, { "name": "minecraft:bolt_armor_trim_smithing_template", - "id": 718 + "id": 735 }, { "name": "minecraft:bone", - "id": 424 + "id": 441 }, { "name": "minecraft:bone_block", @@ -621,11 +633,11 @@ }, { "name": "minecraft:bone_meal", - "id": 420 + "id": 437 }, { "name": "minecraft:book", - "id": 396 + "id": 413 }, { "name": "minecraft:bookshelf", @@ -637,15 +649,15 @@ }, { "name": "minecraft:bordure_indented_banner_pattern", - "id": 603 + "id": 619 }, { "name": "minecraft:bow", - "id": 307 + "id": 324 }, { "name": "minecraft:bowl", - "id": 329 + "id": 346 }, { "name": "minecraft:brain_coral", @@ -665,27 +677,27 @@ }, { "name": "minecraft:bread", - "id": 266 + "id": 283 }, { "name": "minecraft:breeze_rod", - "id": 257 + "id": 274 }, { "name": "minecraft:breeze_spawn_egg", - "id": 512 + "id": 529 }, { "name": "minecraft:brewer_pottery_sherd", - "id": 680 + "id": 697 }, { "name": "minecraft:brewing_stand", - "id": 441 + "id": 458 }, { "name": "minecraft:brick", - "id": 392 + "id": 409 }, { "name": "minecraft:brick_block", @@ -707,6 +719,10 @@ "name": "minecraft:brick_wall", "id": -976 }, + { + "name": "minecraft:brown_bundle", + "id": 259 + }, { "name": "minecraft:brown_candle", "id": -425 @@ -729,7 +745,7 @@ }, { "name": "minecraft:brown_dye", - "id": 407 + "id": 424 }, { "name": "minecraft:brown_glazed_terracotta", @@ -765,7 +781,7 @@ }, { "name": "minecraft:brush", - "id": 699 + "id": 716 }, { "name": "minecraft:bubble_column", @@ -789,15 +805,19 @@ }, { "name": "minecraft:bucket", - "id": 368 + "id": 385 }, { "name": "minecraft:budding_amethyst", "id": -328 }, + { + "name": "minecraft:bundle", + "id": 260 + }, { "name": "minecraft:burn_pottery_sherd", - "id": 681 + "id": 698 }, { "name": "minecraft:cactus", @@ -805,7 +825,7 @@ }, { "name": "minecraft:cake", - "id": 426 + "id": 443 }, { "name": "minecraft:calcite", @@ -817,15 +837,15 @@ }, { "name": "minecraft:camel_spawn_egg", - "id": 675 + "id": 692 }, { "name": "minecraft:camera", - "id": 613 + "id": 630 }, { "name": "minecraft:campfire", - "id": 608 + "id": 624 }, { "name": "minecraft:candle", @@ -837,15 +857,15 @@ }, { "name": "minecraft:carpet", - "id": 727 + "id": 750 }, { "name": "minecraft:carrot", - "id": 284 + "id": 301 }, { "name": "minecraft:carrot_on_a_stick", - "id": 534 + "id": 550 }, { "name": "minecraft:carrots", @@ -861,15 +881,15 @@ }, { "name": "minecraft:cat_spawn_egg", - "id": 499 + "id": 516 }, { "name": "minecraft:cauldron", - "id": 442 + "id": 459 }, { "name": "minecraft:cave_spider_spawn_egg", - "id": 467 + "id": 484 }, { "name": "minecraft:cave_vines", @@ -885,7 +905,7 @@ }, { "name": "minecraft:chain", - "id": 639 + "id": 656 }, { "name": "minecraft:chain_command_block", @@ -893,23 +913,27 @@ }, { "name": "minecraft:chainmail_boots", - "id": 350 + "id": 367 }, { "name": "minecraft:chainmail_chestplate", - "id": 348 + "id": 365 }, { "name": "minecraft:chainmail_helmet", - "id": 347 + "id": 364 }, { "name": "minecraft:chainmail_leggings", - "id": 349 + "id": 366 + }, + { + "name": "minecraft:chalkboard", + "id": 230 }, { "name": "minecraft:charcoal", - "id": 310 + "id": 327 }, { "name": "minecraft:chemical_heat", @@ -917,11 +941,11 @@ }, { "name": "minecraft:chemistry_table", - "id": 762 + "id": 785 }, { "name": "minecraft:cherry_boat", - "id": 669 + "id": 686 }, { "name": "minecraft:cherry_button", @@ -929,7 +953,7 @@ }, { "name": "minecraft:cherry_chest_boat", - "id": 670 + "id": 687 }, { "name": "minecraft:cherry_door", @@ -973,7 +997,7 @@ }, { "name": "minecraft:cherry_sign", - "id": 671 + "id": 688 }, { "name": "minecraft:cherry_slab", @@ -1005,19 +1029,19 @@ }, { "name": "minecraft:chest_boat", - "id": 665 + "id": 682 }, { "name": "minecraft:chest_minecart", - "id": 398 + "id": 415 }, { "name": "minecraft:chicken", - "id": 280 + "id": 297 }, { "name": "minecraft:chicken_spawn_egg", - "id": 445 + "id": 462 }, { "name": "minecraft:chipped_anvil", @@ -1051,6 +1075,10 @@ "name": "minecraft:chiseled_red_sandstone", "id": -956 }, + { + "name": "minecraft:chiseled_resin_bricks", + "id": -1020 + }, { "name": "minecraft:chiseled_sandstone", "id": -944 @@ -1073,7 +1101,7 @@ }, { "name": "minecraft:chorus_fruit", - "id": 575 + "id": 591 }, { "name": "minecraft:chorus_plant", @@ -1085,7 +1113,7 @@ }, { "name": "minecraft:clay_ball", - "id": 393 + "id": 410 }, { "name": "minecraft:client_request_placeholder_block", @@ -1093,11 +1121,15 @@ }, { "name": "minecraft:clock", - "id": 402 + "id": 419 + }, + { + "name": "minecraft:closed_eyeblossom", + "id": -1019 }, { "name": "minecraft:coal", - "id": 309 + "id": 326 }, { "name": "minecraft:coal_block", @@ -1113,7 +1145,7 @@ }, { "name": "minecraft:coast_armor_trim_smithing_template", - "id": 703 + "id": 720 }, { "name": "minecraft:cobbled_deepslate", @@ -1157,19 +1189,19 @@ }, { "name": "minecraft:cocoa_beans", - "id": 421 + "id": 438 }, { "name": "minecraft:cod", - "id": 269 + "id": 286 }, { "name": "minecraft:cod_bucket", - "id": 372 + "id": 389 }, { "name": "minecraft:cod_spawn_egg", - "id": 491 + "id": 508 }, { "name": "minecraft:colored_torch_blue", @@ -1177,7 +1209,7 @@ }, { "name": "minecraft:colored_torch_bp", - "id": 766 + "id": 789 }, { "name": "minecraft:colored_torch_green", @@ -1193,7 +1225,7 @@ }, { "name": "minecraft:colored_torch_rg", - "id": 765 + "id": 788 }, { "name": "minecraft:command_block", @@ -1201,15 +1233,15 @@ }, { "name": "minecraft:command_block_minecart", - "id": 580 + "id": 596 }, { "name": "minecraft:comparator", - "id": 539 + "id": 555 }, { "name": "minecraft:compass", - "id": 400 + "id": 417 }, { "name": "minecraft:composter", @@ -1217,7 +1249,7 @@ }, { "name": "minecraft:compound", - "id": 614 + "id": 631 }, { "name": "minecraft:compound_creator", @@ -1225,11 +1257,11 @@ }, { "name": "minecraft:concrete", - "id": 753 + "id": 776 }, { "name": "minecraft:concrete_powder", - "id": 754 + "id": 777 }, { "name": "minecraft:conduit", @@ -1237,35 +1269,35 @@ }, { "name": "minecraft:cooked_beef", - "id": 279 + "id": 296 }, { "name": "minecraft:cooked_chicken", - "id": 281 + "id": 298 }, { "name": "minecraft:cooked_cod", - "id": 273 + "id": 290 }, { "name": "minecraft:cooked_mutton", - "id": 568 + "id": 584 }, { "name": "minecraft:cooked_porkchop", - "id": 268 + "id": 285 }, { "name": "minecraft:cooked_rabbit", - "id": 294 + "id": 311 }, { "name": "minecraft:cooked_salmon", - "id": 274 + "id": 291 }, { "name": "minecraft:cookie", - "id": 276 + "id": 293 }, { "name": "minecraft:copper_block", @@ -1285,7 +1317,7 @@ }, { "name": "minecraft:copper_ingot", - "id": 521 + "id": 538 }, { "name": "minecraft:copper_ore", @@ -1297,19 +1329,19 @@ }, { "name": "minecraft:coral", - "id": 749 + "id": 772 }, { "name": "minecraft:coral_block", - "id": 731 + "id": 754 }, { "name": "minecraft:coral_fan", - "id": 740 + "id": 763 }, { "name": "minecraft:coral_fan_dead", - "id": 741 + "id": 764 }, { "name": "minecraft:cornflower", @@ -1317,7 +1349,7 @@ }, { "name": "minecraft:cow_spawn_egg", - "id": 446 + "id": 463 }, { "name": "minecraft:cracked_deepslate_bricks", @@ -1347,13 +1379,25 @@ "name": "minecraft:crafting_table", "id": 58 }, + { + "name": "minecraft:creaking_heart", + "id": -1012 + }, + { + "name": "minecraft:creaking_spawn_egg", + "id": 747 + }, { "name": "minecraft:creeper_banner_pattern", - "id": 599 + "id": 615 + }, + { + "name": "minecraft:creeper_head", + "id": -968 }, { "name": "minecraft:creeper_spawn_egg", - "id": 451 + "id": 468 }, { "name": "minecraft:crimson_button", @@ -1361,7 +1405,7 @@ }, { "name": "minecraft:crimson_door", - "id": 636 + "id": 653 }, { "name": "minecraft:crimson_double_slab", @@ -1405,7 +1449,7 @@ }, { "name": "minecraft:crimson_sign", - "id": 634 + "id": 651 }, { "name": "minecraft:crimson_slab", @@ -1433,7 +1477,7 @@ }, { "name": "minecraft:crossbow", - "id": 592 + "id": 608 }, { "name": "minecraft:crying_obsidian", @@ -1475,6 +1519,10 @@ "name": "minecraft:cut_sandstone_slab", "id": -900 }, + { + "name": "minecraft:cyan_bundle", + "id": 261 + }, { "name": "minecraft:cyan_candle", "id": -422 @@ -1497,7 +1545,7 @@ }, { "name": "minecraft:cyan_dye", - "id": 410 + "id": 427 }, { "name": "minecraft:cyan_glazed_terracotta", @@ -1533,11 +1581,11 @@ }, { "name": "minecraft:danger_pottery_sherd", - "id": 682 + "id": 699 }, { "name": "minecraft:dark_oak_boat", - "id": 389 + "id": 406 }, { "name": "minecraft:dark_oak_button", @@ -1545,11 +1593,11 @@ }, { "name": "minecraft:dark_oak_chest_boat", - "id": 663 + "id": 680 }, { "name": "minecraft:dark_oak_door", - "id": 574 + "id": 590 }, { "name": "minecraft:dark_oak_double_slab", @@ -1589,7 +1637,7 @@ }, { "name": "minecraft:dark_oak_sign", - "id": 597 + "id": 613 }, { "name": "minecraft:dark_oak_slab", @@ -1825,11 +1873,11 @@ }, { "name": "minecraft:diamond", - "id": 311 + "id": 328 }, { "name": "minecraft:diamond_axe", - "id": 326 + "id": 343 }, { "name": "minecraft:diamond_block", @@ -1837,27 +1885,27 @@ }, { "name": "minecraft:diamond_boots", - "id": 358 + "id": 375 }, { "name": "minecraft:diamond_chestplate", - "id": 356 + "id": 373 }, { "name": "minecraft:diamond_helmet", - "id": 355 + "id": 372 }, { "name": "minecraft:diamond_hoe", - "id": 340 + "id": 357 }, { "name": "minecraft:diamond_horse_armor", - "id": 550 + "id": 566 }, { "name": "minecraft:diamond_leggings", - "id": 357 + "id": 374 }, { "name": "minecraft:diamond_ore", @@ -1865,15 +1913,15 @@ }, { "name": "minecraft:diamond_pickaxe", - "id": 325 + "id": 342 }, { "name": "minecraft:diamond_shovel", - "id": 324 + "id": 341 }, { "name": "minecraft:diamond_sword", - "id": 323 + "id": 340 }, { "name": "minecraft:diorite", @@ -1905,7 +1953,7 @@ }, { "name": "minecraft:disc_fragment_5", - "id": 657 + "id": 674 }, { "name": "minecraft:dispenser", @@ -1913,11 +1961,11 @@ }, { "name": "minecraft:dolphin_spawn_egg", - "id": 495 + "id": 512 }, { "name": "minecraft:donkey_spawn_egg", - "id": 476 + "id": 493 }, { "name": "minecraft:double_cut_copper_slab", @@ -1925,35 +1973,39 @@ }, { "name": "minecraft:double_plant", - "id": 747 + "id": 770 }, { "name": "minecraft:double_stone_block_slab", - "id": 736 + "id": 759 }, { "name": "minecraft:double_stone_block_slab2", - "id": 737 + "id": 760 }, { "name": "minecraft:double_stone_block_slab3", - "id": 738 + "id": 761 }, { "name": "minecraft:double_stone_block_slab4", - "id": 739 + "id": 762 }, { "name": "minecraft:dragon_breath", - "id": 577 + "id": 593 }, { "name": "minecraft:dragon_egg", "id": 122 }, + { + "name": "minecraft:dragon_head", + "id": -969 + }, { "name": "minecraft:dried_kelp", - "id": 275 + "id": 292 }, { "name": "minecraft:dried_kelp_block", @@ -1969,27 +2021,27 @@ }, { "name": "minecraft:drowned_spawn_egg", - "id": 494 + "id": 511 }, { "name": "minecraft:dune_armor_trim_smithing_template", - "id": 702 + "id": 719 }, { "name": "minecraft:dye", - "id": 769 + "id": 792 }, { "name": "minecraft:echo_shard", - "id": 667 + "id": 684 }, { "name": "minecraft:egg", - "id": 399 + "id": 416 }, { "name": "minecraft:elder_guardian_spawn_egg", - "id": 482 + "id": 499 }, { "name": "minecraft:element_0", @@ -2473,11 +2525,11 @@ }, { "name": "minecraft:elytra", - "id": 581 + "id": 597 }, { "name": "minecraft:emerald", - "id": 529 + "id": 546 }, { "name": "minecraft:emerald_block", @@ -2489,15 +2541,15 @@ }, { "name": "minecraft:empty_map", - "id": 532 + "id": 549 }, { "name": "minecraft:enchanted_book", - "id": 538 + "id": 554 }, { "name": "minecraft:enchanted_golden_apple", - "id": 264 + "id": 281 }, { "name": "minecraft:enchanting_table", @@ -2513,7 +2565,7 @@ }, { "name": "minecraft:end_crystal", - "id": 772 + "id": 795 }, { "name": "minecraft:end_gateway", @@ -2553,35 +2605,35 @@ }, { "name": "minecraft:ender_dragon_spawn_egg", - "id": 518 + "id": 535 }, { "name": "minecraft:ender_eye", - "id": 443 + "id": 460 }, { "name": "minecraft:ender_pearl", - "id": 431 + "id": 448 }, { "name": "minecraft:enderman_spawn_egg", - "id": 452 + "id": 469 }, { "name": "minecraft:endermite_spawn_egg", - "id": 470 + "id": 487 }, { "name": "minecraft:evoker_spawn_egg", - "id": 486 + "id": 503 }, { "name": "minecraft:experience_bottle", - "id": 525 + "id": 542 }, { "name": "minecraft:explorer_pottery_sherd", - "id": 683 + "id": 700 }, { "name": "minecraft:exposed_chiseled_copper", @@ -2625,7 +2677,7 @@ }, { "name": "minecraft:eye_armor_trim_smithing_template", - "id": 706 + "id": 723 }, { "name": "minecraft:farmland", @@ -2633,11 +2685,11 @@ }, { "name": "minecraft:feather", - "id": 335 + "id": 352 }, { "name": "minecraft:fence", - "id": 729 + "id": 752 }, { "name": "minecraft:fence_gate", @@ -2645,7 +2697,7 @@ }, { "name": "minecraft:fermented_spider_eye", - "id": 438 + "id": 455 }, { "name": "minecraft:fern", @@ -2653,11 +2705,11 @@ }, { "name": "minecraft:field_masoned_banner_pattern", - "id": 602 + "id": 618 }, { "name": "minecraft:filled_map", - "id": 429 + "id": 446 }, { "name": "minecraft:fire", @@ -2665,7 +2717,7 @@ }, { "name": "minecraft:fire_charge", - "id": 526 + "id": 543 }, { "name": "minecraft:fire_coral", @@ -2685,15 +2737,15 @@ }, { "name": "minecraft:firework_rocket", - "id": 536 + "id": 552 }, { "name": "minecraft:firework_star", - "id": 537 + "id": 553 }, { "name": "minecraft:fishing_rod", - "id": 401 + "id": 418 }, { "name": "minecraft:fletching_table", @@ -2701,31 +2753,31 @@ }, { "name": "minecraft:flint", - "id": 364 + "id": 381 }, { "name": "minecraft:flint_and_steel", - "id": 306 + "id": 323 }, { "name": "minecraft:flow_armor_trim_smithing_template", - "id": 717 + "id": 734 }, { "name": "minecraft:flow_banner_pattern", - "id": 606 + "id": 622 }, { "name": "minecraft:flow_pottery_sherd", - "id": 684 + "id": 701 }, { "name": "minecraft:flower_banner_pattern", - "id": 598 + "id": 614 }, { "name": "minecraft:flower_pot", - "id": 531 + "id": 548 }, { "name": "minecraft:flowering_azalea", @@ -2741,15 +2793,15 @@ }, { "name": "minecraft:fox_spawn_egg", - "id": 501 + "id": 518 }, { "name": "minecraft:frame", - "id": 530 + "id": 547 }, { "name": "minecraft:friend_pottery_sherd", - "id": 685 + "id": 702 }, { "name": "minecraft:frog_spawn", @@ -2757,7 +2809,7 @@ }, { "name": "minecraft:frog_spawn_egg", - "id": 648 + "id": 665 }, { "name": "minecraft:frosted_ice", @@ -2769,11 +2821,11 @@ }, { "name": "minecraft:ghast_spawn_egg", - "id": 464 + "id": 481 }, { "name": "minecraft:ghast_tear", - "id": 434 + "id": 451 }, { "name": "minecraft:gilded_blackstone", @@ -2785,7 +2837,7 @@ }, { "name": "minecraft:glass_bottle", - "id": 437 + "id": 454 }, { "name": "minecraft:glass_pane", @@ -2793,23 +2845,23 @@ }, { "name": "minecraft:glistering_melon_slice", - "id": 444 + "id": 461 }, { "name": "minecraft:globe_banner_pattern", - "id": 605 + "id": 621 }, { "name": "minecraft:glow_berries", - "id": 773 + "id": 796 }, { "name": "minecraft:glow_frame", - "id": 643 + "id": 660 }, { "name": "minecraft:glow_ink_sac", - "id": 520 + "id": 537 }, { "name": "minecraft:glow_lichen", @@ -2817,11 +2869,11 @@ }, { "name": "minecraft:glow_squid_spawn_egg", - "id": 515 + "id": 532 }, { "name": "minecraft:glow_stick", - "id": 621 + "id": 638 }, { "name": "minecraft:glowingobsidian", @@ -2833,15 +2885,15 @@ }, { "name": "minecraft:glowstone_dust", - "id": 403 + "id": 420 }, { "name": "minecraft:goat_horn", - "id": 647 + "id": 664 }, { "name": "minecraft:goat_spawn_egg", - "id": 514 + "id": 531 }, { "name": "minecraft:gold_block", @@ -2849,11 +2901,11 @@ }, { "name": "minecraft:gold_ingot", - "id": 313 + "id": 330 }, { "name": "minecraft:gold_nugget", - "id": 435 + "id": 452 }, { "name": "minecraft:gold_ore", @@ -2861,43 +2913,43 @@ }, { "name": "minecraft:golden_apple", - "id": 263 + "id": 280 }, { "name": "minecraft:golden_axe", - "id": 333 + "id": 350 }, { "name": "minecraft:golden_boots", - "id": 362 + "id": 379 }, { "name": "minecraft:golden_carrot", - "id": 288 + "id": 305 }, { "name": "minecraft:golden_chestplate", - "id": 360 + "id": 377 }, { "name": "minecraft:golden_helmet", - "id": 359 + "id": 376 }, { "name": "minecraft:golden_hoe", - "id": 341 + "id": 358 }, { "name": "minecraft:golden_horse_armor", - "id": 549 + "id": 565 }, { "name": "minecraft:golden_leggings", - "id": 361 + "id": 378 }, { "name": "minecraft:golden_pickaxe", - "id": 332 + "id": 349 }, { "name": "minecraft:golden_rail", @@ -2905,11 +2957,11 @@ }, { "name": "minecraft:golden_shovel", - "id": 331 + "id": 348 }, { "name": "minecraft:golden_sword", - "id": 330 + "id": 347 }, { "name": "minecraft:granite", @@ -2943,6 +2995,10 @@ "name": "minecraft:gravel", "id": 13 }, + { + "name": "minecraft:gray_bundle", + "id": 262 + }, { "name": "minecraft:gray_candle", "id": -420 @@ -2965,7 +3021,7 @@ }, { "name": "minecraft:gray_dye", - "id": 412 + "id": 429 }, { "name": "minecraft:gray_glazed_terracotta", @@ -2991,6 +3047,10 @@ "name": "minecraft:gray_wool", "id": -553 }, + { + "name": "minecraft:green_bundle", + "id": 263 + }, { "name": "minecraft:green_candle", "id": -426 @@ -3013,7 +3073,7 @@ }, { "name": "minecraft:green_dye", - "id": 406 + "id": 423 }, { "name": "minecraft:green_glazed_terracotta", @@ -3045,19 +3105,19 @@ }, { "name": "minecraft:guardian_spawn_egg", - "id": 471 + "id": 488 }, { "name": "minecraft:gunpowder", - "id": 336 + "id": 353 }, { "name": "minecraft:guster_banner_pattern", - "id": 607 + "id": 623 }, { "name": "minecraft:guster_pottery_sherd", - "id": 686 + "id": 703 }, { "name": "minecraft:hanging_roots", @@ -3185,11 +3245,11 @@ }, { "name": "minecraft:hard_stained_glass", - "id": 763 + "id": 786 }, { "name": "minecraft:hard_stained_glass_pane", - "id": 764 + "id": 787 }, { "name": "minecraft:hard_white_stained_glass", @@ -3217,15 +3277,15 @@ }, { "name": "minecraft:heart_of_the_sea", - "id": 588 + "id": 604 }, { "name": "minecraft:heart_pottery_sherd", - "id": 687 + "id": 704 }, { "name": "minecraft:heartbreak_pottery_sherd", - "id": 688 + "id": 705 }, { "name": "minecraft:heavy_core", @@ -3237,7 +3297,7 @@ }, { "name": "minecraft:hoglin_spawn_egg", - "id": 507 + "id": 524 }, { "name": "minecraft:honey_block", @@ -3245,11 +3305,11 @@ }, { "name": "minecraft:honey_bottle", - "id": 611 + "id": 627 }, { "name": "minecraft:honeycomb", - "id": 610 + "id": 626 }, { "name": "minecraft:honeycomb_block", @@ -3257,11 +3317,11 @@ }, { "name": "minecraft:hopper", - "id": 544 + "id": 560 }, { "name": "minecraft:hopper_minecart", - "id": 543 + "id": 559 }, { "name": "minecraft:horn_coral", @@ -3281,19 +3341,19 @@ }, { "name": "minecraft:horse_spawn_egg", - "id": 468 + "id": 485 }, { "name": "minecraft:host_armor_trim_smithing_template", - "id": 716 + "id": 733 }, { "name": "minecraft:howl_pottery_sherd", - "id": 689 + "id": 706 }, { "name": "minecraft:husk_spawn_egg", - "id": 474 + "id": 491 }, { "name": "minecraft:ice", @@ -3301,7 +3361,7 @@ }, { "name": "minecraft:ice_bomb", - "id": 615 + "id": 632 }, { "name": "minecraft:infested_chiseled_stone_bricks", @@ -3341,7 +3401,7 @@ }, { "name": "minecraft:ink_sac", - "id": 422 + "id": 439 }, { "name": "minecraft:invisible_bedrock", @@ -3349,7 +3409,7 @@ }, { "name": "minecraft:iron_axe", - "id": 305 + "id": 322 }, { "name": "minecraft:iron_bars", @@ -3361,43 +3421,43 @@ }, { "name": "minecraft:iron_boots", - "id": 354 + "id": 371 }, { "name": "minecraft:iron_chestplate", - "id": 352 + "id": 369 }, { "name": "minecraft:iron_door", - "id": 380 + "id": 397 }, { "name": "minecraft:iron_golem_spawn_egg", - "id": 516 + "id": 533 }, { "name": "minecraft:iron_helmet", - "id": 351 + "id": 368 }, { "name": "minecraft:iron_hoe", - "id": 339 + "id": 356 }, { "name": "minecraft:iron_horse_armor", - "id": 548 + "id": 564 }, { "name": "minecraft:iron_ingot", - "id": 312 + "id": 329 }, { "name": "minecraft:iron_leggings", - "id": 353 + "id": 370 }, { "name": "minecraft:iron_nugget", - "id": 586 + "id": 602 }, { "name": "minecraft:iron_ore", @@ -3405,15 +3465,15 @@ }, { "name": "minecraft:iron_pickaxe", - "id": 304 + "id": 321 }, { "name": "minecraft:iron_shovel", - "id": 303 + "id": 320 }, { "name": "minecraft:iron_sword", - "id": 314 + "id": 331 }, { "name": "minecraft:iron_trapdoor", @@ -3511,10 +3571,6 @@ "name": "minecraft:item.reeds", "id": 83 }, - { - "name": "minecraft:item.skull", - "id": 144 - }, { "name": "minecraft:item.soul_campfire", "id": -290 @@ -3545,7 +3601,7 @@ }, { "name": "minecraft:jungle_boat", - "id": 386 + "id": 403 }, { "name": "minecraft:jungle_button", @@ -3553,11 +3609,11 @@ }, { "name": "minecraft:jungle_chest_boat", - "id": 660 + "id": 677 }, { "name": "minecraft:jungle_door", - "id": 572 + "id": 588 }, { "name": "minecraft:jungle_double_slab", @@ -3597,7 +3653,7 @@ }, { "name": "minecraft:jungle_sign", - "id": 595 + "id": 611 }, { "name": "minecraft:jungle_slab", @@ -3625,7 +3681,7 @@ }, { "name": "minecraft:kelp", - "id": 391 + "id": 408 }, { "name": "minecraft:lab_table", @@ -3645,7 +3701,7 @@ }, { "name": "minecraft:lapis_lazuli", - "id": 423 + "id": 440 }, { "name": "minecraft:lapis_ore", @@ -3665,43 +3721,43 @@ }, { "name": "minecraft:lava_bucket", - "id": 371 + "id": 388 }, { "name": "minecraft:lead", - "id": 564 + "id": 580 }, { "name": "minecraft:leather", - "id": 390 + "id": 407 }, { "name": "minecraft:leather_boots", - "id": 346 + "id": 363 }, { "name": "minecraft:leather_chestplate", - "id": 344 + "id": 361 }, { "name": "minecraft:leather_helmet", - "id": 343 + "id": 360 }, { "name": "minecraft:leather_horse_armor", - "id": 547 + "id": 563 }, { "name": "minecraft:leather_leggings", - "id": 345 + "id": 362 }, { "name": "minecraft:leaves", - "id": 743 + "id": 766 }, { "name": "minecraft:leaves2", - "id": 744 + "id": 767 }, { "name": "minecraft:lectern", @@ -3713,7 +3769,7 @@ }, { "name": "minecraft:light_block", - "id": 767 + "id": 790 }, { "name": "minecraft:light_block_0", @@ -3779,6 +3835,10 @@ "name": "minecraft:light_block_9", "id": -937 }, + { + "name": "minecraft:light_blue_bundle", + "id": 264 + }, { "name": "minecraft:light_blue_candle", "id": -416 @@ -3801,7 +3861,7 @@ }, { "name": "minecraft:light_blue_dye", - "id": 416 + "id": 433 }, { "name": "minecraft:light_blue_glazed_terracotta", @@ -3827,6 +3887,10 @@ "name": "minecraft:light_blue_wool", "id": -562 }, + { + "name": "minecraft:light_gray_bundle", + "id": 265 + }, { "name": "minecraft:light_gray_candle", "id": -421 @@ -3849,7 +3913,7 @@ }, { "name": "minecraft:light_gray_dye", - "id": 411 + "id": 428 }, { "name": "minecraft:light_gray_shulker_box", @@ -3887,6 +3951,10 @@ "name": "minecraft:lily_of_the_valley", "id": -839 }, + { + "name": "minecraft:lime_bundle", + "id": 266 + }, { "name": "minecraft:lime_candle", "id": -418 @@ -3909,7 +3977,7 @@ }, { "name": "minecraft:lime_dye", - "id": 414 + "id": 431 }, { "name": "minecraft:lime_glazed_terracotta", @@ -3937,7 +4005,7 @@ }, { "name": "minecraft:lingering_potion", - "id": 579 + "id": 595 }, { "name": "minecraft:lit_blast_furnace", @@ -3969,7 +4037,7 @@ }, { "name": "minecraft:llama_spawn_egg", - "id": 484 + "id": 501 }, { "name": "minecraft:lodestone", @@ -3977,15 +4045,15 @@ }, { "name": "minecraft:lodestone_compass", - "id": 622 + "id": 639 }, { "name": "minecraft:log", - "id": 728 + "id": 751 }, { "name": "minecraft:log2", - "id": 751 + "id": 774 }, { "name": "minecraft:loom", @@ -3993,7 +4061,11 @@ }, { "name": "minecraft:mace", - "id": 327 + "id": 344 + }, + { + "name": "minecraft:magenta_bundle", + "id": 267 }, { "name": "minecraft:magenta_candle", @@ -4017,7 +4089,7 @@ }, { "name": "minecraft:magenta_dye", - "id": 417 + "id": 434 }, { "name": "minecraft:magenta_glazed_terracotta", @@ -4049,15 +4121,15 @@ }, { "name": "minecraft:magma_cream", - "id": 440 + "id": 457 }, { "name": "minecraft:magma_cube_spawn_egg", - "id": 465 + "id": 482 }, { "name": "minecraft:mangrove_boat", - "id": 655 + "id": 672 }, { "name": "minecraft:mangrove_button", @@ -4065,11 +4137,11 @@ }, { "name": "minecraft:mangrove_chest_boat", - "id": 664 + "id": 681 }, { "name": "minecraft:mangrove_door", - "id": 653 + "id": 670 }, { "name": "minecraft:mangrove_double_slab", @@ -4113,7 +4185,7 @@ }, { "name": "minecraft:mangrove_sign", - "id": 654 + "id": 671 }, { "name": "minecraft:mangrove_slab", @@ -4145,7 +4217,7 @@ }, { "name": "minecraft:medicine", - "id": 619 + "id": 636 }, { "name": "minecraft:medium_amethyst_bud", @@ -4157,11 +4229,11 @@ }, { "name": "minecraft:melon_seeds", - "id": 298 + "id": 315 }, { "name": "minecraft:melon_slice", - "id": 277 + "id": 294 }, { "name": "minecraft:melon_stem", @@ -4169,15 +4241,15 @@ }, { "name": "minecraft:milk_bucket", - "id": 369 + "id": 386 }, { "name": "minecraft:minecart", - "id": 378 + "id": 395 }, { "name": "minecraft:miner_pottery_sherd", - "id": 690 + "id": 707 }, { "name": "minecraft:mob_spawner", @@ -4185,15 +4257,15 @@ }, { "name": "minecraft:mojang_banner_pattern", - "id": 601 + "id": 617 }, { "name": "minecraft:monster_egg", - "id": 752 + "id": 775 }, { "name": "minecraft:mooshroom_spawn_egg", - "id": 450 + "id": 467 }, { "name": "minecraft:moss_block", @@ -4245,7 +4317,7 @@ }, { "name": "minecraft:mourner_pottery_sherd", - "id": 691 + "id": 708 }, { "name": "minecraft:moving_block", @@ -4281,91 +4353,95 @@ }, { "name": "minecraft:mule_spawn_egg", - "id": 477 + "id": 494 + }, + { + "name": "minecraft:mushroom_stem", + "id": -1008 }, { "name": "minecraft:mushroom_stew", - "id": 265 + "id": 282 }, { "name": "minecraft:music_disc_11", - "id": 561 + "id": 577 }, { "name": "minecraft:music_disc_13", - "id": 551 + "id": 567 }, { "name": "minecraft:music_disc_5", - "id": 656 + "id": 673 }, { "name": "minecraft:music_disc_blocks", - "id": 553 + "id": 569 }, { "name": "minecraft:music_disc_cat", - "id": 552 + "id": 568 }, { "name": "minecraft:music_disc_chirp", - "id": 554 + "id": 570 }, { "name": "minecraft:music_disc_creator", - "id": 759 + "id": 782 }, { "name": "minecraft:music_disc_creator_music_box", - "id": 760 + "id": 783 }, { "name": "minecraft:music_disc_far", - "id": 555 + "id": 571 }, { "name": "minecraft:music_disc_mall", - "id": 556 + "id": 572 }, { "name": "minecraft:music_disc_mellohi", - "id": 557 + "id": 573 }, { "name": "minecraft:music_disc_otherside", - "id": 646 + "id": 663 }, { "name": "minecraft:music_disc_pigstep", - "id": 640 + "id": 657 }, { "name": "minecraft:music_disc_precipice", - "id": 761 + "id": 784 }, { "name": "minecraft:music_disc_relic", - "id": 719 + "id": 736 }, { "name": "minecraft:music_disc_stal", - "id": 558 + "id": 574 }, { "name": "minecraft:music_disc_strad", - "id": 559 + "id": 575 }, { "name": "minecraft:music_disc_wait", - "id": 562 + "id": 578 }, { "name": "minecraft:music_disc_ward", - "id": 560 + "id": 576 }, { "name": "minecraft:mutton", - "id": 567 + "id": 583 }, { "name": "minecraft:mycelium", @@ -4373,11 +4449,11 @@ }, { "name": "minecraft:name_tag", - "id": 565 + "id": 581 }, { "name": "minecraft:nautilus_shell", - "id": 587 + "id": 603 }, { "name": "minecraft:nether_brick", @@ -4409,15 +4485,15 @@ }, { "name": "minecraft:nether_sprouts", - "id": 641 + "id": 658 }, { "name": "minecraft:nether_star", - "id": 535 + "id": 551 }, { "name": "minecraft:nether_wart", - "id": 299 + "id": 316 }, { "name": "minecraft:nether_wart_block", @@ -4425,11 +4501,11 @@ }, { "name": "minecraft:netherbrick", - "id": 540 + "id": 556 }, { "name": "minecraft:netherite_axe", - "id": 626 + "id": 643 }, { "name": "minecraft:netherite_block", @@ -4437,47 +4513,47 @@ }, { "name": "minecraft:netherite_boots", - "id": 632 + "id": 649 }, { "name": "minecraft:netherite_chestplate", - "id": 630 + "id": 647 }, { "name": "minecraft:netherite_helmet", - "id": 629 + "id": 646 }, { "name": "minecraft:netherite_hoe", - "id": 627 + "id": 644 }, { "name": "minecraft:netherite_ingot", - "id": 628 + "id": 645 }, { "name": "minecraft:netherite_leggings", - "id": 631 + "id": 648 }, { "name": "minecraft:netherite_pickaxe", - "id": 625 + "id": 642 }, { "name": "minecraft:netherite_scrap", - "id": 633 + "id": 650 }, { "name": "minecraft:netherite_shovel", - "id": 624 + "id": 641 }, { "name": "minecraft:netherite_sword", - "id": 623 + "id": 640 }, { "name": "minecraft:netherite_upgrade_smithing_template", - "id": 700 + "id": 717 }, { "name": "minecraft:netherrack", @@ -4505,15 +4581,15 @@ }, { "name": "minecraft:npc_spawn_egg", - "id": 481 + "id": 498 }, { "name": "minecraft:oak_boat", - "id": 384 + "id": 401 }, { "name": "minecraft:oak_chest_boat", - "id": 658 + "id": 675 }, { "name": "minecraft:oak_double_slab", @@ -4545,7 +4621,7 @@ }, { "name": "minecraft:oak_sign", - "id": 366 + "id": 383 }, { "name": "minecraft:oak_slab", @@ -4569,7 +4645,7 @@ }, { "name": "minecraft:ocelot_spawn_egg", - "id": 461 + "id": 478 }, { "name": "minecraft:ochre_froglight", @@ -4577,11 +4653,19 @@ }, { "name": "minecraft:ominous_bottle", - "id": 612 + "id": 628 }, { "name": "minecraft:ominous_trial_key", - "id": 258 + "id": 275 + }, + { + "name": "minecraft:open_eyeblossom", + "id": -1018 + }, + { + "name": "minecraft:orange_bundle", + "id": 268 }, { "name": "minecraft:orange_candle", @@ -4605,7 +4689,7 @@ }, { "name": "minecraft:orange_dye", - "id": 418 + "id": 435 }, { "name": "minecraft:orange_glazed_terracotta", @@ -4689,19 +4773,111 @@ }, { "name": "minecraft:painting", - "id": 365 + "id": 382 + }, + { + "name": "minecraft:pale_hanging_moss", + "id": -1011 + }, + { + "name": "minecraft:pale_moss_block", + "id": -1009 + }, + { + "name": "minecraft:pale_moss_carpet", + "id": -1010 + }, + { + "name": "minecraft:pale_oak_boat", + "id": 744 + }, + { + "name": "minecraft:pale_oak_button", + "id": -989 + }, + { + "name": "minecraft:pale_oak_chest_boat", + "id": 745 + }, + { + "name": "minecraft:pale_oak_door", + "id": -990 + }, + { + "name": "minecraft:pale_oak_double_slab", + "id": -999 + }, + { + "name": "minecraft:pale_oak_fence", + "id": -991 + }, + { + "name": "minecraft:pale_oak_fence_gate", + "id": -992 + }, + { + "name": "minecraft:pale_oak_hanging_sign", + "id": -993 + }, + { + "name": "minecraft:pale_oak_leaves", + "id": -1007 + }, + { + "name": "minecraft:pale_oak_log", + "id": -995 + }, + { + "name": "minecraft:pale_oak_planks", + "id": -996 + }, + { + "name": "minecraft:pale_oak_pressure_plate", + "id": -997 + }, + { + "name": "minecraft:pale_oak_sapling", + "id": -1006 + }, + { + "name": "minecraft:pale_oak_sign", + "id": 746 + }, + { + "name": "minecraft:pale_oak_slab", + "id": -998 + }, + { + "name": "minecraft:pale_oak_stairs", + "id": -1000 + }, + { + "name": "minecraft:pale_oak_standing_sign", + "id": -1001 + }, + { + "name": "minecraft:pale_oak_trapdoor", + "id": -1002 + }, + { + "name": "minecraft:pale_oak_wall_sign", + "id": -1003 + }, + { + "name": "minecraft:pale_oak_wood", + "id": -1005 }, { "name": "minecraft:panda_spawn_egg", - "id": 500 + "id": 517 }, { "name": "minecraft:paper", - "id": 395 + "id": 412 }, { "name": "minecraft:parrot_spawn_egg", - "id": 489 + "id": 506 }, { "name": "minecraft:pearlescent_froglight", @@ -4721,31 +4897,39 @@ }, { "name": "minecraft:phantom_membrane", - "id": 591 + "id": 607 }, { "name": "minecraft:phantom_spawn_egg", - "id": 497 + "id": 514 }, { "name": "minecraft:pig_spawn_egg", - "id": 447 + "id": 464 }, { "name": "minecraft:piglin_banner_pattern", - "id": 604 + "id": 620 }, { "name": "minecraft:piglin_brute_spawn_egg", - "id": 510 + "id": 527 + }, + { + "name": "minecraft:piglin_head", + "id": -970 }, { "name": "minecraft:piglin_spawn_egg", - "id": 508 + "id": 525 }, { "name": "minecraft:pillager_spawn_egg", - "id": 502 + "id": 519 + }, + { + "name": "minecraft:pink_bundle", + "id": 269 }, { "name": "minecraft:pink_candle", @@ -4769,7 +4953,7 @@ }, { "name": "minecraft:pink_dye", - "id": 413 + "id": 430 }, { "name": "minecraft:pink_glazed_terracotta", @@ -4821,15 +5005,19 @@ }, { "name": "minecraft:pitcher_pod", - "id": 302 + "id": 319 }, { "name": "minecraft:planks", - "id": 748 + "id": 771 + }, + { + "name": "minecraft:player_head", + "id": -967 }, { "name": "minecraft:plenty_pottery_sherd", - "id": 692 + "id": 709 }, { "name": "minecraft:podzol", @@ -4841,11 +5029,11 @@ }, { "name": "minecraft:poisonous_potato", - "id": 287 + "id": 304 }, { "name": "minecraft:polar_bear_spawn_egg", - "id": 483 + "id": 500 }, { "name": "minecraft:polished_andesite", @@ -4989,7 +5177,7 @@ }, { "name": "minecraft:popped_chorus_fruit", - "id": 576 + "id": 592 }, { "name": "minecraft:poppy", @@ -4997,7 +5185,7 @@ }, { "name": "minecraft:porkchop", - "id": 267 + "id": 284 }, { "name": "minecraft:portal", @@ -5005,7 +5193,7 @@ }, { "name": "minecraft:potato", - "id": 285 + "id": 302 }, { "name": "minecraft:potatoes", @@ -5013,7 +5201,7 @@ }, { "name": "minecraft:potion", - "id": 436 + "id": 453 }, { "name": "minecraft:powder_snow", @@ -5021,7 +5209,7 @@ }, { "name": "minecraft:powder_snow_bucket", - "id": 376 + "id": 393 }, { "name": "minecraft:powered_comparator", @@ -5053,7 +5241,7 @@ }, { "name": "minecraft:prismarine_crystals", - "id": 566 + "id": 582 }, { "name": "minecraft:prismarine_double_slab", @@ -5061,7 +5249,7 @@ }, { "name": "minecraft:prismarine_shard", - "id": 582 + "id": 598 }, { "name": "minecraft:prismarine_slab", @@ -5077,19 +5265,19 @@ }, { "name": "minecraft:prize_pottery_sherd", - "id": 693 + "id": 710 }, { "name": "minecraft:pufferfish", - "id": 272 + "id": 289 }, { "name": "minecraft:pufferfish_bucket", - "id": 375 + "id": 392 }, { "name": "minecraft:pufferfish_spawn_egg", - "id": 492 + "id": 509 }, { "name": "minecraft:pumpkin", @@ -5097,16 +5285,20 @@ }, { "name": "minecraft:pumpkin_pie", - "id": 289 + "id": 306 }, { "name": "minecraft:pumpkin_seeds", - "id": 297 + "id": 314 }, { "name": "minecraft:pumpkin_stem", "id": 104 }, + { + "name": "minecraft:purple_bundle", + "id": 270 + }, { "name": "minecraft:purple_candle", "id": -423 @@ -5129,7 +5321,7 @@ }, { "name": "minecraft:purple_dye", - "id": 409 + "id": 426 }, { "name": "minecraft:purple_glazed_terracotta", @@ -5177,7 +5369,7 @@ }, { "name": "minecraft:quartz", - "id": 541 + "id": 557 }, { "name": "minecraft:quartz_block", @@ -5209,23 +5401,23 @@ }, { "name": "minecraft:rabbit", - "id": 293 + "id": 310 }, { "name": "minecraft:rabbit_foot", - "id": 545 + "id": 561 }, { "name": "minecraft:rabbit_hide", - "id": 546 + "id": 562 }, { "name": "minecraft:rabbit_spawn_egg", - "id": 469 + "id": 486 }, { "name": "minecraft:rabbit_stew", - "id": 295 + "id": 312 }, { "name": "minecraft:rail", @@ -5233,19 +5425,19 @@ }, { "name": "minecraft:raiser_armor_trim_smithing_template", - "id": 714 + "id": 731 }, { "name": "minecraft:rapid_fertilizer", - "id": 617 + "id": 634 }, { "name": "minecraft:ravager_spawn_egg", - "id": 504 + "id": 521 }, { "name": "minecraft:raw_copper", - "id": 524 + "id": 541 }, { "name": "minecraft:raw_copper_block", @@ -5253,7 +5445,7 @@ }, { "name": "minecraft:raw_gold", - "id": 523 + "id": 540 }, { "name": "minecraft:raw_gold_block", @@ -5261,7 +5453,7 @@ }, { "name": "minecraft:raw_iron", - "id": 522 + "id": 539 }, { "name": "minecraft:raw_iron_block", @@ -5269,7 +5461,11 @@ }, { "name": "minecraft:recovery_compass", - "id": 666 + "id": 683 + }, + { + "name": "minecraft:red_bundle", + "id": 271 }, { "name": "minecraft:red_candle", @@ -5293,11 +5489,11 @@ }, { "name": "minecraft:red_dye", - "id": 405 + "id": 422 }, { "name": "minecraft:red_flower", - "id": 746 + "id": 769 }, { "name": "minecraft:red_glazed_terracotta", @@ -5381,7 +5577,7 @@ }, { "name": "minecraft:redstone", - "id": 381 + "id": 398 }, { "name": "minecraft:redstone_block", @@ -5409,7 +5605,7 @@ }, { "name": "minecraft:repeater", - "id": 428 + "id": 445 }, { "name": "minecraft:repeating_command_block", @@ -5419,13 +5615,45 @@ "name": "minecraft:reserved6", "id": 255 }, + { + "name": "minecraft:resin_block", + "id": -1021 + }, + { + "name": "minecraft:resin_brick", + "id": 748 + }, + { + "name": "minecraft:resin_brick_double_slab", + "id": -1015 + }, + { + "name": "minecraft:resin_brick_slab", + "id": -1014 + }, + { + "name": "minecraft:resin_brick_stairs", + "id": -1016 + }, + { + "name": "minecraft:resin_brick_wall", + "id": -1017 + }, + { + "name": "minecraft:resin_bricks", + "id": -1013 + }, + { + "name": "minecraft:resin_clump", + "id": -1022 + }, { "name": "minecraft:respawn_anchor", "id": -272 }, { "name": "minecraft:rib_armor_trim_smithing_template", - "id": 710 + "id": 727 }, { "name": "minecraft:rose_bush", @@ -5433,23 +5661,23 @@ }, { "name": "minecraft:rotten_flesh", - "id": 282 + "id": 299 }, { "name": "minecraft:saddle", - "id": 379 + "id": 396 }, { "name": "minecraft:salmon", - "id": 270 + "id": 287 }, { "name": "minecraft:salmon_bucket", - "id": 373 + "id": 390 }, { "name": "minecraft:salmon_spawn_egg", - "id": 493 + "id": 510 }, { "name": "minecraft:sand", @@ -5477,7 +5705,7 @@ }, { "name": "minecraft:sapling", - "id": 742 + "id": 765 }, { "name": "minecraft:scaffolding", @@ -5485,7 +5713,7 @@ }, { "name": "minecraft:scrape_pottery_sherd", - "id": 694 + "id": 711 }, { "name": "minecraft:sculk", @@ -5521,31 +5749,31 @@ }, { "name": "minecraft:sentry_armor_trim_smithing_template", - "id": 701 + "id": 718 }, { "name": "minecraft:shaper_armor_trim_smithing_template", - "id": 715 + "id": 732 }, { "name": "minecraft:sheaf_pottery_sherd", - "id": 695 + "id": 712 }, { "name": "minecraft:shears", - "id": 430 + "id": 447 }, { "name": "minecraft:sheep_spawn_egg", - "id": 448 + "id": 465 }, { "name": "minecraft:shelter_pottery_sherd", - "id": 696 + "id": 713 }, { "name": "minecraft:shield", - "id": 363 + "id": 380 }, { "name": "minecraft:short_grass", @@ -5557,19 +5785,19 @@ }, { "name": "minecraft:shulker_box", - "id": 757 + "id": 780 }, { "name": "minecraft:shulker_shell", - "id": 583 + "id": 599 }, { "name": "minecraft:shulker_spawn_egg", - "id": 480 + "id": 497 }, { "name": "minecraft:silence_armor_trim_smithing_template", - "id": 712 + "id": 729 }, { "name": "minecraft:silver_glazed_terracotta", @@ -5577,27 +5805,31 @@ }, { "name": "minecraft:silverfish_spawn_egg", - "id": 453 + "id": 470 }, { "name": "minecraft:skeleton_horse_spawn_egg", - "id": 478 + "id": 495 + }, + { + "name": "minecraft:skeleton_skull", + "id": 144 }, { "name": "minecraft:skeleton_spawn_egg", - "id": 454 + "id": 471 }, { "name": "minecraft:skull", - "id": 533 + "id": 737 }, { "name": "minecraft:skull_banner_pattern", - "id": 600 + "id": 616 }, { "name": "minecraft:skull_pottery_sherd", - "id": 697 + "id": 714 }, { "name": "minecraft:slime", @@ -5605,11 +5837,11 @@ }, { "name": "minecraft:slime_ball", - "id": 397 + "id": 414 }, { "name": "minecraft:slime_spawn_egg", - "id": 455 + "id": 472 }, { "name": "minecraft:small_amethyst_bud", @@ -5697,15 +5929,15 @@ }, { "name": "minecraft:sniffer_spawn_egg", - "id": 511 + "id": 528 }, { "name": "minecraft:snort_pottery_sherd", - "id": 698 + "id": 715 }, { "name": "minecraft:snout_armor_trim_smithing_template", - "id": 709 + "id": 726 }, { "name": "minecraft:snow", @@ -5713,7 +5945,7 @@ }, { "name": "minecraft:snow_golem_spawn_egg", - "id": 517 + "id": 534 }, { "name": "minecraft:snow_layer", @@ -5721,11 +5953,11 @@ }, { "name": "minecraft:snowball", - "id": 382 + "id": 399 }, { "name": "minecraft:soul_campfire", - "id": 642 + "id": 659 }, { "name": "minecraft:soul_fire", @@ -5749,27 +5981,27 @@ }, { "name": "minecraft:sparkler", - "id": 620 + "id": 637 }, { "name": "minecraft:spawn_egg", - "id": 771 + "id": 794 }, { "name": "minecraft:spider_eye", - "id": 283 + "id": 300 }, { "name": "minecraft:spider_spawn_egg", - "id": 456 + "id": 473 }, { "name": "minecraft:spire_armor_trim_smithing_template", - "id": 711 + "id": 728 }, { "name": "minecraft:splash_potion", - "id": 578 + "id": 594 }, { "name": "minecraft:sponge", @@ -5781,7 +6013,7 @@ }, { "name": "minecraft:spruce_boat", - "id": 387 + "id": 404 }, { "name": "minecraft:spruce_button", @@ -5789,11 +6021,11 @@ }, { "name": "minecraft:spruce_chest_boat", - "id": 661 + "id": 678 }, { "name": "minecraft:spruce_door", - "id": 570 + "id": 586 }, { "name": "minecraft:spruce_double_slab", @@ -5833,7 +6065,7 @@ }, { "name": "minecraft:spruce_sign", - "id": 593 + "id": 609 }, { "name": "minecraft:spruce_slab", @@ -5861,23 +6093,23 @@ }, { "name": "minecraft:spyglass", - "id": 645 + "id": 662 }, { "name": "minecraft:squid_spawn_egg", - "id": 460 + "id": 477 }, { "name": "minecraft:stained_glass", - "id": 755 + "id": 778 }, { "name": "minecraft:stained_glass_pane", - "id": 756 + "id": 779 }, { "name": "minecraft:stained_hardened_clay", - "id": 720 + "id": 738 }, { "name": "minecraft:standing_banner", @@ -5889,7 +6121,7 @@ }, { "name": "minecraft:stick", - "id": 328 + "id": 345 }, { "name": "minecraft:sticky_piston", @@ -5905,23 +6137,23 @@ }, { "name": "minecraft:stone_axe", - "id": 322 + "id": 339 }, { "name": "minecraft:stone_block_slab", - "id": 732 + "id": 755 }, { "name": "minecraft:stone_block_slab2", - "id": 733 + "id": 756 }, { "name": "minecraft:stone_block_slab3", - "id": 734 + "id": 757 }, { "name": "minecraft:stone_block_slab4", - "id": 735 + "id": 758 }, { "name": "minecraft:stone_brick_double_slab", @@ -5949,11 +6181,11 @@ }, { "name": "minecraft:stone_hoe", - "id": 338 + "id": 355 }, { "name": "minecraft:stone_pickaxe", - "id": 321 + "id": 338 }, { "name": "minecraft:stone_pressure_plate", @@ -5961,7 +6193,7 @@ }, { "name": "minecraft:stone_shovel", - "id": 320 + "id": 337 }, { "name": "minecraft:stone_stairs", @@ -5969,11 +6201,11 @@ }, { "name": "minecraft:stone_sword", - "id": 319 + "id": 336 }, { "name": "minecraft:stonebrick", - "id": 730 + "id": 753 }, { "name": "minecraft:stonecutter", @@ -5985,15 +6217,15 @@ }, { "name": "minecraft:stray_spawn_egg", - "id": 472 + "id": 489 }, { "name": "minecraft:strider_spawn_egg", - "id": 506 + "id": 523 }, { "name": "minecraft:string", - "id": 334 + "id": 351 }, { "name": "minecraft:stripped_acacia_log", @@ -6063,6 +6295,14 @@ "name": "minecraft:stripped_oak_wood", "id": -819 }, + { + "name": "minecraft:stripped_pale_oak_log", + "id": -994 + }, + { + "name": "minecraft:stripped_pale_oak_wood", + "id": -1004 + }, { "name": "minecraft:stripped_spruce_log", "id": -5 @@ -6089,11 +6329,11 @@ }, { "name": "minecraft:sugar", - "id": 425 + "id": 442 }, { "name": "minecraft:sugar_cane", - "id": 394 + "id": 411 }, { "name": "minecraft:sunflower", @@ -6109,11 +6349,11 @@ }, { "name": "minecraft:suspicious_stew", - "id": 609 + "id": 625 }, { "name": "minecraft:sweet_berries", - "id": 292 + "id": 309 }, { "name": "minecraft:sweet_berry_bush", @@ -6121,11 +6361,11 @@ }, { "name": "minecraft:tadpole_bucket", - "id": 650 + "id": 667 }, { "name": "minecraft:tadpole_spawn_egg", - "id": 649 + "id": 666 }, { "name": "minecraft:tall_grass", @@ -6133,7 +6373,7 @@ }, { "name": "minecraft:tallgrass", - "id": 750 + "id": 773 }, { "name": "minecraft:target", @@ -6141,7 +6381,7 @@ }, { "name": "minecraft:tide_armor_trim_smithing_template", - "id": 708 + "id": 725 }, { "name": "minecraft:tinted_glass", @@ -6153,7 +6393,7 @@ }, { "name": "minecraft:tnt_minecart", - "id": 542 + "id": 558 }, { "name": "minecraft:torch", @@ -6169,15 +6409,15 @@ }, { "name": "minecraft:torchflower_seeds", - "id": 301 + "id": 318 }, { "name": "minecraft:totem_of_undying", - "id": 585 + "id": 601 }, { "name": "minecraft:trader_llama_spawn_egg", - "id": 668 + "id": 685 }, { "name": "minecraft:trapdoor", @@ -6189,7 +6429,7 @@ }, { "name": "minecraft:trial_key", - "id": 259 + "id": 276 }, { "name": "minecraft:trial_spawner", @@ -6197,7 +6437,7 @@ }, { "name": "minecraft:trident", - "id": 563 + "id": 579 }, { "name": "minecraft:trip_wire", @@ -6209,15 +6449,15 @@ }, { "name": "minecraft:tropical_fish", - "id": 271 + "id": 288 }, { "name": "minecraft:tropical_fish_bucket", - "id": 374 + "id": 391 }, { "name": "minecraft:tropical_fish_spawn_egg", - "id": 490 + "id": 507 }, { "name": "minecraft:tube_coral", @@ -6281,15 +6521,15 @@ }, { "name": "minecraft:turtle_helmet", - "id": 590 + "id": 606 }, { "name": "minecraft:turtle_scute", - "id": 589 + "id": 605 }, { "name": "minecraft:turtle_spawn_egg", - "id": 496 + "id": 513 }, { "name": "minecraft:twisting_vines", @@ -6333,19 +6573,19 @@ }, { "name": "minecraft:vex_armor_trim_smithing_template", - "id": 707 + "id": 724 }, { "name": "minecraft:vex_spawn_egg", - "id": 487 + "id": 504 }, { "name": "minecraft:villager_spawn_egg", - "id": 459 + "id": 476 }, { "name": "minecraft:vindicator_spawn_egg", - "id": 485 + "id": 502 }, { "name": "minecraft:vine", @@ -6361,15 +6601,15 @@ }, { "name": "minecraft:wandering_trader_spawn_egg", - "id": 503 + "id": 520 }, { "name": "minecraft:ward_armor_trim_smithing_template", - "id": 705 + "id": 722 }, { "name": "minecraft:warden_spawn_egg", - "id": 652 + "id": 669 }, { "name": "minecraft:warped_button", @@ -6377,7 +6617,7 @@ }, { "name": "minecraft:warped_door", - "id": 637 + "id": 654 }, { "name": "minecraft:warped_double_slab", @@ -6397,7 +6637,7 @@ }, { "name": "minecraft:warped_fungus_on_a_stick", - "id": 638 + "id": 655 }, { "name": "minecraft:warped_hanging_sign", @@ -6425,7 +6665,7 @@ }, { "name": "minecraft:warped_sign", - "id": 635 + "id": 652 }, { "name": "minecraft:warped_slab", @@ -6461,7 +6701,7 @@ }, { "name": "minecraft:water_bucket", - "id": 370 + "id": 387 }, { "name": "minecraft:waterlily", @@ -6629,7 +6869,7 @@ }, { "name": "minecraft:wayfinder_armor_trim_smithing_template", - "id": 713 + "id": 730 }, { "name": "minecraft:weathered_chiseled_copper", @@ -6685,11 +6925,15 @@ }, { "name": "minecraft:wheat", - "id": 342 + "id": 359 }, { "name": "minecraft:wheat_seeds", - "id": 296 + "id": 313 + }, + { + "name": "minecraft:white_bundle", + "id": 272 }, { "name": "minecraft:white_candle", @@ -6713,7 +6957,7 @@ }, { "name": "minecraft:white_dye", - "id": 419 + "id": 436 }, { "name": "minecraft:white_glazed_terracotta", @@ -6745,43 +6989,47 @@ }, { "name": "minecraft:wild_armor_trim_smithing_template", - "id": 704 + "id": 721 }, { "name": "minecraft:wind_charge", - "id": 260 + "id": 277 }, { "name": "minecraft:witch_spawn_egg", - "id": 462 + "id": 479 }, { "name": "minecraft:wither_rose", "id": -216 }, + { + "name": "minecraft:wither_skeleton_skull", + "id": -965 + }, { "name": "minecraft:wither_skeleton_spawn_egg", - "id": 475 + "id": 492 }, { "name": "minecraft:wither_spawn_egg", - "id": 519 + "id": 536 }, { "name": "minecraft:wolf_armor", - "id": 723 + "id": 741 }, { "name": "minecraft:wolf_spawn_egg", - "id": 449 + "id": 466 }, { "name": "minecraft:wood", - "id": 758 + "id": 781 }, { "name": "minecraft:wooden_axe", - "id": 318 + "id": 335 }, { "name": "minecraft:wooden_button", @@ -6789,15 +7037,15 @@ }, { "name": "minecraft:wooden_door", - "id": 367 + "id": 384 }, { "name": "minecraft:wooden_hoe", - "id": 337 + "id": 354 }, { "name": "minecraft:wooden_pickaxe", - "id": 317 + "id": 334 }, { "name": "minecraft:wooden_pressure_plate", @@ -6805,27 +7053,31 @@ }, { "name": "minecraft:wooden_shovel", - "id": 316 + "id": 333 }, { "name": "minecraft:wooden_slab", - "id": 745 + "id": 768 }, { "name": "minecraft:wooden_sword", - "id": 315 + "id": 332 }, { "name": "minecraft:wool", - "id": 726 + "id": 749 }, { "name": "minecraft:writable_book", - "id": 527 + "id": 544 }, { "name": "minecraft:written_book", - "id": 528 + "id": 545 + }, + { + "name": "minecraft:yellow_bundle", + "id": 273 }, { "name": "minecraft:yellow_candle", @@ -6849,7 +7101,7 @@ }, { "name": "minecraft:yellow_dye", - "id": 415 + "id": 432 }, { "name": "minecraft:yellow_glazed_terracotta", @@ -6877,22 +7129,26 @@ }, { "name": "minecraft:zoglin_spawn_egg", - "id": 509 + "id": 526 + }, + { + "name": "minecraft:zombie_head", + "id": -966 }, { "name": "minecraft:zombie_horse_spawn_egg", - "id": 479 + "id": 496 }, { "name": "minecraft:zombie_pigman_spawn_egg", - "id": 458 + "id": 475 }, { "name": "minecraft:zombie_spawn_egg", - "id": 457 + "id": 474 }, { "name": "minecraft:zombie_villager_spawn_egg", - "id": 488 + "id": 505 } ] \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 09943725b..0a099d23d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,5 +11,5 @@ loom.ignoreDependencyLoomVersionValidation=true group=org.geysermc id=geyser -version=2.5.0-SNAPSHOT +version=2.5.1-SNAPSHOT description=Allows for players from Minecraft: Bedrock Edition to join Minecraft: Java Edition servers. diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 01fffb29f..994c9a811 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,9 +10,9 @@ netty-io-uring = "0.0.25.Final-SNAPSHOT" guava = "29.0-jre" gson = "2.3.1" # Provided by Spigot 1.8.8 websocket = "1.5.1" -protocol-connection = "3.0.0.Beta5-20241022.154658-14" -protocol-common = "3.0.0.Beta5-20241022.154658-14" -protocol-codec = "3.0.0.Beta5-20241022.154658-14" +protocol-connection = "3.0.0.Beta5-20241121.192504-18" +protocol-common = "3.0.0.Beta5-20241121.192504-18" +protocol-codec = "3.0.0.Beta5-20241121.192504-18" raknet = "1.0.0.CR3-20240416.144209-1" minecraftauth = "4.1.1" mcprotocollib = "1.21.2-20241107.110329-3" From 84faeba4b28f877707d56b662b8717ea37e3ffd6 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Tue, 3 Dec 2024 23:17:00 +0800 Subject: [PATCH 090/165] More item changes, remove/deprecate more tooltier usages, change stored map colors --- .../item/GeyserNonVanillaCustomItemData.java | 2 + .../java/org/geysermc/geyser/item/Items.java | 78 +-- .../geyser/item/type/WolfArmorItem.java | 2 +- .../org/geysermc/geyser/level/MapColor.java | 509 +++++++++--------- .../populator/ItemRegistryPopulator.java | 8 +- .../registry/type/GeyserMappingItem.java | 1 - 6 files changed, 295 insertions(+), 305 deletions(-) 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 9c9269df3..063a86a03 100644 --- a/core/src/main/java/org/geysermc/geyser/item/GeyserNonVanillaCustomItemData.java +++ b/core/src/main/java/org/geysermc/geyser/item/GeyserNonVanillaCustomItemData.java @@ -112,6 +112,7 @@ public final class GeyserNonVanillaCustomItemData extends GeyserCustomItemData i return toolType; } + @SuppressWarnings("removal") @Override public String toolTier() { return toolTier; @@ -132,6 +133,7 @@ public final class GeyserNonVanillaCustomItemData extends GeyserCustomItemData i return translationString; } + @SuppressWarnings("removal") @Override public Set<String> repairMaterials() { return repairMaterials; 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 5cdb6c4ce..98450f476 100644 --- a/core/src/main/java/org/geysermc/geyser/item/Items.java +++ b/core/src/main/java/org/geysermc/geyser/item/Items.java @@ -43,7 +43,9 @@ import org.geysermc.geyser.item.type.FireworkStarItem; import org.geysermc.geyser.item.type.FishingRodItem; import org.geysermc.geyser.item.type.GoatHornItem; import org.geysermc.geyser.item.type.Item; +import org.geysermc.geyser.item.type.LightItem; import org.geysermc.geyser.item.type.MapItem; +import org.geysermc.geyser.item.type.OminousBottleItem; import org.geysermc.geyser.item.type.PlayerHeadItem; import org.geysermc.geyser.item.type.PotionItem; import org.geysermc.geyser.item.type.ShieldItem; @@ -295,8 +297,8 @@ public final class Items { public static final Item RED_WOOL = register(new BlockItem(builder(), Blocks.RED_WOOL)); public static final Item BLACK_WOOL = register(new BlockItem(builder(), Blocks.BLACK_WOOL)); public static final Item DANDELION = register(new BlockItem(builder(), Blocks.DANDELION)); -// TODO public static final Item OPEN_EYEBLOSSOM = register(new BlockItem(builder(), Blocks.OPEN_EYEBLOSSOM)); -// TODO public static final Item CLOSED_EYEBLOSSOM = register(new BlockItem(builder(), Blocks.CLOSED_EYEBLOSSOM)); + public static final Item OPEN_EYEBLOSSOM = register(new BlockItem(builder(), Blocks.OPEN_EYEBLOSSOM)); + public static final Item CLOSED_EYEBLOSSOM = register(new BlockItem(builder(), Blocks.CLOSED_EYEBLOSSOM)); public static final Item POPPY = register(new BlockItem(builder(), Blocks.POPPY)); public static final Item BLUE_ORCHID = register(new BlockItem(builder(), Blocks.BLUE_ORCHID)); public static final Item ALLIUM = register(new BlockItem(builder(), Blocks.ALLIUM)); @@ -445,13 +447,13 @@ public final class Items { public static final Item MELON = register(new BlockItem(builder(), Blocks.MELON)); public static final Item VINE = register(new BlockItem(builder(), Blocks.VINE)); public static final Item GLOW_LICHEN = register(new BlockItem(builder(), Blocks.GLOW_LICHEN)); - //TODO public static final Item RESIN_CLUMP = register(new BlockItem(builder(), Blocks.RESIN_CLUMP)); - //TODO public static final Item RESIN_BLOCK = register(new BlockItem(builder(), Blocks.RESIN_BLOCK)); - //TODO public static final Item RESIN_BRICKS = register(new BlockItem(builder(), Blocks.RESIN_BRICKS)); - //TODO public static final Item RESIN_BRICK_STAIRS = register(new BlockItem(builder(), Blocks.RESIN_BRICK_STAIRS)); - //TODO public static final Item RESIN_BRICK_SLAB = register(new BlockItem(builder(), Blocks.RESIN_BRICK_SLAB)); - //TODO public static final Item RESIN_BRICK_WALL = register(new BlockItem(builder(), Blocks.RESIN_BRICK_WALL)); - //TODO public static final Item CHISELED_RESIN_BRICKS = register(new BlockItem(builder(), Blocks.CHISELED_RESIN_BRICKS)); + public static final Item RESIN_CLUMP = register(new BlockItem(builder(), Blocks.RESIN_CLUMP)); + public static final Item RESIN_BLOCK = register(new BlockItem(builder(), Blocks.RESIN_BLOCK)); + public static final Item RESIN_BRICKS = register(new BlockItem(builder(), Blocks.RESIN_BRICKS)); + public static final Item RESIN_BRICK_STAIRS = register(new BlockItem(builder(), Blocks.RESIN_BRICK_STAIRS)); + public static final Item RESIN_BRICK_SLAB = register(new BlockItem(builder(), Blocks.RESIN_BRICK_SLAB)); + public static final Item RESIN_BRICK_WALL = register(new BlockItem(builder(), Blocks.RESIN_BRICK_WALL)); + public static final Item CHISELED_RESIN_BRICKS = register(new BlockItem(builder(), Blocks.CHISELED_RESIN_BRICKS)); public static final Item BRICK_STAIRS = register(new BlockItem(builder(), Blocks.BRICK_STAIRS)); public static final Item STONE_BRICK_STAIRS = register(new BlockItem(builder(), Blocks.STONE_BRICK_STAIRS)); public static final Item MUD_BRICK_STAIRS = register(new BlockItem(builder(), Blocks.MUD_BRICK_STAIRS)); @@ -536,7 +538,7 @@ public final class Items { public static final Item RED_TERRACOTTA = register(new BlockItem(builder(), Blocks.RED_TERRACOTTA)); public static final Item BLACK_TERRACOTTA = register(new BlockItem(builder(), Blocks.BLACK_TERRACOTTA)); public static final Item BARRIER = register(new BlockItem(builder(), Blocks.BARRIER)); - public static final Item LIGHT = register(new BlockItem(builder(), Blocks.LIGHT)); + public static final Item LIGHT = register(new LightItem(builder(), Blocks.LIGHT)); public static final Item HAY_BLOCK = register(new BlockItem(builder(), Blocks.HAY_BLOCK)); public static final Item WHITE_CARPET = register(new BlockItem(builder(), Blocks.WHITE_CARPET)); public static final Item ORANGE_CARPET = register(new BlockItem(builder(), Blocks.ORANGE_CARPET)); @@ -894,10 +896,10 @@ public final class Items { public static final Item BAMBOO_CHEST_RAFT = register(new BoatItem("bamboo_chest_raft", builder())); public static final Item STRUCTURE_BLOCK = register(new BlockItem(builder(), Blocks.STRUCTURE_BLOCK)); public static final Item JIGSAW = register(new BlockItem(builder(), Blocks.JIGSAW)); - public static final Item TURTLE_HELMET = register(new ArmorItem("turtle_helmet", ArmorMaterial.TURTLE, builder())); + public static final Item TURTLE_HELMET = register(new ArmorItem("turtle_helmet", builder())); public static final Item TURTLE_SCUTE = register(new Item("turtle_scute", builder())); public static final Item ARMADILLO_SCUTE = register(new Item("armadillo_scute", builder())); - public static final Item WOLF_ARMOR = register(new WolfArmorItem("wolf_armor", ArmorMaterial.ARMADILLO, builder())); + public static final Item WOLF_ARMOR = register(new WolfArmorItem("wolf_armor", builder())); public static final Item FLINT_AND_STEEL = register(new Item("flint_and_steel", builder())); public static final Item BOWL = register(new Item("bowl", builder())); public static final Item APPLE = register(new Item("apple", builder())); @@ -956,30 +958,30 @@ public final class Items { public static final Item WHEAT_SEEDS = register(new BlockItem("wheat_seeds", builder(), Blocks.WHEAT)); public static final Item WHEAT = register(new Item("wheat", builder())); public static final Item BREAD = register(new Item("bread", builder())); - public static final Item LEATHER_HELMET = register(new DyeableArmorItem("leather_helmet", ArmorMaterial.LEATHER, builder())); - public static final Item LEATHER_CHESTPLATE = register(new DyeableArmorItem("leather_chestplate", ArmorMaterial.LEATHER, builder())); - public static final Item LEATHER_LEGGINGS = register(new DyeableArmorItem("leather_leggings", ArmorMaterial.LEATHER, builder())); - public static final Item LEATHER_BOOTS = register(new DyeableArmorItem("leather_boots", ArmorMaterial.LEATHER, builder())); - public static final Item CHAINMAIL_HELMET = register(new ArmorItem("chainmail_helmet", ArmorMaterial.CHAINMAIL, builder())); - public static final Item CHAINMAIL_CHESTPLATE = register(new ArmorItem("chainmail_chestplate", ArmorMaterial.CHAINMAIL, builder())); - public static final Item CHAINMAIL_LEGGINGS = register(new ArmorItem("chainmail_leggings", ArmorMaterial.CHAINMAIL, builder())); - public static final Item CHAINMAIL_BOOTS = register(new ArmorItem("chainmail_boots", ArmorMaterial.CHAINMAIL, builder())); - public static final Item IRON_HELMET = register(new ArmorItem("iron_helmet", ArmorMaterial.IRON, builder())); - public static final Item IRON_CHESTPLATE = register(new ArmorItem("iron_chestplate", ArmorMaterial.IRON, builder())); - public static final Item IRON_LEGGINGS = register(new ArmorItem("iron_leggings", ArmorMaterial.IRON, builder())); - public static final Item IRON_BOOTS = register(new ArmorItem("iron_boots", ArmorMaterial.IRON, builder())); - public static final Item DIAMOND_HELMET = register(new ArmorItem("diamond_helmet", ArmorMaterial.DIAMOND, builder())); - public static final Item DIAMOND_CHESTPLATE = register(new ArmorItem("diamond_chestplate", ArmorMaterial.DIAMOND, builder())); - public static final Item DIAMOND_LEGGINGS = register(new ArmorItem("diamond_leggings", ArmorMaterial.DIAMOND, builder())); - public static final Item DIAMOND_BOOTS = register(new ArmorItem("diamond_boots", ArmorMaterial.DIAMOND, builder())); - public static final Item GOLDEN_HELMET = register(new ArmorItem("golden_helmet", ArmorMaterial.GOLD, builder())); - public static final Item GOLDEN_CHESTPLATE = register(new ArmorItem("golden_chestplate", ArmorMaterial.GOLD, builder())); - public static final Item GOLDEN_LEGGINGS = register(new ArmorItem("golden_leggings", ArmorMaterial.GOLD, builder())); - public static final Item GOLDEN_BOOTS = register(new ArmorItem("golden_boots", ArmorMaterial.GOLD, builder())); - public static final Item NETHERITE_HELMET = register(new ArmorItem("netherite_helmet", ArmorMaterial.NETHERITE, builder())); - public static final Item NETHERITE_CHESTPLATE = register(new ArmorItem("netherite_chestplate", ArmorMaterial.NETHERITE, builder())); - public static final Item NETHERITE_LEGGINGS = register(new ArmorItem("netherite_leggings", ArmorMaterial.NETHERITE, builder())); - public static final Item NETHERITE_BOOTS = register(new ArmorItem("netherite_boots", ArmorMaterial.NETHERITE, builder())); + public static final Item LEATHER_HELMET = register(new DyeableArmorItem("leather_helmet", builder())); + public static final Item LEATHER_CHESTPLATE = register(new DyeableArmorItem("leather_chestplate", builder())); + public static final Item LEATHER_LEGGINGS = register(new DyeableArmorItem("leather_leggings", builder())); + public static final Item LEATHER_BOOTS = register(new DyeableArmorItem("leather_boots", builder())); + public static final Item CHAINMAIL_HELMET = register(new ArmorItem("chainmail_helmet", builder())); + public static final Item CHAINMAIL_CHESTPLATE = register(new ArmorItem("chainmail_chestplate", builder())); + public static final Item CHAINMAIL_LEGGINGS = register(new ArmorItem("chainmail_leggings", builder())); + public static final Item CHAINMAIL_BOOTS = register(new ArmorItem("chainmail_boots", builder())); + public static final Item IRON_HELMET = register(new ArmorItem("iron_helmet", builder())); + public static final Item IRON_CHESTPLATE = register(new ArmorItem("iron_chestplate", builder())); + public static final Item IRON_LEGGINGS = register(new ArmorItem("iron_leggings", builder())); + public static final Item IRON_BOOTS = register(new ArmorItem("iron_boots", builder())); + public static final Item DIAMOND_HELMET = register(new ArmorItem("diamond_helmet", builder())); + public static final Item DIAMOND_CHESTPLATE = register(new ArmorItem("diamond_chestplate", builder())); + public static final Item DIAMOND_LEGGINGS = register(new ArmorItem("diamond_leggings", builder())); + public static final Item DIAMOND_BOOTS = register(new ArmorItem("diamond_boots", builder())); + public static final Item GOLDEN_HELMET = register(new ArmorItem("golden_helmet", builder())); + public static final Item GOLDEN_CHESTPLATE = register(new ArmorItem("golden_chestplate", builder())); + public static final Item GOLDEN_LEGGINGS = register(new ArmorItem("golden_leggings", builder())); + public static final Item GOLDEN_BOOTS = register(new ArmorItem("golden_boots", builder())); + public static final Item NETHERITE_HELMET = register(new ArmorItem("netherite_helmet", builder())); + public static final Item NETHERITE_CHESTPLATE = register(new ArmorItem("netherite_chestplate", builder())); + public static final Item NETHERITE_LEGGINGS = register(new ArmorItem("netherite_leggings", builder())); + public static final Item NETHERITE_BOOTS = register(new ArmorItem("netherite_boots", builder())); public static final Item FLINT = register(new Item("flint", builder())); public static final Item PORKCHOP = register(new Item("porkchop", builder())); public static final Item COOKED_PORKCHOP = register(new Item("cooked_porkchop", builder())); @@ -1248,7 +1250,7 @@ public final class Items { public static final Item IRON_HORSE_ARMOR = register(new Item("iron_horse_armor", builder())); public static final Item GOLDEN_HORSE_ARMOR = register(new Item("golden_horse_armor", builder())); public static final Item DIAMOND_HORSE_ARMOR = register(new Item("diamond_horse_armor", builder())); - public static final Item LEATHER_HORSE_ARMOR = register(new Item("leather_horse_armor", builder())); + public static final Item LEATHER_HORSE_ARMOR = register(new DyeableArmorItem("leather_horse_armor", builder())); public static final Item LEAD = register(new Item("lead", builder())); public static final Item NAME_TAG = register(new Item("name_tag", builder())); public static final Item COMMAND_BLOCK_MINECART = register(new Item("command_block_minecart", builder())); @@ -1453,7 +1455,7 @@ public final class Items { public static final Item TRIAL_KEY = register(new Item("trial_key", builder())); public static final Item OMINOUS_TRIAL_KEY = register(new Item("ominous_trial_key", builder())); public static final Item VAULT = register(new BlockItem(builder(), Blocks.VAULT)); - public static final Item OMINOUS_BOTTLE = register(new Item("ominous_bottle", builder())); + public static final Item OMINOUS_BOTTLE = register(new OminousBottleItem("ominous_bottle", builder())); public static final int AIR_ID = AIR.javaId(); diff --git a/core/src/main/java/org/geysermc/geyser/item/type/WolfArmorItem.java b/core/src/main/java/org/geysermc/geyser/item/type/WolfArmorItem.java index 52ded0407..41c72f532 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/WolfArmorItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/WolfArmorItem.java @@ -30,7 +30,7 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; -public class WolfArmorItem extends ArmorItem { +public class WolfArmorItem extends Item { public WolfArmorItem(String javaIdentifier, Builder builder) { super(javaIdentifier, builder); } diff --git a/core/src/main/java/org/geysermc/geyser/level/MapColor.java b/core/src/main/java/org/geysermc/geyser/level/MapColor.java index d84788db2..4b891e9b7 100644 --- a/core/src/main/java/org/geysermc/geyser/level/MapColor.java +++ b/core/src/main/java/org/geysermc/geyser/level/MapColor.java @@ -26,268 +26,261 @@ package org.geysermc.geyser.level; public enum MapColor { - COLOR_0(-1, -1, -1), - COLOR_1(-1, -1, -1), - COLOR_2(-1, -1, -1), - COLOR_3(-1, -1, -1), - COLOR_4(39, 125, 89), - COLOR_5(48, 153, 109), - COLOR_6(56, 178, 127), - COLOR_7(29, 94, 67), - COLOR_8(115, 164, 174), - COLOR_9(140, 201, 213), - COLOR_10(163, 233, 247), - COLOR_11(86, 123, 130), - COLOR_12(140, 140, 140), - COLOR_13(171, 171, 171), - COLOR_14(199, 199, 199), - COLOR_15(105, 105, 105), - COLOR_16(0, 0, 180), - COLOR_17(0, 0, 220), - COLOR_18(0, 0, 255), - COLOR_19(0, 0, 135), - COLOR_20(180, 112, 112), - COLOR_21(220, 138, 138), - COLOR_22(255, 160, 160), - COLOR_23(135, 84, 84), - COLOR_24(117, 117, 117), - COLOR_25(144, 144, 144), - COLOR_26(167, 167, 167), - COLOR_27(88, 88, 88), - COLOR_28(0, 87, 0), - COLOR_29(0, 106, 0), - COLOR_30(0, 124, 0), - COLOR_31(0, 65, 0), - COLOR_32(180, 180, 180), - COLOR_33(220, 220, 220), - COLOR_34(255, 255, 255), - COLOR_35(135, 135, 135), - COLOR_36(129, 118, 115), - COLOR_37(158, 144, 141), - COLOR_38(184, 168, 164), - COLOR_39(97, 88, 86), - COLOR_40(54, 76, 106), - COLOR_41(66, 94, 130), - COLOR_42(77, 109, 151), - COLOR_43(40, 57, 79), - COLOR_44(79, 79, 79), - COLOR_45(96, 96, 96), - COLOR_46(112, 112, 112), - COLOR_47(59, 59, 59), - COLOR_48(180, 45, 45), - COLOR_49(220, 55, 55), - COLOR_50(255, 64, 64), - COLOR_51(135, 33, 33), - COLOR_52(50, 84, 100), - COLOR_53(62, 102, 123), - COLOR_54(72, 119, 143), - COLOR_55(38, 63, 75), - COLOR_56(172, 177, 180), - COLOR_57(211, 217, 220), - COLOR_58(245, 252, 255), - COLOR_59(129, 133, 135), - COLOR_60(36, 89, 152), - COLOR_61(44, 109, 186), - COLOR_62(51, 127, 216), - COLOR_63(27, 67, 114), - COLOR_64(152, 53, 125), - COLOR_65(186, 65, 153), - COLOR_66(216, 76, 178), - COLOR_67(114, 40, 94), - COLOR_68(152, 108, 72), - COLOR_69(186, 132, 88), - COLOR_70(216, 153, 102), - COLOR_71(114, 81, 54), - COLOR_72(36, 161, 161), - COLOR_73(44, 197, 197), - COLOR_74(51, 229, 229), - COLOR_75(27, 121, 121), - COLOR_76(17, 144, 89), - COLOR_77(21, 176, 109), - COLOR_78(25, 204, 127), - COLOR_79(13, 108, 67), - COLOR_80(116, 89, 170), - COLOR_81(142, 109, 208), - COLOR_82(165, 127, 242), - COLOR_83(87, 67, 128), - COLOR_84(53, 53, 53), - COLOR_85(65, 65, 65), - COLOR_86(76, 76, 76), - COLOR_87(40, 40, 40), - COLOR_88(108, 108, 108), - COLOR_89(132, 132, 132), - COLOR_90(153, 153, 153), - COLOR_91(81, 81, 81), - COLOR_92(108, 89, 53), - COLOR_93(132, 109, 65), - COLOR_94(153, 127, 76), - COLOR_95(81, 67, 40), - COLOR_96(125, 44, 89), - COLOR_97(153, 54, 109), - COLOR_98(178, 63, 127), - COLOR_99(94, 33, 67), - COLOR_100(125, 53, 36), - COLOR_101(153, 65, 44), - COLOR_102(178, 76, 51), - COLOR_103(94, 40, 27), - COLOR_104(36, 53, 72), - COLOR_105(44, 65, 88), - COLOR_106(51, 76, 102), - COLOR_107(27, 40, 54), - COLOR_108(36, 89, 72), - COLOR_109(44, 109, 88), - COLOR_110(51, 127, 102), - COLOR_111(27, 67, 54), - COLOR_112(36, 36, 108), - COLOR_113(44, 44, 132), - COLOR_114(51, 51, 153), - COLOR_115(27, 27, 81), - COLOR_116(17, 17, 17), - COLOR_117(21, 21, 21), - COLOR_118(25, 25, 25), - COLOR_119(13, 13, 13), - COLOR_120(54, 168, 176), - COLOR_121(66, 205, 215), - COLOR_122(77, 238, 250), - COLOR_123(40, 126, 132), - COLOR_124(150, 154, 64), - COLOR_125(183, 188, 79), - COLOR_126(213, 219, 92), - COLOR_127(112, 115, 48), - COLOR_128(180, 90, 52), - COLOR_129(220, 110, 63), - COLOR_130(255, 128, 74), - COLOR_131(135, 67, 39), - COLOR_132(40, 153, 0), - COLOR_133(50, 187, 0), - COLOR_134(58, 217, 0), - COLOR_135(30, 114, 0), - COLOR_136(34, 60, 91), - COLOR_137(42, 74, 111), - COLOR_138(49, 86, 129), - COLOR_139(25, 45, 68), - COLOR_140(0, 1, 79), - COLOR_141(0, 1, 96), - COLOR_142(0, 2, 112), - COLOR_143(0, 1, 59), - COLOR_144(113, 124, 147), - COLOR_145(138, 152, 180), - COLOR_146(161, 177, 209), - COLOR_147(85, 93, 110), - COLOR_148(25, 57, 112), - COLOR_149(31, 70, 137), - COLOR_150(36, 82, 159), - COLOR_151(19, 43, 84), - COLOR_152(76, 61, 105), - COLOR_153(93, 75, 128), - COLOR_154(108, 87, 149), - COLOR_155(57, 46, 78), - COLOR_156(97, 76, 79), - COLOR_157(119, 93, 96), - COLOR_158(138, 108, 112), - COLOR_159(73, 57, 59), - COLOR_160(25, 93, 131), - COLOR_161(31, 114, 160), - COLOR_162(36, 133, 186), - COLOR_163(19, 70, 98), - COLOR_164(37, 82, 72), - COLOR_165(45, 100, 88), - COLOR_166(53, 117, 103), - COLOR_167(28, 61, 54), - COLOR_168(55, 54, 112), - COLOR_169(67, 66, 138), - COLOR_170(78, 77, 160), - COLOR_171(41, 40, 84), - COLOR_172(24, 28, 40), - COLOR_173(30, 35, 49), - COLOR_174(35, 41, 57), - COLOR_175(18, 21, 30), - COLOR_176(69, 75, 95), - COLOR_177(84, 92, 116), - COLOR_178(98, 107, 135), - COLOR_179(51, 56, 71), - COLOR_180(64, 64, 61), - COLOR_181(79, 79, 75), - COLOR_182(92, 92, 87), - COLOR_183(48, 48, 46), - COLOR_184(62, 51, 86), - COLOR_185(75, 62, 105), - COLOR_186(88, 73, 122), - COLOR_187(46, 38, 64), - COLOR_188(64, 43, 53), - COLOR_189(79, 53, 65), - COLOR_190(92, 62, 76), - COLOR_191(48, 32, 40), - COLOR_192(24, 35, 53), - COLOR_193(30, 43, 65), - COLOR_194(35, 50, 76), - COLOR_195(18, 26, 40), - COLOR_196(29, 57, 53), - COLOR_197(36, 70, 65), - COLOR_198(42, 82, 76), - COLOR_199(22, 43, 40), - COLOR_200(32, 42, 100), - COLOR_201(39, 51, 122), - COLOR_202(46, 60, 142), - COLOR_203(24, 31, 75), - COLOR_204(11, 15, 26), - COLOR_205(13, 18, 31), - COLOR_206(16, 22, 37), - COLOR_207(8, 11, 19), - COLOR_208(34, 33, 133), - COLOR_209(42, 41, 163), - COLOR_210(49, 48, 189), - COLOR_211(25, 25, 100), - COLOR_212(68, 44, 104), - COLOR_213(83, 54, 127), - COLOR_214(97, 63, 148), - COLOR_215(51, 33, 78), - COLOR_216(20, 17, 64), - COLOR_217(25, 21, 79), - COLOR_218(29, 25, 92), - COLOR_219(15, 13, 48), - COLOR_220(94, 88, 15), - COLOR_221(115, 108, 18), - COLOR_222(134, 126, 22), - COLOR_223(70, 66, 11), - COLOR_224(98, 100, 40), - COLOR_225(120, 122, 50), - COLOR_226(140, 142, 58), - COLOR_227(74, 75, 30), - COLOR_228(43, 31, 60), - COLOR_229(53, 37, 74), - COLOR_230(62, 44, 86), - COLOR_231(32, 23, 45), - COLOR_232(93, 127, 14), - COLOR_233(114, 155, 17), - COLOR_234(133, 180, 20), - COLOR_235(70, 95, 10), - COLOR_236(70, 70, 70), - COLOR_237(86, 86, 86), - COLOR_238(100, 100, 100), - COLOR_239(52, 52, 52), - COLOR_240(103, 123, 152), - COLOR_241(126, 150, 186), - COLOR_242(147, 175, 216), - COLOR_243(77, 92, 114), - COLOR_244(105, 117, 89), - COLOR_245(129, 144, 109), - COLOR_246(150, 167, 127), - COLOR_247(79, 88, 67); + COLOR_0(0), + COLOR_1(0), + COLOR_2(0), + COLOR_3(0), + COLOR_4(-10912473), + COLOR_5(-9594576), + COLOR_6(-8408520), + COLOR_7(-12362211), + COLOR_8(-5331853), + COLOR_9(-2766452), + COLOR_10(-530013), + COLOR_11(-8225962), + COLOR_12(-7566196), + COLOR_13(-5526613), + COLOR_14(-3684409), + COLOR_15(-9868951), + COLOR_16(-4980736), + COLOR_17(-2359296), + COLOR_18(-65536), + COLOR_19(-7929856), + COLOR_20(-9408332), + COLOR_21(-7697700), + COLOR_22(-6250241), + COLOR_23(-11250553), + COLOR_24(-9079435), + COLOR_25(-7303024), + COLOR_26(-5789785), + COLOR_27(-10987432), + COLOR_28(-16754944), + COLOR_29(-16750080), + COLOR_30(-16745472), + COLOR_31(-16760576), + COLOR_32(-4934476), + COLOR_33(-2302756), + COLOR_34(-1), + COLOR_35(-7895161), + COLOR_36(-9210239), + COLOR_37(-7499618), + COLOR_38(-5986120), + COLOR_39(-11118495), + COLOR_40(-9810890), + COLOR_41(-8233406), + COLOR_42(-6853299), + COLOR_43(-11585240), + COLOR_44(-11579569), + COLOR_45(-10461088), + COLOR_46(-9408400), + COLOR_47(-12895429), + COLOR_48(-13816396), + COLOR_49(-13158436), + COLOR_50(-12566273), + COLOR_51(-14605945), + COLOR_52(-10202062), + COLOR_53(-8690114), + COLOR_54(-7375032), + COLOR_55(-11845850), + COLOR_56(-4935252), + COLOR_57(-2303533), + COLOR_58(-779), + COLOR_59(-7895679), + COLOR_60(-6792924), + COLOR_61(-4559572), + COLOR_62(-2588877), + COLOR_63(-9288933), + COLOR_64(-8571496), + COLOR_65(-6733382), + COLOR_66(-5092136), + COLOR_67(-10606478), + COLOR_68(-12030824), + COLOR_69(-10976070), + COLOR_70(-10053160), + COLOR_71(-13217422), + COLOR_72(-6184668), + COLOR_73(-3816148), + COLOR_74(-1710797), + COLOR_75(-8816357), + COLOR_76(-10907631), + COLOR_77(-9588715), + COLOR_78(-8401895), + COLOR_79(-12358643), + COLOR_80(-5613196), + COLOR_81(-3117682), + COLOR_82(-884827), + COLOR_83(-8371369), + COLOR_84(-13290187), + COLOR_85(-12500671), + COLOR_86(-11776948), + COLOR_87(-14145496), + COLOR_88(-9671572), + COLOR_89(-8092540), + COLOR_90(-6710887), + COLOR_91(-11447983), + COLOR_92(-13280916), + COLOR_93(-12489340), + COLOR_94(-11763815), + COLOR_95(-14138543), + COLOR_96(-10933123), + COLOR_97(-9619815), + COLOR_98(-8437838), + COLOR_99(-12377762), + COLOR_100(-14404227), + COLOR_101(-13876839), + COLOR_102(-13415246), + COLOR_103(-14997410), + COLOR_104(-12045020), + COLOR_105(-10993364), + COLOR_106(-10073037), + COLOR_107(-13228005), + COLOR_108(-12035804), + COLOR_109(-10982100), + COLOR_110(-10059981), + COLOR_111(-13221093), + COLOR_112(-9690076), + COLOR_113(-8115156), + COLOR_114(-6737101), + COLOR_115(-11461861), + COLOR_116(-15658735), + COLOR_117(-15395563), + COLOR_118(-15132391), + COLOR_119(-15921907), + COLOR_120(-5199818), + COLOR_121(-2634430), + COLOR_122(-332211), + COLOR_123(-8094168), + COLOR_124(-12543338), + COLOR_125(-11551561), + COLOR_126(-10691627), + COLOR_127(-13601936), + COLOR_128(-13346124), + COLOR_129(-12620068), + COLOR_130(-11894529), + COLOR_131(-14204025), + COLOR_132(-16738008), + COLOR_133(-16729294), + COLOR_134(-16721606), + COLOR_135(-16748002), + COLOR_136(-10798046), + COLOR_137(-9483734), + COLOR_138(-8301007), + COLOR_139(-12309223), + COLOR_140(-11599616), + COLOR_141(-10485504), + COLOR_142(-9436672), + COLOR_143(-12910336), + COLOR_144(-7111567), + COLOR_145(-4941686), + COLOR_146(-3034719), + COLOR_147(-9544363), + COLOR_148(-9422567), + COLOR_149(-7780833), + COLOR_150(-6335964), + COLOR_151(-11261165), + COLOR_152(-9880244), + COLOR_153(-8369315), + COLOR_154(-6989972), + COLOR_155(-11653575), + COLOR_156(-11580319), + COLOR_157(-10461833), + COLOR_158(-9409398), + COLOR_159(-12895927), + COLOR_160(-8168167), + COLOR_161(-6262241), + COLOR_162(-4553436), + COLOR_163(-10336749), + COLOR_164(-12037595), + COLOR_165(-10984403), + COLOR_166(-9997003), + COLOR_167(-13222628), + COLOR_168(-9423305), + COLOR_169(-7716285), + COLOR_170(-6271666), + COLOR_171(-11261911), + COLOR_172(-14148584), + COLOR_173(-13556962), + COLOR_174(-13031133), + COLOR_175(-14805742), + COLOR_176(-10532027), + COLOR_177(-9151404), + COLOR_178(-7902366), + COLOR_179(-12109773), + COLOR_180(-12763072), + COLOR_181(-11841713), + COLOR_182(-11051940), + COLOR_183(-13750224), + COLOR_184(-11128002), + COLOR_185(-9879989), + COLOR_186(-8763048), + COLOR_187(-12573138), + COLOR_188(-13292736), + COLOR_189(-12503729), + COLOR_190(-11780516), + COLOR_191(-14147536), + COLOR_192(-13294824), + COLOR_193(-12506338), + COLOR_194(-11783645), + COLOR_195(-14149102), + COLOR_196(-13289187), + COLOR_197(-12499420), + COLOR_198(-11775446), + COLOR_199(-14144746), + COLOR_200(-10212832), + COLOR_201(-8768729), + COLOR_202(-7455698), + COLOR_203(-11854056), + COLOR_204(-15069429), + COLOR_205(-14740979), + COLOR_206(-14346736), + COLOR_207(-15529208), + COLOR_208(-8052446), + COLOR_209(-6084310), + COLOR_210(-4378575), + COLOR_211(-10217191), + COLOR_212(-9950140), + COLOR_213(-8440237), + COLOR_214(-7061663), + COLOR_215(-11656909), + COLOR_216(-12578540), + COLOR_217(-11594471), + COLOR_218(-10741475), + COLOR_219(-13628145), + COLOR_220(-15771554), + COLOR_221(-15569805), + COLOR_222(-15303034), + COLOR_223(-16039354), + COLOR_224(-14130078), + COLOR_225(-13469064), + COLOR_226(-12939636), + COLOR_227(-14791862), + COLOR_228(-12837077), + COLOR_229(-11918027), + COLOR_230(-11129794), + COLOR_231(-13822176), + COLOR_232(-15827107), + COLOR_233(-15623310), + COLOR_234(-15420283), + COLOR_235(-16097466), + COLOR_236(-12171706), + COLOR_237(-11119018), + COLOR_238(-10197916), + COLOR_239(-13355980), + COLOR_240(-6784153), + COLOR_241(-4548994), + COLOR_242(-2576493), + COLOR_243(-9282483), + COLOR_244(-10914455), + COLOR_245(-9596799), + COLOR_246(-8411242), + COLOR_247(-12363697); private static final MapColor[] VALUES = values(); private final int value; - MapColor(int red, int green, int blue) { - int alpha = 255; - if (red == -1 && green == -1 && blue == -1) - alpha = 0; // transparent - - this.value = ((alpha & 0xFF) << 24) | - ((red & 0xFF) << 16) | - ((green & 0xFF) << 8) | - (blue & 0xFF); + MapColor(int value) { + this.value = value; } public static MapColor fromId(int id) { @@ -297,4 +290,4 @@ public enum MapColor { public int getARGB() { return value; } -} \ No newline at end of file +} 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 c49ecad1d..a94cf132d 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 @@ -425,13 +425,7 @@ public class ItemRegistryPopulator { .javaItem(javaItem); if (mappingItem.getToolType() != null) { - if (mappingItem.getToolTier() != null) { - mappingBuilder = mappingBuilder.toolType(mappingItem.getToolType().intern()) - .toolTier(mappingItem.getToolTier().intern()); - } else { - mappingBuilder = mappingBuilder.toolType(mappingItem.getToolType().intern()) - .toolTier(""); - } + mappingBuilder = mappingBuilder.toolType(mappingItem.getToolType().intern()); } if (javaOnlyItems.contains(javaItem) || javaItem.defaultRarity() != Rarity.COMMON) { 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 ab8c52bf6..ae682e8b5 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 @@ -48,7 +48,6 @@ public class GeyserMappingItem { Integer firstBlockRuntimeId; Integer lastBlockRuntimeId; @JsonProperty("tool_type") String toolType; - @JsonProperty("tool_tier") String toolTier; @JsonProperty("armor_type") String armorType; @JsonProperty("protection_value") int protectionValue; @JsonProperty("is_edible") boolean edible = false; From be77e6b2bfefd686f51a676030eb6d084452463f Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Wed, 4 Dec 2024 00:01:54 +0800 Subject: [PATCH 091/165] Load default item components --- .../java/org/geysermc/geyser/item/Items.java | 5 -- .../org/geysermc/geyser/item/type/Item.java | 12 +-- .../geysermc/geyser/registry/Registries.java | 5 ++ .../DataComponentRegistryPopulator.java | 89 +++++++++++++++++++ .../translator/item/ItemTranslator.java | 5 +- 5 files changed, 101 insertions(+), 15 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java 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 98450f476..664c956c3 100644 --- a/core/src/main/java/org/geysermc/geyser/item/Items.java +++ b/core/src/main/java/org/geysermc/geyser/item/Items.java @@ -66,11 +66,6 @@ import static org.geysermc.geyser.item.type.Item.builder; */ @SuppressWarnings("unused") public final class Items { - - static { - // Load data components here - } - public static final Item AIR = register(new Item("air", builder())); public static final Item STONE = register(new BlockItem(builder(), Blocks.STONE)); public static final Item GRANITE = register(new BlockItem(builder(), Blocks.GRANITE)); 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 fde742efa..9b2603284 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.item.Items; import org.geysermc.geyser.item.components.Rarity; import org.geysermc.geyser.item.enchantment.Enchantment; import org.geysermc.geyser.level.block.type.Block; +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; @@ -65,12 +66,9 @@ public class Item { private final int attackDamage; private final DataComponents baseComponents; // unmodifiable - private final List<Item> enchantmentGlintPresent = List.of(Items.ENCHANTED_GOLDEN_APPLE, Items.EXPERIENCE_BOTTLE, Items.WRITTEN_BOOK, - Items.NETHER_STAR, Items.ENCHANTED_BOOK, Items.END_CRYSTAL); - public Item(String javaIdentifier, Builder builder) { this.javaIdentifier = MinecraftKey.key(javaIdentifier); - this.baseComponents = builder.components; + this.baseComponents = builder.components == null ? Registries.DEFAULT_DATA_COMPONENTS.get(javaId) : builder.components; this.attackDamage = builder.attackDamage; } @@ -297,7 +295,7 @@ public class Item { } public static Builder builder() { - return new Builder().components(new DataComponents(ImmutableMap.of())); // TODO actually set components here + return new Builder(); } public static final class Builder { @@ -315,10 +313,6 @@ public class Item { return this; } - public DataComponents components() { - return new DataComponents(ImmutableMap.copyOf(components.getDataComponents())); - } - private Builder() { } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/Registries.java b/core/src/main/java/org/geysermc/geyser/registry/Registries.java index 61bb42454..fc41275ae 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/Registries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/Registries.java @@ -47,6 +47,7 @@ import org.geysermc.geyser.registry.loader.RegistryLoaders; import org.geysermc.geyser.registry.loader.SoundEventsRegistryLoader; import org.geysermc.geyser.registry.loader.SoundRegistryLoader; import org.geysermc.geyser.registry.loader.SoundTranslatorRegistryLoader; +import org.geysermc.geyser.registry.populator.DataComponentRegistryPopulator; import org.geysermc.geyser.registry.populator.ItemRegistryPopulator; import org.geysermc.geyser.registry.populator.PacketRegistryPopulator; import org.geysermc.geyser.registry.populator.TagRegistryPopulator; @@ -60,6 +61,7 @@ import org.geysermc.geyser.translator.sound.SoundInteractionTranslator; import org.geysermc.geyser.translator.sound.SoundTranslator; import org.geysermc.mcprotocollib.network.packet.Packet; import org.geysermc.mcprotocollib.protocol.data.game.entity.type.EntityType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.level.block.BlockEntityType; import org.geysermc.mcprotocollib.protocol.data.game.level.event.LevelEvent; import org.geysermc.mcprotocollib.protocol.data.game.level.particle.ParticleType; @@ -139,6 +141,8 @@ public final class Registries { */ public static final SimpleMappedRegistry<String, Item> JAVA_ITEM_IDENTIFIERS = SimpleMappedRegistry.create(RegistryLoaders.empty(Object2ObjectOpenHashMap::new)); + public static final ListRegistry<DataComponents> DEFAULT_DATA_COMPONENTS = ListRegistry.create(RegistryLoaders.empty(ArrayList::new)); + /** * A versioned registry which holds {@link ItemMappings} for each version. These item mappings contain * primarily Bedrock version-specific data. @@ -209,6 +213,7 @@ public final class Registries { public static void populate() { PacketRegistryPopulator.populate(); + DataComponentRegistryPopulator.populate(); ItemRegistryPopulator.populate(); TagRegistryPopulator.populate(); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java new file mode 100644 index 000000000..0c89760b1 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java @@ -0,0 +1,89 @@ +/* + * Copyright (c) 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 com.google.common.collect.ImmutableMap; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import org.geysermc.geyser.GeyserBootstrap; +import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.registry.Registries; +import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodecHelper; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponent; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.ItemCodecHelper; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Base64; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public final class DataComponentRegistryPopulator { + + public static void populate() { + GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); + List<DataComponents> defaultComponents; + try (InputStream stream = bootstrap.getResourceOrThrow("mappings/item_data_components.json")) { + JsonElement rootElement = JsonParser.parseReader(new InputStreamReader(stream)); + JsonArray jsonArray = rootElement.getAsJsonArray(); + + defaultComponents = new ObjectArrayList<>(jsonArray.size()); + + for (JsonElement element : jsonArray) { + JsonObject entryObject = element.getAsJsonObject(); + JsonObject components = entryObject.getAsJsonObject("components"); + + Map<DataComponentType<?>, DataComponent<?, ?>> map = new HashMap<>(); + + for (Map.Entry<String, JsonElement> componentEntry : components.entrySet()) { + String encodedValue = componentEntry.getValue().getAsString(); + byte[] bytes = Base64.getDecoder().decode(encodedValue); + ByteBuf buf = Unpooled.wrappedBuffer(bytes); + MinecraftCodecHelper helper = new MinecraftCodecHelper(); + int varInt = helper.readVarInt(buf); + DataComponentType<?> dataComponentType = DataComponentType.from(varInt); + DataComponent<?, ?> dataComponent = dataComponentType.readDataComponent(ItemCodecHelper.INSTANCE, buf); + + map.put(dataComponentType, dataComponent); + } + + defaultComponents.add(new DataComponents(ImmutableMap.copyOf(map))); + } + } catch (Exception e) { + throw new AssertionError("Unable to load or parse components", e); + } + + Registries.DEFAULT_DATA_COMPONENTS.set(defaultComponents); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java index 376957d67..54bbe086c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java @@ -102,6 +102,9 @@ public final class ItemTranslator { SLOT_NAMES.put(ItemAttributeModifiers.EquipmentSlotGroup.BODY, "body"); } + private final static List<Item> GLINT_PRESENT = List.of(Items.ENCHANTED_GOLDEN_APPLE, Items.EXPERIENCE_BOTTLE, Items.WRITTEN_BOOK, + Items.NETHER_STAR, Items.ENCHANTED_BOOK, Items.END_CRYSTAL); + private ItemTranslator() { } @@ -180,7 +183,7 @@ public final class ItemTranslator { } // Add enchantment override. We can't remove it - enchantments would stop showing - but we can add it. - if (components.getOrDefault(DataComponentType.ENCHANTMENT_GLINT_OVERRIDE, false)) { + if (components.getOrDefault(DataComponentType.ENCHANTMENT_GLINT_OVERRIDE, false) && !GLINT_PRESENT.contains(javaItem)) { NbtMapBuilder nbtMapBuilder = nbtBuilder.getOrCreateNbt(); nbtMapBuilder.putIfAbsent("ench", NbtList.EMPTY); } From d114ab9ad1e71098c7e9956e1f2ca475eff9d291 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Wed, 4 Dec 2024 00:43:06 +0800 Subject: [PATCH 092/165] send ServerboundPlayerLoadedPacket, update built-in-tags --- .../geyser/session/cache/tags/BlockTag.java | 6 ++-- .../geyser/session/cache/tags/ItemTag.java | 32 +++++++++++++++++-- ...SetLocalPlayerAsInitializedTranslator.java | 2 ++ 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/tags/BlockTag.java b/core/src/main/java/org/geysermc/geyser/session/cache/tags/BlockTag.java index 6ad666780..59d301a89 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/tags/BlockTag.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/tags/BlockTag.java @@ -56,6 +56,7 @@ public final class BlockTag { public static final Tag<Block> OVERWORLD_NATURAL_LOGS = create("overworld_natural_logs"); public static final Tag<Block> LOGS = create("logs"); public static final Tag<Block> DARK_OAK_LOGS = create("dark_oak_logs"); + public static final Tag<Block> PALE_OAK_LOGS = create("pale_oak_logs"); public static final Tag<Block> OAK_LOGS = create("oak_logs"); public static final Tag<Block> BIRCH_LOGS = create("birch_logs"); public static final Tag<Block> ACACIA_LOGS = create("acacia_logs"); @@ -80,8 +81,8 @@ public final class BlockTag { public static final Tag<Block> SMALL_FLOWERS = create("small_flowers"); public static final Tag<Block> BEDS = create("beds"); public static final Tag<Block> FENCES = create("fences"); - public static final Tag<Block> TALL_FLOWERS = create("tall_flowers"); public static final Tag<Block> FLOWERS = create("flowers"); + public static final Tag<Block> BEE_ATTRACTIVE = create("bee_attractive"); public static final Tag<Block> PIGLIN_REPELLENTS = create("piglin_repellents"); public static final Tag<Block> GOLD_ORES = create("gold_ores"); public static final Tag<Block> IRON_ORES = create("iron_ores"); @@ -97,6 +98,7 @@ public final class BlockTag { public static final Tag<Block> BADLANDS_TERRACOTTA = create("badlands_terracotta"); public static final Tag<Block> CONCRETE_POWDER = create("concrete_powder"); public static final Tag<Block> COMPLETES_FIND_TREE_TUTORIAL = create("completes_find_tree_tutorial"); + public static final Tag<Block> SHULKER_BOXES = create("shulker_boxes"); public static final Tag<Block> FLOWER_POTS = create("flower_pots"); public static final Tag<Block> ENDERMAN_HOLDABLE = create("enderman_holdable"); public static final Tag<Block> ICE = create("ice"); @@ -130,7 +132,6 @@ public final class BlockTag { public static final Tag<Block> WALL_POST_OVERRIDE = create("wall_post_override"); public static final Tag<Block> CLIMBABLE = create("climbable"); public static final Tag<Block> FALL_DAMAGE_RESETTING = create("fall_damage_resetting"); - public static final Tag<Block> SHULKER_BOXES = create("shulker_boxes"); public static final Tag<Block> HOGLIN_REPELLENTS = create("hoglin_repellents"); public static final Tag<Block> SOUL_FIRE_BASE_BLOCKS = create("soul_fire_base_blocks"); public static final Tag<Block> STRIDER_WARM_BLOCKS = create("strider_warm_blocks"); @@ -198,6 +199,7 @@ public final class BlockTag { public static final Tag<Block> FOXES_SPAWNABLE_ON = create("foxes_spawnable_on"); public static final Tag<Block> WOLVES_SPAWNABLE_ON = create("wolves_spawnable_on"); public static final Tag<Block> FROGS_SPAWNABLE_ON = create("frogs_spawnable_on"); + public static final Tag<Block> BATS_SPAWNABLE_ON = create("bats_spawnable_on"); public static final Tag<Block> AZALEA_GROWS_ON = create("azalea_grows_on"); public static final Tag<Block> CONVERTABLE_TO_MUD = create("convertable_to_mud"); public static final Tag<Block> MANGROVE_LOGS_CAN_GROW_THROUGH = create("mangrove_logs_can_grow_through"); diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/tags/ItemTag.java b/core/src/main/java/org/geysermc/geyser/session/cache/tags/ItemTag.java index 4f42f146a..e2f4f2db3 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/tags/ItemTag.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/tags/ItemTag.java @@ -53,6 +53,7 @@ public final class ItemTag { public static final Tag<Item> LOGS_THAT_BURN = create("logs_that_burn"); public static final Tag<Item> LOGS = create("logs"); public static final Tag<Item> DARK_OAK_LOGS = create("dark_oak_logs"); + public static final Tag<Item> PALE_OAK_LOGS = create("pale_oak_logs"); public static final Tag<Item> OAK_LOGS = create("oak_logs"); public static final Tag<Item> BIRCH_LOGS = create("birch_logs"); public static final Tag<Item> ACACIA_LOGS = create("acacia_logs"); @@ -77,11 +78,13 @@ public final class ItemTag { public static final Tag<Item> SMALL_FLOWERS = create("small_flowers"); public static final Tag<Item> BEDS = create("beds"); public static final Tag<Item> FENCES = create("fences"); - public static final Tag<Item> TALL_FLOWERS = create("tall_flowers"); - public static final Tag<Item> FLOWERS = create("flowers"); public static final Tag<Item> PIGLIN_REPELLENTS = create("piglin_repellents"); public static final Tag<Item> PIGLIN_LOVED = create("piglin_loved"); public static final Tag<Item> IGNORED_BY_PIGLIN_BABIES = create("ignored_by_piglin_babies"); + public static final Tag<Item> PIGLIN_SAFE_ARMOR = create("piglin_safe_armor"); + public static final Tag<Item> DUPLICATES_ALLAYS = create("duplicates_allays"); + public static final Tag<Item> BREWING_FUEL = create("brewing_fuel"); + public static final Tag<Item> SHULKER_BOXES = create("shulker_boxes"); public static final Tag<Item> MEAT = create("meat"); public static final Tag<Item> SNIFFER_FOOD = create("sniffer_food"); public static final Tag<Item> PIGLIN_FOOD = create("piglin_food"); @@ -103,6 +106,7 @@ public final class ItemTag { public static final Tag<Item> LLAMA_TEMPT_ITEMS = create("llama_tempt_items"); public static final Tag<Item> OCELOT_FOOD = create("ocelot_food"); public static final Tag<Item> PANDA_FOOD = create("panda_food"); + public static final Tag<Item> PANDA_EATS_FROM_GROUND = create("panda_eats_from_ground"); public static final Tag<Item> PIG_FOOD = create("pig_food"); public static final Tag<Item> RABBIT_FOOD = create("rabbit_food"); public static final Tag<Item> STRIDER_FOOD = create("strider_food"); @@ -135,7 +139,20 @@ public final class ItemTag { public static final Tag<Item> LECTERN_BOOKS = create("lectern_books"); public static final Tag<Item> BOOKSHELF_BOOKS = create("bookshelf_books"); public static final Tag<Item> BEACON_PAYMENT_ITEMS = create("beacon_payment_items"); + public static final Tag<Item> WOODEN_TOOL_MATERIALS = create("wooden_tool_materials"); public static final Tag<Item> STONE_TOOL_MATERIALS = create("stone_tool_materials"); + public static final Tag<Item> IRON_TOOL_MATERIALS = create("iron_tool_materials"); + public static final Tag<Item> GOLD_TOOL_MATERIALS = create("gold_tool_materials"); + public static final Tag<Item> DIAMOND_TOOL_MATERIALS = create("diamond_tool_materials"); + public static final Tag<Item> NETHERITE_TOOL_MATERIALS = create("netherite_tool_materials"); + public static final Tag<Item> REPAIRS_LEATHER_ARMOR = create("repairs_leather_armor"); + public static final Tag<Item> REPAIRS_CHAIN_ARMOR = create("repairs_chain_armor"); + public static final Tag<Item> REPAIRS_IRON_ARMOR = create("repairs_iron_armor"); + public static final Tag<Item> REPAIRS_GOLD_ARMOR = create("repairs_gold_armor"); + public static final Tag<Item> REPAIRS_DIAMOND_ARMOR = create("repairs_diamond_armor"); + public static final Tag<Item> REPAIRS_NETHERITE_ARMOR = create("repairs_netherite_armor"); + public static final Tag<Item> REPAIRS_TURTLE_HELMET = create("repairs_turtle_helmet"); + public static final Tag<Item> REPAIRS_WOLF_ARMOR = create("repairs_wolf_armor"); public static final Tag<Item> STONE_CRAFTING_MATERIALS = create("stone_crafting_materials"); public static final Tag<Item> FREEZE_IMMUNE_WEARABLES = create("freeze_immune_wearables"); public static final Tag<Item> DAMPENS_VIBRATIONS = create("dampens_vibrations"); @@ -151,7 +168,6 @@ public final class ItemTag { public static final Tag<Item> SKULLS = create("skulls"); public static final Tag<Item> TRIMMABLE_ARMOR = create("trimmable_armor"); public static final Tag<Item> TRIM_MATERIALS = create("trim_materials"); - public static final Tag<Item> TRIM_TEMPLATES = create("trim_templates"); public static final Tag<Item> DECORATED_POT_SHERDS = create("decorated_pot_sherds"); public static final Tag<Item> DECORATED_POT_INGREDIENTS = create("decorated_pot_ingredients"); public static final Tag<Item> SWORDS = create("swords"); @@ -161,7 +177,15 @@ public final class ItemTag { public static final Tag<Item> SHOVELS = create("shovels"); public static final Tag<Item> BREAKS_DECORATED_POTS = create("breaks_decorated_pots"); public static final Tag<Item> VILLAGER_PLANTABLE_SEEDS = create("villager_plantable_seeds"); + public static final Tag<Item> VILLAGER_PICKS_UP = create("villager_picks_up"); public static final Tag<Item> DYEABLE = create("dyeable"); + public static final Tag<Item> FURNACE_MINECART_FUEL = create("furnace_minecart_fuel"); + public static final Tag<Item> BUNDLES = create("bundles"); + public static final Tag<Item> SKELETON_PREFERRED_WEAPONS = create("skeleton_preferred_weapons"); + public static final Tag<Item> DROWNED_PREFERRED_WEAPONS = create("drowned_preferred_weapons"); + public static final Tag<Item> PIGLIN_PREFERRED_WEAPONS = create("piglin_preferred_weapons"); + public static final Tag<Item> PILLAGER_PREFERRED_WEAPONS = create("pillager_preferred_weapons"); + public static final Tag<Item> WITHER_SKELETON_DISLIKED_WEAPONS = create("wither_skeleton_disliked_weapons"); public static final Tag<Item> ENCHANTABLE_FOOT_ARMOR = create("enchantable/foot_armor"); public static final Tag<Item> ENCHANTABLE_LEG_ARMOR = create("enchantable/leg_armor"); public static final Tag<Item> ENCHANTABLE_CHEST_ARMOR = create("enchantable/chest_armor"); @@ -181,6 +205,8 @@ public final class ItemTag { public static final Tag<Item> ENCHANTABLE_CROSSBOW = create("enchantable/crossbow"); public static final Tag<Item> ENCHANTABLE_VANISHING = create("enchantable/vanishing"); public static final Tag<Item> ENCHANTABLE_MACE = create("enchantable/mace"); + public static final Tag<Item> MAP_INVISIBILITY_EQUIPMENT = create("map_invisibility_equipment"); + public static final Tag<Item> GAZE_DISGUISE_EQUIPMENT = create("gaze_disguise_equipment"); private ItemTag() {} diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java index 47c5bfd35..556d8cd8d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java @@ -34,6 +34,7 @@ import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.util.InventoryUtils; import org.geysermc.geyser.util.LoginEncryptionUtils; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundPlayerLoadedPacket; @Translator(packet = SetLocalPlayerAsInitializedPacket.class) public class BedrockSetLocalPlayerAsInitializedTranslator extends PacketTranslator<SetLocalPlayerAsInitializedPacket> { @@ -72,6 +73,7 @@ public class BedrockSetLocalPlayerAsInitializedTranslator extends PacketTranslat session.getFormCache().resendAllForms(); GeyserImpl.getInstance().eventBus().fire(new SessionJoinEvent(session)); + session.sendDownstreamGamePacket(ServerboundPlayerLoadedPacket.INSTANCE); } } } From db246ffb3b98bf367fbc1c964f304bc75b404143 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Wed, 4 Dec 2024 01:28:29 +0800 Subject: [PATCH 093/165] Update Properties/Blocks, re-include neoforge, target 1.21.4 release --- .../GeyserSpigotNativeWorldManager.java | 1 - .../geysermc/geyser/level/block/Blocks.java | 73 +++++++++++++------ .../level/block/property/Properties.java | 13 ++-- .../inventory/AnvilInventoryTranslator.java | 2 +- .../inventory/BaseInventoryTranslator.java | 2 +- .../inventory/BeaconInventoryTranslator.java | 2 +- .../inventory/BrewingInventoryTranslator.java | 4 +- .../CartographyInventoryTranslator.java | 2 +- .../inventory/CrafterInventoryTranslator.java | 2 +- .../CraftingInventoryTranslator.java | 4 +- .../EnchantingInventoryTranslator.java | 4 +- .../GrindstoneInventoryTranslator.java | 2 +- .../inventory/LoomInventoryTranslator.java | 2 +- .../MerchantInventoryTranslator.java | 2 +- .../inventory/OldSmithingTableTranslator.java | 4 +- .../inventory/PlayerInventoryTranslator.java | 8 +- .../SmithingInventoryTranslator.java | 2 +- .../StonecutterInventoryTranslator.java | 2 +- .../ChestedHorseInventoryTranslator.java | 4 +- .../horse/HorseInventoryTranslator.java | 2 +- .../entity/JavaSetEquipmentTranslator.java | 4 +- .../org/geysermc/geyser/util/BlockUtils.java | 49 +------------ gradle/libs.versions.toml | 6 +- settings.gradle.kts | 4 +- 24 files changed, 94 insertions(+), 106 deletions(-) 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 c99ca4e78..96ae41933 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 @@ -33,7 +33,6 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.adapters.WorldAdapter; import org.geysermc.geyser.adapters.paper.PaperAdapters; import org.geysermc.geyser.adapters.spigot.SpigotAdapters; -import org.geysermc.geyser.level.block.BlockStateValues; import org.geysermc.geyser.level.block.type.Block; import org.geysermc.geyser.session.GeyserSession; diff --git a/core/src/main/java/org/geysermc/geyser/level/block/Blocks.java b/core/src/main/java/org/geysermc/geyser/level/block/Blocks.java index 5db38c559..7dc526ee3 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/Blocks.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/Blocks.java @@ -398,9 +398,10 @@ public final class Blocks { .booleanState(WEST))); public static final Block SOUL_FIRE = register(new Block("soul_fire", builder().pushReaction(PistonBehavior.DESTROY))); public static final Block SPAWNER = register(new SpawnerBlock("spawner", builder().setBlockEntity(BlockEntityType.MOB_SPAWNER).requiresCorrectToolForDrops().destroyTime(5.0f))); - public static final Block CREAKING_HEART = register(new Block("creaking_heart", builder().setBlockEntity(BlockEntityType.CREAKING_HEART).destroyTime(5.0f) + public static final Block CREAKING_HEART = register(new Block("creaking_heart", builder().setBlockEntity(BlockEntityType.CREAKING_HEART).destroyTime(10.0f) + .booleanState(ACTIVE) .enumState(AXIS, Axis.VALUES) - .enumState(CREAKING))); + .booleanState(NATURAL))); public static final Block OAK_STAIRS = register(new Block("oak_stairs", builder().destroyTime(2.0f) .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) .enumState(HALF) @@ -592,9 +593,9 @@ public final class Blocks { .enumState(ATTACH_FACE) .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) .booleanState(POWERED))); - public static final Block STONE_PRESSURE_PLATE = register(new Block("stone_pressure_plate", builder().requiresCorrectToolForDrops().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) + public static final Block STONE_PRESSURE_PLATE = register(new Block("stone_pressure_plate", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) .booleanState(POWERED))); - public static final Block IRON_DOOR = register(new DoorBlock("iron_door", builder().requiresCorrectToolForDrops().destroyTime(5.0f).pushReaction(PistonBehavior.DESTROY) + public static final Block IRON_DOOR = register(new DoorBlock("iron_door", builder().destroyTime(5.0f).pushReaction(PistonBehavior.DESTROY) .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) .enumState(DOUBLE_BLOCK_HALF) .enumState(DOOR_HINGE) @@ -822,6 +823,14 @@ public final class Blocks { .booleanState(UP) .booleanState(WATERLOGGED) .booleanState(WEST))); + public static final Block RESIN_CLUMP = register(new Block("resin_clump", builder().pushReaction(PistonBehavior.DESTROY) + .booleanState(DOWN) + .booleanState(EAST) + .booleanState(NORTH) + .booleanState(SOUTH) + .booleanState(UP) + .booleanState(WATERLOGGED) + .booleanState(WEST))); public static final Block OAK_FENCE_GATE = register(new Block("oak_fence_gate", builder().destroyTime(2.0f) .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) .booleanState(IN_WALL) @@ -845,6 +854,24 @@ public final class Blocks { public static final Block MYCELIUM = register(new Block("mycelium", builder().destroyTime(0.6f) .booleanState(SNOWY))); public static final Block LILY_PAD = register(new Block("lily_pad", builder().pushReaction(PistonBehavior.DESTROY))); + public static final Block RESIN_BLOCK = register(new Block("resin_block", builder())); + public static final Block RESIN_BRICKS = register(new Block("resin_bricks", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); + public static final Block RESIN_BRICK_STAIRS = register(new Block("resin_brick_stairs", builder().requiresCorrectToolForDrops().destroyTime(1.5f) + .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) + .enumState(HALF) + .enumState(STAIRS_SHAPE) + .booleanState(WATERLOGGED))); + public static final Block RESIN_BRICK_SLAB = register(new Block("resin_brick_slab", builder().requiresCorrectToolForDrops().destroyTime(1.5f) + .enumState(SLAB_TYPE) + .booleanState(WATERLOGGED))); + public static final Block RESIN_BRICK_WALL = register(new Block("resin_brick_wall", builder().requiresCorrectToolForDrops().destroyTime(1.5f) + .enumState(EAST_WALL) + .enumState(NORTH_WALL) + .enumState(SOUTH_WALL) + .booleanState(UP) + .booleanState(WATERLOGGED) + .enumState(WEST_WALL))); + public static final Block CHISELED_RESIN_BRICKS = register(new Block("chiseled_resin_bricks", builder().requiresCorrectToolForDrops().destroyTime(1.5f))); public static final Block NETHER_BRICKS = register(new Block("nether_bricks", builder().requiresCorrectToolForDrops().destroyTime(2.0f))); public static final Block NETHER_BRICK_FENCE = register(new Block("nether_brick_fence", builder().requiresCorrectToolForDrops().destroyTime(2.0f) .booleanState(EAST) @@ -860,7 +887,7 @@ public final class Blocks { public static final Block NETHER_WART = register(new Block("nether_wart", builder().pushReaction(PistonBehavior.DESTROY) .intState(AGE_3))); public static final Block ENCHANTING_TABLE = register(new Block("enchanting_table", builder().setBlockEntity(BlockEntityType.ENCHANTING_TABLE).requiresCorrectToolForDrops().destroyTime(5.0f))); - public static final Block BREWING_STAND = register(new Block("brewing_stand", builder().setBlockEntity(BlockEntityType.BREWING_STAND).requiresCorrectToolForDrops().destroyTime(0.5f) + public static final Block BREWING_STAND = register(new Block("brewing_stand", builder().setBlockEntity(BlockEntityType.BREWING_STAND).destroyTime(0.5f) .booleanState(HAS_BOTTLE_0) .booleanState(HAS_BOTTLE_1) .booleanState(HAS_BOTTLE_2))); @@ -888,7 +915,7 @@ public final class Blocks { .booleanState(WATERLOGGED))); public static final Block EMERALD_ORE = register(new Block("emerald_ore", builder().requiresCorrectToolForDrops().destroyTime(3.0f))); public static final Block DEEPSLATE_EMERALD_ORE = register(new Block("deepslate_emerald_ore", builder().requiresCorrectToolForDrops().destroyTime(4.5f))); - public static final Block ENDER_CHEST = register(new Block("ender_chest", builder().setBlockEntity(BlockEntityType.ENDER_CHEST).requiresCorrectToolForDrops().destroyTime(22.5f) + public static final Block ENDER_CHEST = register(new Block("ender_chest", builder().setBlockEntity(BlockEntityType.ENDER_CHEST).destroyTime(22.5f) .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) .booleanState(WATERLOGGED))); public static final Block TRIPWIRE_HOOK = register(new Block("tripwire_hook", builder().pushReaction(PistonBehavior.DESTROY) @@ -1062,9 +1089,9 @@ public final class Blocks { .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) .enumState(CHEST_TYPE, ChestType.VALUES) .booleanState(WATERLOGGED))); - public static final Block LIGHT_WEIGHTED_PRESSURE_PLATE = register(new Block("light_weighted_pressure_plate", builder().requiresCorrectToolForDrops().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) + public static final Block LIGHT_WEIGHTED_PRESSURE_PLATE = register(new Block("light_weighted_pressure_plate", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) .intState(POWER))); - public static final Block HEAVY_WEIGHTED_PRESSURE_PLATE = register(new Block("heavy_weighted_pressure_plate", builder().requiresCorrectToolForDrops().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) + public static final Block HEAVY_WEIGHTED_PRESSURE_PLATE = register(new Block("heavy_weighted_pressure_plate", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) .intState(POWER))); public static final Block COMPARATOR = register(new Block("comparator", builder().setBlockEntity(BlockEntityType.COMPARATOR).pushReaction(PistonBehavior.DESTROY) .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) @@ -2096,14 +2123,14 @@ public final class Blocks { public static final Block SMITHING_TABLE = register(new Block("smithing_table", builder().destroyTime(2.5f))); public static final Block STONECUTTER = register(new Block("stonecutter", builder().requiresCorrectToolForDrops().destroyTime(3.5f) .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST))); - public static final Block BELL = register(new Block("bell", builder().setBlockEntity(BlockEntityType.BELL).requiresCorrectToolForDrops().destroyTime(5.0f).pushReaction(PistonBehavior.DESTROY) + public static final Block BELL = register(new Block("bell", builder().setBlockEntity(BlockEntityType.BELL).destroyTime(5.0f).pushReaction(PistonBehavior.DESTROY) .enumState(BELL_ATTACHMENT) .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) .booleanState(POWERED))); - public static final Block LANTERN = register(new Block("lantern", builder().requiresCorrectToolForDrops().destroyTime(3.5f).pushReaction(PistonBehavior.DESTROY) + public static final Block LANTERN = register(new Block("lantern", builder().destroyTime(3.5f).pushReaction(PistonBehavior.DESTROY) .booleanState(HANGING) .booleanState(WATERLOGGED))); - public static final Block SOUL_LANTERN = register(new Block("soul_lantern", builder().requiresCorrectToolForDrops().destroyTime(3.5f).pushReaction(PistonBehavior.DESTROY) + public static final Block SOUL_LANTERN = register(new Block("soul_lantern", builder().destroyTime(3.5f).pushReaction(PistonBehavior.DESTROY) .booleanState(HANGING) .booleanState(WATERLOGGED))); public static final Block CAMPFIRE = register(new Block("campfire", builder().setBlockEntity(BlockEntityType.CAMPFIRE).destroyTime(2.0f) @@ -2307,7 +2334,7 @@ public final class Blocks { public static final Block POLISHED_BLACKSTONE_SLAB = register(new Block("polished_blackstone_slab", builder().requiresCorrectToolForDrops().destroyTime(2.0f) .enumState(SLAB_TYPE) .booleanState(WATERLOGGED))); - public static final Block POLISHED_BLACKSTONE_PRESSURE_PLATE = register(new Block("polished_blackstone_pressure_plate", builder().requiresCorrectToolForDrops().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) + public static final Block POLISHED_BLACKSTONE_PRESSURE_PLATE = register(new Block("polished_blackstone_pressure_plate", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) .booleanState(POWERED))); public static final Block POLISHED_BLACKSTONE_BUTTON = register(new Block("polished_blackstone_button", builder().destroyTime(0.5f).pushReaction(PistonBehavior.DESTROY) .enumState(ATTACH_FACE) @@ -2606,49 +2633,49 @@ public final class Blocks { public static final Block WAXED_CUT_COPPER_SLAB = register(new Block("waxed_cut_copper_slab", builder().requiresCorrectToolForDrops().destroyTime(3.0f) .enumState(SLAB_TYPE) .booleanState(WATERLOGGED))); - public static final Block COPPER_DOOR = register(new DoorBlock("copper_door", builder().requiresCorrectToolForDrops().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) + public static final Block COPPER_DOOR = register(new DoorBlock("copper_door", builder().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) .enumState(DOUBLE_BLOCK_HALF) .enumState(DOOR_HINGE) .booleanState(OPEN) .booleanState(POWERED))); - public static final Block EXPOSED_COPPER_DOOR = register(new DoorBlock("exposed_copper_door", builder().requiresCorrectToolForDrops().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) + public static final Block EXPOSED_COPPER_DOOR = register(new DoorBlock("exposed_copper_door", builder().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) .enumState(DOUBLE_BLOCK_HALF) .enumState(DOOR_HINGE) .booleanState(OPEN) .booleanState(POWERED))); - public static final Block OXIDIZED_COPPER_DOOR = register(new DoorBlock("oxidized_copper_door", builder().requiresCorrectToolForDrops().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) + public static final Block OXIDIZED_COPPER_DOOR = register(new DoorBlock("oxidized_copper_door", builder().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) .enumState(DOUBLE_BLOCK_HALF) .enumState(DOOR_HINGE) .booleanState(OPEN) .booleanState(POWERED))); - public static final Block WEATHERED_COPPER_DOOR = register(new DoorBlock("weathered_copper_door", builder().requiresCorrectToolForDrops().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) + public static final Block WEATHERED_COPPER_DOOR = register(new DoorBlock("weathered_copper_door", builder().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) .enumState(DOUBLE_BLOCK_HALF) .enumState(DOOR_HINGE) .booleanState(OPEN) .booleanState(POWERED))); - public static final Block WAXED_COPPER_DOOR = register(new DoorBlock("waxed_copper_door", builder().requiresCorrectToolForDrops().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) + public static final Block WAXED_COPPER_DOOR = register(new DoorBlock("waxed_copper_door", builder().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) .enumState(DOUBLE_BLOCK_HALF) .enumState(DOOR_HINGE) .booleanState(OPEN) .booleanState(POWERED))); - public static final Block WAXED_EXPOSED_COPPER_DOOR = register(new DoorBlock("waxed_exposed_copper_door", builder().requiresCorrectToolForDrops().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) + public static final Block WAXED_EXPOSED_COPPER_DOOR = register(new DoorBlock("waxed_exposed_copper_door", builder().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) .enumState(DOUBLE_BLOCK_HALF) .enumState(DOOR_HINGE) .booleanState(OPEN) .booleanState(POWERED))); - public static final Block WAXED_OXIDIZED_COPPER_DOOR = register(new DoorBlock("waxed_oxidized_copper_door", builder().requiresCorrectToolForDrops().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) + public static final Block WAXED_OXIDIZED_COPPER_DOOR = register(new DoorBlock("waxed_oxidized_copper_door", builder().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) .enumState(DOUBLE_BLOCK_HALF) .enumState(DOOR_HINGE) .booleanState(OPEN) .booleanState(POWERED))); - public static final Block WAXED_WEATHERED_COPPER_DOOR = register(new DoorBlock("waxed_weathered_copper_door", builder().requiresCorrectToolForDrops().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) + public static final Block WAXED_WEATHERED_COPPER_DOOR = register(new DoorBlock("waxed_weathered_copper_door", builder().destroyTime(3.0f).pushReaction(PistonBehavior.DESTROY) .enumState(HORIZONTAL_FACING, Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST) .enumState(DOUBLE_BLOCK_HALF) .enumState(DOOR_HINGE) @@ -2888,8 +2915,12 @@ public final class Blocks { .enumState(NORTH_WALL) .enumState(SOUTH_WALL) .enumState(WEST_WALL))); - public static final Block PALE_HANGING_MOSS = register(new Block("pale_hanging_moss", builder().destroyTime(0.1f).pushReaction(PistonBehavior.DESTROY) + public static final Block PALE_HANGING_MOSS = register(new Block("pale_hanging_moss", builder().pushReaction(PistonBehavior.DESTROY) .booleanState(TIP))); + public static final Block OPEN_EYEBLOSSOM = register(new Block("open_eyeblossom", builder().pushReaction(PistonBehavior.DESTROY))); + public static final Block CLOSED_EYEBLOSSOM = register(new Block("closed_eyeblossom", builder().pushReaction(PistonBehavior.DESTROY))); + public static final Block POTTED_OPEN_EYEBLOSSOM = register(new FlowerPotBlock("potted_open_eyeblossom", OPEN_EYEBLOSSOM, builder().pushReaction(PistonBehavior.DESTROY))); + public static final Block POTTED_CLOSED_EYEBLOSSOM = register(new FlowerPotBlock("potted_closed_eyeblossom", CLOSED_EYEBLOSSOM, builder().pushReaction(PistonBehavior.DESTROY))); private static <T extends Block> T register(T block) { block.setJavaId(BlockRegistries.JAVA_BLOCKS.get().size()); diff --git a/core/src/main/java/org/geysermc/geyser/level/block/property/Properties.java b/core/src/main/java/org/geysermc/geyser/level/block/property/Properties.java index 3e5f1b510..f295c4f51 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/property/Properties.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/property/Properties.java @@ -29,8 +29,12 @@ import org.geysermc.geyser.level.physics.Axis; import org.geysermc.geyser.level.physics.Direction; public final class Properties { + public static final BooleanProperty ACTIVE = BooleanProperty.create("active"); public static final BooleanProperty ATTACHED = BooleanProperty.create("attached"); + public static final BooleanProperty BERRIES = BooleanProperty.create("berries"); + public static final BooleanProperty BLOOM = BooleanProperty.create("bloom"); public static final BooleanProperty BOTTOM = BooleanProperty.create("bottom"); + public static final BooleanProperty CAN_SUMMON = BooleanProperty.create("can_summon"); public static final BooleanProperty CONDITIONAL = BooleanProperty.create("conditional"); public static final BooleanProperty DISARMED = BooleanProperty.create("disarmed"); public static final BooleanProperty DRAG = BooleanProperty.create("drag"); @@ -47,22 +51,20 @@ public final class Properties { public static final BooleanProperty INVERTED = BooleanProperty.create("inverted"); public static final BooleanProperty IN_WALL = BooleanProperty.create("in_wall"); public static final BooleanProperty LIT = BooleanProperty.create("lit"); - public static final BooleanProperty TIP = BooleanProperty.create("tip"); public static final BooleanProperty LOCKED = BooleanProperty.create("locked"); + public static final BooleanProperty NATURAL = BooleanProperty.create("natural"); public static final BooleanProperty OCCUPIED = BooleanProperty.create("occupied"); public static final BooleanProperty OPEN = BooleanProperty.create("open"); public static final BooleanProperty PERSISTENT = BooleanProperty.create("persistent"); public static final BooleanProperty POWERED = BooleanProperty.create("powered"); public static final BooleanProperty SHORT = BooleanProperty.create("short"); + public static final BooleanProperty SHRIEKING = BooleanProperty.create("shrieking"); public static final BooleanProperty SIGNAL_FIRE = BooleanProperty.create("signal_fire"); public static final BooleanProperty SNOWY = BooleanProperty.create("snowy"); + public static final BooleanProperty TIP = BooleanProperty.create("tip"); public static final BooleanProperty TRIGGERED = BooleanProperty.create("triggered"); public static final BooleanProperty UNSTABLE = BooleanProperty.create("unstable"); public static final BooleanProperty WATERLOGGED = BooleanProperty.create("waterlogged"); - public static final BooleanProperty BERRIES = BooleanProperty.create("berries"); - public static final BooleanProperty BLOOM = BooleanProperty.create("bloom"); - public static final BooleanProperty SHRIEKING = BooleanProperty.create("shrieking"); - public static final BooleanProperty CAN_SUMMON = BooleanProperty.create("can_summon"); public static final EnumProperty<Axis> HORIZONTAL_AXIS = EnumProperty.create("axis", Axis.X, Axis.Z); public static final EnumProperty<Axis> AXIS = EnumProperty.create("axis", Axis.VALUES); public static final BooleanProperty UP = BooleanProperty.create("up"); @@ -143,6 +145,5 @@ public final class Properties { public static final BooleanProperty CRAFTING = BooleanProperty.create("crafting"); public static final BasicEnumProperty TRIAL_SPAWNER_STATE = BasicEnumProperty.create("trial_spawner_state", "inactive", "waiting_for_players", "active", "waiting_for_reward_ejection", "ejecting_reward", "cooldown"); public static final BasicEnumProperty VAULT_STATE = BasicEnumProperty.create("vault_state", "inactive", "active", "unlocking", "ejecting"); - public static final BasicEnumProperty CREAKING = BasicEnumProperty.create("creaking", "disabled", "dormant", "active"); public static final BooleanProperty OMINOUS = BooleanProperty.create("ominous"); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/AnvilInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/AnvilInventoryTranslator.java index 40ee28362..cbc8ce7bd 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/AnvilInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/AnvilInventoryTranslator.java @@ -73,7 +73,7 @@ public class AnvilInventoryTranslator extends AbstractBlockInventoryTranslator { @Override public int bedrockSlotToJava(ItemStackRequestSlotData slotInfoData) { - return switch (slotInfoData.getContainer()) { + return switch (slotInfoData.getContainerName().getContainer()) { case ANVIL_INPUT -> 0; case ANVIL_MATERIAL -> 1; case ANVIL_RESULT, CREATED_OUTPUT -> 2; diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/BaseInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/BaseInventoryTranslator.java index f70bad9ea..fd6d9a930 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/BaseInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/BaseInventoryTranslator.java @@ -44,7 +44,7 @@ public abstract class BaseInventoryTranslator extends InventoryTranslator { @Override public int bedrockSlotToJava(ItemStackRequestSlotData slotInfoData) { int slotnum = slotInfoData.getSlot(); - switch (slotInfoData.getContainer()) { + switch (slotInfoData.getContainerName().getContainer()) { case HOTBAR_AND_INVENTORY: case HOTBAR: case INVENTORY: diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/BeaconInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/BeaconInventoryTranslator.java index ceae1b640..6edbd925e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/BeaconInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/BeaconInventoryTranslator.java @@ -121,7 +121,7 @@ public class BeaconInventoryTranslator extends AbstractBlockInventoryTranslator @Override public int bedrockSlotToJava(ItemStackRequestSlotData slotInfoData) { - if (slotInfoData.getContainer() == ContainerSlotType.BEACON_PAYMENT) { + if (slotInfoData.getContainerName().getContainer() == ContainerSlotType.BEACON_PAYMENT) { return 0; } return super.bedrockSlotToJava(slotInfoData); diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/BrewingInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/BrewingInventoryTranslator.java index e425342f3..5147fb75d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/BrewingInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/BrewingInventoryTranslator.java @@ -74,11 +74,11 @@ public class BrewingInventoryTranslator extends AbstractBlockInventoryTranslator @Override public int bedrockSlotToJava(ItemStackRequestSlotData slotInfoData) { - if (slotInfoData.getContainer() == ContainerSlotType.BREWING_INPUT) { + if (slotInfoData.getContainerName().getContainer() == ContainerSlotType.BREWING_INPUT) { // Ingredient return 3; } - if (slotInfoData.getContainer() == ContainerSlotType.BREWING_RESULT) { + if (slotInfoData.getContainerName().getContainer() == ContainerSlotType.BREWING_RESULT) { // Potions return slotInfoData.getSlot() - 1; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java index b0914e5dd..65fc7b35c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java @@ -56,7 +56,7 @@ public class CartographyInventoryTranslator extends AbstractBlockInventoryTransl @Override public int bedrockSlotToJava(ItemStackRequestSlotData slotInfoData) { - return switch (slotInfoData.getContainer()) { + return switch (slotInfoData.getContainerName().getContainer()) { case CARTOGRAPHY_INPUT -> 0; case CARTOGRAPHY_ADDITIONAL -> 1; case CARTOGRAPHY_RESULT, CREATED_OUTPUT -> 2; 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 index 8b0a0ac44..83076640a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/CrafterInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/CrafterInventoryTranslator.java @@ -77,7 +77,7 @@ public class CrafterInventoryTranslator extends AbstractBlockInventoryTranslator @Override public int bedrockSlotToJava(ItemStackRequestSlotData slotInfoData) { int slot = slotInfoData.getSlot(); - switch (slotInfoData.getContainer()) { + switch (slotInfoData.getContainerName().getContainer()) { case HOTBAR_AND_INVENTORY, HOTBAR, INVENTORY -> { //hotbar if (slot >= 9) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/CraftingInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/CraftingInventoryTranslator.java index 4a0f1d7d9..577d87fe5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/CraftingInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/CraftingInventoryTranslator.java @@ -64,12 +64,12 @@ public class CraftingInventoryTranslator extends AbstractBlockInventoryTranslato @Override public int bedrockSlotToJava(ItemStackRequestSlotData slotInfoData) { - if (slotInfoData.getContainer() == ContainerSlotType.CRAFTING_INPUT) { + if (slotInfoData.getContainerName().getContainer() == ContainerSlotType.CRAFTING_INPUT) { // Java goes from 1 - 9, left to right then up to down // Bedrock is the same, but it starts from 32. return slotInfoData.getSlot() - 31; } - if (slotInfoData.getContainer() == ContainerSlotType.CRAFTING_OUTPUT || slotInfoData.getContainer() == ContainerSlotType.CREATED_OUTPUT) { + if (slotInfoData.getContainerName().getContainer() == ContainerSlotType.CRAFTING_OUTPUT || slotInfoData.getContainerName().getContainer() == ContainerSlotType.CREATED_OUTPUT) { return 0; } return super.bedrockSlotToJava(slotInfoData); diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/EnchantingInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/EnchantingInventoryTranslator.java index b51d86d13..eb0e351e1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/EnchantingInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/EnchantingInventoryTranslator.java @@ -135,10 +135,10 @@ public class EnchantingInventoryTranslator extends AbstractBlockInventoryTransla @Override public int bedrockSlotToJava(ItemStackRequestSlotData slotInfoData) { - if (slotInfoData.getContainer() == ContainerSlotType.ENCHANTING_INPUT) { + if (slotInfoData.getContainerName().getContainer() == ContainerSlotType.ENCHANTING_INPUT) { return 0; } - if (slotInfoData.getContainer() == ContainerSlotType.ENCHANTING_MATERIAL) { + if (slotInfoData.getContainerName().getContainer() == ContainerSlotType.ENCHANTING_MATERIAL) { return 1; } return super.bedrockSlotToJava(slotInfoData); diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/GrindstoneInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/GrindstoneInventoryTranslator.java index 5344d27cb..d3283de40 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/GrindstoneInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/GrindstoneInventoryTranslator.java @@ -39,7 +39,7 @@ public class GrindstoneInventoryTranslator extends AbstractBlockInventoryTransla @Override public int bedrockSlotToJava(ItemStackRequestSlotData slotInfoData) { - return switch (slotInfoData.getContainer()) { + return switch (slotInfoData.getContainerName().getContainer()) { case GRINDSTONE_INPUT -> 0; case GRINDSTONE_ADDITIONAL -> 1; case GRINDSTONE_RESULT, CREATED_OUTPUT -> 2; diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java index 7cdcbe8a9..e294442f9 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java @@ -169,7 +169,7 @@ public class LoomInventoryTranslator extends AbstractBlockInventoryTranslator { @Override public int bedrockSlotToJava(ItemStackRequestSlotData slotInfoData) { - return switch (slotInfoData.getContainer()) { + return switch (slotInfoData.getContainerName().getContainer()) { case LOOM_INPUT -> 0; case LOOM_DYE -> 1; case LOOM_MATERIAL -> 2; diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/MerchantInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/MerchantInventoryTranslator.java index 7a7646503..c67b3b190 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/MerchantInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/MerchantInventoryTranslator.java @@ -77,7 +77,7 @@ public class MerchantInventoryTranslator extends BaseInventoryTranslator { @Override public int bedrockSlotToJava(ItemStackRequestSlotData slotInfoData) { - return switch (slotInfoData.getContainer()) { + return switch (slotInfoData.getContainerName().getContainer()) { case TRADE2_INGREDIENT_1 -> 0; case TRADE2_INGREDIENT_2 -> 1; case TRADE2_RESULT, CREATED_OUTPUT -> 2; diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/OldSmithingTableTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/OldSmithingTableTranslator.java index 38bb6ddcd..fc9c4f587 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/OldSmithingTableTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/OldSmithingTableTranslator.java @@ -63,7 +63,7 @@ public class OldSmithingTableTranslator extends AbstractBlockInventoryTranslator @Override public int bedrockSlotToJava(ItemStackRequestSlotData slotInfoData) { - return switch (slotInfoData.getContainer()) { + return switch (slotInfoData.getContainerName().getContainer()) { case SMITHING_TABLE_INPUT -> 0; case SMITHING_TABLE_MATERIAL -> 1; case SMITHING_TABLE_RESULT, CREATED_OUTPUT -> 2; @@ -130,7 +130,7 @@ public class OldSmithingTableTranslator extends AbstractBlockInventoryTranslator } private boolean isInvalidAction(ItemStackRequestSlotData slotData) { - return slotData.getContainer().equals(ContainerSlotType.SMITHING_TABLE_TEMPLATE); + return slotData.getContainerName().getContainer().equals(ContainerSlotType.SMITHING_TABLE_TEMPLATE); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java index f08b90765..445b4715b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java @@ -184,7 +184,7 @@ public class PlayerInventoryTranslator extends InventoryTranslator { @Override public int bedrockSlotToJava(ItemStackRequestSlotData slotInfoData) { int slotnum = slotInfoData.getSlot(); - switch (slotInfoData.getContainer()) { + switch (slotInfoData.getContainerName().getContainer()) { case HOTBAR_AND_INVENTORY: case HOTBAR: case INVENTORY: @@ -462,7 +462,7 @@ public class PlayerInventoryTranslator extends InventoryTranslator { } craftState = CraftState.TRANSFER; - if (transferAction.getSource().getContainer() != ContainerSlotType.CREATED_OUTPUT) { + if (transferAction.getSource().getContainerName().getContainer() != ContainerSlotType.CREATED_OUTPUT) { return rejectRequest(request); } @@ -495,7 +495,7 @@ public class PlayerInventoryTranslator extends InventoryTranslator { } DropAction dropAction = (DropAction) action; - if (dropAction.getSource().getContainer() != ContainerSlotType.CREATED_OUTPUT || dropAction.getSource().getSlot() != 50) { + if (dropAction.getSource().getContainerName().getContainer() != ContainerSlotType.CREATED_OUTPUT || dropAction.getSource().getSlot() != 50) { return rejectRequest(request); } @@ -532,7 +532,7 @@ public class PlayerInventoryTranslator extends InventoryTranslator { } private static boolean isCraftingGrid(ItemStackRequestSlotData slotInfoData) { - return slotInfoData.getContainer() == ContainerSlotType.CRAFTING_INPUT; + return slotInfoData.getContainerName().getContainer() == ContainerSlotType.CRAFTING_INPUT; } @Override diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/SmithingInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/SmithingInventoryTranslator.java index dbe24230a..2a9e974f3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/SmithingInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/SmithingInventoryTranslator.java @@ -44,7 +44,7 @@ public class SmithingInventoryTranslator extends AbstractBlockInventoryTranslato @Override public int bedrockSlotToJava(ItemStackRequestSlotData slotInfoData) { - return switch (slotInfoData.getContainer()) { + return switch (slotInfoData.getContainerName().getContainer()) { case SMITHING_TABLE_TEMPLATE -> TEMPLATE; case SMITHING_TABLE_INPUT -> INPUT; case SMITHING_TABLE_MATERIAL -> MATERIAL; diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/StonecutterInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/StonecutterInventoryTranslator.java index b977ee1a1..df7e15fef 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/StonecutterInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/StonecutterInventoryTranslator.java @@ -84,7 +84,7 @@ public class StonecutterInventoryTranslator extends AbstractBlockInventoryTransl @Override public int bedrockSlotToJava(ItemStackRequestSlotData slotInfoData) { - return switch (slotInfoData.getContainer()) { + return switch (slotInfoData.getContainerName().getContainer()) { case STONECUTTER_INPUT -> 0; case STONECUTTER_RESULT, CREATED_OUTPUT -> 1; default -> super.bedrockSlotToJava(slotInfoData); diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/ChestedHorseInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/ChestedHorseInventoryTranslator.java index f1a5723c8..1a65ad982 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/ChestedHorseInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/ChestedHorseInventoryTranslator.java @@ -53,10 +53,10 @@ public abstract class ChestedHorseInventoryTranslator extends AbstractHorseInven @Override public int bedrockSlotToJava(ItemStackRequestSlotData slotInfoData) { - if (slotInfoData.getContainer() == ContainerSlotType.HORSE_EQUIP) { + if (slotInfoData.getContainerName().getContainer() == ContainerSlotType.HORSE_EQUIP) { return this.equipSlot; } - if (slotInfoData.getContainer() == ContainerSlotType.LEVEL_ENTITY) { + if (slotInfoData.getContainerName().getContainer() == ContainerSlotType.LEVEL_ENTITY) { return slotInfoData.getSlot() + 1; } return super.bedrockSlotToJava(slotInfoData); diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/HorseInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/HorseInventoryTranslator.java index 84d7744d1..af09d5f61 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/HorseInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/HorseInventoryTranslator.java @@ -36,7 +36,7 @@ public class HorseInventoryTranslator extends AbstractHorseInventoryTranslator { @Override public int bedrockSlotToJava(ItemStackRequestSlotData slotInfoData) { - if (slotInfoData.getContainer() == ContainerSlotType.HORSE_EQUIP) { + if (slotInfoData.getContainerName().getContainer() == ContainerSlotType.HORSE_EQUIP) { return slotInfoData.getSlot(); } return super.bedrockSlotToJava(slotInfoData); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java index e1ff7a5fc..cdadb1bb9 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.translator.protocol.java.entity; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.LivingEntity; import org.geysermc.geyser.entity.type.player.PlayerEntity; +import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.skin.FakeHeadProvider; @@ -35,6 +36,7 @@ import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.Equipment; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.ClientboundSetEquipmentPacket; @Translator(packet = ClientboundSetEquipmentPacket.class) @@ -64,7 +66,7 @@ public class JavaSetEquipmentTranslator extends PacketTranslator<ClientboundSetE && javaItem != null && javaItem.getId() == Items.PLAYER_HEAD.javaId() && javaItem.getDataComponents() != null) { - FakeHeadProvider.setHead(session, (PlayerEntity) livingEntity, javaItem.getDataComponents()); + FakeHeadProvider.setHead(session, (PlayerEntity) livingEntity, GeyserItemStack.from(javaItem).getComponent(DataComponentType.PROFILE)); } else { FakeHeadProvider.restoreOriginalSkin(session, livingEntity); } 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 52a4a6df9..bd5ce861b 100644 --- a/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java @@ -28,11 +28,7 @@ package org.geysermc.geyser.util; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3i; import org.geysermc.geyser.entity.attribute.GeyserAttributeType; -import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; import org.geysermc.geyser.inventory.GeyserItemStack; -import org.geysermc.geyser.inventory.PlayerInventory; -import org.geysermc.geyser.inventory.item.BedrockEnchantment; -import org.geysermc.geyser.level.block.Blocks; import org.geysermc.geyser.level.block.type.Block; import org.geysermc.geyser.level.block.type.BlockState; import org.geysermc.geyser.registry.BlockRegistries; @@ -40,10 +36,8 @@ import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.EntityEffectCache; import org.geysermc.geyser.session.cache.registry.JavaRegistries; -import org.geysermc.geyser.session.cache.tags.BlockTag; import org.geysermc.geyser.session.cache.tags.GeyserHolderSet; import org.geysermc.geyser.translator.collision.BlockCollision; -import org.geysermc.mcprotocollib.protocol.data.game.entity.attribute.AttributeType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.ToolData; @@ -145,50 +139,11 @@ public final class BlockUtils { // TODO 1.21.4 this changed probably; no more tiers public static double getBreakTime(GeyserSession session, Block block, ItemMapping item, @Nullable DataComponents components, boolean isSessionPlayer) { -// boolean isShearsEffective = session.getTagCache().is(BlockTag.LEAVES, block) || session.getTagCache().is(BlockTag.WOOL, block); //TODO called twice -// boolean canHarvestWithHand = !block.requiresCorrectToolForDrops(); -// String toolType = ""; -// String toolTier = ""; -// boolean correctTool = false; -// boolean toolCanBreak = false; -// if (item.isTool()) { -// toolType = item.getToolType(); -// toolTier = item.getToolTier(); -// correctTool = correctTool(session, block, toolType); -// toolCanBreak = canToolTierBreakBlock(session, block, toolTier); -// } -// -// int toolEfficiencyLevel = ItemUtils.getEnchantmentLevel(session, components, BedrockEnchantment.EFFICIENCY); -// int hasteLevel = 0; -// int miningFatigueLevel = 0; -// -// if (!isSessionPlayer) { -// // Another entity is currently mining; we have all the information we know -// return calculateBreakTime(block.destroyTime(), toolTier, canHarvestWithHand, correctTool, toolCanBreak, toolType, isShearsEffective, -// toolEfficiencyLevel, hasteLevel, miningFatigueLevel, false, true); -// } -// -// hasteLevel = Math.max(session.getEffectCache().getHaste(), session.getEffectCache().getConduitPower()); -// miningFatigueLevel = session.getEffectCache().getMiningFatigue(); -// -// boolean waterInEyes = session.getCollisionManager().isWaterInEyes(); -// boolean insideOfWaterWithoutAquaAffinity = waterInEyes && -// ItemUtils.getEnchantmentLevel(session, session.getPlayerInventory().getItem(5).getAllComponents(), BedrockEnchantment.AQUA_AFFINITY) < 1; -// -// return calculateBreakTime(block.destroyTime(), toolTier, canHarvestWithHand, correctTool, toolCanBreak, toolType, isShearsEffective, -// toolEfficiencyLevel, hasteLevel, miningFatigueLevel, insideOfWaterWithoutAquaAffinity, session.getPlayerEntity().isOnGround()); + return 0.0; // TODO 1.21.4 } public static double getSessionBreakTime(GeyserSession session, Block block) { -// PlayerInventory inventory = session.getPlayerInventory(); -// GeyserItemStack item = inventory.getItemInHand(); -// ItemMapping mapping = ItemMapping.AIR; -// DataComponents components = null; -// if (item != null) { -// mapping = item.getMapping(session); -// components = item.getAllComponents(); -// } -// return getBreakTime(session, block, mapping, components, true); + return 0.0; // TODO 1.21.4 } /** diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a04e43d34..079309549 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -33,13 +33,13 @@ commodore = "2.2" bungeecord = "a7c6ede" velocity = "3.3.0-SNAPSHOT" viaproxy = "3.3.2-SNAPSHOT" -fabric-loader = "0.16.7" +fabric-loader = "0.16.9" fabric-api = "0.109.1+1.21.4" fabric-permissions-api = "0.3.3" -neoforge-minecraft = "21.3.0-beta" +neoforge-minecraft = "21.4.0-beta" mixin = "0.8.5" mixinextras = "0.3.5" -minecraft = "1.21.4-pre3" +minecraft = "1.21.4" mockito = "5.+" # plugin versions diff --git a/settings.gradle.kts b/settings.gradle.kts index e820f59bd..9aaf6ba59 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -20,7 +20,7 @@ include(":ap") include(":api") include(":bungeecord") include(":fabric") -//include(":neoforge") +include(":neoforge") include(":mod") include(":spigot") include(":standalone") @@ -32,7 +32,7 @@ include(":core") // Specify project dirs project(":bungeecord").projectDir = file("bootstrap/bungeecord") project(":fabric").projectDir = file("bootstrap/mod/fabric") -//project(":neoforge").projectDir = file("bootstrap/mod/neoforge") +project(":neoforge").projectDir = file("bootstrap/mod/neoforge") project(":mod").projectDir = file("bootstrap/mod") project(":spigot").projectDir = file("bootstrap/spigot") project(":standalone").projectDir = file("bootstrap/standalone") From ee5c0e68537146159468cd0154355be3a78846f4 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Wed, 4 Dec 2024 20:46:38 +0800 Subject: [PATCH 094/165] Start on block remapping, send ServerboundPlayerLoadedPacket on respawn/new logins --- core/build.gradle.kts | 4 + .../geyser/entity/EntityDefinitions.java | 10 ++ .../type/living/monster/CreakingEntity.java | 54 +++++++++ .../populator/BlockRegistryPopulator.java | 28 +---- .../registry/populator/Conversion748_729.java | 48 -------- .../registry/populator/Conversion766_748.java | 104 ++++++++++++++++++ .../populator/ItemRegistryPopulator.java | 40 ++++++- ...SetLocalPlayerAsInitializedTranslator.java | 1 + .../protocol/java/JavaLoginTranslator.java | 5 + .../protocol/java/JavaRespawnTranslator.java | 3 + 10 files changed, 222 insertions(+), 75 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java delete mode 100644 core/src/main/java/org/geysermc/geyser/registry/populator/Conversion748_729.java create mode 100644 core/src/main/java/org/geysermc/geyser/registry/populator/Conversion766_748.java diff --git a/core/build.gradle.kts b/core/build.gradle.kts index b0ea5fdf6..29cb49dc2 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -71,6 +71,10 @@ dependencies { api(libs.events) } +tasks.test { + enabled = false +} + tasks.processResources { // This is solely for backwards compatibility for other programs that used this file before the switch to gradle. // It used to be generated by the maven Git-Commit-Id-Plugin 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 47b97c934..f48cf4053 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java @@ -116,6 +116,7 @@ import org.geysermc.geyser.entity.type.living.monster.BasePiglinEntity; import org.geysermc.geyser.entity.type.living.monster.BlazeEntity; import org.geysermc.geyser.entity.type.living.monster.BoggedEntity; import org.geysermc.geyser.entity.type.living.monster.BreezeEntity; +import org.geysermc.geyser.entity.type.living.monster.CreakingEntity; import org.geysermc.geyser.entity.type.living.monster.CreeperEntity; import org.geysermc.geyser.entity.type.living.monster.ElderGuardianEntity; import org.geysermc.geyser.entity.type.living.monster.EnderDragonEntity; @@ -179,6 +180,7 @@ public final class EntityDefinitions { public static final EntityDefinition<AbstractFishEntity> COD; public static final EntityDefinition<CommandBlockMinecartEntity> COMMAND_BLOCK_MINECART; public static final EntityDefinition<CowEntity> COW; + public static final EntityDefinition<CreakingEntity> CREAKING; public static final EntityDefinition<CreeperEntity> CREEPER; public static final EntityDefinition<BoatEntity> DARK_OAK_BOAT; public static final EntityDefinition<ChestBoatEntity> DARK_OAK_CHEST_BOAT; @@ -671,6 +673,14 @@ public final class EntityDefinitions { .type(EntityType.BREEZE) .height(1.77f).width(0.6f) .build(); + CREAKING = EntityDefinition.inherited(CreakingEntity::new, mobEntityBase) + .type(EntityType.CREAKING) + .height(2.7f).width(0.9f) + .addTranslator(MetadataType.BOOLEAN, CreakingEntity::setCanMove) + .addTranslator(MetadataType.BOOLEAN, CreakingEntity::setActive) + .addTranslator(MetadataType.BOOLEAN, CreakingEntity::setIsTearingDown) + .addTranslator(MetadataType.OPTIONAL_POSITION, CreakingEntity::setHomePos) + .build(); CREEPER = EntityDefinition.inherited(CreeperEntity::new, mobEntityBase) .type(EntityType.CREEPER) .height(1.7f).width(0.6f) diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java new file mode 100644 index 000000000..8cfaf7428 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 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.entity.type.living.monster; + +import org.cloudburstmc.math.vector.Vector3f; +import org.cloudburstmc.math.vector.Vector3i; +import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata; +import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.MetadataType; + +import java.util.Optional; +import java.util.UUID; + +public class CreakingEntity extends MonsterEntity { + public CreakingEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) { + super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); + } + + public void setCanMove(EntityMetadata<Boolean,? extends MetadataType<Boolean>> booleanEntityMetadata) { + } + + public void setActive(EntityMetadata<Boolean,? extends MetadataType<Boolean>> booleanEntityMetadata) { + } + + public void setIsTearingDown(EntityMetadata<Boolean,? extends MetadataType<Boolean>> booleanEntityMetadata) { + } + + public void setHomePos(EntityMetadata<Optional<Vector3i>,? extends MetadataType<Optional<Vector3i>>> optionalEntityMetadata) { + } +} 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 1723b22ed..46a820c16 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 @@ -58,7 +58,6 @@ import org.geysermc.geyser.level.block.property.Properties; import org.geysermc.geyser.level.block.type.Block; import org.geysermc.geyser.level.block.type.BlockState; import org.geysermc.geyser.level.block.type.FlowerPotBlock; -import org.geysermc.geyser.level.block.type.SkullBlock; import org.geysermc.geyser.level.physics.PistonBehavior; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.Registries; @@ -66,7 +65,6 @@ import org.geysermc.geyser.registry.type.BlockMappings; import org.geysermc.geyser.registry.type.GeyserBedrockBlock; import org.geysermc.geyser.util.BlockUtils; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; -import org.jetbrains.annotations.NotNull; import java.io.DataInputStream; import java.io.InputStream; @@ -125,8 +123,8 @@ public final class BlockRegistryPopulator { private static void registerBedrockBlocks() { var blockMappers = ImmutableMap.<ObjectIntPair<String>, Remapper>builder() - .put(ObjectIntPair.of("1_21_40", Bedrock_v748.CODEC.getProtocolVersion()), faultyStrippedWoodRemapper()) - .put(ObjectIntPair.of("1_21_50", Bedrock_v765.CODEC.getProtocolVersion()), faultyStrippedWoodRemapper()) + .put(ObjectIntPair.of("1_21_40", Bedrock_v748.CODEC.getProtocolVersion()), Conversion766_748::remapBlock) + .put(ObjectIntPair.of("1_21_50", Bedrock_v765.CODEC.getProtocolVersion()), tag -> tag) .build(); // We can keep this strong as nothing should be garbage collected @@ -259,15 +257,6 @@ public final class BlockRegistryPopulator { NbtMap originalBedrockTag = buildBedrockState(blockState, entry); NbtMap bedrockTag = stateMapper.remap(originalBedrockTag); - // FIXME TEMPORARY - if (blockState.block() instanceof SkullBlock && palette.valueInt() >= Bedrock_v748.CODEC.getProtocolVersion()) { - // The flattening must be a very interesting process. - String skullName = blockState.block().javaIdentifier().asString().replace("_wall", ""); - bedrockTag = bedrockTag.toBuilder() - .putString("name", skullName) - .build(); - } - GeyserBedrockBlock vanillaBedrockDefinition = blockStateOrderedMap.get(bedrockTag); GeyserBedrockBlock bedrockDefinition; @@ -413,19 +402,6 @@ public final class BlockRegistryPopulator { } } - private static @NotNull Remapper faultyStrippedWoodRemapper() { - return tag -> { - final String name = tag.getString("name"); - if (name.endsWith("_wood") && tag.getCompound("states").containsKey("stripped_bit")) { - NbtMapBuilder builder = tag.getCompound("states").toBuilder(); - builder.remove("stripped_bit"); - NbtMap states = builder.build(); - return tag.toBuilder().putCompound("states", states).build(); - } - return tag; - }; - } - private static void registerJavaBlocks() { List<NbtMap> blocksNbt; try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResourceOrThrow("mappings/blocks.nbt")) { diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion748_729.java b/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion748_729.java deleted file mode 100644 index 7a2d1a0cb..000000000 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion748_729.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 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; - -import java.util.Map; - -public class Conversion748_729 { - - private static final Map<String, Integer> NEW_PLAYER_HEADS = Map.of("minecraft:skeleton_skull", 0, "minecraft:wither_skeleton_skull", 1, "minecraft:zombie_head", 2, "minecraft:player_head", 3, "minecraft:creeper_head", 4, "minecraft:dragon_head", 5, "minecraft:piglin_head", 6); - - static GeyserMappingItem remapItem(Item item, GeyserMappingItem mapping) { - String identifier = mapping.getBedrockIdentifier(); - - if (NEW_PLAYER_HEADS.containsKey(identifier)) { - return mapping.withBedrockIdentifier("minecraft:skull") - .withBedrockData(NEW_PLAYER_HEADS.get(identifier)); - } - - return mapping; - } - -} diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion766_748.java b/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion766_748.java new file mode 100644 index 000000000..79265552f --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion766_748.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) 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 io.jsonwebtoken.lang.Collections; +import org.cloudburstmc.nbt.NbtMap; +import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.level.block.Blocks; + +import java.util.ArrayList; +import java.util.List; + +public class Conversion766_748 { + static List<String> newBlockIds = new ArrayList<>(); + static List<String> bedrockIds = new ArrayList<>(); // TODO temp remove + static { + var blocks = Collections.of( + Blocks.PALE_OAK_WOOD, + Blocks.PALE_OAK_PLANKS, + Blocks.PALE_OAK_SAPLING, + Blocks.PALE_OAK_LOG, + Blocks.STRIPPED_PALE_OAK_LOG, + Blocks.STRIPPED_PALE_OAK_WOOD, + Blocks.PALE_OAK_LEAVES, + Blocks.PALE_OAK_SIGN, + Blocks.PALE_OAK_WALL_SIGN, + Blocks.PALE_OAK_HANGING_SIGN, + Blocks.PALE_OAK_WALL_HANGING_SIGN, + Blocks.PALE_OAK_PRESSURE_PLATE, + Blocks.PALE_OAK_TRAPDOOR, + Blocks.POTTED_PALE_OAK_SAPLING, + Blocks.PALE_OAK_BUTTON, + Blocks.PALE_OAK_STAIRS, + Blocks.PALE_OAK_SLAB, + Blocks.PALE_OAK_FENCE_GATE, + Blocks.PALE_OAK_FENCE, + Blocks.PALE_OAK_DOOR, + Blocks.PALE_MOSS_BLOCK, + Blocks.PALE_MOSS_CARPET, + Blocks.PALE_HANGING_MOSS, + + Blocks.OPEN_EYEBLOSSOM, + Blocks.CLOSED_EYEBLOSSOM, + Blocks.POTTED_OPEN_EYEBLOSSOM, + Blocks.POTTED_CLOSED_EYEBLOSSOM, + + Blocks.RESIN_CLUMP, + Blocks.RESIN_BLOCK, + Blocks.RESIN_BRICKS, + Blocks.RESIN_BRICK_STAIRS, + Blocks.RESIN_BRICK_SLAB, + Blocks.RESIN_BRICK_WALL, + Blocks.CHISELED_RESIN_BRICKS, + + Blocks.CREAKING_HEART + ); + + blocks.forEach(block -> newBlockIds.add(block.javaIdentifier().value())); + } + + static NbtMap remapBlock(NbtMap tag) { + + GeyserImpl.getInstance().getLogger().info(tag.toString()); + + String name = tag.getString("name"); + if (newBlockIds.contains(name)) { + bedrockIds.add(name); + // TODO + return tag.toBuilder() + .putCompound("states", NbtMap.builder().build()) + .putString("name", "minecraft:unknown") + .build(); + } + + if (name.contains("resin") || name.contains("creaking") || name.contains("pale")) { + throw new RuntimeException("ya missed " + name); + } + + 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 a94cf132d..7c636cd24 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 @@ -82,6 +82,7 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -107,8 +108,45 @@ public class ItemRegistryPopulator { } public static void populate() { + + Map<Item, Item> itemFallbacks = new HashMap<>(); + itemFallbacks.put(Items.PALE_OAK_PLANKS, Items.BIRCH_PLANKS); + itemFallbacks.put(Items.PALE_OAK_FENCE, Items.BIRCH_FENCE); + itemFallbacks.put(Items.PALE_OAK_FENCE_GATE, Items.BIRCH_FENCE_GATE); + itemFallbacks.put(Items.PALE_OAK_STAIRS, Items.BIRCH_STAIRS); + itemFallbacks.put(Items.PALE_OAK_DOOR, Items.BIRCH_DOOR); + itemFallbacks.put(Items.PALE_OAK_TRAPDOOR, Items.BIRCH_TRAPDOOR); + itemFallbacks.put(Items.PALE_OAK_SLAB, Items.BIRCH_SLAB); + itemFallbacks.put(Items.PALE_OAK_LOG, Items.BIRCH_LOG); + itemFallbacks.put(Items.STRIPPED_PALE_OAK_LOG, Items.STRIPPED_BIRCH_LOG); + itemFallbacks.put(Items.PALE_OAK_WOOD, Items.BIRCH_WOOD); + itemFallbacks.put(Items.PALE_OAK_LEAVES, Items.BIRCH_LEAVES); + itemFallbacks.put(Items.PALE_OAK_SAPLING, Items.BIRCH_SAPLING); + itemFallbacks.put(Items.STRIPPED_PALE_OAK_WOOD, Items.STRIPPED_BIRCH_WOOD); + itemFallbacks.put(Items.PALE_OAK_SIGN, Items.BIRCH_SIGN); + itemFallbacks.put(Items.PALE_OAK_HANGING_SIGN, Items.BIRCH_HANGING_SIGN); + itemFallbacks.put(Items.PALE_OAK_BOAT, Items.BIRCH_BOAT); + itemFallbacks.put(Items.PALE_OAK_CHEST_BOAT, Items.BIRCH_CHEST_BOAT); + itemFallbacks.put(Items.PALE_OAK_BUTTON, Items.BIRCH_BUTTON); + itemFallbacks.put(Items.PALE_OAK_PRESSURE_PLATE, Items.BIRCH_PRESSURE_PLATE); + itemFallbacks.put(Items.RESIN_CLUMP, Items.RAW_COPPER); + itemFallbacks.put(Items.RESIN_BRICK_WALL, Items.RED_SANDSTONE_WALL); + itemFallbacks.put(Items.RESIN_BRICK_STAIRS, Items.RED_SANDSTONE_STAIRS); + itemFallbacks.put(Items.RESIN_BRICK_SLAB, Items.RED_SANDSTONE_SLAB); + itemFallbacks.put(Items.RESIN_BLOCK, Items.RED_SANDSTONE); + itemFallbacks.put(Items.RESIN_BRICK, Items.BRICK); + itemFallbacks.put(Items.RESIN_BRICKS, Items.CUT_RED_SANDSTONE); + itemFallbacks.put(Items.CHISELED_RESIN_BRICKS, Items.CHISELED_RED_SANDSTONE); + itemFallbacks.put(Items.CLOSED_EYEBLOSSOM, Items.WHITE_TULIP); + itemFallbacks.put(Items.OPEN_EYEBLOSSOM, Items.OXEYE_DAISY); + itemFallbacks.put(Items.PALE_MOSS_BLOCK, Items.MOSS_BLOCK); + itemFallbacks.put(Items.PALE_MOSS_CARPET, Items.MOSS_CARPET); + itemFallbacks.put(Items.PALE_HANGING_MOSS, Items.HANGING_ROOTS); + itemFallbacks.put(Items.CREAKING_HEART, Items.CHISELED_POLISHED_BLACKSTONE); + itemFallbacks.put(Items.CREAKING_SPAWN_EGG, Items.HOGLIN_SPAWN_EGG); + List<PaletteVersion> paletteVersions = new ArrayList<>(2); - paletteVersions.add(new PaletteVersion("1_21_40", Bedrock_v748.CODEC.getProtocolVersion())); + paletteVersions.add(new PaletteVersion("1_21_40", Bedrock_v748.CODEC.getProtocolVersion(), itemFallbacks, (item, mapping) -> mapping)); paletteVersions.add(new PaletteVersion("1_21_50", Bedrock_v765.CODEC.getProtocolVersion())); GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java index 556d8cd8d..fcbd3bb8c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java @@ -40,6 +40,7 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.Serverbound public class BedrockSetLocalPlayerAsInitializedTranslator extends PacketTranslator<SetLocalPlayerAsInitializedPacket> { @Override public void translate(GeyserSession session, SetLocalPlayerAsInitializedPacket packet) { + GeyserImpl.getInstance().getLogger().info(packet.toString()); if (session.getPlayerEntity().getGeyserId() == packet.getRuntimeEntityId()) { if (!session.getUpstream().isInitialized()) { session.getUpstream().setInitialized(true); 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 93a7d9a14..7a33c53d6 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 @@ -45,6 +45,7 @@ import org.geysermc.geyser.util.MinecraftKey; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.PlayerSpawnInfo; import org.geysermc.mcprotocollib.protocol.packet.common.serverbound.ServerboundCustomPayloadPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundLoginPacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundPlayerLoadedPacket; import java.nio.charset.StandardCharsets; import java.util.Arrays; @@ -128,5 +129,9 @@ public class JavaLoginTranslator extends PacketTranslator<ClientboundLoginPacket } ChunkUtils.loadDimension(session); + + if (!needsSpawnPacket) { + session.sendDownstreamGamePacket(ServerboundPlayerLoadedPacket.INSTANCE); + } } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRespawnTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRespawnTranslator.java index 5c477f23e..89aa21ede 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRespawnTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRespawnTranslator.java @@ -38,6 +38,7 @@ import org.geysermc.geyser.util.DimensionUtils; import org.geysermc.geyser.util.EntityUtils; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.PlayerSpawnInfo; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundRespawnPacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundPlayerLoadedPacket; @Translator(packet = ClientboundRespawnPacket.class) public class JavaRespawnTranslator extends PacketTranslator<ClientboundRespawnPacket> { @@ -93,5 +94,7 @@ public class JavaRespawnTranslator extends PacketTranslator<ClientboundRespawnPa ChunkUtils.loadDimension(session); } + + session.sendDownstreamGamePacket(ServerboundPlayerLoadedPacket.INSTANCE); } } From d2051c22422e586347cb3a473f4c90b19519bcc3 Mon Sep 17 00:00:00 2001 From: chris <github@onechris.mozmail.com> Date: Thu, 5 Dec 2024 01:11:03 +0800 Subject: [PATCH 095/165] Various small fixes - update cloudburst/protocol dependency, remove "temporary" log info spamming (#5186) --- .../geyser/platform/spigot/GeyserSpigotInjector.java | 1 - .../main/java/org/geysermc/geyser/network/GameProtocol.java | 5 ++--- .../geyser/registry/populator/BlockRegistryPopulator.java | 4 ++-- .../geyser/registry/populator/ItemRegistryPopulator.java | 4 ++-- .../geyser/registry/populator/TagRegistryPopulator.java | 4 ++-- .../protocol/java/entity/JavaTeleportEntityTranslator.java | 2 +- gradle/libs.versions.toml | 6 +++--- 7 files changed, 12 insertions(+), 14 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 5dcfbd0f8..a3402a752 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 @@ -180,7 +180,6 @@ public class GeyserSpigotInjector extends GeyserInjector { bootstrap.getGeyserConfig().getRemote().port(), this.serverSocketAddress, InetAddress.getLoopbackAddress().getHostAddress(), protocol, protocol.createHelper()); session.connect(); - session.disconnect(""); } @Override 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 378dc5078..c762cf5d3 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -28,7 +28,7 @@ package org.geysermc.geyser.network; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748; -import org.cloudburstmc.protocol.bedrock.codec.v765.Bedrock_v765; +import org.cloudburstmc.protocol.bedrock.codec.v766.Bedrock_v766; import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec; import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodec; import org.geysermc.mcprotocollib.protocol.codec.PacketCodec; @@ -46,9 +46,8 @@ 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 = CodecProcessor.processCodec(Bedrock_v765.CODEC.toBuilder() + public static final BedrockCodec DEFAULT_BEDROCK_CODEC = CodecProcessor.processCodec(Bedrock_v766.CODEC.toBuilder() .minecraftVersion("1.21.50") - .protocolVersion(766) .build()); /** 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 1723b22ed..e1f1b2c8b 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 @@ -45,7 +45,7 @@ import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.nbt.NbtUtils; import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748; -import org.cloudburstmc.protocol.bedrock.codec.v765.Bedrock_v765; +import org.cloudburstmc.protocol.bedrock.codec.v766.Bedrock_v766; import org.cloudburstmc.protocol.bedrock.data.BlockPropertyData; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.geysermc.geyser.GeyserImpl; @@ -126,7 +126,7 @@ public final class BlockRegistryPopulator { private static void registerBedrockBlocks() { var blockMappers = ImmutableMap.<ObjectIntPair<String>, Remapper>builder() .put(ObjectIntPair.of("1_21_40", Bedrock_v748.CODEC.getProtocolVersion()), faultyStrippedWoodRemapper()) - .put(ObjectIntPair.of("1_21_50", Bedrock_v765.CODEC.getProtocolVersion()), faultyStrippedWoodRemapper()) + .put(ObjectIntPair.of("1_21_50", Bedrock_v766.CODEC.getProtocolVersion()), faultyStrippedWoodRemapper()) .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 e9901c620..cda81cf5b 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 @@ -46,7 +46,7 @@ import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.nbt.NbtUtils; import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748; -import org.cloudburstmc.protocol.bedrock.codec.v765.Bedrock_v765; +import org.cloudburstmc.protocol.bedrock.codec.v766.Bedrock_v766; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.SimpleItemDefinition; @@ -109,7 +109,7 @@ public class ItemRegistryPopulator { public static void populate() { List<PaletteVersion> paletteVersions = new ArrayList<>(2); paletteVersions.add(new PaletteVersion("1_21_40", Bedrock_v748.CODEC.getProtocolVersion())); - paletteVersions.add(new PaletteVersion("1_21_50", Bedrock_v765.CODEC.getProtocolVersion())); + paletteVersions.add(new PaletteVersion("1_21_50", Bedrock_v766.CODEC.getProtocolVersion())); GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java index dd654531a..bf1ed6194 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/TagRegistryPopulator.java @@ -34,7 +34,7 @@ import it.unimi.dsi.fastutil.ints.IntList; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap; import it.unimi.dsi.fastutil.objects.ObjectIntPair; import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748; -import org.cloudburstmc.protocol.bedrock.codec.v765.Bedrock_v765; +import org.cloudburstmc.protocol.bedrock.codec.v766.Bedrock_v766; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.item.type.Item; @@ -68,7 +68,7 @@ public final class TagRegistryPopulator { List<ObjectIntPair<String>> paletteVersions = List.of( ObjectIntPair.of("1_21_40", Bedrock_v748.CODEC.getProtocolVersion()), - ObjectIntPair.of("1_21_50", Bedrock_v765.CODEC.getProtocolVersion()) + ObjectIntPair.of("1_21_50", Bedrock_v766.CODEC.getProtocolVersion()) ); Type type = new TypeToken<Map<String, List<String>>>() {}.getType(); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTeleportEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTeleportEntityTranslator.java index eda195a8f..40379eac3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTeleportEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTeleportEntityTranslator.java @@ -35,6 +35,6 @@ public class JavaTeleportEntityTranslator extends PacketTranslator<ClientboundTe @Override public void translate(GeyserSession session, ClientboundTeleportEntityPacket packet) { - session.getGeyser().getLogger().info(packet.toString()); + session.getGeyser().getLogger().debug(packet.toString()); } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 994c9a811..029e444a5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,9 +10,9 @@ netty-io-uring = "0.0.25.Final-SNAPSHOT" guava = "29.0-jre" gson = "2.3.1" # Provided by Spigot 1.8.8 websocket = "1.5.1" -protocol-connection = "3.0.0.Beta5-20241121.192504-18" -protocol-common = "3.0.0.Beta5-20241121.192504-18" -protocol-codec = "3.0.0.Beta5-20241121.192504-18" +protocol-connection = "3.0.0.Beta5-20241203.200249-19" +protocol-common = "3.0.0.Beta5-20241203.200249-19" +protocol-codec = "3.0.0.Beta5-20241203.200249-19" raknet = "1.0.0.CR3-20240416.144209-1" minecraftauth = "4.1.1" mcprotocollib = "1.21.2-20241107.110329-3" From ed3008f2451a6354c001ee91aaa4a064167aa964 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Thu, 5 Dec 2024 17:54:00 +0800 Subject: [PATCH 096/165] Finish mappings - let it build --- core/build.gradle.kts | 4 - .../entity/type/player/PlayerEntity.java | 2 +- .../org/geysermc/geyser/item/type/Item.java | 9 ++- .../registry/populator/Conversion766_748.java | 78 ++++++++++++------- .../MerchantInventoryTranslator.java | 2 +- .../player/BedrockInteractTranslator.java | 2 +- .../entity/JavaSetPassengersTranslator.java | 4 +- 7 files changed, 63 insertions(+), 38 deletions(-) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 29cb49dc2..b0ea5fdf6 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -71,10 +71,6 @@ dependencies { api(libs.events) } -tasks.test { - enabled = false -} - tasks.processResources { // This is solely for backwards compatibility for other programs that used this file before the switch to gradle. // It used to be generated by the maven Git-Commit-Id-Plugin 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 7a443d6e8..2bdbb56df 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 @@ -335,7 +335,7 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { parrot.updateBedrockMetadata(); SetEntityLinkPacket linkPacket = new SetEntityLinkPacket(); EntityLinkData.Type type = isLeft ? EntityLinkData.Type.RIDER : EntityLinkData.Type.PASSENGER; - linkPacket.setEntityLink(new EntityLinkData(geyserId, parrot.getGeyserId(), type, false, false)); + linkPacket.setEntityLink(new EntityLinkData(geyserId, parrot.getGeyserId(), type, false, false, 0f)); // Delay, or else spawned-in players won't get the link // TODO: Find a better solution. session.scheduleInEventLoop(() -> session.sendUpstreamPacket(linkPacket), 500, TimeUnit.MILLISECONDS); 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 9b2603284..b12ab4d67 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 @@ -64,11 +64,13 @@ public class Item { protected final Key javaIdentifier; private int javaId = -1; private final int attackDamage; - private final DataComponents baseComponents; // unmodifiable + private DataComponents baseComponents; // unmodifiable public Item(String javaIdentifier, Builder builder) { this.javaIdentifier = MinecraftKey.key(javaIdentifier); - this.baseComponents = builder.components == null ? Registries.DEFAULT_DATA_COMPONENTS.get(javaId) : builder.components; + if (builder.components != null) { + this.baseComponents = builder.components; + } this.attackDamage = builder.attackDamage; } @@ -272,6 +274,9 @@ public class Item { throw new RuntimeException("Item ID has already been set!"); } this.javaId = javaId; + if (this.baseComponents == null) { + this.baseComponents = Registries.DEFAULT_DATA_COMPONENTS.get(javaId); + } } @Override diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion766_748.java b/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion766_748.java index 79265552f..4568d0154 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion766_748.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion766_748.java @@ -25,19 +25,20 @@ package org.geysermc.geyser.registry.populator; -import io.jsonwebtoken.lang.Collections; import org.cloudburstmc.nbt.NbtMap; -import org.geysermc.geyser.GeyserImpl; +import org.cloudburstmc.nbt.NbtMapBuilder; import org.geysermc.geyser.level.block.Blocks; import java.util.ArrayList; import java.util.List; +import java.util.Set; public class Conversion766_748 { - static List<String> newBlockIds = new ArrayList<>(); - static List<String> bedrockIds = new ArrayList<>(); // TODO temp remove + static List<String> PALE_WOODEN_BLOCKS = new ArrayList<>(); + static List<String> OTHER_NEW_BLOCKS = new ArrayList<>(); + static { - var blocks = Collections.of( + Set.of( Blocks.PALE_OAK_WOOD, Blocks.PALE_OAK_PLANKS, Blocks.PALE_OAK_SAPLING, @@ -45,27 +46,29 @@ public class Conversion766_748 { Blocks.STRIPPED_PALE_OAK_LOG, Blocks.STRIPPED_PALE_OAK_WOOD, Blocks.PALE_OAK_LEAVES, - Blocks.PALE_OAK_SIGN, - Blocks.PALE_OAK_WALL_SIGN, Blocks.PALE_OAK_HANGING_SIGN, - Blocks.PALE_OAK_WALL_HANGING_SIGN, Blocks.PALE_OAK_PRESSURE_PLATE, Blocks.PALE_OAK_TRAPDOOR, - Blocks.POTTED_PALE_OAK_SAPLING, Blocks.PALE_OAK_BUTTON, Blocks.PALE_OAK_STAIRS, Blocks.PALE_OAK_SLAB, Blocks.PALE_OAK_FENCE_GATE, Blocks.PALE_OAK_FENCE, - Blocks.PALE_OAK_DOOR, + Blocks.PALE_OAK_DOOR + ).forEach(block -> PALE_WOODEN_BLOCKS.add(block.javaIdentifier().value())); + + // Some things are of course stupid + PALE_WOODEN_BLOCKS.add("pale_oak_standing_sign"); + PALE_WOODEN_BLOCKS.add("pale_oak_wall_sign"); + PALE_WOODEN_BLOCKS.add("pale_oak_double_slab"); + + Set.of( Blocks.PALE_MOSS_BLOCK, Blocks.PALE_MOSS_CARPET, Blocks.PALE_HANGING_MOSS, Blocks.OPEN_EYEBLOSSOM, Blocks.CLOSED_EYEBLOSSOM, - Blocks.POTTED_OPEN_EYEBLOSSOM, - Blocks.POTTED_CLOSED_EYEBLOSSOM, Blocks.RESIN_CLUMP, Blocks.RESIN_BLOCK, @@ -76,29 +79,50 @@ public class Conversion766_748 { Blocks.CHISELED_RESIN_BRICKS, Blocks.CREAKING_HEART - ); + ).forEach(block -> OTHER_NEW_BLOCKS.add(block.javaIdentifier().value())); - blocks.forEach(block -> newBlockIds.add(block.javaIdentifier().value())); + OTHER_NEW_BLOCKS.add("resin_brick_double_slab"); } static NbtMap remapBlock(NbtMap tag) { - - GeyserImpl.getInstance().getLogger().info(tag.toString()); - - String name = tag.getString("name"); - if (newBlockIds.contains(name)) { - bedrockIds.add(name); - // TODO - return tag.toBuilder() - .putCompound("states", NbtMap.builder().build()) - .putString("name", "minecraft:unknown") - .build(); + String name = tag.getString("name").replace("minecraft:", ""); + if (PALE_WOODEN_BLOCKS.contains(name)) { + return withName(tag, name.replace("pale_oak", "birch")); } - if (name.contains("resin") || name.contains("creaking") || name.contains("pale")) { - throw new RuntimeException("ya missed " + name); + if (OTHER_NEW_BLOCKS.contains(name)) { + return switch (name) { + case "resin_brick_double_slab" -> withName(tag,"red_sandstone_double_slab"); + case "pale_moss_block" -> withName(tag, "moss_block"); + case "pale_moss_carpet" -> withoutStates("moss_carpet"); + case "pale_hanging_moss" -> withoutStates("hanging_roots"); + case "open_eyeblossom" -> withoutStates("oxeye_daisy"); + case "closed_eyeblossom" -> withoutStates("white_tulip"); + case "resin_clump" -> withoutStates("unknown"); + case "resin_block" -> withoutStates("red_sandstone"); + case "resin_bricks" -> withoutStates("cut_red_sandstone"); + case "resin_brick_stairs" -> withName(tag, "red_sandstone_stairs"); + case "resin_brick_slab" -> withName(tag, "red_sandstone_slab"); + case "resin_brick_wall" -> withName(tag, "red_sandstone_wall"); + case "chiseled_resin_bricks" -> withName(tag, "chiseled_red_sandstone"); + case "creaking_heart" -> withoutStates("chiseled_polished_blackstone"); + default -> throw new IllegalStateException("missing replacement for new block! " + name); + }; } return tag; } + + static NbtMap withName(NbtMap tag, String name) { + NbtMapBuilder builder = tag.toBuilder(); + builder.replace("name", "minecraft:" + name); + return builder.build(); + } + + static NbtMap withoutStates(String name) { + NbtMapBuilder tagBuilder = NbtMap.builder(); + tagBuilder.putString("name", "minecraft:" + name); + tagBuilder.putCompound("states", NbtMap.builder().build()); + return tagBuilder.build(); + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/MerchantInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/MerchantInventoryTranslator.java index c67b3b190..4ac159981 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/MerchantInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/MerchantInventoryTranslator.java @@ -112,7 +112,7 @@ public class MerchantInventoryTranslator extends BaseInventoryTranslator { SetEntityLinkPacket linkPacket = new SetEntityLinkPacket(); EntityLinkData.Type type = EntityLinkData.Type.PASSENGER; - linkPacket.setEntityLink(new EntityLinkData(session.getPlayerEntity().getGeyserId(), geyserId, type, true, false)); + linkPacket.setEntityLink(new EntityLinkData(session.getPlayerEntity().getGeyserId(), geyserId, type, true, false, 0f)); session.sendUpstreamPacket(linkPacket); merchantInventory.setVillager(villager); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockInteractTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockInteractTranslator.java index 2df77ad16..62487b20d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockInteractTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockInteractTranslator.java @@ -91,7 +91,7 @@ public class BedrockInteractTranslator extends PacketTranslator<InteractPacket> // If the server doesn't agree with our dismount (sends a packet saying we dismounted), // then remount the player. SetEntityLinkPacket linkPacket = new SetEntityLinkPacket(); - linkPacket.setEntityLink(new EntityLinkData(vehicleBedrockId, session.getPlayerEntity().getGeyserId(), EntityLinkData.Type.PASSENGER, true, false)); + linkPacket.setEntityLink(new EntityLinkData(vehicleBedrockId, session.getPlayerEntity().getGeyserId(), EntityLinkData.Type.PASSENGER, true, false, 0f)); session.sendUpstreamPacket(linkPacket); } }, 1, TimeUnit.SECONDS)); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java index 865ca0464..fe4a13748 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java @@ -70,7 +70,7 @@ public class JavaSetPassengersTranslator extends PacketTranslator<ClientboundSet boolean rider = packet.getPassengerIds()[0] == passengerId; EntityLinkData.Type type = rider ? EntityLinkData.Type.RIDER : EntityLinkData.Type.PASSENGER; SetEntityLinkPacket linkPacket = new SetEntityLinkPacket(); - linkPacket.setEntityLink(new EntityLinkData(entity.getGeyserId(), passenger.getGeyserId(), type, false, false)); + linkPacket.setEntityLink(new EntityLinkData(entity.getGeyserId(), passenger.getGeyserId(), type, false, false, 0f)); session.sendUpstreamPacket(linkPacket); newPassengers.add(passenger); @@ -88,7 +88,7 @@ public class JavaSetPassengersTranslator extends PacketTranslator<ClientboundSet } if (!newPassengers.contains(passenger)) { SetEntityLinkPacket linkPacket = new SetEntityLinkPacket(); - linkPacket.setEntityLink(new EntityLinkData(entity.getGeyserId(), passenger.getGeyserId(), EntityLinkData.Type.REMOVE, false, false)); + linkPacket.setEntityLink(new EntityLinkData(entity.getGeyserId(), passenger.getGeyserId(), EntityLinkData.Type.REMOVE, false, false, 0f)); session.sendUpstreamPacket(linkPacket); passenger.setVehicle(null); From b469a61b722a9793b6db8299f6419f486d53e0b2 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Thu, 5 Dec 2024 18:16:09 +0800 Subject: [PATCH 097/165] Include item_data_components.json, target new mappings --- .../DataComponentRegistryPopulator.java | 2 +- .../resources/java/item_data_components.json | 19962 ++++++++++++++++ core/src/main/resources/mappings | 2 +- 3 files changed, 19964 insertions(+), 2 deletions(-) create mode 100644 core/src/main/resources/java/item_data_components.json diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java index 0c89760b1..386c795d2 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java @@ -54,7 +54,7 @@ public final class DataComponentRegistryPopulator { public static void populate() { GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); List<DataComponents> defaultComponents; - try (InputStream stream = bootstrap.getResourceOrThrow("mappings/item_data_components.json")) { + try (InputStream stream = bootstrap.getResourceOrThrow("java/item_data_components.json")) { JsonElement rootElement = JsonParser.parseReader(new InputStreamReader(stream)); JsonArray jsonArray = rootElement.getAsJsonArray(); diff --git a/core/src/main/resources/java/item_data_components.json b/core/src/main/resources/java/item_data_components.json new file mode 100644 index 000000000..141666fc9 --- /dev/null +++ b/core/src/main/resources/java/item_data_components.json @@ -0,0 +1,19962 @@ +[ + { + "id": 0, + "key": "minecraft:air", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw1taW5lY3JhZnQ6YWly", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAE2Jsb2NrLm1pbmVjcmFmdC5haXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1, + "key": "minecraft:stone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6c3RvbmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5zdG9uZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 2, + "key": "minecraft:granite", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6Z3Jhbml0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5ncmFuaXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 3, + "key": "minecraft:polished_granite", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6cG9saXNoZWRfZ3Jhbml0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ncmFuaXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 4, + "key": "minecraft:diorite", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6ZGlvcml0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5kaW9yaXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 5, + "key": "minecraft:polished_diorite", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6cG9saXNoZWRfZGlvcml0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9kaW9yaXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 6, + "key": "minecraft:andesite", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6YW5kZXNpdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5hbmRlc2l0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 7, + "key": "minecraft:polished_andesite", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6cG9saXNoZWRfYW5kZXNpdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9hbmRlc2l0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 8, + "key": "minecraft:deepslate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6ZGVlcHNsYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 9, + "key": "minecraft:cobbled_deepslate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6Y29iYmxlZF9kZWVwc2xhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5jb2JibGVkX2RlZXBzbGF0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 10, + "key": "minecraft:polished_deepslate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6cG9saXNoZWRfZGVlcHNsYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9kZWVwc2xhdGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 11, + "key": "minecraft:calcite", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6Y2FsY2l0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5jYWxjaXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 12, + "key": "minecraft:tuff", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw5taW5lY3JhZnQ6dHVmZg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC50dWZmAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 13, + "key": "minecraft:tuff_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6dHVmZl9zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC50dWZmX3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 14, + "key": "minecraft:tuff_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6dHVmZl9zdGFpcnM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC50dWZmX3N0YWlycwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 15, + "key": "minecraft:tuff_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6dHVmZl93YWxs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC50dWZmX3dhbGwA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 16, + "key": "minecraft:chiseled_tuff", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y2hpc2VsZWRfdHVmZg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF90dWZmAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 17, + "key": "minecraft:polished_tuff", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6cG9saXNoZWRfdHVmZg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF90dWZmAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 18, + "key": "minecraft:polished_tuff_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6cG9saXNoZWRfdHVmZl9zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF90dWZmX3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 19, + "key": "minecraft:polished_tuff_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6cG9saXNoZWRfdHVmZl9zdGFpcnM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF90dWZmX3N0YWlycwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 20, + "key": "minecraft:polished_tuff_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6cG9saXNoZWRfdHVmZl93YWxs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF90dWZmX3dhbGwA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 21, + "key": "minecraft:tuff_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6dHVmZl9icmlja3M=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC50dWZmX2JyaWNrcwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 22, + "key": "minecraft:tuff_brick_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6dHVmZl9icmlja19zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC50dWZmX2JyaWNrX3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 23, + "key": "minecraft:tuff_brick_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6dHVmZl9icmlja19zdGFpcnM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC50dWZmX2JyaWNrX3N0YWlycwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 24, + "key": "minecraft:tuff_brick_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6dHVmZl9icmlja193YWxs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC50dWZmX2JyaWNrX3dhbGwA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 25, + "key": "minecraft:chiseled_tuff_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6Y2hpc2VsZWRfdHVmZl9icmlja3M=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF90dWZmX2JyaWNrcwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 26, + "key": "minecraft:dripstone_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6ZHJpcHN0b25lX2Jsb2Nr", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5kcmlwc3RvbmVfYmxvY2sA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 27, + "key": "minecraft:grass_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Z3Jhc3NfYmxvY2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5ncmFzc19ibG9jawA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 28, + "key": "minecraft:dirt", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw5taW5lY3JhZnQ6ZGlydA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC5kaXJ0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 29, + "key": "minecraft:coarse_dirt", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y29hcnNlX2RpcnQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5jb2Fyc2VfZGlydAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 30, + "key": "minecraft:podzol", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6cG9kem9s", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5wb2R6b2wA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 31, + "key": "minecraft:rooted_dirt", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6cm9vdGVkX2RpcnQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5yb290ZWRfZGlydAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 32, + "key": "minecraft:mud", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw1taW5lY3JhZnQ6bXVk", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAE2Jsb2NrLm1pbmVjcmFmdC5tdWQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 33, + "key": "minecraft:crimson_nylium", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y3JpbXNvbl9ueWxpdW0=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5jcmltc29uX255bGl1bQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 34, + "key": "minecraft:warped_nylium", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6d2FycGVkX255bGl1bQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC53YXJwZWRfbnlsaXVtAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 35, + "key": "minecraft:cobblestone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y29iYmxlc3RvbmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5jb2JibGVzdG9uZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 36, + "key": "minecraft:oak_planks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6b2FrX3BsYW5rcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5vYWtfcGxhbmtzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 37, + "key": "minecraft:spruce_planks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6c3BydWNlX3BsYW5rcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5zcHJ1Y2VfcGxhbmtzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 38, + "key": "minecraft:birch_planks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmlyY2hfcGxhbmtz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5iaXJjaF9wbGFua3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 39, + "key": "minecraft:jungle_planks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6anVuZ2xlX3BsYW5rcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5qdW5nbGVfcGxhbmtzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 40, + "key": "minecraft:acacia_planks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6YWNhY2lhX3BsYW5rcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5hY2FjaWFfcGxhbmtzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 41, + "key": "minecraft:cherry_planks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y2hlcnJ5X3BsYW5rcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jaGVycnlfcGxhbmtzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 42, + "key": "minecraft:dark_oak_planks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6ZGFya19vYWtfcGxhbmtz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19wbGFua3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 43, + "key": "minecraft:pale_oak_planks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6cGFsZV9vYWtfcGxhbmtz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19wbGFua3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 44, + "key": "minecraft:mangrove_planks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6bWFuZ3JvdmVfcGxhbmtz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9wbGFua3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 45, + "key": "minecraft:bamboo_planks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6YmFtYm9vX3BsYW5rcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5iYW1ib29fcGxhbmtzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 46, + "key": "minecraft:crimson_planks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y3JpbXNvbl9wbGFua3M=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5jcmltc29uX3BsYW5rcwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 47, + "key": "minecraft:warped_planks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6d2FycGVkX3BsYW5rcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC53YXJwZWRfcGxhbmtzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 48, + "key": "minecraft:bamboo_mosaic", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6YmFtYm9vX21vc2FpYw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5iYW1ib29fbW9zYWljAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 49, + "key": "minecraft:oak_sapling", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6b2FrX3NhcGxpbmc=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5vYWtfc2FwbGluZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 50, + "key": "minecraft:spruce_sapling", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6c3BydWNlX3NhcGxpbmc=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5zcHJ1Y2Vfc2FwbGluZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 51, + "key": "minecraft:birch_sapling", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6YmlyY2hfc2FwbGluZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5iaXJjaF9zYXBsaW5nAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 52, + "key": "minecraft:jungle_sapling", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6anVuZ2xlX3NhcGxpbmc=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5qdW5nbGVfc2FwbGluZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 53, + "key": "minecraft:acacia_sapling", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6YWNhY2lhX3NhcGxpbmc=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5hY2FjaWFfc2FwbGluZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 54, + "key": "minecraft:cherry_sapling", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y2hlcnJ5X3NhcGxpbmc=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5jaGVycnlfc2FwbGluZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 55, + "key": "minecraft:dark_oak_sapling", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6ZGFya19vYWtfc2FwbGluZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19zYXBsaW5nAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 56, + "key": "minecraft:pale_oak_sapling", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6cGFsZV9vYWtfc2FwbGluZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19zYXBsaW5nAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 57, + "key": "minecraft:mangrove_propagule", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6bWFuZ3JvdmVfcHJvcGFndWxl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9wcm9wYWd1bGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 58, + "key": "minecraft:bedrock", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6YmVkcm9jaw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5iZWRyb2NrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 59, + "key": "minecraft:sand", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw5taW5lY3JhZnQ6c2FuZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC5zYW5kAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 60, + "key": "minecraft:suspicious_sand", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6c3VzcGljaW91c19zYW5k", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5zdXNwaWNpb3VzX3NhbmQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 61, + "key": "minecraft:suspicious_gravel", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6c3VzcGljaW91c19ncmF2ZWw=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5zdXNwaWNpb3VzX2dyYXZlbAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 62, + "key": "minecraft:red_sand", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6cmVkX3NhbmQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5yZWRfc2FuZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 63, + "key": "minecraft:gravel", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6Z3JhdmVs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5ncmF2ZWwA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 64, + "key": "minecraft:coal_ore", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6Y29hbF9vcmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5jb2FsX29yZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 65, + "key": "minecraft:deepslate_coal_ore", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6ZGVlcHNsYXRlX2NvYWxfb3Jl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfY29hbF9vcmUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 66, + "key": "minecraft:iron_ore", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6aXJvbl9vcmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5pcm9uX29yZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 67, + "key": "minecraft:deepslate_iron_ore", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6ZGVlcHNsYXRlX2lyb25fb3Jl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfaXJvbl9vcmUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 68, + "key": "minecraft:copper_ore", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6Y29wcGVyX29yZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5jb3BwZXJfb3JlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 69, + "key": "minecraft:deepslate_copper_ore", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6ZGVlcHNsYXRlX2NvcHBlcl9vcmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfY29wcGVyX29yZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 70, + "key": "minecraft:gold_ore", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6Z29sZF9vcmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5nb2xkX29yZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 71, + "key": "minecraft:deepslate_gold_ore", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6ZGVlcHNsYXRlX2dvbGRfb3Jl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfZ29sZF9vcmUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 72, + "key": "minecraft:redstone_ore", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6cmVkc3RvbmVfb3Jl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5yZWRzdG9uZV9vcmUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 73, + "key": "minecraft:deepslate_redstone_ore", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6ZGVlcHNsYXRlX3JlZHN0b25lX29yZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfcmVkc3RvbmVfb3JlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 74, + "key": "minecraft:emerald_ore", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6ZW1lcmFsZF9vcmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5lbWVyYWxkX29yZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 75, + "key": "minecraft:deepslate_emerald_ore", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6ZGVlcHNsYXRlX2VtZXJhbGRfb3Jl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfZW1lcmFsZF9vcmUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 76, + "key": "minecraft:lapis_ore", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6bGFwaXNfb3Jl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5sYXBpc19vcmUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 77, + "key": "minecraft:deepslate_lapis_ore", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZGVlcHNsYXRlX2xhcGlzX29yZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfbGFwaXNfb3JlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 78, + "key": "minecraft:diamond_ore", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6ZGlhbW9uZF9vcmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5kaWFtb25kX29yZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 79, + "key": "minecraft:deepslate_diamond_ore", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6ZGVlcHNsYXRlX2RpYW1vbmRfb3Jl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfZGlhbW9uZF9vcmUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 80, + "key": "minecraft:nether_gold_ore", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6bmV0aGVyX2dvbGRfb3Jl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5uZXRoZXJfZ29sZF9vcmUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 81, + "key": "minecraft:nether_quartz_ore", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6bmV0aGVyX3F1YXJ0el9vcmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5uZXRoZXJfcXVhcnR6X29yZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 82, + "key": "minecraft:ancient_debris", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:damage_resistant": "GRFtaW5lY3JhZnQ6aXNfZmlyZQ==", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6YW5jaWVudF9kZWJyaXM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5hbmNpZW50X2RlYnJpcwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 83, + "key": "minecraft:coal_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6Y29hbF9ibG9jaw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5jb2FsX2Jsb2NrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 84, + "key": "minecraft:raw_iron_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6cmF3X2lyb25fYmxvY2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5yYXdfaXJvbl9ibG9jawA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 85, + "key": "minecraft:raw_copper_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6cmF3X2NvcHBlcl9ibG9jaw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5yYXdfY29wcGVyX2Jsb2NrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 86, + "key": "minecraft:raw_gold_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6cmF3X2dvbGRfYmxvY2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5yYXdfZ29sZF9ibG9jawA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 87, + "key": "minecraft:heavy_core", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6aGVhdnlfY29yZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5oZWF2eV9jb3JlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQM=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 88, + "key": "minecraft:amethyst_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6YW1ldGh5c3RfYmxvY2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5hbWV0aHlzdF9ibG9jawA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 89, + "key": "minecraft:budding_amethyst", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6YnVkZGluZ19hbWV0aHlzdA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5idWRkaW5nX2FtZXRoeXN0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 90, + "key": "minecraft:iron_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6aXJvbl9ibG9jaw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5pcm9uX2Jsb2NrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 91, + "key": "minecraft:copper_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6Y29wcGVyX2Jsb2Nr", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5jb3BwZXJfYmxvY2sA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 92, + "key": "minecraft:gold_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6Z29sZF9ibG9jaw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5nb2xkX2Jsb2NrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 93, + "key": "minecraft:diamond_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZGlhbW9uZF9ibG9jaw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5kaWFtb25kX2Jsb2NrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 94, + "key": "minecraft:netherite_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:damage_resistant": "GRFtaW5lY3JhZnQ6aXNfZmlyZQ==", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6bmV0aGVyaXRlX2Jsb2Nr", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5uZXRoZXJpdGVfYmxvY2sA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 95, + "key": "minecraft:exposed_copper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6ZXhwb3NlZF9jb3BwZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5leHBvc2VkX2NvcHBlcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 96, + "key": "minecraft:weathered_copper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6d2VhdGhlcmVkX2NvcHBlcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC53ZWF0aGVyZWRfY29wcGVyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 97, + "key": "minecraft:oxidized_copper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6b3hpZGl6ZWRfY29wcGVy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5veGlkaXplZF9jb3BwZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 98, + "key": "minecraft:chiseled_copper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6Y2hpc2VsZWRfY29wcGVy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF9jb3BwZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 99, + "key": "minecraft:exposed_chiseled_copper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6ZXhwb3NlZF9jaGlzZWxlZF9jb3BwZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5leHBvc2VkX2NoaXNlbGVkX2NvcHBlcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 100, + "key": "minecraft:weathered_chiseled_copper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByNtaW5lY3JhZnQ6d2VhdGhlcmVkX2NoaXNlbGVkX2NvcHBlcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC53ZWF0aGVyZWRfY2hpc2VsZWRfY29wcGVyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 101, + "key": "minecraft:oxidized_chiseled_copper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6b3hpZGl6ZWRfY2hpc2VsZWRfY29wcGVy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5veGlkaXplZF9jaGlzZWxlZF9jb3BwZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 102, + "key": "minecraft:cut_copper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6Y3V0X2NvcHBlcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5jdXRfY29wcGVyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 103, + "key": "minecraft:exposed_cut_copper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6ZXhwb3NlZF9jdXRfY29wcGVy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5leHBvc2VkX2N1dF9jb3BwZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 104, + "key": "minecraft:weathered_cut_copper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6d2VhdGhlcmVkX2N1dF9jb3BwZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC53ZWF0aGVyZWRfY3V0X2NvcHBlcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 105, + "key": "minecraft:oxidized_cut_copper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6b3hpZGl6ZWRfY3V0X2NvcHBlcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5veGlkaXplZF9jdXRfY29wcGVyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 106, + "key": "minecraft:cut_copper_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6Y3V0X2NvcHBlcl9zdGFpcnM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5jdXRfY29wcGVyX3N0YWlycwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 107, + "key": "minecraft:exposed_cut_copper_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByNtaW5lY3JhZnQ6ZXhwb3NlZF9jdXRfY29wcGVyX3N0YWlycw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC5leHBvc2VkX2N1dF9jb3BwZXJfc3RhaXJzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 108, + "key": "minecraft:weathered_cut_copper_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByVtaW5lY3JhZnQ6d2VhdGhlcmVkX2N1dF9jb3BwZXJfc3RhaXJz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAK2Jsb2NrLm1pbmVjcmFmdC53ZWF0aGVyZWRfY3V0X2NvcHBlcl9zdGFpcnMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 109, + "key": "minecraft:oxidized_cut_copper_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByRtaW5lY3JhZnQ6b3hpZGl6ZWRfY3V0X2NvcHBlcl9zdGFpcnM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKmJsb2NrLm1pbmVjcmFmdC5veGlkaXplZF9jdXRfY29wcGVyX3N0YWlycwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 110, + "key": "minecraft:cut_copper_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6Y3V0X2NvcHBlcl9zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5jdXRfY29wcGVyX3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 111, + "key": "minecraft:exposed_cut_copper_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6ZXhwb3NlZF9jdXRfY29wcGVyX3NsYWI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5leHBvc2VkX2N1dF9jb3BwZXJfc2xhYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 112, + "key": "minecraft:weathered_cut_copper_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByNtaW5lY3JhZnQ6d2VhdGhlcmVkX2N1dF9jb3BwZXJfc2xhYg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC53ZWF0aGVyZWRfY3V0X2NvcHBlcl9zbGFiAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 113, + "key": "minecraft:oxidized_cut_copper_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6b3hpZGl6ZWRfY3V0X2NvcHBlcl9zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5veGlkaXplZF9jdXRfY29wcGVyX3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 114, + "key": "minecraft:waxed_copper_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6d2F4ZWRfY29wcGVyX2Jsb2Nr", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC53YXhlZF9jb3BwZXJfYmxvY2sA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 115, + "key": "minecraft:waxed_exposed_copper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6d2F4ZWRfZXhwb3NlZF9jb3BwZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC53YXhlZF9leHBvc2VkX2NvcHBlcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 116, + "key": "minecraft:waxed_weathered_copper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6d2F4ZWRfd2VhdGhlcmVkX2NvcHBlcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC53YXhlZF93ZWF0aGVyZWRfY29wcGVyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 117, + "key": "minecraft:waxed_oxidized_copper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6d2F4ZWRfb3hpZGl6ZWRfY29wcGVy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC53YXhlZF9veGlkaXplZF9jb3BwZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 118, + "key": "minecraft:waxed_chiseled_copper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6d2F4ZWRfY2hpc2VsZWRfY29wcGVy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC53YXhlZF9jaGlzZWxlZF9jb3BwZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 119, + "key": "minecraft:waxed_exposed_chiseled_copper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BydtaW5lY3JhZnQ6d2F4ZWRfZXhwb3NlZF9jaGlzZWxlZF9jb3BwZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALWJsb2NrLm1pbmVjcmFmdC53YXhlZF9leHBvc2VkX2NoaXNlbGVkX2NvcHBlcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 120, + "key": "minecraft:waxed_weathered_chiseled_copper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByltaW5lY3JhZnQ6d2F4ZWRfd2VhdGhlcmVkX2NoaXNlbGVkX2NvcHBlcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAL2Jsb2NrLm1pbmVjcmFmdC53YXhlZF93ZWF0aGVyZWRfY2hpc2VsZWRfY29wcGVyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 121, + "key": "minecraft:waxed_oxidized_chiseled_copper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByhtaW5lY3JhZnQ6d2F4ZWRfb3hpZGl6ZWRfY2hpc2VsZWRfY29wcGVy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALmJsb2NrLm1pbmVjcmFmdC53YXhlZF9veGlkaXplZF9jaGlzZWxlZF9jb3BwZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 122, + "key": "minecraft:waxed_cut_copper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6d2F4ZWRfY3V0X2NvcHBlcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC53YXhlZF9jdXRfY29wcGVyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 123, + "key": "minecraft:waxed_exposed_cut_copper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6d2F4ZWRfZXhwb3NlZF9jdXRfY29wcGVy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC53YXhlZF9leHBvc2VkX2N1dF9jb3BwZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 124, + "key": "minecraft:waxed_weathered_cut_copper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByRtaW5lY3JhZnQ6d2F4ZWRfd2VhdGhlcmVkX2N1dF9jb3BwZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKmJsb2NrLm1pbmVjcmFmdC53YXhlZF93ZWF0aGVyZWRfY3V0X2NvcHBlcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 125, + "key": "minecraft:waxed_oxidized_cut_copper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByNtaW5lY3JhZnQ6d2F4ZWRfb3hpZGl6ZWRfY3V0X2NvcHBlcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC53YXhlZF9veGlkaXplZF9jdXRfY29wcGVyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 126, + "key": "minecraft:waxed_cut_copper_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6d2F4ZWRfY3V0X2NvcHBlcl9zdGFpcnM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC53YXhlZF9jdXRfY29wcGVyX3N0YWlycwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 127, + "key": "minecraft:waxed_exposed_cut_copper_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByltaW5lY3JhZnQ6d2F4ZWRfZXhwb3NlZF9jdXRfY29wcGVyX3N0YWlycw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAL2Jsb2NrLm1pbmVjcmFmdC53YXhlZF9leHBvc2VkX2N1dF9jb3BwZXJfc3RhaXJzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 128, + "key": "minecraft:waxed_weathered_cut_copper_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByttaW5lY3JhZnQ6d2F4ZWRfd2VhdGhlcmVkX2N1dF9jb3BwZXJfc3RhaXJz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMWJsb2NrLm1pbmVjcmFmdC53YXhlZF93ZWF0aGVyZWRfY3V0X2NvcHBlcl9zdGFpcnMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 129, + "key": "minecraft:waxed_oxidized_cut_copper_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByptaW5lY3JhZnQ6d2F4ZWRfb3hpZGl6ZWRfY3V0X2NvcHBlcl9zdGFpcnM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMGJsb2NrLm1pbmVjcmFmdC53YXhlZF9veGlkaXplZF9jdXRfY29wcGVyX3N0YWlycwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 130, + "key": "minecraft:waxed_cut_copper_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6d2F4ZWRfY3V0X2NvcHBlcl9zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC53YXhlZF9jdXRfY29wcGVyX3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 131, + "key": "minecraft:waxed_exposed_cut_copper_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BydtaW5lY3JhZnQ6d2F4ZWRfZXhwb3NlZF9jdXRfY29wcGVyX3NsYWI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALWJsb2NrLm1pbmVjcmFmdC53YXhlZF9leHBvc2VkX2N1dF9jb3BwZXJfc2xhYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 132, + "key": "minecraft:waxed_weathered_cut_copper_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByltaW5lY3JhZnQ6d2F4ZWRfd2VhdGhlcmVkX2N1dF9jb3BwZXJfc2xhYg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAL2Jsb2NrLm1pbmVjcmFmdC53YXhlZF93ZWF0aGVyZWRfY3V0X2NvcHBlcl9zbGFiAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 133, + "key": "minecraft:waxed_oxidized_cut_copper_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByhtaW5lY3JhZnQ6d2F4ZWRfb3hpZGl6ZWRfY3V0X2NvcHBlcl9zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALmJsb2NrLm1pbmVjcmFmdC53YXhlZF9veGlkaXplZF9jdXRfY29wcGVyX3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 134, + "key": "minecraft:oak_log", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6b2FrX2xvZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5vYWtfbG9nAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 135, + "key": "minecraft:spruce_log", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6c3BydWNlX2xvZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5zcHJ1Y2VfbG9nAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 136, + "key": "minecraft:birch_log", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6YmlyY2hfbG9n", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5iaXJjaF9sb2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 137, + "key": "minecraft:jungle_log", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6anVuZ2xlX2xvZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5qdW5nbGVfbG9nAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 138, + "key": "minecraft:acacia_log", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6YWNhY2lhX2xvZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5hY2FjaWFfbG9nAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 139, + "key": "minecraft:cherry_log", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6Y2hlcnJ5X2xvZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5jaGVycnlfbG9nAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 140, + "key": "minecraft:pale_oak_log", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6cGFsZV9vYWtfbG9n", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19sb2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 141, + "key": "minecraft:dark_oak_log", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6ZGFya19vYWtfbG9n", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19sb2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 142, + "key": "minecraft:mangrove_log", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6bWFuZ3JvdmVfbG9n", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9sb2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 143, + "key": "minecraft:mangrove_roots", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6bWFuZ3JvdmVfcm9vdHM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9yb290cwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 144, + "key": "minecraft:muddy_mangrove_roots", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6bXVkZHlfbWFuZ3JvdmVfcm9vdHM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5tdWRkeV9tYW5ncm92ZV9yb290cwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 145, + "key": "minecraft:crimson_stem", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6Y3JpbXNvbl9zdGVt", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5jcmltc29uX3N0ZW0A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 146, + "key": "minecraft:warped_stem", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6d2FycGVkX3N0ZW0=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC53YXJwZWRfc3RlbQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 147, + "key": "minecraft:bamboo_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmFtYm9vX2Jsb2Nr", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5iYW1ib29fYmxvY2sA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 148, + "key": "minecraft:stripped_oak_log", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6c3RyaXBwZWRfb2FrX2xvZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9vYWtfbG9nAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 149, + "key": "minecraft:stripped_spruce_log", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6c3RyaXBwZWRfc3BydWNlX2xvZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9zcHJ1Y2VfbG9nAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 150, + "key": "minecraft:stripped_birch_log", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6c3RyaXBwZWRfYmlyY2hfbG9n", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9iaXJjaF9sb2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 151, + "key": "minecraft:stripped_jungle_log", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6c3RyaXBwZWRfanVuZ2xlX2xvZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9qdW5nbGVfbG9nAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 152, + "key": "minecraft:stripped_acacia_log", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6c3RyaXBwZWRfYWNhY2lhX2xvZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9hY2FjaWFfbG9nAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 153, + "key": "minecraft:stripped_cherry_log", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6c3RyaXBwZWRfY2hlcnJ5X2xvZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9jaGVycnlfbG9nAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 154, + "key": "minecraft:stripped_dark_oak_log", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6c3RyaXBwZWRfZGFya19vYWtfbG9n", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9kYXJrX29ha19sb2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 155, + "key": "minecraft:stripped_pale_oak_log", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6c3RyaXBwZWRfcGFsZV9vYWtfbG9n", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9wYWxlX29ha19sb2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 156, + "key": "minecraft:stripped_mangrove_log", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6c3RyaXBwZWRfbWFuZ3JvdmVfbG9n", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9tYW5ncm92ZV9sb2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 157, + "key": "minecraft:stripped_crimson_stem", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6c3RyaXBwZWRfY3JpbXNvbl9zdGVt", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9jcmltc29uX3N0ZW0A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 158, + "key": "minecraft:stripped_warped_stem", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6c3RyaXBwZWRfd2FycGVkX3N0ZW0=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF93YXJwZWRfc3RlbQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 159, + "key": "minecraft:stripped_oak_wood", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6c3RyaXBwZWRfb2FrX3dvb2Q=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9vYWtfd29vZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 160, + "key": "minecraft:stripped_spruce_wood", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6c3RyaXBwZWRfc3BydWNlX3dvb2Q=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9zcHJ1Y2Vfd29vZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 161, + "key": "minecraft:stripped_birch_wood", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6c3RyaXBwZWRfYmlyY2hfd29vZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9iaXJjaF93b29kAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 162, + "key": "minecraft:stripped_jungle_wood", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6c3RyaXBwZWRfanVuZ2xlX3dvb2Q=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9qdW5nbGVfd29vZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 163, + "key": "minecraft:stripped_acacia_wood", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6c3RyaXBwZWRfYWNhY2lhX3dvb2Q=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9hY2FjaWFfd29vZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 164, + "key": "minecraft:stripped_cherry_wood", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6c3RyaXBwZWRfY2hlcnJ5X3dvb2Q=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9jaGVycnlfd29vZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 165, + "key": "minecraft:stripped_dark_oak_wood", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6c3RyaXBwZWRfZGFya19vYWtfd29vZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9kYXJrX29ha193b29kAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 166, + "key": "minecraft:stripped_pale_oak_wood", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6c3RyaXBwZWRfcGFsZV9vYWtfd29vZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9wYWxlX29ha193b29kAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 167, + "key": "minecraft:stripped_mangrove_wood", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6c3RyaXBwZWRfbWFuZ3JvdmVfd29vZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9tYW5ncm92ZV93b29kAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 168, + "key": "minecraft:stripped_crimson_hyphae", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6c3RyaXBwZWRfY3JpbXNvbl9oeXBoYWU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9jcmltc29uX2h5cGhhZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 169, + "key": "minecraft:stripped_warped_hyphae", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6c3RyaXBwZWRfd2FycGVkX2h5cGhhZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF93YXJwZWRfaHlwaGFlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 170, + "key": "minecraft:stripped_bamboo_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6c3RyaXBwZWRfYmFtYm9vX2Jsb2Nr", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5zdHJpcHBlZF9iYW1ib29fYmxvY2sA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 171, + "key": "minecraft:oak_wood", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6b2FrX3dvb2Q=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5vYWtfd29vZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 172, + "key": "minecraft:spruce_wood", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6c3BydWNlX3dvb2Q=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zcHJ1Y2Vfd29vZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 173, + "key": "minecraft:birch_wood", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6YmlyY2hfd29vZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5iaXJjaF93b29kAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 174, + "key": "minecraft:jungle_wood", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6anVuZ2xlX3dvb2Q=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5qdW5nbGVfd29vZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 175, + "key": "minecraft:acacia_wood", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6YWNhY2lhX3dvb2Q=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5hY2FjaWFfd29vZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 176, + "key": "minecraft:cherry_wood", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y2hlcnJ5X3dvb2Q=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5jaGVycnlfd29vZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 177, + "key": "minecraft:pale_oak_wood", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6cGFsZV9vYWtfd29vZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5wYWxlX29ha193b29kAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 178, + "key": "minecraft:dark_oak_wood", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZGFya19vYWtfd29vZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5kYXJrX29ha193b29kAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 179, + "key": "minecraft:mangrove_wood", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6bWFuZ3JvdmVfd29vZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV93b29kAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 180, + "key": "minecraft:crimson_hyphae", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y3JpbXNvbl9oeXBoYWU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5jcmltc29uX2h5cGhhZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 181, + "key": "minecraft:warped_hyphae", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6d2FycGVkX2h5cGhhZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC53YXJwZWRfaHlwaGFlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 182, + "key": "minecraft:oak_leaves", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6b2FrX2xlYXZlcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5vYWtfbGVhdmVzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 183, + "key": "minecraft:spruce_leaves", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6c3BydWNlX2xlYXZlcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5zcHJ1Y2VfbGVhdmVzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 184, + "key": "minecraft:birch_leaves", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmlyY2hfbGVhdmVz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5iaXJjaF9sZWF2ZXMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 185, + "key": "minecraft:jungle_leaves", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6anVuZ2xlX2xlYXZlcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5qdW5nbGVfbGVhdmVzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 186, + "key": "minecraft:acacia_leaves", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6YWNhY2lhX2xlYXZlcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5hY2FjaWFfbGVhdmVzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 187, + "key": "minecraft:cherry_leaves", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y2hlcnJ5X2xlYXZlcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jaGVycnlfbGVhdmVzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 188, + "key": "minecraft:dark_oak_leaves", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6ZGFya19vYWtfbGVhdmVz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19sZWF2ZXMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 189, + "key": "minecraft:pale_oak_leaves", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6cGFsZV9vYWtfbGVhdmVz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19sZWF2ZXMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 190, + "key": "minecraft:mangrove_leaves", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6bWFuZ3JvdmVfbGVhdmVz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9sZWF2ZXMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 191, + "key": "minecraft:azalea_leaves", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6YXphbGVhX2xlYXZlcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5hemFsZWFfbGVhdmVzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 192, + "key": "minecraft:flowering_azalea_leaves", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6Zmxvd2VyaW5nX2F6YWxlYV9sZWF2ZXM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5mbG93ZXJpbmdfYXphbGVhX2xlYXZlcwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 193, + "key": "minecraft:sponge", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6c3Bvbmdl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5zcG9uZ2UA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 194, + "key": "minecraft:wet_sponge", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6d2V0X3Nwb25nZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC53ZXRfc3BvbmdlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 195, + "key": "minecraft:glass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6Z2xhc3M=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5nbGFzcwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 196, + "key": "minecraft:tinted_glass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6dGludGVkX2dsYXNz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC50aW50ZWRfZ2xhc3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 197, + "key": "minecraft:lapis_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6bGFwaXNfYmxvY2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5sYXBpc19ibG9jawA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 198, + "key": "minecraft:sandstone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6c2FuZHN0b25l", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5zYW5kc3RvbmUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 199, + "key": "minecraft:chiseled_sandstone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6Y2hpc2VsZWRfc2FuZHN0b25l", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF9zYW5kc3RvbmUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 200, + "key": "minecraft:cut_sandstone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y3V0X3NhbmRzdG9uZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jdXRfc2FuZHN0b25lAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 201, + "key": "minecraft:cobweb", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6Y29id2Vi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5jb2J3ZWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 202, + "key": "minecraft:short_grass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6c2hvcnRfZ3Jhc3M=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zaG9ydF9ncmFzcwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 203, + "key": "minecraft:fern", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw5taW5lY3JhZnQ6ZmVybg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC5mZXJuAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 204, + "key": "minecraft:azalea", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6YXphbGVh", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5hemFsZWEA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 205, + "key": "minecraft:flowering_azalea", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6Zmxvd2VyaW5nX2F6YWxlYQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5mbG93ZXJpbmdfYXphbGVhAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 206, + "key": "minecraft:dead_bush", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6ZGVhZF9idXNo", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5kZWFkX2J1c2gA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 207, + "key": "minecraft:seagrass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6c2VhZ3Jhc3M=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5zZWFncmFzcwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 208, + "key": "minecraft:sea_pickle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6c2VhX3BpY2tsZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5zZWFfcGlja2xlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 209, + "key": "minecraft:white_wool", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6d2hpdGVfd29vbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC53aGl0ZV93b29sAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 210, + "key": "minecraft:orange_wool", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6b3JhbmdlX3dvb2w=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5vcmFuZ2Vfd29vbAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 211, + "key": "minecraft:magenta_wool", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6bWFnZW50YV93b29s", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX3dvb2wA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 212, + "key": "minecraft:light_blue_wool", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6bGlnaHRfYmx1ZV93b29s", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX3dvb2wA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 213, + "key": "minecraft:yellow_wool", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6eWVsbG93X3dvb2w=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC55ZWxsb3dfd29vbAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 214, + "key": "minecraft:lime_wool", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6bGltZV93b29s", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5saW1lX3dvb2wA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 215, + "key": "minecraft:pink_wool", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6cGlua193b29s", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5waW5rX3dvb2wA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 216, + "key": "minecraft:gray_wool", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6Z3JheV93b29s", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5ncmF5X3dvb2wA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 217, + "key": "minecraft:light_gray_wool", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6bGlnaHRfZ3JheV93b29s", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X3dvb2wA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 218, + "key": "minecraft:cyan_wool", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6Y3lhbl93b29s", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5jeWFuX3dvb2wA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 219, + "key": "minecraft:purple_wool", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6cHVycGxlX3dvb2w=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5wdXJwbGVfd29vbAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 220, + "key": "minecraft:blue_wool", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6Ymx1ZV93b29s", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5ibHVlX3dvb2wA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 221, + "key": "minecraft:brown_wool", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6YnJvd25fd29vbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5icm93bl93b29sAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 222, + "key": "minecraft:green_wool", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6Z3JlZW5fd29vbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5ncmVlbl93b29sAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 223, + "key": "minecraft:red_wool", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6cmVkX3dvb2w=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5yZWRfd29vbAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 224, + "key": "minecraft:black_wool", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6YmxhY2tfd29vbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5ibGFja193b29sAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 225, + "key": "minecraft:dandelion", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6ZGFuZGVsaW9u", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5kYW5kZWxpb24A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 226, + "key": "minecraft:open_eyeblossom", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6b3Blbl9leWVibG9zc29t", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5vcGVuX2V5ZWJsb3Nzb20A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 227, + "key": "minecraft:closed_eyeblossom", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6Y2xvc2VkX2V5ZWJsb3Nzb20=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5jbG9zZWRfZXllYmxvc3NvbQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 228, + "key": "minecraft:poppy", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6cG9wcHk=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5wb3BweQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 229, + "key": "minecraft:blue_orchid", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Ymx1ZV9vcmNoaWQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5ibHVlX29yY2hpZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 230, + "key": "minecraft:allium", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6YWxsaXVt", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5hbGxpdW0A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 231, + "key": "minecraft:azure_bluet", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6YXp1cmVfYmx1ZXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5henVyZV9ibHVldAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 232, + "key": "minecraft:red_tulip", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6cmVkX3R1bGlw", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5yZWRfdHVsaXAA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 233, + "key": "minecraft:orange_tulip", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6b3JhbmdlX3R1bGlw", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5vcmFuZ2VfdHVsaXAA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 234, + "key": "minecraft:white_tulip", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6d2hpdGVfdHVsaXA=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC53aGl0ZV90dWxpcAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 235, + "key": "minecraft:pink_tulip", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6cGlua190dWxpcA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5waW5rX3R1bGlwAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 236, + "key": "minecraft:oxeye_daisy", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6b3hleWVfZGFpc3k=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5veGV5ZV9kYWlzeQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 237, + "key": "minecraft:cornflower", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6Y29ybmZsb3dlcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5jb3JuZmxvd2VyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 238, + "key": "minecraft:lily_of_the_valley", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6bGlseV9vZl90aGVfdmFsbGV5", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5saWx5X29mX3RoZV92YWxsZXkA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 239, + "key": "minecraft:wither_rose", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6d2l0aGVyX3Jvc2U=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC53aXRoZXJfcm9zZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 240, + "key": "minecraft:torchflower", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6dG9yY2hmbG93ZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC50b3JjaGZsb3dlcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 241, + "key": "minecraft:pitcher_plant", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6cGl0Y2hlcl9wbGFudA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5waXRjaGVyX3BsYW50AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 242, + "key": "minecraft:spore_blossom", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6c3BvcmVfYmxvc3NvbQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5zcG9yZV9ibG9zc29tAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 243, + "key": "minecraft:brown_mushroom", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6YnJvd25fbXVzaHJvb20=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5icm93bl9tdXNocm9vbQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 244, + "key": "minecraft:red_mushroom", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6cmVkX211c2hyb29t", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5yZWRfbXVzaHJvb20A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 245, + "key": "minecraft:crimson_fungus", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y3JpbXNvbl9mdW5ndXM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5jcmltc29uX2Z1bmd1cwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 246, + "key": "minecraft:warped_fungus", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6d2FycGVkX2Z1bmd1cw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC53YXJwZWRfZnVuZ3VzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 247, + "key": "minecraft:crimson_roots", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y3JpbXNvbl9yb290cw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jcmltc29uX3Jvb3RzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 248, + "key": "minecraft:warped_roots", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6d2FycGVkX3Jvb3Rz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC53YXJwZWRfcm9vdHMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 249, + "key": "minecraft:nether_sprouts", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6bmV0aGVyX3Nwcm91dHM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5uZXRoZXJfc3Byb3V0cwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 250, + "key": "minecraft:weeping_vines", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6d2VlcGluZ192aW5lcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC53ZWVwaW5nX3ZpbmVzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 251, + "key": "minecraft:twisting_vines", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6dHdpc3RpbmdfdmluZXM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC50d2lzdGluZ192aW5lcwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 252, + "key": "minecraft:sugar_cane", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6c3VnYXJfY2FuZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5zdWdhcl9jYW5lAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 253, + "key": "minecraft:kelp", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw5taW5lY3JhZnQ6a2VscA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC5rZWxwAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 254, + "key": "minecraft:pink_petals", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6cGlua19wZXRhbHM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5waW5rX3BldGFscwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 255, + "key": "minecraft:moss_carpet", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6bW9zc19jYXJwZXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5tb3NzX2NhcnBldAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 256, + "key": "minecraft:moss_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6bW9zc19ibG9jaw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5tb3NzX2Jsb2NrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 257, + "key": "minecraft:pale_moss_carpet", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6cGFsZV9tb3NzX2NhcnBldA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5wYWxlX21vc3NfY2FycGV0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 258, + "key": "minecraft:pale_hanging_moss", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6cGFsZV9oYW5naW5nX21vc3M=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5wYWxlX2hhbmdpbmdfbW9zcwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 259, + "key": "minecraft:pale_moss_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6cGFsZV9tb3NzX2Jsb2Nr", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5wYWxlX21vc3NfYmxvY2sA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 260, + "key": "minecraft:hanging_roots", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6aGFuZ2luZ19yb290cw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5oYW5naW5nX3Jvb3RzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 261, + "key": "minecraft:big_dripleaf", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmlnX2RyaXBsZWFm", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5iaWdfZHJpcGxlYWYA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 262, + "key": "minecraft:small_dripleaf", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6c21hbGxfZHJpcGxlYWY=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5zbWFsbF9kcmlwbGVhZgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 263, + "key": "minecraft:bamboo", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6YmFtYm9v", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5iYW1ib28A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 264, + "key": "minecraft:oak_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6b2FrX3NsYWI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5vYWtfc2xhYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 265, + "key": "minecraft:spruce_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6c3BydWNlX3NsYWI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zcHJ1Y2Vfc2xhYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 266, + "key": "minecraft:birch_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6YmlyY2hfc2xhYg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5iaXJjaF9zbGFiAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 267, + "key": "minecraft:jungle_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6anVuZ2xlX3NsYWI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5qdW5nbGVfc2xhYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 268, + "key": "minecraft:acacia_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6YWNhY2lhX3NsYWI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5hY2FjaWFfc2xhYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 269, + "key": "minecraft:cherry_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y2hlcnJ5X3NsYWI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5jaGVycnlfc2xhYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 270, + "key": "minecraft:dark_oak_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZGFya19vYWtfc2xhYg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19zbGFiAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 271, + "key": "minecraft:pale_oak_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6cGFsZV9vYWtfc2xhYg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19zbGFiAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 272, + "key": "minecraft:mangrove_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6bWFuZ3JvdmVfc2xhYg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9zbGFiAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 273, + "key": "minecraft:bamboo_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6YmFtYm9vX3NsYWI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5iYW1ib29fc2xhYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 274, + "key": "minecraft:bamboo_mosaic_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6YmFtYm9vX21vc2FpY19zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5iYW1ib29fbW9zYWljX3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 275, + "key": "minecraft:crimson_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6Y3JpbXNvbl9zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5jcmltc29uX3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 276, + "key": "minecraft:warped_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6d2FycGVkX3NsYWI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC53YXJwZWRfc2xhYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 277, + "key": "minecraft:stone_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6c3RvbmVfc2xhYg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5zdG9uZV9zbGFiAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 278, + "key": "minecraft:smooth_stone_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6c21vb3RoX3N0b25lX3NsYWI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5zbW9vdGhfc3RvbmVfc2xhYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 279, + "key": "minecraft:sandstone_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6c2FuZHN0b25lX3NsYWI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5zYW5kc3RvbmVfc2xhYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 280, + "key": "minecraft:cut_sandstone_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6Y3V0X3NhbmRzdG9uZV9zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5jdXRfc2FuZHN0b25lX3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 281, + "key": "minecraft:petrified_oak_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6cGV0cmlmaWVkX29ha19zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5wZXRyaWZpZWRfb2FrX3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 282, + "key": "minecraft:cobblestone_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6Y29iYmxlc3RvbmVfc2xhYg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5jb2JibGVzdG9uZV9zbGFiAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 283, + "key": "minecraft:brick_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6YnJpY2tfc2xhYg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5icmlja19zbGFiAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 284, + "key": "minecraft:stone_brick_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6c3RvbmVfYnJpY2tfc2xhYg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5zdG9uZV9icmlja19zbGFiAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 285, + "key": "minecraft:mud_brick_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6bXVkX2JyaWNrX3NsYWI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5tdWRfYnJpY2tfc2xhYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 286, + "key": "minecraft:nether_brick_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6bmV0aGVyX2JyaWNrX3NsYWI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5uZXRoZXJfYnJpY2tfc2xhYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 287, + "key": "minecraft:quartz_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6cXVhcnR6X3NsYWI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5xdWFydHpfc2xhYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 288, + "key": "minecraft:red_sandstone_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6cmVkX3NhbmRzdG9uZV9zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5yZWRfc2FuZHN0b25lX3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 289, + "key": "minecraft:cut_red_sandstone_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6Y3V0X3JlZF9zYW5kc3RvbmVfc2xhYg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5jdXRfcmVkX3NhbmRzdG9uZV9zbGFiAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 290, + "key": "minecraft:purpur_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6cHVycHVyX3NsYWI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5wdXJwdXJfc2xhYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 291, + "key": "minecraft:prismarine_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6cHJpc21hcmluZV9zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5wcmlzbWFyaW5lX3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 292, + "key": "minecraft:prismarine_brick_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6cHJpc21hcmluZV9icmlja19zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5wcmlzbWFyaW5lX2JyaWNrX3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 293, + "key": "minecraft:dark_prismarine_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6ZGFya19wcmlzbWFyaW5lX3NsYWI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5kYXJrX3ByaXNtYXJpbmVfc2xhYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 294, + "key": "minecraft:smooth_quartz", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6c21vb3RoX3F1YXJ0eg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5zbW9vdGhfcXVhcnR6AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 295, + "key": "minecraft:smooth_red_sandstone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6c21vb3RoX3JlZF9zYW5kc3RvbmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5zbW9vdGhfcmVkX3NhbmRzdG9uZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 296, + "key": "minecraft:smooth_sandstone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6c21vb3RoX3NhbmRzdG9uZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5zbW9vdGhfc2FuZHN0b25lAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 297, + "key": "minecraft:smooth_stone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6c21vb3RoX3N0b25l", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5zbW9vdGhfc3RvbmUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 298, + "key": "minecraft:bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6YnJpY2tz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5icmlja3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 299, + "key": "minecraft:bookshelf", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6Ym9va3NoZWxm", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5ib29rc2hlbGYA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 300, + "key": "minecraft:chiseled_bookshelf", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6Y2hpc2VsZWRfYm9va3NoZWxm", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF9ib29rc2hlbGYA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 301, + "key": "minecraft:decorated_pot", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZGVjb3JhdGVkX3BvdA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5kZWNvcmF0ZWRfcG90AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:pot_decorations": "PQS6B7oHuge6Bw==", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 302, + "key": "minecraft:mossy_cobblestone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6bW9zc3lfY29iYmxlc3RvbmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5tb3NzeV9jb2JibGVzdG9uZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 303, + "key": "minecraft:obsidian", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6b2JzaWRpYW4=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5vYnNpZGlhbgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 304, + "key": "minecraft:torch", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6dG9yY2g=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC50b3JjaAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 305, + "key": "minecraft:end_rod", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6ZW5kX3JvZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5lbmRfcm9kAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 306, + "key": "minecraft:chorus_plant", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6Y2hvcnVzX3BsYW50", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5jaG9ydXNfcGxhbnQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 307, + "key": "minecraft:chorus_flower", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y2hvcnVzX2Zsb3dlcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jaG9ydXNfZmxvd2VyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 308, + "key": "minecraft:purpur_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6cHVycHVyX2Jsb2Nr", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5wdXJwdXJfYmxvY2sA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 309, + "key": "minecraft:purpur_pillar", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6cHVycHVyX3BpbGxhcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5wdXJwdXJfcGlsbGFyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 310, + "key": "minecraft:purpur_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6cHVycHVyX3N0YWlycw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5wdXJwdXJfc3RhaXJzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 311, + "key": "minecraft:spawner", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6c3Bhd25lcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5zcGF3bmVyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 312, + "key": "minecraft:creaking_heart", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y3JlYWtpbmdfaGVhcnQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5jcmVha2luZ19oZWFydAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 313, + "key": "minecraft:chest", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6Y2hlc3Q=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5jaGVzdAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 314, + "key": "minecraft:crafting_table", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y3JhZnRpbmdfdGFibGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5jcmFmdGluZ190YWJsZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 315, + "key": "minecraft:farmland", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6ZmFybWxhbmQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5mYXJtbGFuZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 316, + "key": "minecraft:furnace", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6ZnVybmFjZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5mdXJuYWNlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 317, + "key": "minecraft:ladder", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6bGFkZGVy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5sYWRkZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 318, + "key": "minecraft:cobblestone_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6Y29iYmxlc3RvbmVfc3RhaXJz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5jb2JibGVzdG9uZV9zdGFpcnMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 319, + "key": "minecraft:snow", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw5taW5lY3JhZnQ6c25vdw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC5zbm93AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 320, + "key": "minecraft:ice", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw1taW5lY3JhZnQ6aWNl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAE2Jsb2NrLm1pbmVjcmFmdC5pY2UA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 321, + "key": "minecraft:snow_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6c25vd19ibG9jaw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5zbm93X2Jsb2NrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 322, + "key": "minecraft:cactus", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6Y2FjdHVz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5jYWN0dXMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 323, + "key": "minecraft:clay", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw5taW5lY3JhZnQ6Y2xheQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC5jbGF5AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 324, + "key": "minecraft:jukebox", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6anVrZWJveA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5qdWtlYm94AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 325, + "key": "minecraft:oak_fence", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6b2FrX2ZlbmNl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5vYWtfZmVuY2UA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 326, + "key": "minecraft:spruce_fence", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6c3BydWNlX2ZlbmNl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5zcHJ1Y2VfZmVuY2UA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 327, + "key": "minecraft:birch_fence", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6YmlyY2hfZmVuY2U=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5iaXJjaF9mZW5jZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 328, + "key": "minecraft:jungle_fence", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6anVuZ2xlX2ZlbmNl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5qdW5nbGVfZmVuY2UA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 329, + "key": "minecraft:acacia_fence", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6YWNhY2lhX2ZlbmNl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5hY2FjaWFfZmVuY2UA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 330, + "key": "minecraft:cherry_fence", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6Y2hlcnJ5X2ZlbmNl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5jaGVycnlfZmVuY2UA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 331, + "key": "minecraft:dark_oak_fence", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6ZGFya19vYWtfZmVuY2U=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19mZW5jZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 332, + "key": "minecraft:pale_oak_fence", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6cGFsZV9vYWtfZmVuY2U=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19mZW5jZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 333, + "key": "minecraft:mangrove_fence", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6bWFuZ3JvdmVfZmVuY2U=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9mZW5jZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 334, + "key": "minecraft:bamboo_fence", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmFtYm9vX2ZlbmNl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5iYW1ib29fZmVuY2UA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 335, + "key": "minecraft:crimson_fence", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y3JpbXNvbl9mZW5jZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jcmltc29uX2ZlbmNlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 336, + "key": "minecraft:warped_fence", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6d2FycGVkX2ZlbmNl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC53YXJwZWRfZmVuY2UA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 337, + "key": "minecraft:pumpkin", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6cHVtcGtpbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5wdW1wa2luAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 338, + "key": "minecraft:carved_pumpkin", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HARHAAEabWluZWNyYWZ0Om1pc2MvcHVtcGtpbmJsdXIAAQAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y2FydmVkX3B1bXBraW4=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5jYXJ2ZWRfcHVtcGtpbgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 339, + "key": "minecraft:jack_o_lantern", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6amFja19vX2xhbnRlcm4=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5qYWNrX29fbGFudGVybgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 340, + "key": "minecraft:netherrack", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6bmV0aGVycmFjaw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5uZXRoZXJyYWNrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 341, + "key": "minecraft:soul_sand", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6c291bF9zYW5k", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5zb3VsX3NhbmQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 342, + "key": "minecraft:soul_soil", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6c291bF9zb2ls", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5zb3VsX3NvaWwA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 343, + "key": "minecraft:basalt", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6YmFzYWx0", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5iYXNhbHQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 344, + "key": "minecraft:polished_basalt", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6cG9saXNoZWRfYmFzYWx0", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9iYXNhbHQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 345, + "key": "minecraft:smooth_basalt", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6c21vb3RoX2Jhc2FsdA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5zbW9vdGhfYmFzYWx0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 346, + "key": "minecraft:soul_torch", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6c291bF90b3JjaA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5zb3VsX3RvcmNoAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 347, + "key": "minecraft:glowstone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6Z2xvd3N0b25l", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5nbG93c3RvbmUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 348, + "key": "minecraft:infested_stone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6aW5mZXN0ZWRfc3RvbmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5pbmZlc3RlZF9zdG9uZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 349, + "key": "minecraft:infested_cobblestone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6aW5mZXN0ZWRfY29iYmxlc3RvbmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5pbmZlc3RlZF9jb2JibGVzdG9uZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 350, + "key": "minecraft:infested_stone_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6aW5mZXN0ZWRfc3RvbmVfYnJpY2tz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5pbmZlc3RlZF9zdG9uZV9icmlja3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 351, + "key": "minecraft:infested_mossy_stone_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByVtaW5lY3JhZnQ6aW5mZXN0ZWRfbW9zc3lfc3RvbmVfYnJpY2tz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAK2Jsb2NrLm1pbmVjcmFmdC5pbmZlc3RlZF9tb3NzeV9zdG9uZV9icmlja3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 352, + "key": "minecraft:infested_cracked_stone_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BydtaW5lY3JhZnQ6aW5mZXN0ZWRfY3JhY2tlZF9zdG9uZV9icmlja3M=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALWJsb2NrLm1pbmVjcmFmdC5pbmZlc3RlZF9jcmFja2VkX3N0b25lX2JyaWNrcwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 353, + "key": "minecraft:infested_chiseled_stone_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByhtaW5lY3JhZnQ6aW5mZXN0ZWRfY2hpc2VsZWRfc3RvbmVfYnJpY2tz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALmJsb2NrLm1pbmVjcmFmdC5pbmZlc3RlZF9jaGlzZWxlZF9zdG9uZV9icmlja3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 354, + "key": "minecraft:infested_deepslate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6aW5mZXN0ZWRfZGVlcHNsYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5pbmZlc3RlZF9kZWVwc2xhdGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 355, + "key": "minecraft:stone_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6c3RvbmVfYnJpY2tz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5zdG9uZV9icmlja3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 356, + "key": "minecraft:mossy_stone_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6bW9zc3lfc3RvbmVfYnJpY2tz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5tb3NzeV9zdG9uZV9icmlja3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 357, + "key": "minecraft:cracked_stone_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6Y3JhY2tlZF9zdG9uZV9icmlja3M=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5jcmFja2VkX3N0b25lX2JyaWNrcwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 358, + "key": "minecraft:chiseled_stone_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6Y2hpc2VsZWRfc3RvbmVfYnJpY2tz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF9zdG9uZV9icmlja3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 359, + "key": "minecraft:packed_mud", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6cGFja2VkX211ZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5wYWNrZWRfbXVkAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 360, + "key": "minecraft:mud_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6bXVkX2JyaWNrcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5tdWRfYnJpY2tzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 361, + "key": "minecraft:deepslate_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6ZGVlcHNsYXRlX2JyaWNrcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfYnJpY2tzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 362, + "key": "minecraft:cracked_deepslate_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6Y3JhY2tlZF9kZWVwc2xhdGVfYnJpY2tz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5jcmFja2VkX2RlZXBzbGF0ZV9icmlja3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 363, + "key": "minecraft:deepslate_tiles", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6ZGVlcHNsYXRlX3RpbGVz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfdGlsZXMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 364, + "key": "minecraft:cracked_deepslate_tiles", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6Y3JhY2tlZF9kZWVwc2xhdGVfdGlsZXM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5jcmFja2VkX2RlZXBzbGF0ZV90aWxlcwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 365, + "key": "minecraft:chiseled_deepslate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6Y2hpc2VsZWRfZGVlcHNsYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF9kZWVwc2xhdGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 366, + "key": "minecraft:reinforced_deepslate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6cmVpbmZvcmNlZF9kZWVwc2xhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5yZWluZm9yY2VkX2RlZXBzbGF0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 367, + "key": "minecraft:brown_mushroom_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6YnJvd25fbXVzaHJvb21fYmxvY2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5icm93bl9tdXNocm9vbV9ibG9jawA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 368, + "key": "minecraft:red_mushroom_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6cmVkX211c2hyb29tX2Jsb2Nr", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5yZWRfbXVzaHJvb21fYmxvY2sA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 369, + "key": "minecraft:mushroom_stem", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6bXVzaHJvb21fc3RlbQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5tdXNocm9vbV9zdGVtAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 370, + "key": "minecraft:iron_bars", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6aXJvbl9iYXJz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5pcm9uX2JhcnMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 371, + "key": "minecraft:chain", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6Y2hhaW4=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5jaGFpbgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 372, + "key": "minecraft:glass_pane", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6Z2xhc3NfcGFuZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5nbGFzc19wYW5lAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 373, + "key": "minecraft:melon", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6bWVsb24=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5tZWxvbgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 374, + "key": "minecraft:vine", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw5taW5lY3JhZnQ6dmluZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC52aW5lAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 375, + "key": "minecraft:glow_lichen", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Z2xvd19saWNoZW4=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5nbG93X2xpY2hlbgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 376, + "key": "minecraft:resin_clump", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6cmVzaW5fY2x1bXA=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LnJlc2luX2NsdW1wAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 377, + "key": "minecraft:resin_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6cmVzaW5fYmxvY2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5yZXNpbl9ibG9jawA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 378, + "key": "minecraft:resin_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6cmVzaW5fYnJpY2tz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5yZXNpbl9icmlja3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 379, + "key": "minecraft:resin_brick_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6cmVzaW5fYnJpY2tfc3RhaXJz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5yZXNpbl9icmlja19zdGFpcnMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 380, + "key": "minecraft:resin_brick_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6cmVzaW5fYnJpY2tfc2xhYg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5yZXNpbl9icmlja19zbGFiAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 381, + "key": "minecraft:resin_brick_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6cmVzaW5fYnJpY2tfd2FsbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5yZXNpbl9icmlja193YWxsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 382, + "key": "minecraft:chiseled_resin_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6Y2hpc2VsZWRfcmVzaW5fYnJpY2tz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF9yZXNpbl9icmlja3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 383, + "key": "minecraft:brick_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6YnJpY2tfc3RhaXJz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5icmlja19zdGFpcnMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 384, + "key": "minecraft:stone_brick_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6c3RvbmVfYnJpY2tfc3RhaXJz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5zdG9uZV9icmlja19zdGFpcnMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 385, + "key": "minecraft:mud_brick_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6bXVkX2JyaWNrX3N0YWlycw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5tdWRfYnJpY2tfc3RhaXJzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 386, + "key": "minecraft:mycelium", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6bXljZWxpdW0=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5teWNlbGl1bQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 387, + "key": "minecraft:lily_pad", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6bGlseV9wYWQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5saWx5X3BhZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 388, + "key": "minecraft:nether_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6bmV0aGVyX2JyaWNrcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5uZXRoZXJfYnJpY2tzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 389, + "key": "minecraft:cracked_nether_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6Y3JhY2tlZF9uZXRoZXJfYnJpY2tz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5jcmFja2VkX25ldGhlcl9icmlja3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 390, + "key": "minecraft:chiseled_nether_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6Y2hpc2VsZWRfbmV0aGVyX2JyaWNrcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF9uZXRoZXJfYnJpY2tzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 391, + "key": "minecraft:nether_brick_fence", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6bmV0aGVyX2JyaWNrX2ZlbmNl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5uZXRoZXJfYnJpY2tfZmVuY2UA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 392, + "key": "minecraft:nether_brick_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6bmV0aGVyX2JyaWNrX3N0YWlycw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5uZXRoZXJfYnJpY2tfc3RhaXJzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 393, + "key": "minecraft:sculk", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6c2N1bGs=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5zY3VsawA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 394, + "key": "minecraft:sculk_vein", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6c2N1bGtfdmVpbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5zY3Vsa192ZWluAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 395, + "key": "minecraft:sculk_catalyst", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6c2N1bGtfY2F0YWx5c3Q=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5zY3Vsa19jYXRhbHlzdAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 396, + "key": "minecraft:sculk_shrieker", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6c2N1bGtfc2hyaWVrZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5zY3Vsa19zaHJpZWtlcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 397, + "key": "minecraft:enchanting_table", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6ZW5jaGFudGluZ190YWJsZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5lbmNoYW50aW5nX3RhYmxlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 398, + "key": "minecraft:end_portal_frame", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6ZW5kX3BvcnRhbF9mcmFtZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5lbmRfcG9ydGFsX2ZyYW1lAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 399, + "key": "minecraft:end_stone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6ZW5kX3N0b25l", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5lbmRfc3RvbmUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 400, + "key": "minecraft:end_stone_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6ZW5kX3N0b25lX2JyaWNrcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5lbmRfc3RvbmVfYnJpY2tzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 401, + "key": "minecraft:dragon_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6ZHJhZ29uX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5kcmFnb25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQM=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 402, + "key": "minecraft:sandstone_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6c2FuZHN0b25lX3N0YWlycw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5zYW5kc3RvbmVfc3RhaXJzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 403, + "key": "minecraft:ender_chest", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6ZW5kZXJfY2hlc3Q=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5lbmRlcl9jaGVzdAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 404, + "key": "minecraft:emerald_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZW1lcmFsZF9ibG9jaw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5lbWVyYWxkX2Jsb2NrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 405, + "key": "minecraft:oak_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6b2FrX3N0YWlycw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5vYWtfc3RhaXJzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 406, + "key": "minecraft:spruce_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6c3BydWNlX3N0YWlycw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5zcHJ1Y2Vfc3RhaXJzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 407, + "key": "minecraft:birch_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmlyY2hfc3RhaXJz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5iaXJjaF9zdGFpcnMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 408, + "key": "minecraft:jungle_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6anVuZ2xlX3N0YWlycw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5qdW5nbGVfc3RhaXJzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 409, + "key": "minecraft:acacia_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6YWNhY2lhX3N0YWlycw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5hY2FjaWFfc3RhaXJzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 410, + "key": "minecraft:cherry_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y2hlcnJ5X3N0YWlycw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jaGVycnlfc3RhaXJzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 411, + "key": "minecraft:dark_oak_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6ZGFya19vYWtfc3RhaXJz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19zdGFpcnMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 412, + "key": "minecraft:pale_oak_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6cGFsZV9vYWtfc3RhaXJz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19zdGFpcnMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 413, + "key": "minecraft:mangrove_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6bWFuZ3JvdmVfc3RhaXJz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9zdGFpcnMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 414, + "key": "minecraft:bamboo_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6YmFtYm9vX3N0YWlycw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5iYW1ib29fc3RhaXJzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 415, + "key": "minecraft:bamboo_mosaic_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6YmFtYm9vX21vc2FpY19zdGFpcnM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5iYW1ib29fbW9zYWljX3N0YWlycwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 416, + "key": "minecraft:crimson_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y3JpbXNvbl9zdGFpcnM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5jcmltc29uX3N0YWlycwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 417, + "key": "minecraft:warped_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6d2FycGVkX3N0YWlycw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC53YXJwZWRfc3RhaXJzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 418, + "key": "minecraft:command_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y29tbWFuZF9ibG9jaw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jb21tYW5kX2Jsb2NrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQM=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 419, + "key": "minecraft:beacon", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6YmVhY29u", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5iZWFjb24A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQI=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 420, + "key": "minecraft:cobblestone_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6Y29iYmxlc3RvbmVfd2FsbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5jb2JibGVzdG9uZV93YWxsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 421, + "key": "minecraft:mossy_cobblestone_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6bW9zc3lfY29iYmxlc3RvbmVfd2FsbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5tb3NzeV9jb2JibGVzdG9uZV93YWxsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 422, + "key": "minecraft:brick_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6YnJpY2tfd2FsbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5icmlja193YWxsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 423, + "key": "minecraft:prismarine_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6cHJpc21hcmluZV93YWxs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5wcmlzbWFyaW5lX3dhbGwA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 424, + "key": "minecraft:red_sandstone_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6cmVkX3NhbmRzdG9uZV93YWxs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5yZWRfc2FuZHN0b25lX3dhbGwA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 425, + "key": "minecraft:mossy_stone_brick_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6bW9zc3lfc3RvbmVfYnJpY2tfd2FsbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5tb3NzeV9zdG9uZV9icmlja193YWxsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 426, + "key": "minecraft:granite_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z3Jhbml0ZV93YWxs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5ncmFuaXRlX3dhbGwA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 427, + "key": "minecraft:stone_brick_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6c3RvbmVfYnJpY2tfd2FsbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5zdG9uZV9icmlja193YWxsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 428, + "key": "minecraft:mud_brick_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6bXVkX2JyaWNrX3dhbGw=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5tdWRfYnJpY2tfd2FsbAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 429, + "key": "minecraft:nether_brick_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6bmV0aGVyX2JyaWNrX3dhbGw=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5uZXRoZXJfYnJpY2tfd2FsbAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 430, + "key": "minecraft:andesite_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6YW5kZXNpdGVfd2FsbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5hbmRlc2l0ZV93YWxsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 431, + "key": "minecraft:red_nether_brick_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6cmVkX25ldGhlcl9icmlja193YWxs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5yZWRfbmV0aGVyX2JyaWNrX3dhbGwA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 432, + "key": "minecraft:sandstone_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6c2FuZHN0b25lX3dhbGw=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5zYW5kc3RvbmVfd2FsbAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 433, + "key": "minecraft:end_stone_brick_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6ZW5kX3N0b25lX2JyaWNrX3dhbGw=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5lbmRfc3RvbmVfYnJpY2tfd2FsbAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 434, + "key": "minecraft:diorite_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6ZGlvcml0ZV93YWxs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5kaW9yaXRlX3dhbGwA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 435, + "key": "minecraft:blackstone_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6YmxhY2tzdG9uZV93YWxs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5ibGFja3N0b25lX3dhbGwA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 436, + "key": "minecraft:polished_blackstone_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6cG9saXNoZWRfYmxhY2tzdG9uZV93YWxs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ibGFja3N0b25lX3dhbGwA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 437, + "key": "minecraft:polished_blackstone_brick_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByhtaW5lY3JhZnQ6cG9saXNoZWRfYmxhY2tzdG9uZV9icmlja193YWxs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALmJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ibGFja3N0b25lX2JyaWNrX3dhbGwA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 438, + "key": "minecraft:cobbled_deepslate_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6Y29iYmxlZF9kZWVwc2xhdGVfd2FsbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5jb2JibGVkX2RlZXBzbGF0ZV93YWxsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 439, + "key": "minecraft:polished_deepslate_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6cG9saXNoZWRfZGVlcHNsYXRlX3dhbGw=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9kZWVwc2xhdGVfd2FsbAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 440, + "key": "minecraft:deepslate_brick_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6ZGVlcHNsYXRlX2JyaWNrX3dhbGw=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfYnJpY2tfd2FsbAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 441, + "key": "minecraft:deepslate_tile_wall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZGVlcHNsYXRlX3RpbGVfd2FsbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfdGlsZV93YWxsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 442, + "key": "minecraft:anvil", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6YW52aWw=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5hbnZpbAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 443, + "key": "minecraft:chipped_anvil", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y2hpcHBlZF9hbnZpbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jaGlwcGVkX2FudmlsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 444, + "key": "minecraft:damaged_anvil", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZGFtYWdlZF9hbnZpbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5kYW1hZ2VkX2FudmlsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 445, + "key": "minecraft:chiseled_quartz_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6Y2hpc2VsZWRfcXVhcnR6X2Jsb2Nr", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF9xdWFydHpfYmxvY2sA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 446, + "key": "minecraft:quartz_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6cXVhcnR6X2Jsb2Nr", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5xdWFydHpfYmxvY2sA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 447, + "key": "minecraft:quartz_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6cXVhcnR6X2JyaWNrcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5xdWFydHpfYnJpY2tzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 448, + "key": "minecraft:quartz_pillar", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6cXVhcnR6X3BpbGxhcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5xdWFydHpfcGlsbGFyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 449, + "key": "minecraft:quartz_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6cXVhcnR6X3N0YWlycw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5xdWFydHpfc3RhaXJzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 450, + "key": "minecraft:white_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6d2hpdGVfdGVycmFjb3R0YQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC53aGl0ZV90ZXJyYWNvdHRhAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 451, + "key": "minecraft:orange_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6b3JhbmdlX3RlcnJhY290dGE=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5vcmFuZ2VfdGVycmFjb3R0YQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 452, + "key": "minecraft:magenta_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6bWFnZW50YV90ZXJyYWNvdHRh", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX3RlcnJhY290dGEA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 453, + "key": "minecraft:light_blue_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6bGlnaHRfYmx1ZV90ZXJyYWNvdHRh", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX3RlcnJhY290dGEA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 454, + "key": "minecraft:yellow_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6eWVsbG93X3RlcnJhY290dGE=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC55ZWxsb3dfdGVycmFjb3R0YQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 455, + "key": "minecraft:lime_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6bGltZV90ZXJyYWNvdHRh", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5saW1lX3RlcnJhY290dGEA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 456, + "key": "minecraft:pink_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6cGlua190ZXJyYWNvdHRh", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5waW5rX3RlcnJhY290dGEA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 457, + "key": "minecraft:gray_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6Z3JheV90ZXJyYWNvdHRh", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5ncmF5X3RlcnJhY290dGEA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 458, + "key": "minecraft:light_gray_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6bGlnaHRfZ3JheV90ZXJyYWNvdHRh", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X3RlcnJhY290dGEA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 459, + "key": "minecraft:cyan_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6Y3lhbl90ZXJyYWNvdHRh", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5jeWFuX3RlcnJhY290dGEA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 460, + "key": "minecraft:purple_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6cHVycGxlX3RlcnJhY290dGE=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5wdXJwbGVfdGVycmFjb3R0YQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 461, + "key": "minecraft:blue_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6Ymx1ZV90ZXJyYWNvdHRh", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5ibHVlX3RlcnJhY290dGEA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 462, + "key": "minecraft:brown_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6YnJvd25fdGVycmFjb3R0YQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5icm93bl90ZXJyYWNvdHRhAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 463, + "key": "minecraft:green_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6Z3JlZW5fdGVycmFjb3R0YQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5ncmVlbl90ZXJyYWNvdHRhAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 464, + "key": "minecraft:red_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6cmVkX3RlcnJhY290dGE=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5yZWRfdGVycmFjb3R0YQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 465, + "key": "minecraft:black_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6YmxhY2tfdGVycmFjb3R0YQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5ibGFja190ZXJyYWNvdHRhAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 466, + "key": "minecraft:barrier", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6YmFycmllcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5iYXJyaWVyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQM=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 467, + "key": "minecraft:light", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:block_state": "PwEFbGV2ZWwCMTU=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6bGlnaHQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5saWdodAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQM=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 468, + "key": "minecraft:hay_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6aGF5X2Jsb2Nr", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5oYXlfYmxvY2sA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 469, + "key": "minecraft:white_carpet", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAaxBgEWbWluZWNyYWZ0OndoaXRlX2NhcnBldAABA0t/AQEB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6d2hpdGVfY2FycGV0", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC53aGl0ZV9jYXJwZXQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 470, + "key": "minecraft:orange_carpet", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAaxBgEXbWluZWNyYWZ0Om9yYW5nZV9jYXJwZXQAAQNLfwEBAQ==", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6b3JhbmdlX2NhcnBldA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5vcmFuZ2VfY2FycGV0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 471, + "key": "minecraft:magenta_carpet", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAaxBgEYbWluZWNyYWZ0Om1hZ2VudGFfY2FycGV0AAEDS38BAQE=", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6bWFnZW50YV9jYXJwZXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX2NhcnBldAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 472, + "key": "minecraft:light_blue_carpet", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAaxBgEbbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FycGV0AAEDS38BAQE=", + "minecraft:item_model": "BxttaW5lY3JhZnQ6bGlnaHRfYmx1ZV9jYXJwZXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX2NhcnBldAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 473, + "key": "minecraft:yellow_carpet", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAaxBgEXbWluZWNyYWZ0OnllbGxvd19jYXJwZXQAAQNLfwEBAQ==", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6eWVsbG93X2NhcnBldA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC55ZWxsb3dfY2FycGV0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 474, + "key": "minecraft:lime_carpet", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAaxBgEVbWluZWNyYWZ0OmxpbWVfY2FycGV0AAEDS38BAQE=", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6bGltZV9jYXJwZXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5saW1lX2NhcnBldAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 475, + "key": "minecraft:pink_carpet", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAaxBgEVbWluZWNyYWZ0OnBpbmtfY2FycGV0AAEDS38BAQE=", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6cGlua19jYXJwZXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5waW5rX2NhcnBldAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 476, + "key": "minecraft:gray_carpet", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAaxBgEVbWluZWNyYWZ0OmdyYXlfY2FycGV0AAEDS38BAQE=", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Z3JheV9jYXJwZXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5ncmF5X2NhcnBldAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 477, + "key": "minecraft:light_gray_carpet", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAaxBgEbbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FycGV0AAEDS38BAQE=", + "minecraft:item_model": "BxttaW5lY3JhZnQ6bGlnaHRfZ3JheV9jYXJwZXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X2NhcnBldAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 478, + "key": "minecraft:cyan_carpet", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAaxBgEVbWluZWNyYWZ0OmN5YW5fY2FycGV0AAEDS38BAQE=", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y3lhbl9jYXJwZXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5jeWFuX2NhcnBldAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 479, + "key": "minecraft:purple_carpet", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAaxBgEXbWluZWNyYWZ0OnB1cnBsZV9jYXJwZXQAAQNLfwEBAQ==", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6cHVycGxlX2NhcnBldA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5wdXJwbGVfY2FycGV0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 480, + "key": "minecraft:blue_carpet", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAaxBgEVbWluZWNyYWZ0OmJsdWVfY2FycGV0AAEDS38BAQE=", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Ymx1ZV9jYXJwZXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5ibHVlX2NhcnBldAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 481, + "key": "minecraft:brown_carpet", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAaxBgEWbWluZWNyYWZ0OmJyb3duX2NhcnBldAABA0t/AQEB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6YnJvd25fY2FycGV0", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5icm93bl9jYXJwZXQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 482, + "key": "minecraft:green_carpet", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAaxBgEWbWluZWNyYWZ0OmdyZWVuX2NhcnBldAABA0t/AQEB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z3JlZW5fY2FycGV0", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5ncmVlbl9jYXJwZXQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 483, + "key": "minecraft:red_carpet", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAaxBgEUbWluZWNyYWZ0OnJlZF9jYXJwZXQAAQNLfwEBAQ==", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6cmVkX2NhcnBldA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5yZWRfY2FycGV0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 484, + "key": "minecraft:black_carpet", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAaxBgEWbWluZWNyYWZ0OmJsYWNrX2NhcnBldAABA0t/AQEB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmxhY2tfY2FycGV0", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5ibGFja19jYXJwZXQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 485, + "key": "minecraft:terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6dGVycmFjb3R0YQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC50ZXJyYWNvdHRhAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 486, + "key": "minecraft:packed_ice", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6cGFja2VkX2ljZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5wYWNrZWRfaWNlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 487, + "key": "minecraft:dirt_path", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6ZGlydF9wYXRo", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5kaXJ0X3BhdGgA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 488, + "key": "minecraft:sunflower", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6c3VuZmxvd2Vy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5zdW5mbG93ZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 489, + "key": "minecraft:lilac", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6bGlsYWM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5saWxhYwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 490, + "key": "minecraft:rose_bush", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6cm9zZV9idXNo", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5yb3NlX2J1c2gA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 491, + "key": "minecraft:peony", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6cGVvbnk=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5wZW9ueQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 492, + "key": "minecraft:tall_grass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6dGFsbF9ncmFzcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC50YWxsX2dyYXNzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 493, + "key": "minecraft:large_fern", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6bGFyZ2VfZmVybg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5sYXJnZV9mZXJuAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 494, + "key": "minecraft:white_stained_glass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6d2hpdGVfc3RhaW5lZF9nbGFzcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC53aGl0ZV9zdGFpbmVkX2dsYXNzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 495, + "key": "minecraft:orange_stained_glass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6b3JhbmdlX3N0YWluZWRfZ2xhc3M=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5vcmFuZ2Vfc3RhaW5lZF9nbGFzcwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 496, + "key": "minecraft:magenta_stained_glass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6bWFnZW50YV9zdGFpbmVkX2dsYXNz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX3N0YWluZWRfZ2xhc3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 497, + "key": "minecraft:light_blue_stained_glass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6bGlnaHRfYmx1ZV9zdGFpbmVkX2dsYXNz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX3N0YWluZWRfZ2xhc3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 498, + "key": "minecraft:yellow_stained_glass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6eWVsbG93X3N0YWluZWRfZ2xhc3M=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC55ZWxsb3dfc3RhaW5lZF9nbGFzcwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 499, + "key": "minecraft:lime_stained_glass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6bGltZV9zdGFpbmVkX2dsYXNz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5saW1lX3N0YWluZWRfZ2xhc3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 500, + "key": "minecraft:pink_stained_glass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6cGlua19zdGFpbmVkX2dsYXNz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5waW5rX3N0YWluZWRfZ2xhc3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 501, + "key": "minecraft:gray_stained_glass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6Z3JheV9zdGFpbmVkX2dsYXNz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5ncmF5X3N0YWluZWRfZ2xhc3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 502, + "key": "minecraft:light_gray_stained_glass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6bGlnaHRfZ3JheV9zdGFpbmVkX2dsYXNz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X3N0YWluZWRfZ2xhc3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 503, + "key": "minecraft:cyan_stained_glass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6Y3lhbl9zdGFpbmVkX2dsYXNz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5jeWFuX3N0YWluZWRfZ2xhc3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 504, + "key": "minecraft:purple_stained_glass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6cHVycGxlX3N0YWluZWRfZ2xhc3M=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5wdXJwbGVfc3RhaW5lZF9nbGFzcwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 505, + "key": "minecraft:blue_stained_glass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6Ymx1ZV9zdGFpbmVkX2dsYXNz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5ibHVlX3N0YWluZWRfZ2xhc3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 506, + "key": "minecraft:brown_stained_glass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6YnJvd25fc3RhaW5lZF9nbGFzcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5icm93bl9zdGFpbmVkX2dsYXNzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 507, + "key": "minecraft:green_stained_glass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6Z3JlZW5fc3RhaW5lZF9nbGFzcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5ncmVlbl9zdGFpbmVkX2dsYXNzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 508, + "key": "minecraft:red_stained_glass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6cmVkX3N0YWluZWRfZ2xhc3M=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5yZWRfc3RhaW5lZF9nbGFzcwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 509, + "key": "minecraft:black_stained_glass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6YmxhY2tfc3RhaW5lZF9nbGFzcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5ibGFja19zdGFpbmVkX2dsYXNzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 510, + "key": "minecraft:white_stained_glass_pane", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6d2hpdGVfc3RhaW5lZF9nbGFzc19wYW5l", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC53aGl0ZV9zdGFpbmVkX2dsYXNzX3BhbmUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 511, + "key": "minecraft:orange_stained_glass_pane", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByNtaW5lY3JhZnQ6b3JhbmdlX3N0YWluZWRfZ2xhc3NfcGFuZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC5vcmFuZ2Vfc3RhaW5lZF9nbGFzc19wYW5lAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 512, + "key": "minecraft:magenta_stained_glass_pane", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByRtaW5lY3JhZnQ6bWFnZW50YV9zdGFpbmVkX2dsYXNzX3BhbmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKmJsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX3N0YWluZWRfZ2xhc3NfcGFuZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 513, + "key": "minecraft:light_blue_stained_glass_pane", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BydtaW5lY3JhZnQ6bGlnaHRfYmx1ZV9zdGFpbmVkX2dsYXNzX3BhbmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALWJsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX3N0YWluZWRfZ2xhc3NfcGFuZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 514, + "key": "minecraft:yellow_stained_glass_pane", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByNtaW5lY3JhZnQ6eWVsbG93X3N0YWluZWRfZ2xhc3NfcGFuZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC55ZWxsb3dfc3RhaW5lZF9nbGFzc19wYW5lAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 515, + "key": "minecraft:lime_stained_glass_pane", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6bGltZV9zdGFpbmVkX2dsYXNzX3BhbmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5saW1lX3N0YWluZWRfZ2xhc3NfcGFuZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 516, + "key": "minecraft:pink_stained_glass_pane", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6cGlua19zdGFpbmVkX2dsYXNzX3BhbmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5waW5rX3N0YWluZWRfZ2xhc3NfcGFuZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 517, + "key": "minecraft:gray_stained_glass_pane", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6Z3JheV9zdGFpbmVkX2dsYXNzX3BhbmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5ncmF5X3N0YWluZWRfZ2xhc3NfcGFuZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 518, + "key": "minecraft:light_gray_stained_glass_pane", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BydtaW5lY3JhZnQ6bGlnaHRfZ3JheV9zdGFpbmVkX2dsYXNzX3BhbmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALWJsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X3N0YWluZWRfZ2xhc3NfcGFuZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 519, + "key": "minecraft:cyan_stained_glass_pane", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6Y3lhbl9zdGFpbmVkX2dsYXNzX3BhbmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5jeWFuX3N0YWluZWRfZ2xhc3NfcGFuZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 520, + "key": "minecraft:purple_stained_glass_pane", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByNtaW5lY3JhZnQ6cHVycGxlX3N0YWluZWRfZ2xhc3NfcGFuZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC5wdXJwbGVfc3RhaW5lZF9nbGFzc19wYW5lAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 521, + "key": "minecraft:blue_stained_glass_pane", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6Ymx1ZV9zdGFpbmVkX2dsYXNzX3BhbmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5ibHVlX3N0YWluZWRfZ2xhc3NfcGFuZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 522, + "key": "minecraft:brown_stained_glass_pane", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6YnJvd25fc3RhaW5lZF9nbGFzc19wYW5l", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5icm93bl9zdGFpbmVkX2dsYXNzX3BhbmUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 523, + "key": "minecraft:green_stained_glass_pane", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6Z3JlZW5fc3RhaW5lZF9nbGFzc19wYW5l", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5ncmVlbl9zdGFpbmVkX2dsYXNzX3BhbmUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 524, + "key": "minecraft:red_stained_glass_pane", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6cmVkX3N0YWluZWRfZ2xhc3NfcGFuZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5yZWRfc3RhaW5lZF9nbGFzc19wYW5lAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 525, + "key": "minecraft:black_stained_glass_pane", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6YmxhY2tfc3RhaW5lZF9nbGFzc19wYW5l", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5ibGFja19zdGFpbmVkX2dsYXNzX3BhbmUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 526, + "key": "minecraft:prismarine", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6cHJpc21hcmluZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5wcmlzbWFyaW5lAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 527, + "key": "minecraft:prismarine_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6cHJpc21hcmluZV9icmlja3M=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5wcmlzbWFyaW5lX2JyaWNrcwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 528, + "key": "minecraft:dark_prismarine", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6ZGFya19wcmlzbWFyaW5l", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5kYXJrX3ByaXNtYXJpbmUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 529, + "key": "minecraft:prismarine_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6cHJpc21hcmluZV9zdGFpcnM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5wcmlzbWFyaW5lX3N0YWlycwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 530, + "key": "minecraft:prismarine_brick_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6cHJpc21hcmluZV9icmlja19zdGFpcnM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5wcmlzbWFyaW5lX2JyaWNrX3N0YWlycwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 531, + "key": "minecraft:dark_prismarine_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6ZGFya19wcmlzbWFyaW5lX3N0YWlycw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5kYXJrX3ByaXNtYXJpbmVfc3RhaXJzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 532, + "key": "minecraft:sea_lantern", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6c2VhX2xhbnRlcm4=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zZWFfbGFudGVybgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 533, + "key": "minecraft:red_sandstone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6cmVkX3NhbmRzdG9uZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5yZWRfc2FuZHN0b25lAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 534, + "key": "minecraft:chiseled_red_sandstone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6Y2hpc2VsZWRfcmVkX3NhbmRzdG9uZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF9yZWRfc2FuZHN0b25lAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 535, + "key": "minecraft:cut_red_sandstone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6Y3V0X3JlZF9zYW5kc3RvbmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5jdXRfcmVkX3NhbmRzdG9uZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 536, + "key": "minecraft:red_sandstone_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6cmVkX3NhbmRzdG9uZV9zdGFpcnM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5yZWRfc2FuZHN0b25lX3N0YWlycwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 537, + "key": "minecraft:repeating_command_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6cmVwZWF0aW5nX2NvbW1hbmRfYmxvY2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5yZXBlYXRpbmdfY29tbWFuZF9ibG9jawA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQM=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 538, + "key": "minecraft:chain_command_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6Y2hhaW5fY29tbWFuZF9ibG9jaw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5jaGFpbl9jb21tYW5kX2Jsb2NrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQM=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 539, + "key": "minecraft:magma_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6bWFnbWFfYmxvY2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5tYWdtYV9ibG9jawA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 540, + "key": "minecraft:nether_wart_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6bmV0aGVyX3dhcnRfYmxvY2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5uZXRoZXJfd2FydF9ibG9jawA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 541, + "key": "minecraft:warped_wart_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6d2FycGVkX3dhcnRfYmxvY2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC53YXJwZWRfd2FydF9ibG9jawA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 542, + "key": "minecraft:red_nether_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6cmVkX25ldGhlcl9icmlja3M=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5yZWRfbmV0aGVyX2JyaWNrcwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 543, + "key": "minecraft:bone_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6Ym9uZV9ibG9jaw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5ib25lX2Jsb2NrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 544, + "key": "minecraft:structure_void", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6c3RydWN0dXJlX3ZvaWQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5zdHJ1Y3R1cmVfdm9pZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQM=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 545, + "key": "minecraft:shulker_box", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6c2h1bGtlcl9ib3g=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zaHVsa2VyX2JveAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 546, + "key": "minecraft:white_shulker_box", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6d2hpdGVfc2h1bGtlcl9ib3g=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC53aGl0ZV9zaHVsa2VyX2JveAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 547, + "key": "minecraft:orange_shulker_box", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6b3JhbmdlX3NodWxrZXJfYm94", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5vcmFuZ2Vfc2h1bGtlcl9ib3gA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 548, + "key": "minecraft:magenta_shulker_box", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6bWFnZW50YV9zaHVsa2VyX2JveA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX3NodWxrZXJfYm94AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 549, + "key": "minecraft:light_blue_shulker_box", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6bGlnaHRfYmx1ZV9zaHVsa2VyX2JveA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX3NodWxrZXJfYm94AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 550, + "key": "minecraft:yellow_shulker_box", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6eWVsbG93X3NodWxrZXJfYm94", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC55ZWxsb3dfc2h1bGtlcl9ib3gA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 551, + "key": "minecraft:lime_shulker_box", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6bGltZV9zaHVsa2VyX2JveA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5saW1lX3NodWxrZXJfYm94AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 552, + "key": "minecraft:pink_shulker_box", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6cGlua19zaHVsa2VyX2JveA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5waW5rX3NodWxrZXJfYm94AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 553, + "key": "minecraft:gray_shulker_box", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6Z3JheV9zaHVsa2VyX2JveA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5ncmF5X3NodWxrZXJfYm94AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 554, + "key": "minecraft:light_gray_shulker_box", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6bGlnaHRfZ3JheV9zaHVsa2VyX2JveA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X3NodWxrZXJfYm94AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 555, + "key": "minecraft:cyan_shulker_box", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6Y3lhbl9zaHVsa2VyX2JveA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5jeWFuX3NodWxrZXJfYm94AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 556, + "key": "minecraft:purple_shulker_box", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6cHVycGxlX3NodWxrZXJfYm94", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5wdXJwbGVfc2h1bGtlcl9ib3gA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 557, + "key": "minecraft:blue_shulker_box", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6Ymx1ZV9zaHVsa2VyX2JveA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5ibHVlX3NodWxrZXJfYm94AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 558, + "key": "minecraft:brown_shulker_box", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6YnJvd25fc2h1bGtlcl9ib3g=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5icm93bl9zaHVsa2VyX2JveAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 559, + "key": "minecraft:green_shulker_box", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6Z3JlZW5fc2h1bGtlcl9ib3g=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5ncmVlbl9zaHVsa2VyX2JveAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 560, + "key": "minecraft:red_shulker_box", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6cmVkX3NodWxrZXJfYm94", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5yZWRfc2h1bGtlcl9ib3gA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 561, + "key": "minecraft:black_shulker_box", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6YmxhY2tfc2h1bGtlcl9ib3g=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5ibGFja19zaHVsa2VyX2JveAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 562, + "key": "minecraft:white_glazed_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6d2hpdGVfZ2xhemVkX3RlcnJhY290dGE=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC53aGl0ZV9nbGF6ZWRfdGVycmFjb3R0YQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 563, + "key": "minecraft:orange_glazed_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6b3JhbmdlX2dsYXplZF90ZXJyYWNvdHRh", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5vcmFuZ2VfZ2xhemVkX3RlcnJhY290dGEA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 564, + "key": "minecraft:magenta_glazed_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByNtaW5lY3JhZnQ6bWFnZW50YV9nbGF6ZWRfdGVycmFjb3R0YQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX2dsYXplZF90ZXJyYWNvdHRhAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 565, + "key": "minecraft:light_blue_glazed_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByZtaW5lY3JhZnQ6bGlnaHRfYmx1ZV9nbGF6ZWRfdGVycmFjb3R0YQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALGJsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX2dsYXplZF90ZXJyYWNvdHRhAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 566, + "key": "minecraft:yellow_glazed_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6eWVsbG93X2dsYXplZF90ZXJyYWNvdHRh", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC55ZWxsb3dfZ2xhemVkX3RlcnJhY290dGEA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 567, + "key": "minecraft:lime_glazed_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6bGltZV9nbGF6ZWRfdGVycmFjb3R0YQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5saW1lX2dsYXplZF90ZXJyYWNvdHRhAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 568, + "key": "minecraft:pink_glazed_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6cGlua19nbGF6ZWRfdGVycmFjb3R0YQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5waW5rX2dsYXplZF90ZXJyYWNvdHRhAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 569, + "key": "minecraft:gray_glazed_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6Z3JheV9nbGF6ZWRfdGVycmFjb3R0YQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5ncmF5X2dsYXplZF90ZXJyYWNvdHRhAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 570, + "key": "minecraft:light_gray_glazed_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByZtaW5lY3JhZnQ6bGlnaHRfZ3JheV9nbGF6ZWRfdGVycmFjb3R0YQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALGJsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X2dsYXplZF90ZXJyYWNvdHRhAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 571, + "key": "minecraft:cyan_glazed_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6Y3lhbl9nbGF6ZWRfdGVycmFjb3R0YQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5jeWFuX2dsYXplZF90ZXJyYWNvdHRhAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 572, + "key": "minecraft:purple_glazed_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6cHVycGxlX2dsYXplZF90ZXJyYWNvdHRh", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5wdXJwbGVfZ2xhemVkX3RlcnJhY290dGEA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 573, + "key": "minecraft:blue_glazed_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6Ymx1ZV9nbGF6ZWRfdGVycmFjb3R0YQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5ibHVlX2dsYXplZF90ZXJyYWNvdHRhAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 574, + "key": "minecraft:brown_glazed_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6YnJvd25fZ2xhemVkX3RlcnJhY290dGE=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5icm93bl9nbGF6ZWRfdGVycmFjb3R0YQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 575, + "key": "minecraft:green_glazed_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6Z3JlZW5fZ2xhemVkX3RlcnJhY290dGE=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5ncmVlbl9nbGF6ZWRfdGVycmFjb3R0YQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 576, + "key": "minecraft:red_glazed_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6cmVkX2dsYXplZF90ZXJyYWNvdHRh", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5yZWRfZ2xhemVkX3RlcnJhY290dGEA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 577, + "key": "minecraft:black_glazed_terracotta", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6YmxhY2tfZ2xhemVkX3RlcnJhY290dGE=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5ibGFja19nbGF6ZWRfdGVycmFjb3R0YQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 578, + "key": "minecraft:white_concrete", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6d2hpdGVfY29uY3JldGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC53aGl0ZV9jb25jcmV0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 579, + "key": "minecraft:orange_concrete", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6b3JhbmdlX2NvbmNyZXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5vcmFuZ2VfY29uY3JldGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 580, + "key": "minecraft:magenta_concrete", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6bWFnZW50YV9jb25jcmV0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX2NvbmNyZXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 581, + "key": "minecraft:light_blue_concrete", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6bGlnaHRfYmx1ZV9jb25jcmV0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX2NvbmNyZXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 582, + "key": "minecraft:yellow_concrete", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6eWVsbG93X2NvbmNyZXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC55ZWxsb3dfY29uY3JldGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 583, + "key": "minecraft:lime_concrete", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6bGltZV9jb25jcmV0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5saW1lX2NvbmNyZXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 584, + "key": "minecraft:pink_concrete", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6cGlua19jb25jcmV0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5waW5rX2NvbmNyZXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 585, + "key": "minecraft:gray_concrete", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Z3JheV9jb25jcmV0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5ncmF5X2NvbmNyZXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 586, + "key": "minecraft:light_gray_concrete", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6bGlnaHRfZ3JheV9jb25jcmV0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X2NvbmNyZXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 587, + "key": "minecraft:cyan_concrete", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y3lhbl9jb25jcmV0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jeWFuX2NvbmNyZXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 588, + "key": "minecraft:purple_concrete", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6cHVycGxlX2NvbmNyZXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5wdXJwbGVfY29uY3JldGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 589, + "key": "minecraft:blue_concrete", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Ymx1ZV9jb25jcmV0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5ibHVlX2NvbmNyZXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 590, + "key": "minecraft:brown_concrete", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6YnJvd25fY29uY3JldGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5icm93bl9jb25jcmV0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 591, + "key": "minecraft:green_concrete", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6Z3JlZW5fY29uY3JldGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5ncmVlbl9jb25jcmV0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 592, + "key": "minecraft:red_concrete", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6cmVkX2NvbmNyZXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5yZWRfY29uY3JldGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 593, + "key": "minecraft:black_concrete", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6YmxhY2tfY29uY3JldGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5ibGFja19jb25jcmV0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 594, + "key": "minecraft:white_concrete_powder", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6d2hpdGVfY29uY3JldGVfcG93ZGVy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC53aGl0ZV9jb25jcmV0ZV9wb3dkZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 595, + "key": "minecraft:orange_concrete_powder", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6b3JhbmdlX2NvbmNyZXRlX3Bvd2Rlcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5vcmFuZ2VfY29uY3JldGVfcG93ZGVyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 596, + "key": "minecraft:magenta_concrete_powder", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6bWFnZW50YV9jb25jcmV0ZV9wb3dkZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX2NvbmNyZXRlX3Bvd2RlcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 597, + "key": "minecraft:light_blue_concrete_powder", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByRtaW5lY3JhZnQ6bGlnaHRfYmx1ZV9jb25jcmV0ZV9wb3dkZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKmJsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX2NvbmNyZXRlX3Bvd2RlcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 598, + "key": "minecraft:yellow_concrete_powder", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6eWVsbG93X2NvbmNyZXRlX3Bvd2Rlcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC55ZWxsb3dfY29uY3JldGVfcG93ZGVyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 599, + "key": "minecraft:lime_concrete_powder", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6bGltZV9jb25jcmV0ZV9wb3dkZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5saW1lX2NvbmNyZXRlX3Bvd2RlcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 600, + "key": "minecraft:pink_concrete_powder", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6cGlua19jb25jcmV0ZV9wb3dkZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5waW5rX2NvbmNyZXRlX3Bvd2RlcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 601, + "key": "minecraft:gray_concrete_powder", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6Z3JheV9jb25jcmV0ZV9wb3dkZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5ncmF5X2NvbmNyZXRlX3Bvd2RlcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 602, + "key": "minecraft:light_gray_concrete_powder", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByRtaW5lY3JhZnQ6bGlnaHRfZ3JheV9jb25jcmV0ZV9wb3dkZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKmJsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X2NvbmNyZXRlX3Bvd2RlcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 603, + "key": "minecraft:cyan_concrete_powder", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6Y3lhbl9jb25jcmV0ZV9wb3dkZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5jeWFuX2NvbmNyZXRlX3Bvd2RlcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 604, + "key": "minecraft:purple_concrete_powder", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6cHVycGxlX2NvbmNyZXRlX3Bvd2Rlcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5wdXJwbGVfY29uY3JldGVfcG93ZGVyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 605, + "key": "minecraft:blue_concrete_powder", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6Ymx1ZV9jb25jcmV0ZV9wb3dkZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5ibHVlX2NvbmNyZXRlX3Bvd2RlcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 606, + "key": "minecraft:brown_concrete_powder", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6YnJvd25fY29uY3JldGVfcG93ZGVy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5icm93bl9jb25jcmV0ZV9wb3dkZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 607, + "key": "minecraft:green_concrete_powder", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6Z3JlZW5fY29uY3JldGVfcG93ZGVy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5ncmVlbl9jb25jcmV0ZV9wb3dkZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 608, + "key": "minecraft:red_concrete_powder", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6cmVkX2NvbmNyZXRlX3Bvd2Rlcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5yZWRfY29uY3JldGVfcG93ZGVyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 609, + "key": "minecraft:black_concrete_powder", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6YmxhY2tfY29uY3JldGVfcG93ZGVy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5ibGFja19jb25jcmV0ZV9wb3dkZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 610, + "key": "minecraft:turtle_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6dHVydGxlX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC50dXJ0bGVfZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 611, + "key": "minecraft:sniffer_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6c25pZmZlcl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zbmlmZmVyX2VnZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 612, + "key": "minecraft:dead_tube_coral_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6ZGVhZF90dWJlX2NvcmFsX2Jsb2Nr", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5kZWFkX3R1YmVfY29yYWxfYmxvY2sA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 613, + "key": "minecraft:dead_brain_coral_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6ZGVhZF9icmFpbl9jb3JhbF9ibG9jaw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5kZWFkX2JyYWluX2NvcmFsX2Jsb2NrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 614, + "key": "minecraft:dead_bubble_coral_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6ZGVhZF9idWJibGVfY29yYWxfYmxvY2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5kZWFkX2J1YmJsZV9jb3JhbF9ibG9jawA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 615, + "key": "minecraft:dead_fire_coral_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6ZGVhZF9maXJlX2NvcmFsX2Jsb2Nr", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5kZWFkX2ZpcmVfY29yYWxfYmxvY2sA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 616, + "key": "minecraft:dead_horn_coral_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6ZGVhZF9ob3JuX2NvcmFsX2Jsb2Nr", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5kZWFkX2hvcm5fY29yYWxfYmxvY2sA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 617, + "key": "minecraft:tube_coral_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6dHViZV9jb3JhbF9ibG9jaw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC50dWJlX2NvcmFsX2Jsb2NrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 618, + "key": "minecraft:brain_coral_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6YnJhaW5fY29yYWxfYmxvY2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5icmFpbl9jb3JhbF9ibG9jawA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 619, + "key": "minecraft:bubble_coral_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6YnViYmxlX2NvcmFsX2Jsb2Nr", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5idWJibGVfY29yYWxfYmxvY2sA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 620, + "key": "minecraft:fire_coral_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6ZmlyZV9jb3JhbF9ibG9jaw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5maXJlX2NvcmFsX2Jsb2NrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 621, + "key": "minecraft:horn_coral_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6aG9ybl9jb3JhbF9ibG9jaw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5ob3JuX2NvcmFsX2Jsb2NrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 622, + "key": "minecraft:tube_coral", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6dHViZV9jb3JhbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC50dWJlX2NvcmFsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 623, + "key": "minecraft:brain_coral", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6YnJhaW5fY29yYWw=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5icmFpbl9jb3JhbAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 624, + "key": "minecraft:bubble_coral", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6YnViYmxlX2NvcmFs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5idWJibGVfY29yYWwA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 625, + "key": "minecraft:fire_coral", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6ZmlyZV9jb3JhbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5maXJlX2NvcmFsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 626, + "key": "minecraft:horn_coral", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6aG9ybl9jb3JhbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5ob3JuX2NvcmFsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 627, + "key": "minecraft:dead_brain_coral", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6ZGVhZF9icmFpbl9jb3JhbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5kZWFkX2JyYWluX2NvcmFsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 628, + "key": "minecraft:dead_bubble_coral", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6ZGVhZF9idWJibGVfY29yYWw=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5kZWFkX2J1YmJsZV9jb3JhbAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 629, + "key": "minecraft:dead_fire_coral", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6ZGVhZF9maXJlX2NvcmFs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5kZWFkX2ZpcmVfY29yYWwA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 630, + "key": "minecraft:dead_horn_coral", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6ZGVhZF9ob3JuX2NvcmFs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5kZWFkX2hvcm5fY29yYWwA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 631, + "key": "minecraft:dead_tube_coral", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6ZGVhZF90dWJlX2NvcmFs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5kZWFkX3R1YmVfY29yYWwA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 632, + "key": "minecraft:tube_coral_fan", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6dHViZV9jb3JhbF9mYW4=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC50dWJlX2NvcmFsX2ZhbgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 633, + "key": "minecraft:brain_coral_fan", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6YnJhaW5fY29yYWxfZmFu", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5icmFpbl9jb3JhbF9mYW4A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 634, + "key": "minecraft:bubble_coral_fan", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6YnViYmxlX2NvcmFsX2Zhbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5idWJibGVfY29yYWxfZmFuAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 635, + "key": "minecraft:fire_coral_fan", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6ZmlyZV9jb3JhbF9mYW4=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5maXJlX2NvcmFsX2ZhbgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 636, + "key": "minecraft:horn_coral_fan", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6aG9ybl9jb3JhbF9mYW4=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5ob3JuX2NvcmFsX2ZhbgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 637, + "key": "minecraft:dead_tube_coral_fan", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZGVhZF90dWJlX2NvcmFsX2Zhbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5kZWFkX3R1YmVfY29yYWxfZmFuAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 638, + "key": "minecraft:dead_brain_coral_fan", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6ZGVhZF9icmFpbl9jb3JhbF9mYW4=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5kZWFkX2JyYWluX2NvcmFsX2ZhbgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 639, + "key": "minecraft:dead_bubble_coral_fan", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6ZGVhZF9idWJibGVfY29yYWxfZmFu", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5kZWFkX2J1YmJsZV9jb3JhbF9mYW4A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 640, + "key": "minecraft:dead_fire_coral_fan", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZGVhZF9maXJlX2NvcmFsX2Zhbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5kZWFkX2ZpcmVfY29yYWxfZmFuAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 641, + "key": "minecraft:dead_horn_coral_fan", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZGVhZF9ob3JuX2NvcmFsX2Zhbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5kZWFkX2hvcm5fY29yYWxfZmFuAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 642, + "key": "minecraft:blue_ice", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6Ymx1ZV9pY2U=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5ibHVlX2ljZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 643, + "key": "minecraft:conduit", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6Y29uZHVpdA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5jb25kdWl0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 644, + "key": "minecraft:polished_granite_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6cG9saXNoZWRfZ3Jhbml0ZV9zdGFpcnM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ncmFuaXRlX3N0YWlycwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 645, + "key": "minecraft:smooth_red_sandstone_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByVtaW5lY3JhZnQ6c21vb3RoX3JlZF9zYW5kc3RvbmVfc3RhaXJz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAK2Jsb2NrLm1pbmVjcmFmdC5zbW9vdGhfcmVkX3NhbmRzdG9uZV9zdGFpcnMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 646, + "key": "minecraft:mossy_stone_brick_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6bW9zc3lfc3RvbmVfYnJpY2tfc3RhaXJz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5tb3NzeV9zdG9uZV9icmlja19zdGFpcnMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 647, + "key": "minecraft:polished_diorite_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6cG9saXNoZWRfZGlvcml0ZV9zdGFpcnM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9kaW9yaXRlX3N0YWlycwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 648, + "key": "minecraft:mossy_cobblestone_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6bW9zc3lfY29iYmxlc3RvbmVfc3RhaXJz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5tb3NzeV9jb2JibGVzdG9uZV9zdGFpcnMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 649, + "key": "minecraft:end_stone_brick_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6ZW5kX3N0b25lX2JyaWNrX3N0YWlycw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5lbmRfc3RvbmVfYnJpY2tfc3RhaXJzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 650, + "key": "minecraft:stone_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6c3RvbmVfc3RhaXJz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5zdG9uZV9zdGFpcnMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 651, + "key": "minecraft:smooth_sandstone_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6c21vb3RoX3NhbmRzdG9uZV9zdGFpcnM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5zbW9vdGhfc2FuZHN0b25lX3N0YWlycwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 652, + "key": "minecraft:smooth_quartz_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6c21vb3RoX3F1YXJ0el9zdGFpcnM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5zbW9vdGhfcXVhcnR6X3N0YWlycwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 653, + "key": "minecraft:granite_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6Z3Jhbml0ZV9zdGFpcnM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5ncmFuaXRlX3N0YWlycwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 654, + "key": "minecraft:andesite_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6YW5kZXNpdGVfc3RhaXJz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5hbmRlc2l0ZV9zdGFpcnMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 655, + "key": "minecraft:red_nether_brick_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6cmVkX25ldGhlcl9icmlja19zdGFpcnM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5yZWRfbmV0aGVyX2JyaWNrX3N0YWlycwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 656, + "key": "minecraft:polished_andesite_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6cG9saXNoZWRfYW5kZXNpdGVfc3RhaXJz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9hbmRlc2l0ZV9zdGFpcnMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 657, + "key": "minecraft:diorite_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6ZGlvcml0ZV9zdGFpcnM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5kaW9yaXRlX3N0YWlycwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 658, + "key": "minecraft:cobbled_deepslate_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6Y29iYmxlZF9kZWVwc2xhdGVfc3RhaXJz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5jb2JibGVkX2RlZXBzbGF0ZV9zdGFpcnMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 659, + "key": "minecraft:polished_deepslate_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByNtaW5lY3JhZnQ6cG9saXNoZWRfZGVlcHNsYXRlX3N0YWlycw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9kZWVwc2xhdGVfc3RhaXJzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 660, + "key": "minecraft:deepslate_brick_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6ZGVlcHNsYXRlX2JyaWNrX3N0YWlycw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfYnJpY2tfc3RhaXJzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 661, + "key": "minecraft:deepslate_tile_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6ZGVlcHNsYXRlX3RpbGVfc3RhaXJz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfdGlsZV9zdGFpcnMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 662, + "key": "minecraft:polished_granite_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6cG9saXNoZWRfZ3Jhbml0ZV9zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ncmFuaXRlX3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 663, + "key": "minecraft:smooth_red_sandstone_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByNtaW5lY3JhZnQ6c21vb3RoX3JlZF9zYW5kc3RvbmVfc2xhYg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC5zbW9vdGhfcmVkX3NhbmRzdG9uZV9zbGFiAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 664, + "key": "minecraft:mossy_stone_brick_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6bW9zc3lfc3RvbmVfYnJpY2tfc2xhYg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5tb3NzeV9zdG9uZV9icmlja19zbGFiAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 665, + "key": "minecraft:polished_diorite_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6cG9saXNoZWRfZGlvcml0ZV9zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9kaW9yaXRlX3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 666, + "key": "minecraft:mossy_cobblestone_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6bW9zc3lfY29iYmxlc3RvbmVfc2xhYg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5tb3NzeV9jb2JibGVzdG9uZV9zbGFiAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 667, + "key": "minecraft:end_stone_brick_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6ZW5kX3N0b25lX2JyaWNrX3NsYWI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5lbmRfc3RvbmVfYnJpY2tfc2xhYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 668, + "key": "minecraft:smooth_sandstone_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6c21vb3RoX3NhbmRzdG9uZV9zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5zbW9vdGhfc2FuZHN0b25lX3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 669, + "key": "minecraft:smooth_quartz_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6c21vb3RoX3F1YXJ0el9zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5zbW9vdGhfcXVhcnR6X3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 670, + "key": "minecraft:granite_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z3Jhbml0ZV9zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5ncmFuaXRlX3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 671, + "key": "minecraft:andesite_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6YW5kZXNpdGVfc2xhYg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5hbmRlc2l0ZV9zbGFiAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 672, + "key": "minecraft:red_nether_brick_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6cmVkX25ldGhlcl9icmlja19zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5yZWRfbmV0aGVyX2JyaWNrX3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 673, + "key": "minecraft:polished_andesite_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6cG9saXNoZWRfYW5kZXNpdGVfc2xhYg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9hbmRlc2l0ZV9zbGFiAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 674, + "key": "minecraft:diorite_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6ZGlvcml0ZV9zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5kaW9yaXRlX3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 675, + "key": "minecraft:cobbled_deepslate_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6Y29iYmxlZF9kZWVwc2xhdGVfc2xhYg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5jb2JibGVkX2RlZXBzbGF0ZV9zbGFiAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 676, + "key": "minecraft:polished_deepslate_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6cG9saXNoZWRfZGVlcHNsYXRlX3NsYWI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9kZWVwc2xhdGVfc2xhYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 677, + "key": "minecraft:deepslate_brick_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6ZGVlcHNsYXRlX2JyaWNrX3NsYWI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfYnJpY2tfc2xhYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 678, + "key": "minecraft:deepslate_tile_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZGVlcHNsYXRlX3RpbGVfc2xhYg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5kZWVwc2xhdGVfdGlsZV9zbGFiAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 679, + "key": "minecraft:scaffolding", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6c2NhZmZvbGRpbmc=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zY2FmZm9sZGluZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 680, + "key": "minecraft:redstone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6cmVkc3RvbmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LnJlZHN0b25lAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 681, + "key": "minecraft:redstone_torch", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6cmVkc3RvbmVfdG9yY2g=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5yZWRzdG9uZV90b3JjaAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 682, + "key": "minecraft:redstone_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6cmVkc3RvbmVfYmxvY2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5yZWRzdG9uZV9ibG9jawA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 683, + "key": "minecraft:repeater", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6cmVwZWF0ZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5yZXBlYXRlcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 684, + "key": "minecraft:comparator", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6Y29tcGFyYXRvcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5jb21wYXJhdG9yAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 685, + "key": "minecraft:piston", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6cGlzdG9u", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5waXN0b24A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 686, + "key": "minecraft:sticky_piston", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6c3RpY2t5X3Bpc3Rvbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5zdGlja3lfcGlzdG9uAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 687, + "key": "minecraft:slime_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6c2xpbWVfYmxvY2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zbGltZV9ibG9jawA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 688, + "key": "minecraft:honey_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6aG9uZXlfYmxvY2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5ob25leV9ibG9jawA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 689, + "key": "minecraft:observer", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6b2JzZXJ2ZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5vYnNlcnZlcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 690, + "key": "minecraft:hopper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6aG9wcGVy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5ob3BwZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 691, + "key": "minecraft:dispenser", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6ZGlzcGVuc2Vy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5kaXNwZW5zZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 692, + "key": "minecraft:dropper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6ZHJvcHBlcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5kcm9wcGVyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 693, + "key": "minecraft:lectern", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6bGVjdGVybg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5sZWN0ZXJuAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 694, + "key": "minecraft:target", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6dGFyZ2V0", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC50YXJnZXQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 695, + "key": "minecraft:lever", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6bGV2ZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC5sZXZlcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 696, + "key": "minecraft:lightning_rod", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6bGlnaHRuaW5nX3JvZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5saWdodG5pbmdfcm9kAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 697, + "key": "minecraft:daylight_detector", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6ZGF5bGlnaHRfZGV0ZWN0b3I=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5kYXlsaWdodF9kZXRlY3RvcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 698, + "key": "minecraft:sculk_sensor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6c2N1bGtfc2Vuc29y", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5zY3Vsa19zZW5zb3IA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 699, + "key": "minecraft:calibrated_sculk_sensor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6Y2FsaWJyYXRlZF9zY3Vsa19zZW5zb3I=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5jYWxpYnJhdGVkX3NjdWxrX3NlbnNvcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 700, + "key": "minecraft:tripwire_hook", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6dHJpcHdpcmVfaG9vaw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC50cmlwd2lyZV9ob29rAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 701, + "key": "minecraft:trapped_chest", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6dHJhcHBlZF9jaGVzdA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC50cmFwcGVkX2NoZXN0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 702, + "key": "minecraft:tnt", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw1taW5lY3JhZnQ6dG50", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAE2Jsb2NrLm1pbmVjcmFmdC50bnQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 703, + "key": "minecraft:redstone_lamp", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6cmVkc3RvbmVfbGFtcA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5yZWRzdG9uZV9sYW1wAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 704, + "key": "minecraft:note_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6bm90ZV9ibG9jaw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5ub3RlX2Jsb2NrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 705, + "key": "minecraft:stone_button", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6c3RvbmVfYnV0dG9u", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5zdG9uZV9idXR0b24A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 706, + "key": "minecraft:polished_blackstone_button", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByRtaW5lY3JhZnQ6cG9saXNoZWRfYmxhY2tzdG9uZV9idXR0b24=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKmJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ibGFja3N0b25lX2J1dHRvbgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 707, + "key": "minecraft:oak_button", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6b2FrX2J1dHRvbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5vYWtfYnV0dG9uAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 708, + "key": "minecraft:spruce_button", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6c3BydWNlX2J1dHRvbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5zcHJ1Y2VfYnV0dG9uAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 709, + "key": "minecraft:birch_button", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmlyY2hfYnV0dG9u", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5iaXJjaF9idXR0b24A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 710, + "key": "minecraft:jungle_button", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6anVuZ2xlX2J1dHRvbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5qdW5nbGVfYnV0dG9uAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 711, + "key": "minecraft:acacia_button", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6YWNhY2lhX2J1dHRvbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5hY2FjaWFfYnV0dG9uAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 712, + "key": "minecraft:cherry_button", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y2hlcnJ5X2J1dHRvbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5jaGVycnlfYnV0dG9uAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 713, + "key": "minecraft:dark_oak_button", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6ZGFya19vYWtfYnV0dG9u", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19idXR0b24A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 714, + "key": "minecraft:pale_oak_button", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6cGFsZV9vYWtfYnV0dG9u", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19idXR0b24A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 715, + "key": "minecraft:mangrove_button", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6bWFuZ3JvdmVfYnV0dG9u", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9idXR0b24A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 716, + "key": "minecraft:bamboo_button", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6YmFtYm9vX2J1dHRvbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5iYW1ib29fYnV0dG9uAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 717, + "key": "minecraft:crimson_button", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y3JpbXNvbl9idXR0b24=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5jcmltc29uX2J1dHRvbgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 718, + "key": "minecraft:warped_button", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6d2FycGVkX2J1dHRvbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC53YXJwZWRfYnV0dG9uAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 719, + "key": "minecraft:stone_pressure_plate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6c3RvbmVfcHJlc3N1cmVfcGxhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5zdG9uZV9wcmVzc3VyZV9wbGF0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 720, + "key": "minecraft:polished_blackstone_pressure_plate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByxtaW5lY3JhZnQ6cG9saXNoZWRfYmxhY2tzdG9uZV9wcmVzc3VyZV9wbGF0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMmJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ibGFja3N0b25lX3ByZXNzdXJlX3BsYXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 721, + "key": "minecraft:light_weighted_pressure_plate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BydtaW5lY3JhZnQ6bGlnaHRfd2VpZ2h0ZWRfcHJlc3N1cmVfcGxhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALWJsb2NrLm1pbmVjcmFmdC5saWdodF93ZWlnaHRlZF9wcmVzc3VyZV9wbGF0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 722, + "key": "minecraft:heavy_weighted_pressure_plate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BydtaW5lY3JhZnQ6aGVhdnlfd2VpZ2h0ZWRfcHJlc3N1cmVfcGxhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALWJsb2NrLm1pbmVjcmFmdC5oZWF2eV93ZWlnaHRlZF9wcmVzc3VyZV9wbGF0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 723, + "key": "minecraft:oak_pressure_plate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6b2FrX3ByZXNzdXJlX3BsYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5vYWtfcHJlc3N1cmVfcGxhdGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 724, + "key": "minecraft:spruce_pressure_plate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6c3BydWNlX3ByZXNzdXJlX3BsYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5zcHJ1Y2VfcHJlc3N1cmVfcGxhdGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 725, + "key": "minecraft:birch_pressure_plate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6YmlyY2hfcHJlc3N1cmVfcGxhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5iaXJjaF9wcmVzc3VyZV9wbGF0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 726, + "key": "minecraft:jungle_pressure_plate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6anVuZ2xlX3ByZXNzdXJlX3BsYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5qdW5nbGVfcHJlc3N1cmVfcGxhdGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 727, + "key": "minecraft:acacia_pressure_plate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6YWNhY2lhX3ByZXNzdXJlX3BsYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5hY2FjaWFfcHJlc3N1cmVfcGxhdGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 728, + "key": "minecraft:cherry_pressure_plate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6Y2hlcnJ5X3ByZXNzdXJlX3BsYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5jaGVycnlfcHJlc3N1cmVfcGxhdGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 729, + "key": "minecraft:dark_oak_pressure_plate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6ZGFya19vYWtfcHJlc3N1cmVfcGxhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19wcmVzc3VyZV9wbGF0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 730, + "key": "minecraft:pale_oak_pressure_plate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6cGFsZV9vYWtfcHJlc3N1cmVfcGxhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19wcmVzc3VyZV9wbGF0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 731, + "key": "minecraft:mangrove_pressure_plate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6bWFuZ3JvdmVfcHJlc3N1cmVfcGxhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9wcmVzc3VyZV9wbGF0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 732, + "key": "minecraft:bamboo_pressure_plate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6YmFtYm9vX3ByZXNzdXJlX3BsYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5iYW1ib29fcHJlc3N1cmVfcGxhdGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 733, + "key": "minecraft:crimson_pressure_plate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6Y3JpbXNvbl9wcmVzc3VyZV9wbGF0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC5jcmltc29uX3ByZXNzdXJlX3BsYXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 734, + "key": "minecraft:warped_pressure_plate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6d2FycGVkX3ByZXNzdXJlX3BsYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC53YXJwZWRfcHJlc3N1cmVfcGxhdGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 735, + "key": "minecraft:iron_door", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6aXJvbl9kb29y", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5pcm9uX2Rvb3IA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 736, + "key": "minecraft:oak_door", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6b2FrX2Rvb3I=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5vYWtfZG9vcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 737, + "key": "minecraft:spruce_door", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6c3BydWNlX2Rvb3I=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zcHJ1Y2VfZG9vcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 738, + "key": "minecraft:birch_door", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6YmlyY2hfZG9vcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5iaXJjaF9kb29yAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 739, + "key": "minecraft:jungle_door", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6anVuZ2xlX2Rvb3I=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5qdW5nbGVfZG9vcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 740, + "key": "minecraft:acacia_door", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6YWNhY2lhX2Rvb3I=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5hY2FjaWFfZG9vcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 741, + "key": "minecraft:cherry_door", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y2hlcnJ5X2Rvb3I=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5jaGVycnlfZG9vcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 742, + "key": "minecraft:dark_oak_door", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZGFya19vYWtfZG9vcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19kb29yAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 743, + "key": "minecraft:pale_oak_door", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6cGFsZV9vYWtfZG9vcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19kb29yAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 744, + "key": "minecraft:mangrove_door", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6bWFuZ3JvdmVfZG9vcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9kb29yAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 745, + "key": "minecraft:bamboo_door", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6YmFtYm9vX2Rvb3I=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5iYW1ib29fZG9vcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 746, + "key": "minecraft:crimson_door", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6Y3JpbXNvbl9kb29y", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5jcmltc29uX2Rvb3IA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 747, + "key": "minecraft:warped_door", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6d2FycGVkX2Rvb3I=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC53YXJwZWRfZG9vcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 748, + "key": "minecraft:copper_door", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y29wcGVyX2Rvb3I=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5jb3BwZXJfZG9vcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 749, + "key": "minecraft:exposed_copper_door", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZXhwb3NlZF9jb3BwZXJfZG9vcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5leHBvc2VkX2NvcHBlcl9kb29yAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 750, + "key": "minecraft:weathered_copper_door", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6d2VhdGhlcmVkX2NvcHBlcl9kb29y", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC53ZWF0aGVyZWRfY29wcGVyX2Rvb3IA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 751, + "key": "minecraft:oxidized_copper_door", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6b3hpZGl6ZWRfY29wcGVyX2Rvb3I=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5veGlkaXplZF9jb3BwZXJfZG9vcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 752, + "key": "minecraft:waxed_copper_door", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6d2F4ZWRfY29wcGVyX2Rvb3I=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC53YXhlZF9jb3BwZXJfZG9vcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 753, + "key": "minecraft:waxed_exposed_copper_door", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByNtaW5lY3JhZnQ6d2F4ZWRfZXhwb3NlZF9jb3BwZXJfZG9vcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC53YXhlZF9leHBvc2VkX2NvcHBlcl9kb29yAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 754, + "key": "minecraft:waxed_weathered_copper_door", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByVtaW5lY3JhZnQ6d2F4ZWRfd2VhdGhlcmVkX2NvcHBlcl9kb29y", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAK2Jsb2NrLm1pbmVjcmFmdC53YXhlZF93ZWF0aGVyZWRfY29wcGVyX2Rvb3IA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 755, + "key": "minecraft:waxed_oxidized_copper_door", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByRtaW5lY3JhZnQ6d2F4ZWRfb3hpZGl6ZWRfY29wcGVyX2Rvb3I=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKmJsb2NrLm1pbmVjcmFmdC53YXhlZF9veGlkaXplZF9jb3BwZXJfZG9vcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 756, + "key": "minecraft:iron_trapdoor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6aXJvbl90cmFwZG9vcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5pcm9uX3RyYXBkb29yAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 757, + "key": "minecraft:oak_trapdoor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6b2FrX3RyYXBkb29y", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5vYWtfdHJhcGRvb3IA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 758, + "key": "minecraft:spruce_trapdoor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6c3BydWNlX3RyYXBkb29y", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5zcHJ1Y2VfdHJhcGRvb3IA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 759, + "key": "minecraft:birch_trapdoor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6YmlyY2hfdHJhcGRvb3I=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5iaXJjaF90cmFwZG9vcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 760, + "key": "minecraft:jungle_trapdoor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6anVuZ2xlX3RyYXBkb29y", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5qdW5nbGVfdHJhcGRvb3IA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 761, + "key": "minecraft:acacia_trapdoor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6YWNhY2lhX3RyYXBkb29y", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5hY2FjaWFfdHJhcGRvb3IA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 762, + "key": "minecraft:cherry_trapdoor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6Y2hlcnJ5X3RyYXBkb29y", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5jaGVycnlfdHJhcGRvb3IA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 763, + "key": "minecraft:dark_oak_trapdoor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6ZGFya19vYWtfdHJhcGRvb3I=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5kYXJrX29ha190cmFwZG9vcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 764, + "key": "minecraft:pale_oak_trapdoor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6cGFsZV9vYWtfdHJhcGRvb3I=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5wYWxlX29ha190cmFwZG9vcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 765, + "key": "minecraft:mangrove_trapdoor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6bWFuZ3JvdmVfdHJhcGRvb3I=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV90cmFwZG9vcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 766, + "key": "minecraft:bamboo_trapdoor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6YmFtYm9vX3RyYXBkb29y", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5iYW1ib29fdHJhcGRvb3IA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 767, + "key": "minecraft:crimson_trapdoor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6Y3JpbXNvbl90cmFwZG9vcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5jcmltc29uX3RyYXBkb29yAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 768, + "key": "minecraft:warped_trapdoor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6d2FycGVkX3RyYXBkb29y", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC53YXJwZWRfdHJhcGRvb3IA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 769, + "key": "minecraft:copper_trapdoor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6Y29wcGVyX3RyYXBkb29y", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5jb3BwZXJfdHJhcGRvb3IA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 770, + "key": "minecraft:exposed_copper_trapdoor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6ZXhwb3NlZF9jb3BwZXJfdHJhcGRvb3I=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2Jsb2NrLm1pbmVjcmFmdC5leHBvc2VkX2NvcHBlcl90cmFwZG9vcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 771, + "key": "minecraft:weathered_copper_trapdoor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByNtaW5lY3JhZnQ6d2VhdGhlcmVkX2NvcHBlcl90cmFwZG9vcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC53ZWF0aGVyZWRfY29wcGVyX3RyYXBkb29yAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 772, + "key": "minecraft:oxidized_copper_trapdoor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6b3hpZGl6ZWRfY29wcGVyX3RyYXBkb29y", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5veGlkaXplZF9jb3BwZXJfdHJhcGRvb3IA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 773, + "key": "minecraft:waxed_copper_trapdoor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6d2F4ZWRfY29wcGVyX3RyYXBkb29y", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC53YXhlZF9jb3BwZXJfdHJhcGRvb3IA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 774, + "key": "minecraft:waxed_exposed_copper_trapdoor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BydtaW5lY3JhZnQ6d2F4ZWRfZXhwb3NlZF9jb3BwZXJfdHJhcGRvb3I=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALWJsb2NrLm1pbmVjcmFmdC53YXhlZF9leHBvc2VkX2NvcHBlcl90cmFwZG9vcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 775, + "key": "minecraft:waxed_weathered_copper_trapdoor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByltaW5lY3JhZnQ6d2F4ZWRfd2VhdGhlcmVkX2NvcHBlcl90cmFwZG9vcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAL2Jsb2NrLm1pbmVjcmFmdC53YXhlZF93ZWF0aGVyZWRfY29wcGVyX3RyYXBkb29yAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 776, + "key": "minecraft:waxed_oxidized_copper_trapdoor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByhtaW5lY3JhZnQ6d2F4ZWRfb3hpZGl6ZWRfY29wcGVyX3RyYXBkb29y", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALmJsb2NrLm1pbmVjcmFmdC53YXhlZF9veGlkaXplZF9jb3BwZXJfdHJhcGRvb3IA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 777, + "key": "minecraft:oak_fence_gate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6b2FrX2ZlbmNlX2dhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5vYWtfZmVuY2VfZ2F0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 778, + "key": "minecraft:spruce_fence_gate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6c3BydWNlX2ZlbmNlX2dhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5zcHJ1Y2VfZmVuY2VfZ2F0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 779, + "key": "minecraft:birch_fence_gate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6YmlyY2hfZmVuY2VfZ2F0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5iaXJjaF9mZW5jZV9nYXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 780, + "key": "minecraft:jungle_fence_gate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6anVuZ2xlX2ZlbmNlX2dhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5qdW5nbGVfZmVuY2VfZ2F0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 781, + "key": "minecraft:acacia_fence_gate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6YWNhY2lhX2ZlbmNlX2dhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5hY2FjaWFfZmVuY2VfZ2F0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 782, + "key": "minecraft:cherry_fence_gate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6Y2hlcnJ5X2ZlbmNlX2dhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5jaGVycnlfZmVuY2VfZ2F0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 783, + "key": "minecraft:dark_oak_fence_gate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZGFya19vYWtfZmVuY2VfZ2F0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19mZW5jZV9nYXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 784, + "key": "minecraft:pale_oak_fence_gate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6cGFsZV9vYWtfZmVuY2VfZ2F0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19mZW5jZV9nYXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 785, + "key": "minecraft:mangrove_fence_gate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6bWFuZ3JvdmVfZmVuY2VfZ2F0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9mZW5jZV9nYXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 786, + "key": "minecraft:bamboo_fence_gate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6YmFtYm9vX2ZlbmNlX2dhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5iYW1ib29fZmVuY2VfZ2F0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 787, + "key": "minecraft:crimson_fence_gate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6Y3JpbXNvbl9mZW5jZV9nYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5jcmltc29uX2ZlbmNlX2dhdGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 788, + "key": "minecraft:warped_fence_gate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6d2FycGVkX2ZlbmNlX2dhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC53YXJwZWRfZmVuY2VfZ2F0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 789, + "key": "minecraft:powered_rail", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6cG93ZXJlZF9yYWls", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5wb3dlcmVkX3JhaWwA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 790, + "key": "minecraft:detector_rail", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZGV0ZWN0b3JfcmFpbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5kZXRlY3Rvcl9yYWlsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 791, + "key": "minecraft:rail", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw5taW5lY3JhZnQ6cmFpbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC5yYWlsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 792, + "key": "minecraft:activator_rail", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6YWN0aXZhdG9yX3JhaWw=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5hY3RpdmF0b3JfcmFpbAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 793, + "key": "minecraft:saddle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6c2FkZGxl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LnNhZGRsZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 794, + "key": "minecraft:minecart", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6bWluZWNhcnQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0Lm1pbmVjYXJ0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 795, + "key": "minecraft:chest_minecart", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y2hlc3RfbWluZWNhcnQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmNoZXN0X21pbmVjYXJ0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 796, + "key": "minecraft:furnace_minecart", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6ZnVybmFjZV9taW5lY2FydA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmZ1cm5hY2VfbWluZWNhcnQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 797, + "key": "minecraft:tnt_minecart", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6dG50X21pbmVjYXJ0", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LnRudF9taW5lY2FydAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 798, + "key": "minecraft:hopper_minecart", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6aG9wcGVyX21pbmVjYXJ0", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmhvcHBlcl9taW5lY2FydAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 799, + "key": "minecraft:carrot_on_a_stick", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:damage": "AwA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6Y2Fycm90X29uX2Ffc3RpY2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmNhcnJvdF9vbl9hX3N0aWNrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "Ahk=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 800, + "key": "minecraft:warped_fungus_on_a_stick", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:damage": "AwA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6d2FycGVkX2Z1bmd1c19vbl9hX3N0aWNr", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2l0ZW0ubWluZWNyYWZ0LndhcnBlZF9mdW5ndXNfb25fYV9zdGljawA=", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AmQ=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 801, + "key": "minecraft:phantom_membrane", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6cGhhbnRvbV9tZW1icmFuZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnBoYW50b21fbWVtYnJhbmUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 802, + "key": "minecraft:elytra", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:damage": "AwA=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HANGARBtaW5lY3JhZnQ6ZWx5dHJhAAABAQA=", + "minecraft:glider": "Hg==", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6ZWx5dHJh", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LmVseXRyYQA=", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "ArAD", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQM=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQKhBg==" + } + }, + { + "id": 803, + "key": "minecraft:oak_boat", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6b2FrX2JvYXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0Lm9ha19ib2F0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 804, + "key": "minecraft:oak_chest_boat", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6b2FrX2NoZXN0X2JvYXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0Lm9ha19jaGVzdF9ib2F0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 805, + "key": "minecraft:spruce_boat", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6c3BydWNlX2JvYXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LnNwcnVjZV9ib2F0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 806, + "key": "minecraft:spruce_chest_boat", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6c3BydWNlX2NoZXN0X2JvYXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LnNwcnVjZV9jaGVzdF9ib2F0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 807, + "key": "minecraft:birch_boat", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6YmlyY2hfYm9hdA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LmJpcmNoX2JvYXQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 808, + "key": "minecraft:birch_chest_boat", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6YmlyY2hfY2hlc3RfYm9hdA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmJpcmNoX2NoZXN0X2JvYXQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 809, + "key": "minecraft:jungle_boat", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6anVuZ2xlX2JvYXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0Lmp1bmdsZV9ib2F0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 810, + "key": "minecraft:jungle_chest_boat", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6anVuZ2xlX2NoZXN0X2JvYXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0Lmp1bmdsZV9jaGVzdF9ib2F0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 811, + "key": "minecraft:acacia_boat", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6YWNhY2lhX2JvYXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmFjYWNpYV9ib2F0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 812, + "key": "minecraft:acacia_chest_boat", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6YWNhY2lhX2NoZXN0X2JvYXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmFjYWNpYV9jaGVzdF9ib2F0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 813, + "key": "minecraft:cherry_boat", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y2hlcnJ5X2JvYXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmNoZXJyeV9ib2F0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 814, + "key": "minecraft:cherry_chest_boat", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6Y2hlcnJ5X2NoZXN0X2JvYXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmNoZXJyeV9jaGVzdF9ib2F0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 815, + "key": "minecraft:dark_oak_boat", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZGFya19vYWtfYm9hdA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmRhcmtfb2FrX2JvYXQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 816, + "key": "minecraft:dark_oak_chest_boat", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZGFya19vYWtfY2hlc3RfYm9hdA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LmRhcmtfb2FrX2NoZXN0X2JvYXQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 817, + "key": "minecraft:pale_oak_boat", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6cGFsZV9vYWtfYm9hdA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnBhbGVfb2FrX2JvYXQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 818, + "key": "minecraft:pale_oak_chest_boat", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6cGFsZV9vYWtfY2hlc3RfYm9hdA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LnBhbGVfb2FrX2NoZXN0X2JvYXQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 819, + "key": "minecraft:mangrove_boat", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6bWFuZ3JvdmVfYm9hdA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0Lm1hbmdyb3ZlX2JvYXQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 820, + "key": "minecraft:mangrove_chest_boat", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6bWFuZ3JvdmVfY2hlc3RfYm9hdA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0Lm1hbmdyb3ZlX2NoZXN0X2JvYXQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 821, + "key": "minecraft:bamboo_raft", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6YmFtYm9vX3JhZnQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmJhbWJvb19yYWZ0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 822, + "key": "minecraft:bamboo_chest_raft", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6YmFtYm9vX2NoZXN0X3JhZnQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmJhbWJvb19jaGVzdF9yYWZ0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 823, + "key": "minecraft:structure_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6c3RydWN0dXJlX2Jsb2Nr", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5zdHJ1Y3R1cmVfYmxvY2sA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQM=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 824, + "key": "minecraft:jigsaw", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6amlnc2F3", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5qaWdzYXcA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQM=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 825, + "key": "minecraft:turtle_helmet", + "components": { + "minecraft:attribute_modifiers": "DQIAFm1pbmVjcmFmdDphcm1vci5oZWxtZXRAAAAAAAAAAAAHARZtaW5lY3JhZnQ6YXJtb3IuaGVsbWV0AAAAAAAAAAAABwE=", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gwk=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HARMARZtaW5lY3JhZnQ6dHVydGxlX3NjdXRlAAABAQE=", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6dHVydGxlX2hlbG1ldA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnR1cnRsZV9oZWxtZXQA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "ApMC", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAfbWluZWNyYWZ0OnJlcGFpcnNfdHVydGxlX2hlbG1ldA==" + } + }, + { + "id": 826, + "key": "minecraft:turtle_scute", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6dHVydGxlX3NjdXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LnR1cnRsZV9zY3V0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 827, + "key": "minecraft:armadillo_scute", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6YXJtYWRpbGxvX3NjdXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmFybWFkaWxsb19zY3V0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 828, + "key": "minecraft:wolf_armor", + "components": { + "minecraft:attribute_modifiers": "DQIAFG1pbmVjcmFmdDphcm1vci5ib2R5QCYAAAAAAAAACQEUbWluZWNyYWZ0OmFybW9yLmJvZHkAAAAAAAAAAAAJAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAZNARltaW5lY3JhZnQ6YXJtYWRpbGxvX3NjdXRlAAECjQEBAQE=", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6d29sZl9hcm1vcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LndvbGZfYXJtb3IA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AkA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAcbWluZWNyYWZ0OnJlcGFpcnNfd29sZl9hcm1vcg==" + } + }, + { + "id": 829, + "key": "minecraft:flint_and_steel", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:damage": "AwA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6ZmxpbnRfYW5kX3N0ZWVs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmZsaW50X2FuZF9zdGVlbAA=", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AkA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 830, + "key": "minecraft:bowl", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw5taW5lY3JhZnQ6Ym93bA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAE2l0ZW0ubWluZWNyYWZ0LmJvd2wA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 831, + "key": "minecraft:apple", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQRAGZmaAA==", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6YXBwbGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGl0ZW0ubWluZWNyYWZ0LmFwcGxlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 832, + "key": "minecraft:bow", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "GwE=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw1taW5lY3JhZnQ6Ym93", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAEml0ZW0ubWluZWNyYWZ0LmJvdwA=", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AoAD", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 833, + "key": "minecraft:arrow", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6YXJyb3c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGl0ZW0ubWluZWNyYWZ0LmFycm93AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 834, + "key": "minecraft:coal", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw5taW5lY3JhZnQ6Y29hbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAE2l0ZW0ubWluZWNyYWZ0LmNvYWwA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 835, + "key": "minecraft:charcoal", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6Y2hhcmNvYWw=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LmNoYXJjb2FsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 836, + "key": "minecraft:diamond", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6ZGlhbW9uZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFml0ZW0ubWluZWNyYWZ0LmRpYW1vbmQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 837, + "key": "minecraft:emerald", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6ZW1lcmFsZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFml0ZW0ubWluZWNyYWZ0LmVtZXJhbGQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 838, + "key": "minecraft:lapis_lazuli", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6bGFwaXNfbGF6dWxp", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmxhcGlzX2xhenVsaQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 839, + "key": "minecraft:quartz", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6cXVhcnR6", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LnF1YXJ0egA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 840, + "key": "minecraft:amethyst_shard", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6YW1ldGh5c3Rfc2hhcmQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmFtZXRoeXN0X3NoYXJkAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 841, + "key": "minecraft:raw_iron", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6cmF3X2lyb24=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LnJhd19pcm9uAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 842, + "key": "minecraft:iron_ingot", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6aXJvbl9pbmdvdA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0Lmlyb25faW5nb3QA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 843, + "key": "minecraft:raw_copper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6cmF3X2NvcHBlcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LnJhd19jb3BwZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 844, + "key": "minecraft:copper_ingot", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6Y29wcGVyX2luZ290", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmNvcHBlcl9pbmdvdAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 845, + "key": "minecraft:raw_gold", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6cmF3X2dvbGQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LnJhd19nb2xkAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 846, + "key": "minecraft:gold_ingot", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6Z29sZF9pbmdvdA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LmdvbGRfaW5nb3QA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 847, + "key": "minecraft:netherite_ingot", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:damage_resistant": "GRFtaW5lY3JhZnQ6aXNfZmlyZQ==", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6bmV0aGVyaXRlX2luZ290", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV9pbmdvdAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 848, + "key": "minecraft:netherite_scrap", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:damage_resistant": "GRFtaW5lY3JhZnQ6aXNfZmlyZQ==", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6bmV0aGVyaXRlX3NjcmFw", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV9zY3JhcAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 849, + "key": "minecraft:wooden_sword", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VACAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTAAzMzQAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gw8=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6d29vZGVuX3N3b3Jk", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0Lndvb2Rlbl9zd29yZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "Ajs=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAfbWluZWNyYWZ0Ondvb2Rlbl90b29sX21hdGVyaWFscw==", + "minecraft:tool": "GgICgQEBQXAAAAEBABltaW5lY3JhZnQ6c3dvcmRfZWZmaWNpZW50AT/AAAAAP4AAAAI=" + } + }, + { + "id": 850, + "key": "minecraft:wooden_shovel", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2U/+AAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTACAAAAAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gw8=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6d29vZGVuX3Nob3ZlbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0Lndvb2Rlbl9zaG92ZWwA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "Ajs=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAfbWluZWNyYWZ0Ondvb2Rlbl90b29sX21hdGVyaWFscw==", + "minecraft:tool": "GgIAI21pbmVjcmFmdDppbmNvcnJlY3RfZm9yX3dvb2Rlbl90b29sAAEAABltaW5lY3JhZnQ6bWluZWFibGUvc2hvdmVsAUAAAAABAT+AAAAB" + } + }, + { + "id": 851, + "key": "minecraft:wooden_pickaxe", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2U/8AAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTABmZmYAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gw8=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6d29vZGVuX3BpY2theGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0Lndvb2Rlbl9waWNrYXhlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "Ajs=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAfbWluZWNyYWZ0Ondvb2Rlbl90b29sX21hdGVyaWFscw==", + "minecraft:tool": "GgIAI21pbmVjcmFmdDppbmNvcnJlY3RfZm9yX3dvb2Rlbl90b29sAAEAABptaW5lY3JhZnQ6bWluZWFibGUvcGlja2F4ZQFAAAAAAQE/gAAAAQ==" + } + }, + { + "id": 852, + "key": "minecraft:wooden_axe", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAGAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTACZmZoAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gw8=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6d29vZGVuX2F4ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0Lndvb2Rlbl9heGUA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "Ajs=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAfbWluZWNyYWZ0Ondvb2Rlbl90b29sX21hdGVyaWFscw==", + "minecraft:tool": "GgIAI21pbmVjcmFmdDppbmNvcnJlY3RfZm9yX3dvb2Rlbl90b29sAAEAABZtaW5lY3JhZnQ6bWluZWFibGUvYXhlAUAAAAABAT+AAAAB" + } + }, + { + "id": 853, + "key": "minecraft:wooden_hoe", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2UAAAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTACAAAAAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gw8=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6d29vZGVuX2hvZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0Lndvb2Rlbl9ob2UA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "Ajs=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAfbWluZWNyYWZ0Ondvb2Rlbl90b29sX21hdGVyaWFscw==", + "minecraft:tool": "GgIAI21pbmVjcmFmdDppbmNvcnJlY3RfZm9yX3dvb2Rlbl90b29sAAEAABZtaW5lY3JhZnQ6bWluZWFibGUvaG9lAUAAAAABAT+AAAAB" + } + }, + { + "id": 854, + "key": "minecraft:stone_sword", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAEAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTAAzMzQAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "GwU=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6c3RvbmVfc3dvcmQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LnN0b25lX3N3b3JkAA==", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AoMB", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAebWluZWNyYWZ0OnN0b25lX3Rvb2xfbWF0ZXJpYWxz", + "minecraft:tool": "GgICgQEBQXAAAAEBABltaW5lY3JhZnQ6c3dvcmRfZWZmaWNpZW50AT/AAAAAP4AAAAI=" + } + }, + { + "id": 855, + "key": "minecraft:stone_shovel", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VABAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTACAAAAAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "GwU=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6c3RvbmVfc2hvdmVs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LnN0b25lX3Nob3ZlbAA=", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AoMB", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAebWluZWNyYWZ0OnN0b25lX3Rvb2xfbWF0ZXJpYWxz", + "minecraft:tool": "GgIAIm1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX3N0b25lX3Rvb2wAAQAAGW1pbmVjcmFmdDptaW5lYWJsZS9zaG92ZWwBQIAAAAEBP4AAAAE=" + } + }, + { + "id": 856, + "key": "minecraft:stone_pickaxe", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAAAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTABmZmYAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "GwU=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6c3RvbmVfcGlja2F4ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnN0b25lX3BpY2theGUA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AoMB", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAebWluZWNyYWZ0OnN0b25lX3Rvb2xfbWF0ZXJpYWxz", + "minecraft:tool": "GgIAIm1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX3N0b25lX3Rvb2wAAQAAGm1pbmVjcmFmdDptaW5lYWJsZS9waWNrYXhlAUCAAAABAT+AAAAB" + } + }, + { + "id": 857, + "key": "minecraft:stone_axe", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAIAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTACZmZoAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "GwU=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6c3RvbmVfYXhl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LnN0b25lX2F4ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AoMB", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAebWluZWNyYWZ0OnN0b25lX3Rvb2xfbWF0ZXJpYWxz", + "minecraft:tool": "GgIAIm1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX3N0b25lX3Rvb2wAAQAAFm1pbmVjcmFmdDptaW5lYWJsZS9heGUBQIAAAAEBP4AAAAE=" + } + }, + { + "id": 858, + "key": "minecraft:stone_hoe", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2UAAAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTAAAAAAAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "GwU=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6c3RvbmVfaG9l", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LnN0b25lX2hvZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AoMB", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAebWluZWNyYWZ0OnN0b25lX3Rvb2xfbWF0ZXJpYWxz", + "minecraft:tool": "GgIAIm1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX3N0b25lX3Rvb2wAAQAAFm1pbmVjcmFmdDptaW5lYWJsZS9ob2UBQIAAAAEBP4AAAAE=" + } + }, + { + "id": 859, + "key": "minecraft:golden_sword", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VACAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTAAzMzQAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "GxY=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z29sZGVuX3N3b3Jk", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmdvbGRlbl9zd29yZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AiA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAdbWluZWNyYWZ0OmdvbGRfdG9vbF9tYXRlcmlhbHM=", + "minecraft:tool": "GgICgQEBQXAAAAEBABltaW5lY3JhZnQ6c3dvcmRfZWZmaWNpZW50AT/AAAAAP4AAAAI=" + } + }, + { + "id": 860, + "key": "minecraft:golden_shovel", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2U/+AAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTACAAAAAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "GxY=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Z29sZGVuX3Nob3ZlbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmdvbGRlbl9zaG92ZWwA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AiA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAdbWluZWNyYWZ0OmdvbGRfdG9vbF9tYXRlcmlhbHM=", + "minecraft:tool": "GgIAIW1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2dvbGRfdG9vbAABAAAZbWluZWNyYWZ0Om1pbmVhYmxlL3Nob3ZlbAFBQAAAAQE/gAAAAQ==" + } + }, + { + "id": 861, + "key": "minecraft:golden_pickaxe", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2U/8AAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTABmZmYAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "GxY=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6Z29sZGVuX3BpY2theGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmdvbGRlbl9waWNrYXhlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AiA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAdbWluZWNyYWZ0OmdvbGRfdG9vbF9tYXRlcmlhbHM=", + "minecraft:tool": "GgIAIW1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2dvbGRfdG9vbAABAAAabWluZWNyYWZ0Om1pbmVhYmxlL3BpY2theGUBQUAAAAEBP4AAAAE=" + } + }, + { + "id": 862, + "key": "minecraft:golden_axe", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAGAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTACAAAAAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "GxY=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6Z29sZGVuX2F4ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LmdvbGRlbl9heGUA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AiA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAdbWluZWNyYWZ0OmdvbGRfdG9vbF9tYXRlcmlhbHM=", + "minecraft:tool": "GgIAIW1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2dvbGRfdG9vbAABAAAWbWluZWNyYWZ0Om1pbmVhYmxlL2F4ZQFBQAAAAQE/gAAAAQ==" + } + }, + { + "id": 863, + "key": "minecraft:golden_hoe", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2UAAAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTACAAAAAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "GxY=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6Z29sZGVuX2hvZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LmdvbGRlbl9ob2UA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AiA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAdbWluZWNyYWZ0OmdvbGRfdG9vbF9tYXRlcmlhbHM=", + "minecraft:tool": "GgIAIW1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2dvbGRfdG9vbAABAAAWbWluZWNyYWZ0Om1pbmVhYmxlL2hvZQFBQAAAAQE/gAAAAQ==" + } + }, + { + "id": 864, + "key": "minecraft:iron_sword", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAFAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTAAzMzQAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gw4=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6aXJvbl9zd29yZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0Lmlyb25fc3dvcmQA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AvoB", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAdbWluZWNyYWZ0Omlyb25fdG9vbF9tYXRlcmlhbHM=", + "minecraft:tool": "GgICgQEBQXAAAAEBABltaW5lY3JhZnQ6c3dvcmRfZWZmaWNpZW50AT/AAAAAP4AAAAI=" + } + }, + { + "id": 865, + "key": "minecraft:iron_shovel", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VADAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTACAAAAAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gw4=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6aXJvbl9zaG92ZWw=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0Lmlyb25fc2hvdmVsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AvoB", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAdbWluZWNyYWZ0Omlyb25fdG9vbF9tYXRlcmlhbHM=", + "minecraft:tool": "GgIAIW1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2lyb25fdG9vbAABAAAZbWluZWNyYWZ0Om1pbmVhYmxlL3Nob3ZlbAFAwAAAAQE/gAAAAQ==" + } + }, + { + "id": 866, + "key": "minecraft:iron_pickaxe", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VACAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTABmZmYAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gw4=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6aXJvbl9waWNrYXhl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0Lmlyb25fcGlja2F4ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AvoB", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAdbWluZWNyYWZ0Omlyb25fdG9vbF9tYXRlcmlhbHM=", + "minecraft:tool": "GgIAIW1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2lyb25fdG9vbAABAAAabWluZWNyYWZ0Om1pbmVhYmxlL3BpY2theGUBQMAAAAEBP4AAAAE=" + } + }, + { + "id": 867, + "key": "minecraft:iron_axe", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAIAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTACMzMwAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gw4=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6aXJvbl9heGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0Lmlyb25fYXhlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AvoB", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAdbWluZWNyYWZ0Omlyb25fdG9vbF9tYXRlcmlhbHM=", + "minecraft:tool": "GgIAIW1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2lyb25fdG9vbAABAAAWbWluZWNyYWZ0Om1pbmVhYmxlL2F4ZQFAwAAAAQE/gAAAAQ==" + } + }, + { + "id": 868, + "key": "minecraft:iron_hoe", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2UAAAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWS/8AAAAAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gw4=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6aXJvbl9ob2U=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0Lmlyb25faG9lAA==", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AvoB", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAdbWluZWNyYWZ0Omlyb25fdG9vbF9tYXRlcmlhbHM=", + "minecraft:tool": "GgIAIW1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2lyb25fdG9vbAABAAAWbWluZWNyYWZ0Om1pbmVhYmxlL2hvZQFAwAAAAQE/gAAAAQ==" + } + }, + { + "id": 869, + "key": "minecraft:diamond_sword", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAGAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTAAzMzQAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gwo=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZGlhbW9uZF9zd29yZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmRpYW1vbmRfc3dvcmQA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "ApkM", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAgbWluZWNyYWZ0OmRpYW1vbmRfdG9vbF9tYXRlcmlhbHM=", + "minecraft:tool": "GgICgQEBQXAAAAEBABltaW5lY3JhZnQ6c3dvcmRfZWZmaWNpZW50AT/AAAAAP4AAAAI=" + } + }, + { + "id": 870, + "key": "minecraft:diamond_shovel", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAEgAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTACAAAAAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gwo=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6ZGlhbW9uZF9zaG92ZWw=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmRpYW1vbmRfc2hvdmVsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "ApkM", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAgbWluZWNyYWZ0OmRpYW1vbmRfdG9vbF9tYXRlcmlhbHM=", + "minecraft:tool": "GgIAJG1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2RpYW1vbmRfdG9vbAABAAAZbWluZWNyYWZ0Om1pbmVhYmxlL3Nob3ZlbAFBAAAAAQE/gAAAAQ==" + } + }, + { + "id": 871, + "key": "minecraft:diamond_pickaxe", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAEAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTABmZmYAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gwo=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6ZGlhbW9uZF9waWNrYXhl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmRpYW1vbmRfcGlja2F4ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "ApkM", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAgbWluZWNyYWZ0OmRpYW1vbmRfdG9vbF9tYXRlcmlhbHM=", + "minecraft:tool": "GgIAJG1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2RpYW1vbmRfdG9vbAABAAAabWluZWNyYWZ0Om1pbmVhYmxlL3BpY2theGUBQQAAAAEBP4AAAAE=" + } + }, + { + "id": 872, + "key": "minecraft:diamond_axe", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAIAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTACAAAAAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gwo=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6ZGlhbW9uZF9heGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmRpYW1vbmRfYXhlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "ApkM", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAgbWluZWNyYWZ0OmRpYW1vbmRfdG9vbF9tYXRlcmlhbHM=", + "minecraft:tool": "GgIAJG1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2RpYW1vbmRfdG9vbAABAAAWbWluZWNyYWZ0Om1pbmVhYmxlL2F4ZQFBAAAAAQE/gAAAAQ==" + } + }, + { + "id": 873, + "key": "minecraft:diamond_hoe", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2UAAAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWQAAAAAAAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gwo=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6ZGlhbW9uZF9ob2U=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmRpYW1vbmRfaG9lAA==", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "ApkM", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAgbWluZWNyYWZ0OmRpYW1vbmRfdG9vbF9tYXRlcmlhbHM=", + "minecraft:tool": "GgIAJG1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX2RpYW1vbmRfdG9vbAABAAAWbWluZWNyYWZ0Om1pbmVhYmxlL2hvZQFBAAAAAQE/gAAAAQ==" + } + }, + { + "id": 874, + "key": "minecraft:netherite_sword", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAHAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTAAzMzQAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:damage_resistant": "GRFtaW5lY3JhZnQ6aXNfZmlyZQ==", + "minecraft:enchantable": "Gw8=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6bmV0aGVyaXRlX3N3b3Jk", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV9zd29yZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "Au8P", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAibWluZWNyYWZ0Om5ldGhlcml0ZV90b29sX21hdGVyaWFscw==", + "minecraft:tool": "GgICgQEBQXAAAAEBABltaW5lY3JhZnQ6c3dvcmRfZWZmaWNpZW50AT/AAAAAP4AAAAI=" + } + }, + { + "id": 875, + "key": "minecraft:netherite_shovel", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAFgAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTACAAAAAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:damage_resistant": "GRFtaW5lY3JhZnQ6aXNfZmlyZQ==", + "minecraft:enchantable": "Gw8=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6bmV0aGVyaXRlX3Nob3ZlbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV9zaG92ZWwA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "Au8P", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAibWluZWNyYWZ0Om5ldGhlcml0ZV90b29sX21hdGVyaWFscw==", + "minecraft:tool": "GgIAJm1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX25ldGhlcml0ZV90b29sAAEAABltaW5lY3JhZnQ6bWluZWFibGUvc2hvdmVsAUEQAAABAT+AAAAB" + } + }, + { + "id": 876, + "key": "minecraft:netherite_pickaxe", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAFAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTABmZmYAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:damage_resistant": "GRFtaW5lY3JhZnQ6aXNfZmlyZQ==", + "minecraft:enchantable": "Gw8=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6bmV0aGVyaXRlX3BpY2theGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV9waWNrYXhlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "Au8P", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAibWluZWNyYWZ0Om5ldGhlcml0ZV90b29sX21hdGVyaWFscw==", + "minecraft:tool": "GgIAJm1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX25ldGhlcml0ZV90b29sAAEAABptaW5lY3JhZnQ6bWluZWFibGUvcGlja2F4ZQFBEAAAAQE/gAAAAQ==" + } + }, + { + "id": 877, + "key": "minecraft:netherite_axe", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAIgAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTACAAAAAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:damage_resistant": "GRFtaW5lY3JhZnQ6aXNfZmlyZQ==", + "minecraft:enchantable": "Gw8=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6bmV0aGVyaXRlX2F4ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV9heGUA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "Au8P", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAibWluZWNyYWZ0Om5ldGhlcml0ZV90b29sX21hdGVyaWFscw==", + "minecraft:tool": "GgIAJm1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX25ldGhlcml0ZV90b29sAAEAABZtaW5lY3JhZnQ6bWluZWFibGUvYXhlAUEQAAABAT+AAAAB" + } + }, + { + "id": 878, + "key": "minecraft:netherite_hoe", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2UAAAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWQAAAAAAAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:damage_resistant": "GRFtaW5lY3JhZnQ6aXNfZmlyZQ==", + "minecraft:enchantable": "Gw8=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6bmV0aGVyaXRlX2hvZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV9ob2UA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "Au8P", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAibWluZWNyYWZ0Om5ldGhlcml0ZV90b29sX21hdGVyaWFscw==", + "minecraft:tool": "GgIAJm1pbmVjcmFmdDppbmNvcnJlY3RfZm9yX25ldGhlcml0ZV90b29sAAEAABZtaW5lY3JhZnQ6bWluZWFibGUvaG9lAUEQAAABAT+AAAAB" + } + }, + { + "id": 879, + "key": "minecraft:stick", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6c3RpY2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGl0ZW0ubWluZWNyYWZ0LnN0aWNrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 880, + "key": "minecraft:mushroom_stew", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQZA5mZnAA==", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6bXVzaHJvb21fc3Rldw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0Lm11c2hyb29tX3N0ZXcA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:use_remainder": "FwG+BgAA" + } + }, + { + "id": 881, + "key": "minecraft:string", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6c3RyaW5n", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LnN0cmluZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 882, + "key": "minecraft:feather", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6ZmVhdGhlcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFml0ZW0ubWluZWNyYWZ0LmZlYXRoZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 883, + "key": "minecraft:gunpowder", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6Z3VucG93ZGVy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0Lmd1bnBvd2RlcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 884, + "key": "minecraft:wheat_seeds", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6d2hlYXRfc2VlZHM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LndoZWF0X3NlZWRzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 885, + "key": "minecraft:wheat", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6d2hlYXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGl0ZW0ubWluZWNyYWZ0LndoZWF0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 886, + "key": "minecraft:bread", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQVAwAAAAA==", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6YnJlYWQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGl0ZW0ubWluZWNyYWZ0LmJyZWFkAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 887, + "key": "minecraft:leather_helmet", + "components": { + "minecraft:attribute_modifiers": "DQIAFm1pbmVjcmFmdDphcm1vci5oZWxtZXQ/8AAAAAAAAAAHARZtaW5lY3JhZnQ6YXJtb3IuaGVsbWV0AAAAAAAAAAAABwE=", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gw8=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HARKARFtaW5lY3JhZnQ6bGVhdGhlcgAAAQEB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6bGVhdGhlcl9oZWxtZXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmxlYXRoZXJfaGVsbWV0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "Ajc=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAfbWluZWNyYWZ0OnJlcGFpcnNfbGVhdGhlcl9hcm1vcg==" + } + }, + { + "id": 888, + "key": "minecraft:leather_chestplate", + "components": { + "minecraft:attribute_modifiers": "DQIAGm1pbmVjcmFmdDphcm1vci5jaGVzdHBsYXRlQAgAAAAAAAAABgEabWluZWNyYWZ0OmFybW9yLmNoZXN0cGxhdGUAAAAAAAAAAAAGAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gw8=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HANKARFtaW5lY3JhZnQ6bGVhdGhlcgAAAQEB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6bGVhdGhlcl9jaGVzdHBsYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LmxlYXRoZXJfY2hlc3RwbGF0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AlA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAfbWluZWNyYWZ0OnJlcGFpcnNfbGVhdGhlcl9hcm1vcg==" + } + }, + { + "id": 889, + "key": "minecraft:leather_leggings", + "components": { + "minecraft:attribute_modifiers": "DQIAGG1pbmVjcmFmdDphcm1vci5sZWdnaW5nc0AAAAAAAAAAAAUBGG1pbmVjcmFmdDphcm1vci5sZWdnaW5ncwAAAAAAAAAAAAUB", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gw8=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAJKARFtaW5lY3JhZnQ6bGVhdGhlcgAAAQEB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6bGVhdGhlcl9sZWdnaW5ncw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmxlYXRoZXJfbGVnZ2luZ3MA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "Aks=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAfbWluZWNyYWZ0OnJlcGFpcnNfbGVhdGhlcl9hcm1vcg==" + } + }, + { + "id": 890, + "key": "minecraft:leather_boots", + "components": { + "minecraft:attribute_modifiers": "DQIAFW1pbmVjcmFmdDphcm1vci5ib290cz/wAAAAAAAAAAQBFW1pbmVjcmFmdDphcm1vci5ib290cwAAAAAAAAAAAAQB", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gw8=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAFKARFtaW5lY3JhZnQ6bGVhdGhlcgAAAQEB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6bGVhdGhlcl9ib290cw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmxlYXRoZXJfYm9vdHMA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AkE=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAfbWluZWNyYWZ0OnJlcGFpcnNfbGVhdGhlcl9hcm1vcg==" + } + }, + { + "id": 891, + "key": "minecraft:chainmail_helmet", + "components": { + "minecraft:attribute_modifiers": "DQIAFm1pbmVjcmFmdDphcm1vci5oZWxtZXRAAAAAAAAAAAAHARZtaW5lY3JhZnQ6YXJtb3IuaGVsbWV0AAAAAAAAAAAABwE=", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gww=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAREARNtaW5lY3JhZnQ6Y2hhaW5tYWlsAAABAQE=", + "minecraft:item_model": "BxptaW5lY3JhZnQ6Y2hhaW5tYWlsX2hlbG1ldA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmNoYWlubWFpbF9oZWxtZXQA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AqUB", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAdbWluZWNyYWZ0OnJlcGFpcnNfY2hhaW5fYXJtb3I=" + } + }, + { + "id": 892, + "key": "minecraft:chainmail_chestplate", + "components": { + "minecraft:attribute_modifiers": "DQIAGm1pbmVjcmFmdDphcm1vci5jaGVzdHBsYXRlQBQAAAAAAAAABgEabWluZWNyYWZ0OmFybW9yLmNoZXN0cGxhdGUAAAAAAAAAAAAGAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gww=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HANEARNtaW5lY3JhZnQ6Y2hhaW5tYWlsAAABAQE=", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6Y2hhaW5tYWlsX2NoZXN0cGxhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LmNoYWlubWFpbF9jaGVzdHBsYXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AvAB", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAdbWluZWNyYWZ0OnJlcGFpcnNfY2hhaW5fYXJtb3I=" + } + }, + { + "id": 893, + "key": "minecraft:chainmail_leggings", + "components": { + "minecraft:attribute_modifiers": "DQIAGG1pbmVjcmFmdDphcm1vci5sZWdnaW5nc0AQAAAAAAAAAAUBGG1pbmVjcmFmdDphcm1vci5sZWdnaW5ncwAAAAAAAAAAAAUB", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gww=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAJEARNtaW5lY3JhZnQ6Y2hhaW5tYWlsAAABAQE=", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6Y2hhaW5tYWlsX2xlZ2dpbmdz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LmNoYWlubWFpbF9sZWdnaW5ncwA=", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AuEB", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAdbWluZWNyYWZ0OnJlcGFpcnNfY2hhaW5fYXJtb3I=" + } + }, + { + "id": 894, + "key": "minecraft:chainmail_boots", + "components": { + "minecraft:attribute_modifiers": "DQIAFW1pbmVjcmFmdDphcm1vci5ib290cz/wAAAAAAAAAAQBFW1pbmVjcmFmdDphcm1vci5ib290cwAAAAAAAAAAAAQB", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gww=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAFEARNtaW5lY3JhZnQ6Y2hhaW5tYWlsAAABAQE=", + "minecraft:item_model": "BxltaW5lY3JhZnQ6Y2hhaW5tYWlsX2Jvb3Rz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmNoYWlubWFpbF9ib290cwA=", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AsMB", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAdbWluZWNyYWZ0OnJlcGFpcnNfY2hhaW5fYXJtb3I=" + } + }, + { + "id": 895, + "key": "minecraft:iron_helmet", + "components": { + "minecraft:attribute_modifiers": "DQIAFm1pbmVjcmFmdDphcm1vci5oZWxtZXRAAAAAAAAAAAAHARZtaW5lY3JhZnQ6YXJtb3IuaGVsbWV0AAAAAAAAAAAABwE=", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gwk=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HARJAQ5taW5lY3JhZnQ6aXJvbgAAAQEB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6aXJvbl9oZWxtZXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0Lmlyb25faGVsbWV0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AqUB", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAcbWluZWNyYWZ0OnJlcGFpcnNfaXJvbl9hcm1vcg==" + } + }, + { + "id": 896, + "key": "minecraft:iron_chestplate", + "components": { + "minecraft:attribute_modifiers": "DQIAGm1pbmVjcmFmdDphcm1vci5jaGVzdHBsYXRlQBgAAAAAAAAABgEabWluZWNyYWZ0OmFybW9yLmNoZXN0cGxhdGUAAAAAAAAAAAAGAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gwk=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HANJAQ5taW5lY3JhZnQ6aXJvbgAAAQEB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6aXJvbl9jaGVzdHBsYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0Lmlyb25fY2hlc3RwbGF0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AvAB", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAcbWluZWNyYWZ0OnJlcGFpcnNfaXJvbl9hcm1vcg==" + } + }, + { + "id": 897, + "key": "minecraft:iron_leggings", + "components": { + "minecraft:attribute_modifiers": "DQIAGG1pbmVjcmFmdDphcm1vci5sZWdnaW5nc0AUAAAAAAAAAAUBGG1pbmVjcmFmdDphcm1vci5sZWdnaW5ncwAAAAAAAAAAAAUB", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gwk=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAJJAQ5taW5lY3JhZnQ6aXJvbgAAAQEB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6aXJvbl9sZWdnaW5ncw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0Lmlyb25fbGVnZ2luZ3MA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AuEB", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAcbWluZWNyYWZ0OnJlcGFpcnNfaXJvbl9hcm1vcg==" + } + }, + { + "id": 898, + "key": "minecraft:iron_boots", + "components": { + "minecraft:attribute_modifiers": "DQIAFW1pbmVjcmFmdDphcm1vci5ib290c0AAAAAAAAAAAAQBFW1pbmVjcmFmdDphcm1vci5ib290cwAAAAAAAAAAAAQB", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gwk=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAFJAQ5taW5lY3JhZnQ6aXJvbgAAAQEB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6aXJvbl9ib290cw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0Lmlyb25fYm9vdHMA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AsMB", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAcbWluZWNyYWZ0OnJlcGFpcnNfaXJvbl9hcm1vcg==" + } + }, + { + "id": 899, + "key": "minecraft:diamond_helmet", + "components": { + "minecraft:attribute_modifiers": "DQIAFm1pbmVjcmFmdDphcm1vci5oZWxtZXRACAAAAAAAAAAHARZtaW5lY3JhZnQ6YXJtb3IuaGVsbWV0QAAAAAAAAAAABwE=", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gwo=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HARFARFtaW5lY3JhZnQ6ZGlhbW9uZAAAAQEB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6ZGlhbW9uZF9oZWxtZXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmRpYW1vbmRfaGVsbWV0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AusC", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAfbWluZWNyYWZ0OnJlcGFpcnNfZGlhbW9uZF9hcm1vcg==" + } + }, + { + "id": 900, + "key": "minecraft:diamond_chestplate", + "components": { + "minecraft:attribute_modifiers": "DQIAGm1pbmVjcmFmdDphcm1vci5jaGVzdHBsYXRlQCAAAAAAAAAABgEabWluZWNyYWZ0OmFybW9yLmNoZXN0cGxhdGVAAAAAAAAAAAAGAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gwo=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HANFARFtaW5lY3JhZnQ6ZGlhbW9uZAAAAQEB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6ZGlhbW9uZF9jaGVzdHBsYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LmRpYW1vbmRfY2hlc3RwbGF0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "ApAE", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAfbWluZWNyYWZ0OnJlcGFpcnNfZGlhbW9uZF9hcm1vcg==" + } + }, + { + "id": 901, + "key": "minecraft:diamond_leggings", + "components": { + "minecraft:attribute_modifiers": "DQIAGG1pbmVjcmFmdDphcm1vci5sZWdnaW5nc0AYAAAAAAAAAAUBGG1pbmVjcmFmdDphcm1vci5sZWdnaW5nc0AAAAAAAAAAAAUB", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gwo=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAJFARFtaW5lY3JhZnQ6ZGlhbW9uZAAAAQEB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6ZGlhbW9uZF9sZWdnaW5ncw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmRpYW1vbmRfbGVnZ2luZ3MA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "Au8D", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAfbWluZWNyYWZ0OnJlcGFpcnNfZGlhbW9uZF9hcm1vcg==" + } + }, + { + "id": 902, + "key": "minecraft:diamond_boots", + "components": { + "minecraft:attribute_modifiers": "DQIAFW1pbmVjcmFmdDphcm1vci5ib290c0AIAAAAAAAAAAQBFW1pbmVjcmFmdDphcm1vci5ib290c0AAAAAAAAAAAAQB", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gwo=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAFFARFtaW5lY3JhZnQ6ZGlhbW9uZAAAAQEB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZGlhbW9uZF9ib290cw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmRpYW1vbmRfYm9vdHMA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "Aq0D", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAfbWluZWNyYWZ0OnJlcGFpcnNfZGlhbW9uZF9hcm1vcg==" + } + }, + { + "id": 903, + "key": "minecraft:golden_helmet", + "components": { + "minecraft:attribute_modifiers": "DQIAFm1pbmVjcmFmdDphcm1vci5oZWxtZXRAAAAAAAAAAAAHARZtaW5lY3JhZnQ6YXJtb3IuaGVsbWV0AAAAAAAAAAAABwE=", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gxk=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HARIAQ5taW5lY3JhZnQ6Z29sZAAAAQEB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Z29sZGVuX2hlbG1ldA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmdvbGRlbl9oZWxtZXQA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "Ak0=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAcbWluZWNyYWZ0OnJlcGFpcnNfZ29sZF9hcm1vcg==" + } + }, + { + "id": 904, + "key": "minecraft:golden_chestplate", + "components": { + "minecraft:attribute_modifiers": "DQIAGm1pbmVjcmFmdDphcm1vci5jaGVzdHBsYXRlQBQAAAAAAAAABgEabWluZWNyYWZ0OmFybW9yLmNoZXN0cGxhdGUAAAAAAAAAAAAGAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gxk=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HANIAQ5taW5lY3JhZnQ6Z29sZAAAAQEB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6Z29sZGVuX2NoZXN0cGxhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmdvbGRlbl9jaGVzdHBsYXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AnA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAcbWluZWNyYWZ0OnJlcGFpcnNfZ29sZF9hcm1vcg==" + } + }, + { + "id": 905, + "key": "minecraft:golden_leggings", + "components": { + "minecraft:attribute_modifiers": "DQIAGG1pbmVjcmFmdDphcm1vci5sZWdnaW5nc0AIAAAAAAAAAAUBGG1pbmVjcmFmdDphcm1vci5sZWdnaW5ncwAAAAAAAAAAAAUB", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gxk=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAJIAQ5taW5lY3JhZnQ6Z29sZAAAAQEB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6Z29sZGVuX2xlZ2dpbmdz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmdvbGRlbl9sZWdnaW5ncwA=", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "Amk=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAcbWluZWNyYWZ0OnJlcGFpcnNfZ29sZF9hcm1vcg==" + } + }, + { + "id": 906, + "key": "minecraft:golden_boots", + "components": { + "minecraft:attribute_modifiers": "DQIAFW1pbmVjcmFmdDphcm1vci5ib290cz/wAAAAAAAAAAQBFW1pbmVjcmFmdDphcm1vci5ib290cwAAAAAAAAAAAAQB", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gxk=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAFIAQ5taW5lY3JhZnQ6Z29sZAAAAQEB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z29sZGVuX2Jvb3Rz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmdvbGRlbl9ib290cwA=", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "Als=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAcbWluZWNyYWZ0OnJlcGFpcnNfZ29sZF9hcm1vcg==" + } + }, + { + "id": 907, + "key": "minecraft:netherite_helmet", + "components": { + "minecraft:attribute_modifiers": "DQMAFm1pbmVjcmFmdDphcm1vci5oZWxtZXRACAAAAAAAAAAHARZtaW5lY3JhZnQ6YXJtb3IuaGVsbWV0QAgAAAAAAAAABw8WbWluZWNyYWZ0OmFybW9yLmhlbG1ldD+5mZmgAAAAAAcB", + "minecraft:damage": "AwA=", + "minecraft:damage_resistant": "GRFtaW5lY3JhZnQ6aXNfZmlyZQ==", + "minecraft:enchantable": "Gw8=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HARLARNtaW5lY3JhZnQ6bmV0aGVyaXRlAAABAQE=", + "minecraft:item_model": "BxptaW5lY3JhZnQ6bmV0aGVyaXRlX2hlbG1ldA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV9oZWxtZXQA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "ApcD", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAhbWluZWNyYWZ0OnJlcGFpcnNfbmV0aGVyaXRlX2FybW9y" + } + }, + { + "id": 908, + "key": "minecraft:netherite_chestplate", + "components": { + "minecraft:attribute_modifiers": "DQMAGm1pbmVjcmFmdDphcm1vci5jaGVzdHBsYXRlQCAAAAAAAAAABgEabWluZWNyYWZ0OmFybW9yLmNoZXN0cGxhdGVACAAAAAAAAAAGDxptaW5lY3JhZnQ6YXJtb3IuY2hlc3RwbGF0ZT+5mZmgAAAAAAYB", + "minecraft:damage": "AwA=", + "minecraft:damage_resistant": "GRFtaW5lY3JhZnQ6aXNfZmlyZQ==", + "minecraft:enchantable": "Gw8=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HANLARNtaW5lY3JhZnQ6bmV0aGVyaXRlAAABAQE=", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6bmV0aGVyaXRlX2NoZXN0cGxhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV9jaGVzdHBsYXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AtAE", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAhbWluZWNyYWZ0OnJlcGFpcnNfbmV0aGVyaXRlX2FybW9y" + } + }, + { + "id": 909, + "key": "minecraft:netherite_leggings", + "components": { + "minecraft:attribute_modifiers": "DQMAGG1pbmVjcmFmdDphcm1vci5sZWdnaW5nc0AYAAAAAAAAAAUBGG1pbmVjcmFmdDphcm1vci5sZWdnaW5nc0AIAAAAAAAAAAUPGG1pbmVjcmFmdDphcm1vci5sZWdnaW5ncz+5mZmgAAAAAAUB", + "minecraft:damage": "AwA=", + "minecraft:damage_resistant": "GRFtaW5lY3JhZnQ6aXNfZmlyZQ==", + "minecraft:enchantable": "Gw8=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAJLARNtaW5lY3JhZnQ6bmV0aGVyaXRlAAABAQE=", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6bmV0aGVyaXRlX2xlZ2dpbmdz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV9sZWdnaW5ncwA=", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AqsE", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAhbWluZWNyYWZ0OnJlcGFpcnNfbmV0aGVyaXRlX2FybW9y" + } + }, + { + "id": 910, + "key": "minecraft:netherite_boots", + "components": { + "minecraft:attribute_modifiers": "DQMAFW1pbmVjcmFmdDphcm1vci5ib290c0AIAAAAAAAAAAQBFW1pbmVjcmFmdDphcm1vci5ib290c0AIAAAAAAAAAAQPFW1pbmVjcmFmdDphcm1vci5ib290cz+5mZmgAAAAAAQB", + "minecraft:damage": "AwA=", + "minecraft:damage_resistant": "GRFtaW5lY3JhZnQ6aXNfZmlyZQ==", + "minecraft:enchantable": "Gw8=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAFLARNtaW5lY3JhZnQ6bmV0aGVyaXRlAAABAQE=", + "minecraft:item_model": "BxltaW5lY3JhZnQ6bmV0aGVyaXRlX2Jvb3Rz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV9ib290cwA=", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AuED", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAhbWluZWNyYWZ0OnJlcGFpcnNfbmV0aGVyaXRlX2FybW9y" + } + }, + { + "id": 911, + "key": "minecraft:flint", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6ZmxpbnQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGl0ZW0ubWluZWNyYWZ0LmZsaW50AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 912, + "key": "minecraft:porkchop", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQM/5mZnAA==", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6cG9ya2Nob3A=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LnBvcmtjaG9wAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 913, + "key": "minecraft:cooked_porkchop", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQhBTMzNAA==", + "minecraft:item_model": "BxltaW5lY3JhZnQ6Y29va2VkX3BvcmtjaG9w", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmNvb2tlZF9wb3JrY2hvcAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 914, + "key": "minecraft:painting", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6cGFpbnRpbmc=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LnBhaW50aW5nAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 915, + "key": "minecraft:golden_apple", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAQACCQFkAAEBABUA4BIAAQEAP4AAAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQRBGZmaAQ==", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z29sZGVuX2FwcGxl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmdvbGRlbl9hcHBsZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 916, + "key": "minecraft:enchanted_golden_apple", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAQAECQGQAwABAQAKAPAuAAEBAAsA8C4AAQEAFQPgEgABAQA/gAAA", + "minecraft:enchantment_glint_override": "EwE=", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQRBGZmaAQ==", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6ZW5jaGFudGVkX2dvbGRlbl9hcHBsZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWl0ZW0ubWluZWNyYWZ0LmVuY2hhbnRlZF9nb2xkZW5fYXBwbGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQI=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 917, + "key": "minecraft:oak_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6b2FrX3NpZ24=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5vYWtfc2lnbgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 918, + "key": "minecraft:spruce_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6c3BydWNlX3NpZ24=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zcHJ1Y2Vfc2lnbgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 919, + "key": "minecraft:birch_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6YmlyY2hfc2lnbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5iaXJjaF9zaWduAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 920, + "key": "minecraft:jungle_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6anVuZ2xlX3NpZ24=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5qdW5nbGVfc2lnbgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 921, + "key": "minecraft:acacia_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6YWNhY2lhX3NpZ24=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5hY2FjaWFfc2lnbgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 922, + "key": "minecraft:cherry_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y2hlcnJ5X3NpZ24=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5jaGVycnlfc2lnbgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 923, + "key": "minecraft:dark_oak_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZGFya19vYWtfc2lnbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19zaWduAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 924, + "key": "minecraft:pale_oak_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6cGFsZV9vYWtfc2lnbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19zaWduAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 925, + "key": "minecraft:mangrove_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6bWFuZ3JvdmVfc2lnbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9zaWduAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 926, + "key": "minecraft:bamboo_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6YmFtYm9vX3NpZ24=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5iYW1ib29fc2lnbgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 927, + "key": "minecraft:crimson_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6Y3JpbXNvbl9zaWdu", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5jcmltc29uX3NpZ24A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 928, + "key": "minecraft:warped_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6d2FycGVkX3NpZ24=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC53YXJwZWRfc2lnbgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 929, + "key": "minecraft:oak_hanging_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6b2FrX2hhbmdpbmdfc2lnbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5vYWtfaGFuZ2luZ19zaWduAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 930, + "key": "minecraft:spruce_hanging_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6c3BydWNlX2hhbmdpbmdfc2lnbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5zcHJ1Y2VfaGFuZ2luZ19zaWduAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 931, + "key": "minecraft:birch_hanging_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6YmlyY2hfaGFuZ2luZ19zaWdu", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5iaXJjaF9oYW5naW5nX3NpZ24A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 932, + "key": "minecraft:jungle_hanging_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6anVuZ2xlX2hhbmdpbmdfc2lnbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5qdW5nbGVfaGFuZ2luZ19zaWduAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 933, + "key": "minecraft:acacia_hanging_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6YWNhY2lhX2hhbmdpbmdfc2lnbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5hY2FjaWFfaGFuZ2luZ19zaWduAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 934, + "key": "minecraft:cherry_hanging_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6Y2hlcnJ5X2hhbmdpbmdfc2lnbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5jaGVycnlfaGFuZ2luZ19zaWduAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 935, + "key": "minecraft:dark_oak_hanging_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6ZGFya19vYWtfaGFuZ2luZ19zaWdu", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5kYXJrX29ha19oYW5naW5nX3NpZ24A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 936, + "key": "minecraft:pale_oak_hanging_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6cGFsZV9vYWtfaGFuZ2luZ19zaWdu", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5wYWxlX29ha19oYW5naW5nX3NpZ24A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 937, + "key": "minecraft:mangrove_hanging_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6bWFuZ3JvdmVfaGFuZ2luZ19zaWdu", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5tYW5ncm92ZV9oYW5naW5nX3NpZ24A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 938, + "key": "minecraft:bamboo_hanging_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6YmFtYm9vX2hhbmdpbmdfc2lnbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5iYW1ib29faGFuZ2luZ19zaWduAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 939, + "key": "minecraft:crimson_hanging_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6Y3JpbXNvbl9oYW5naW5nX3NpZ24=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5jcmltc29uX2hhbmdpbmdfc2lnbgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 940, + "key": "minecraft:warped_hanging_sign", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6d2FycGVkX2hhbmdpbmdfc2lnbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC53YXJwZWRfaGFuZ2luZ19zaWduAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 941, + "key": "minecraft:bucket", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6YnVja2V0", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LmJ1Y2tldAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 942, + "key": "minecraft:water_bucket", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6d2F0ZXJfYnVja2V0", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LndhdGVyX2J1Y2tldAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 943, + "key": "minecraft:lava_bucket", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6bGF2YV9idWNrZXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmxhdmFfYnVja2V0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 944, + "key": "minecraft:powder_snow_bucket", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6cG93ZGVyX3Nub3dfYnVja2V0", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LnBvd2Rlcl9zbm93X2J1Y2tldAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 945, + "key": "minecraft:snowball", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6c25vd2JhbGw=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LnNub3diYWxsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 946, + "key": "minecraft:leather", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6bGVhdGhlcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFml0ZW0ubWluZWNyYWZ0LmxlYXRoZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 947, + "key": "minecraft:milk_bucket", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0C2QQAAQI=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6bWlsa19idWNrZXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0Lm1pbGtfYnVja2V0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:use_remainder": "FwGtBwAA" + } + }, + { + "id": 948, + "key": "minecraft:pufferfish_bucket", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bucket_entity_data": "MAoA", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6cHVmZmVyZmlzaF9idWNrZXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LnB1ZmZlcmZpc2hfYnVja2V0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 949, + "key": "minecraft:salmon_bucket", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bucket_entity_data": "MAoA", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6c2FsbW9uX2J1Y2tldA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnNhbG1vbl9idWNrZXQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 950, + "key": "minecraft:cod_bucket", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bucket_entity_data": "MAoA", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6Y29kX2J1Y2tldA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LmNvZF9idWNrZXQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 951, + "key": "minecraft:tropical_fish_bucket", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bucket_entity_data": "MAoA", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6dHJvcGljYWxfZmlzaF9idWNrZXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LnRyb3BpY2FsX2Zpc2hfYnVja2V0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 952, + "key": "minecraft:axolotl_bucket", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bucket_entity_data": "MAoA", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6YXhvbG90bF9idWNrZXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmF4b2xvdGxfYnVja2V0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 953, + "key": "minecraft:tadpole_bucket", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bucket_entity_data": "MAoA", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6dGFkcG9sZV9idWNrZXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LnRhZHBvbGVfYnVja2V0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 954, + "key": "minecraft:brick", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6YnJpY2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGl0ZW0ubWluZWNyYWZ0LmJyaWNrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 955, + "key": "minecraft:clay_ball", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6Y2xheV9iYWxs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LmNsYXlfYmFsbAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 956, + "key": "minecraft:dried_kelp_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6ZHJpZWRfa2VscF9ibG9jaw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5kcmllZF9rZWxwX2Jsb2NrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 957, + "key": "minecraft:paper", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6cGFwZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGl0ZW0ubWluZWNyYWZ0LnBhcGVyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 958, + "key": "minecraft:book", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantable": "GwE=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw5taW5lY3JhZnQ6Ym9vaw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAE2l0ZW0ubWluZWNyYWZ0LmJvb2sA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 959, + "key": "minecraft:slime_ball", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6c2xpbWVfYmFsbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LnNsaW1lX2JhbGwA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 960, + "key": "minecraft:egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw1taW5lY3JhZnQ6ZWdn", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAEml0ZW0ubWluZWNyYWZ0LmVnZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 961, + "key": "minecraft:compass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6Y29tcGFzcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFml0ZW0ubWluZWNyYWZ0LmNvbXBhc3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 962, + "key": "minecraft:recovery_compass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6cmVjb3ZlcnlfY29tcGFzcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnJlY292ZXJ5X2NvbXBhc3MA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 963, + "key": "minecraft:bundle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bundle_contents": "KAA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6YnVuZGxl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LmJ1bmRsZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 964, + "key": "minecraft:white_bundle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bundle_contents": "KAA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6d2hpdGVfYnVuZGxl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LndoaXRlX2J1bmRsZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 965, + "key": "minecraft:orange_bundle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bundle_contents": "KAA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6b3JhbmdlX2J1bmRsZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0Lm9yYW5nZV9idW5kbGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 966, + "key": "minecraft:magenta_bundle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bundle_contents": "KAA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6bWFnZW50YV9idW5kbGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0Lm1hZ2VudGFfYnVuZGxlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 967, + "key": "minecraft:light_blue_bundle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bundle_contents": "KAA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6bGlnaHRfYmx1ZV9idW5kbGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmxpZ2h0X2JsdWVfYnVuZGxlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 968, + "key": "minecraft:yellow_bundle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bundle_contents": "KAA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6eWVsbG93X2J1bmRsZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnllbGxvd19idW5kbGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 969, + "key": "minecraft:lime_bundle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bundle_contents": "KAA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6bGltZV9idW5kbGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmxpbWVfYnVuZGxlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 970, + "key": "minecraft:pink_bundle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bundle_contents": "KAA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6cGlua19idW5kbGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LnBpbmtfYnVuZGxlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 971, + "key": "minecraft:gray_bundle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bundle_contents": "KAA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Z3JheV9idW5kbGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmdyYXlfYnVuZGxlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 972, + "key": "minecraft:light_gray_bundle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bundle_contents": "KAA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6bGlnaHRfZ3JheV9idW5kbGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmxpZ2h0X2dyYXlfYnVuZGxlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 973, + "key": "minecraft:cyan_bundle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bundle_contents": "KAA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y3lhbl9idW5kbGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmN5YW5fYnVuZGxlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 974, + "key": "minecraft:purple_bundle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bundle_contents": "KAA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6cHVycGxlX2J1bmRsZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnB1cnBsZV9idW5kbGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 975, + "key": "minecraft:blue_bundle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bundle_contents": "KAA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Ymx1ZV9idW5kbGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmJsdWVfYnVuZGxlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 976, + "key": "minecraft:brown_bundle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bundle_contents": "KAA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6YnJvd25fYnVuZGxl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmJyb3duX2J1bmRsZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 977, + "key": "minecraft:green_bundle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bundle_contents": "KAA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z3JlZW5fYnVuZGxl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmdyZWVuX2J1bmRsZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 978, + "key": "minecraft:red_bundle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bundle_contents": "KAA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6cmVkX2J1bmRsZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LnJlZF9idW5kbGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 979, + "key": "minecraft:black_bundle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bundle_contents": "KAA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmxhY2tfYnVuZGxl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmJsYWNrX2J1bmRsZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 980, + "key": "minecraft:fishing_rod", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "GwE=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6ZmlzaGluZ19yb2Q=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmZpc2hpbmdfcm9kAA==", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AkA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 981, + "key": "minecraft:clock", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6Y2xvY2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGl0ZW0ubWluZWNyYWZ0LmNsb2NrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 982, + "key": "minecraft:spyglass", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6c3B5Z2xhc3M=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LnNweWdsYXNzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 983, + "key": "minecraft:glowstone_dust", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6Z2xvd3N0b25lX2R1c3Q=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0Lmdsb3dzdG9uZV9kdXN0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 984, + "key": "minecraft:cod", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQI+zMzNAA==", + "minecraft:item_model": "Bw1taW5lY3JhZnQ6Y29k", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAEml0ZW0ubWluZWNyYWZ0LmNvZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 985, + "key": "minecraft:salmon", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQI+zMzNAA==", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6c2FsbW9u", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LnNhbG1vbgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 986, + "key": "minecraft:tropical_fish", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQE+TMzNAA==", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6dHJvcGljYWxfZmlzaA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnRyb3BpY2FsX2Zpc2gA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 987, + "key": "minecraft:pufferfish", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAQADEgGwCQABAQAQAqwCAAEBAAgArAIAAQEAP4AAAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQE+TMzNAA==", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6cHVmZmVyZmlzaA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LnB1ZmZlcmZpc2gA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 988, + "key": "minecraft:cooked_cod", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQVAwAAAAA==", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6Y29va2VkX2NvZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LmNvb2tlZF9jb2QA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 989, + "key": "minecraft:cooked_salmon", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQZBGZmaAA==", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y29va2VkX3NhbG1vbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmNvb2tlZF9zYWxtb24A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 990, + "key": "minecraft:ink_sac", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6aW5rX3NhYw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFml0ZW0ubWluZWNyYWZ0Lmlua19zYWMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 991, + "key": "minecraft:glow_ink_sac", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z2xvd19pbmtfc2Fj", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0Lmdsb3dfaW5rX3NhYwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 992, + "key": "minecraft:cocoa_beans", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y29jb2FfYmVhbnM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmNvY29hX2JlYW5zAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 993, + "key": "minecraft:white_dye", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6d2hpdGVfZHll", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LndoaXRlX2R5ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 994, + "key": "minecraft:orange_dye", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6b3JhbmdlX2R5ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0Lm9yYW5nZV9keWUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 995, + "key": "minecraft:magenta_dye", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6bWFnZW50YV9keWU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0Lm1hZ2VudGFfZHllAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 996, + "key": "minecraft:light_blue_dye", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6bGlnaHRfYmx1ZV9keWU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmxpZ2h0X2JsdWVfZHllAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 997, + "key": "minecraft:yellow_dye", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6eWVsbG93X2R5ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LnllbGxvd19keWUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 998, + "key": "minecraft:lime_dye", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6bGltZV9keWU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LmxpbWVfZHllAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 999, + "key": "minecraft:pink_dye", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6cGlua19keWU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LnBpbmtfZHllAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1000, + "key": "minecraft:gray_dye", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6Z3JheV9keWU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LmdyYXlfZHllAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1001, + "key": "minecraft:light_gray_dye", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6bGlnaHRfZ3JheV9keWU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmxpZ2h0X2dyYXlfZHllAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1002, + "key": "minecraft:cyan_dye", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6Y3lhbl9keWU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LmN5YW5fZHllAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1003, + "key": "minecraft:purple_dye", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6cHVycGxlX2R5ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LnB1cnBsZV9keWUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1004, + "key": "minecraft:blue_dye", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6Ymx1ZV9keWU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LmJsdWVfZHllAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1005, + "key": "minecraft:brown_dye", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6YnJvd25fZHll", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LmJyb3duX2R5ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1006, + "key": "minecraft:green_dye", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6Z3JlZW5fZHll", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LmdyZWVuX2R5ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1007, + "key": "minecraft:red_dye", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6cmVkX2R5ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFml0ZW0ubWluZWNyYWZ0LnJlZF9keWUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1008, + "key": "minecraft:black_dye", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6YmxhY2tfZHll", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LmJsYWNrX2R5ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1009, + "key": "minecraft:bone_meal", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6Ym9uZV9tZWFs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LmJvbmVfbWVhbAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1010, + "key": "minecraft:bone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw5taW5lY3JhZnQ6Ym9uZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAE2l0ZW0ubWluZWNyYWZ0LmJvbmUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1011, + "key": "minecraft:sugar", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6c3VnYXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGl0ZW0ubWluZWNyYWZ0LnN1Z2FyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1012, + "key": "minecraft:cake", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw5taW5lY3JhZnQ6Y2FrZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC5jYWtlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1013, + "key": "minecraft:white_bed", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6d2hpdGVfYmVk", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC53aGl0ZV9iZWQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1014, + "key": "minecraft:orange_bed", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6b3JhbmdlX2JlZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5vcmFuZ2VfYmVkAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1015, + "key": "minecraft:magenta_bed", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6bWFnZW50YV9iZWQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX2JlZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1016, + "key": "minecraft:light_blue_bed", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6bGlnaHRfYmx1ZV9iZWQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX2JlZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1017, + "key": "minecraft:yellow_bed", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6eWVsbG93X2JlZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC55ZWxsb3dfYmVkAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1018, + "key": "minecraft:lime_bed", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6bGltZV9iZWQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5saW1lX2JlZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1019, + "key": "minecraft:pink_bed", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6cGlua19iZWQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5waW5rX2JlZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1020, + "key": "minecraft:gray_bed", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6Z3JheV9iZWQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5ncmF5X2JlZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1021, + "key": "minecraft:light_gray_bed", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6bGlnaHRfZ3JheV9iZWQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X2JlZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1022, + "key": "minecraft:cyan_bed", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6Y3lhbl9iZWQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5jeWFuX2JlZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1023, + "key": "minecraft:purple_bed", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6cHVycGxlX2JlZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5wdXJwbGVfYmVkAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1024, + "key": "minecraft:blue_bed", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6Ymx1ZV9iZWQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5ibHVlX2JlZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1025, + "key": "minecraft:brown_bed", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6YnJvd25fYmVk", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5icm93bl9iZWQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1026, + "key": "minecraft:green_bed", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6Z3JlZW5fYmVk", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5ncmVlbl9iZWQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1027, + "key": "minecraft:red_bed", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6cmVkX2JlZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5yZWRfYmVkAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1028, + "key": "minecraft:black_bed", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6YmxhY2tfYmVk", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5ibGFja19iZWQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1029, + "key": "minecraft:cookie", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQI+zMzNAA==", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6Y29va2ll", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LmNvb2tpZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1030, + "key": "minecraft:crafter", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6Y3JhZnRlcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5jcmFmdGVyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1031, + "key": "minecraft:filled_map", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6ZmlsbGVkX21hcA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LmZpbGxlZF9tYXAA", + "minecraft:lore": "CAA=", + "minecraft:map_color": "IwBGQC4=", + "minecraft:map_decorations": "JQoA", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1032, + "key": "minecraft:shears", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:damage": "AwA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6c2hlYXJz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LnNoZWFycwA=", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "Au4B", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:tool": "GgQCgQEBQXAAAAEBABBtaW5lY3JhZnQ6bGVhdmVzAUFwAAAAAA5taW5lY3JhZnQ6d29vbAFAoAAAAAPLAswCAUAAAAAAP4AAAAE=" + } + }, + { + "id": 1033, + "key": "minecraft:melon_slice", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQI/mZmaAA==", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6bWVsb25fc2xpY2U=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0Lm1lbG9uX3NsaWNlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1034, + "key": "minecraft:dried_kelp", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj9MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQE/GZmaAA==", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6ZHJpZWRfa2VscA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LmRyaWVkX2tlbHAA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1035, + "key": "minecraft:pumpkin_seeds", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6cHVtcGtpbl9zZWVkcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnB1bXBraW5fc2VlZHMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1036, + "key": "minecraft:melon_seeds", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6bWVsb25fc2VlZHM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0Lm1lbG9uX3NlZWRzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1037, + "key": "minecraft:beef", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQM/5mZnAA==", + "minecraft:item_model": "Bw5taW5lY3JhZnQ6YmVlZg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAE2l0ZW0ubWluZWNyYWZ0LmJlZWYA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1038, + "key": "minecraft:cooked_beef", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQhBTMzNAA==", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y29va2VkX2JlZWY=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmNvb2tlZF9iZWVmAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1039, + "key": "minecraft:chicken", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAQABEADYBAABAQA+mZma", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQI/mZmaAA==", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6Y2hpY2tlbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFml0ZW0ubWluZWNyYWZ0LmNoaWNrZW4A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1040, + "key": "minecraft:cooked_chicken", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQZA5mZnAA==", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6Y29va2VkX2NoaWNrZW4=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmNvb2tlZF9jaGlja2VuAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1041, + "key": "minecraft:rotten_flesh", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAQABEADYBAABAQA/TMzN", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQQ/TMzNAA==", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6cm90dGVuX2ZsZXNo", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LnJvdHRlbl9mbGVzaAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1042, + "key": "minecraft:ender_pearl", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6ZW5kZXJfcGVhcmw=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmVuZGVyX3BlYXJsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:use_cooldown": "GD+AAAAA" + } + }, + { + "id": 1043, + "key": "minecraft:blaze_rod", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6YmxhemVfcm9k", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LmJsYXplX3JvZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1044, + "key": "minecraft:ghast_tear", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6Z2hhc3RfdGVhcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LmdoYXN0X3RlYXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1045, + "key": "minecraft:gold_nugget", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Z29sZF9udWdnZXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmdvbGRfbnVnZ2V0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1046, + "key": "minecraft:nether_wart", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6bmV0aGVyX3dhcnQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0Lm5ldGhlcl93YXJ0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1047, + "key": "minecraft:glass_bottle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z2xhc3NfYm90dGxl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmdsYXNzX2JvdHRsZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1048, + "key": "minecraft:potion", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0C2QQAAA==", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6cG90aW9u", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LnBvdGlvbgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:potion_contents": "KQAAAAA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:use_remainder": "FwGXCAAA" + } + }, + { + "id": 1049, + "key": "minecraft:spider_eye", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAQABEgBkAAEBAD+AAAA=", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQJATMzNAA==", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6c3BpZGVyX2V5ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LnNwaWRlcl9leWUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1050, + "key": "minecraft:fermented_spider_eye", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6ZmVybWVudGVkX3NwaWRlcl9leWU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LmZlcm1lbnRlZF9zcGlkZXJfZXllAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1051, + "key": "minecraft:blaze_powder", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmxhemVfcG93ZGVy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmJsYXplX3Bvd2RlcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1052, + "key": "minecraft:magma_cream", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6bWFnbWFfY3JlYW0=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0Lm1hZ21hX2NyZWFtAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1053, + "key": "minecraft:brewing_stand", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6YnJld2luZ19zdGFuZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5icmV3aW5nX3N0YW5kAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1054, + "key": "minecraft:cauldron", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6Y2F1bGRyb24=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5jYXVsZHJvbgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1055, + "key": "minecraft:ender_eye", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6ZW5kZXJfZXll", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LmVuZGVyX2V5ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1056, + "key": "minecraft:glistering_melon_slice", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6Z2xpc3RlcmluZ19tZWxvbl9zbGljZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWl0ZW0ubWluZWNyYWZ0LmdsaXN0ZXJpbmdfbWVsb25fc2xpY2UA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1057, + "key": "minecraft:armadillo_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6YXJtYWRpbGxvX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LmFybWFkaWxsb19zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1058, + "key": "minecraft:allay_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6YWxsYXlfc3Bhd25fZWdn", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmFsbGF5X3NwYXduX2VnZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1059, + "key": "minecraft:axolotl_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6YXhvbG90bF9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmF4b2xvdGxfc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1060, + "key": "minecraft:bat_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6YmF0X3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmJhdF9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1061, + "key": "minecraft:bee_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6YmVlX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmJlZV9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1062, + "key": "minecraft:blaze_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6YmxhemVfc3Bhd25fZWdn", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmJsYXplX3NwYXduX2VnZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1063, + "key": "minecraft:bogged_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6Ym9nZ2VkX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmJvZ2dlZF9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1064, + "key": "minecraft:breeze_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6YnJlZXplX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmJyZWV6ZV9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1065, + "key": "minecraft:cat_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y2F0X3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmNhdF9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1066, + "key": "minecraft:camel_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6Y2FtZWxfc3Bhd25fZWdn", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmNhbWVsX3NwYXduX2VnZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1067, + "key": "minecraft:cave_spider_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6Y2F2ZV9zcGlkZXJfc3Bhd25fZWdn", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGl0ZW0ubWluZWNyYWZ0LmNhdmVfc3BpZGVyX3NwYXduX2VnZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1068, + "key": "minecraft:chicken_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6Y2hpY2tlbl9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmNoaWNrZW5fc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1069, + "key": "minecraft:cod_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y29kX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmNvZF9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1070, + "key": "minecraft:cow_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y293X3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmNvd19zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1071, + "key": "minecraft:creeper_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6Y3JlZXBlcl9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmNyZWVwZXJfc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1072, + "key": "minecraft:dolphin_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6ZG9scGhpbl9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmRvbHBoaW5fc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1073, + "key": "minecraft:donkey_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6ZG9ua2V5X3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmRvbmtleV9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1074, + "key": "minecraft:drowned_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6ZHJvd25lZF9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmRyb3duZWRfc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1075, + "key": "minecraft:elder_guardian_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6ZWxkZXJfZ3VhcmRpYW5fc3Bhd25fZWdn", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2l0ZW0ubWluZWNyYWZ0LmVsZGVyX2d1YXJkaWFuX3NwYXduX2VnZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1076, + "key": "minecraft:ender_dragon_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6ZW5kZXJfZHJhZ29uX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWl0ZW0ubWluZWNyYWZ0LmVuZGVyX2RyYWdvbl9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1077, + "key": "minecraft:enderman_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6ZW5kZXJtYW5fc3Bhd25fZWdn", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LmVuZGVybWFuX3NwYXduX2VnZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1078, + "key": "minecraft:endermite_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZW5kZXJtaXRlX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LmVuZGVybWl0ZV9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1079, + "key": "minecraft:evoker_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6ZXZva2VyX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmV2b2tlcl9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1080, + "key": "minecraft:fox_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Zm94X3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmZveF9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1081, + "key": "minecraft:frog_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6ZnJvZ19zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmZyb2dfc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1082, + "key": "minecraft:ghast_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6Z2hhc3Rfc3Bhd25fZWdn", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmdoYXN0X3NwYXduX2VnZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1083, + "key": "minecraft:glow_squid_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6Z2xvd19zcXVpZF9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0Lmdsb3dfc3F1aWRfc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1084, + "key": "minecraft:goat_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6Z29hdF9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmdvYXRfc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1085, + "key": "minecraft:guardian_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6Z3VhcmRpYW5fc3Bhd25fZWdn", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0Lmd1YXJkaWFuX3NwYXduX2VnZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1086, + "key": "minecraft:hoglin_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6aG9nbGluX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmhvZ2xpbl9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1087, + "key": "minecraft:horse_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6aG9yc2Vfc3Bhd25fZWdn", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmhvcnNlX3NwYXduX2VnZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1088, + "key": "minecraft:husk_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6aHVza19zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0Lmh1c2tfc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1089, + "key": "minecraft:iron_golem_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6aXJvbl9nb2xlbV9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0Lmlyb25fZ29sZW1fc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1090, + "key": "minecraft:llama_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6bGxhbWFfc3Bhd25fZWdn", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmxsYW1hX3NwYXduX2VnZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1091, + "key": "minecraft:magma_cube_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6bWFnbWFfY3ViZV9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0Lm1hZ21hX2N1YmVfc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1092, + "key": "minecraft:mooshroom_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6bW9vc2hyb29tX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0Lm1vb3Nocm9vbV9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1093, + "key": "minecraft:mule_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6bXVsZV9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0Lm11bGVfc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1094, + "key": "minecraft:ocelot_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6b2NlbG90X3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0Lm9jZWxvdF9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1095, + "key": "minecraft:panda_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6cGFuZGFfc3Bhd25fZWdn", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LnBhbmRhX3NwYXduX2VnZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1096, + "key": "minecraft:parrot_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6cGFycm90X3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnBhcnJvdF9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1097, + "key": "minecraft:phantom_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6cGhhbnRvbV9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LnBoYW50b21fc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1098, + "key": "minecraft:pig_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6cGlnX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnBpZ19zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1099, + "key": "minecraft:piglin_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6cGlnbGluX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnBpZ2xpbl9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1100, + "key": "minecraft:piglin_brute_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6cGlnbGluX2JydXRlX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWl0ZW0ubWluZWNyYWZ0LnBpZ2xpbl9icnV0ZV9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1101, + "key": "minecraft:pillager_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6cGlsbGFnZXJfc3Bhd25fZWdn", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LnBpbGxhZ2VyX3NwYXduX2VnZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1102, + "key": "minecraft:polar_bear_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6cG9sYXJfYmVhcl9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LnBvbGFyX2JlYXJfc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1103, + "key": "minecraft:pufferfish_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6cHVmZmVyZmlzaF9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LnB1ZmZlcmZpc2hfc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1104, + "key": "minecraft:rabbit_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6cmFiYml0X3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnJhYmJpdF9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1105, + "key": "minecraft:ravager_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6cmF2YWdlcl9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LnJhdmFnZXJfc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1106, + "key": "minecraft:salmon_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6c2FsbW9uX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnNhbG1vbl9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1107, + "key": "minecraft:sheep_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6c2hlZXBfc3Bhd25fZWdn", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LnNoZWVwX3NwYXduX2VnZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1108, + "key": "minecraft:shulker_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6c2h1bGtlcl9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LnNodWxrZXJfc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1109, + "key": "minecraft:silverfish_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6c2lsdmVyZmlzaF9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LnNpbHZlcmZpc2hfc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1110, + "key": "minecraft:skeleton_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6c2tlbGV0b25fc3Bhd25fZWdn", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LnNrZWxldG9uX3NwYXduX2VnZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1111, + "key": "minecraft:skeleton_horse_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6c2tlbGV0b25faG9yc2Vfc3Bhd25fZWdn", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2l0ZW0ubWluZWNyYWZ0LnNrZWxldG9uX2hvcnNlX3NwYXduX2VnZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1112, + "key": "minecraft:slime_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6c2xpbWVfc3Bhd25fZWdn", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LnNsaW1lX3NwYXduX2VnZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1113, + "key": "minecraft:sniffer_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6c25pZmZlcl9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LnNuaWZmZXJfc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1114, + "key": "minecraft:snow_golem_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6c25vd19nb2xlbV9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LnNub3dfZ29sZW1fc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1115, + "key": "minecraft:spider_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6c3BpZGVyX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnNwaWRlcl9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1116, + "key": "minecraft:squid_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6c3F1aWRfc3Bhd25fZWdn", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LnNxdWlkX3NwYXduX2VnZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1117, + "key": "minecraft:stray_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6c3RyYXlfc3Bhd25fZWdn", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LnN0cmF5X3NwYXduX2VnZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1118, + "key": "minecraft:strider_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6c3RyaWRlcl9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LnN0cmlkZXJfc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1119, + "key": "minecraft:tadpole_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6dGFkcG9sZV9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LnRhZHBvbGVfc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1120, + "key": "minecraft:trader_llama_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6dHJhZGVyX2xsYW1hX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWl0ZW0ubWluZWNyYWZ0LnRyYWRlcl9sbGFtYV9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1121, + "key": "minecraft:tropical_fish_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByFtaW5lY3JhZnQ6dHJvcGljYWxfZmlzaF9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJml0ZW0ubWluZWNyYWZ0LnRyb3BpY2FsX2Zpc2hfc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1122, + "key": "minecraft:turtle_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6dHVydGxlX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnR1cnRsZV9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1123, + "key": "minecraft:vex_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6dmV4X3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnZleF9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1124, + "key": "minecraft:villager_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6dmlsbGFnZXJfc3Bhd25fZWdn", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LnZpbGxhZ2VyX3NwYXduX2VnZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1125, + "key": "minecraft:vindicator_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6dmluZGljYXRvcl9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LnZpbmRpY2F0b3Jfc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1126, + "key": "minecraft:wandering_trader_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByRtaW5lY3JhZnQ6d2FuZGVyaW5nX3RyYWRlcl9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWl0ZW0ubWluZWNyYWZ0LndhbmRlcmluZ190cmFkZXJfc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1127, + "key": "minecraft:warden_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6d2FyZGVuX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LndhcmRlbl9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1128, + "key": "minecraft:witch_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6d2l0Y2hfc3Bhd25fZWdn", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LndpdGNoX3NwYXduX2VnZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1129, + "key": "minecraft:wither_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6d2l0aGVyX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LndpdGhlcl9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1130, + "key": "minecraft:wither_skeleton_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByNtaW5lY3JhZnQ6d2l0aGVyX3NrZWxldG9uX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGl0ZW0ubWluZWNyYWZ0LndpdGhlcl9za2VsZXRvbl9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1131, + "key": "minecraft:wolf_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6d29sZl9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LndvbGZfc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1132, + "key": "minecraft:zoglin_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6em9nbGluX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnpvZ2xpbl9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1133, + "key": "minecraft:creaking_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6Y3JlYWtpbmdfc3Bhd25fZWdn", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LmNyZWFraW5nX3NwYXduX2VnZwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1134, + "key": "minecraft:zombie_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6em9tYmllX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnpvbWJpZV9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1135, + "key": "minecraft:zombie_horse_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6em9tYmllX2hvcnNlX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWl0ZW0ubWluZWNyYWZ0LnpvbWJpZV9ob3JzZV9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1136, + "key": "minecraft:zombie_villager_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByNtaW5lY3JhZnQ6em9tYmllX3ZpbGxhZ2VyX3NwYXduX2VnZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGl0ZW0ubWluZWNyYWZ0LnpvbWJpZV92aWxsYWdlcl9zcGF3bl9lZ2cA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1137, + "key": "minecraft:zombified_piglin_spawn_egg", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByRtaW5lY3JhZnQ6em9tYmlmaWVkX3BpZ2xpbl9zcGF3bl9lZ2c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWl0ZW0ubWluZWNyYWZ0LnpvbWJpZmllZF9waWdsaW5fc3Bhd25fZWdnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1138, + "key": "minecraft:experience_bottle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantment_glint_override": "EwE=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6ZXhwZXJpZW5jZV9ib3R0bGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LmV4cGVyaWVuY2VfYm90dGxlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1139, + "key": "minecraft:fire_charge", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6ZmlyZV9jaGFyZ2U=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmZpcmVfY2hhcmdlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1140, + "key": "minecraft:wind_charge", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6d2luZF9jaGFyZ2U=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LndpbmRfY2hhcmdlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:use_cooldown": "GD8AAAAA" + } + }, + { + "id": 1141, + "key": "minecraft:writable_book", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6d3JpdGFibGVfYm9vaw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LndyaXRhYmxlX2Jvb2sA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:writable_book_content": "KwA=" + } + }, + { + "id": 1142, + "key": "minecraft:written_book", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantment_glint_override": "EwE=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6d3JpdHRlbl9ib29r", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LndyaXR0ZW5fYm9vawA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1143, + "key": "minecraft:breeze_rod", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6YnJlZXplX3JvZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LmJyZWV6ZV9yb2QA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1144, + "key": "minecraft:mace", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAFAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTACzMzQAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "Gw8=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw5taW5lY3JhZnQ6bWFjZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAE2l0ZW0ubWluZWNyYWZ0Lm1hY2UA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AvQD", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQM=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQL3CA==", + "minecraft:tool": "GgA/gAAAAg==" + } + }, + { + "id": 1145, + "key": "minecraft:item_frame", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6aXRlbV9mcmFtZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0Lml0ZW1fZnJhbWUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1146, + "key": "minecraft:glow_item_frame", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6Z2xvd19pdGVtX2ZyYW1l", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0Lmdsb3dfaXRlbV9mcmFtZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1147, + "key": "minecraft:flower_pot", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6Zmxvd2VyX3BvdA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5mbG93ZXJfcG90AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1148, + "key": "minecraft:carrot", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQNAZmZnAA==", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6Y2Fycm90", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LmNhcnJvdAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1149, + "key": "minecraft:potato", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQE/GZmaAA==", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6cG90YXRv", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LnBvdGF0bwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1150, + "key": "minecraft:baked_potato", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQVAwAAAAA==", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmFrZWRfcG90YXRv", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmJha2VkX3BvdGF0bwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1151, + "key": "minecraft:poisonous_potato", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAQABEgBkAAEBAD8ZmZo=", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQI/mZmaAA==", + "minecraft:item_model": "BxptaW5lY3JhZnQ6cG9pc29ub3VzX3BvdGF0bw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnBvaXNvbm91c19wb3RhdG8A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1152, + "key": "minecraft:map", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw1taW5lY3JhZnQ6bWFw", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAEml0ZW0ubWluZWNyYWZ0Lm1hcAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1153, + "key": "minecraft:golden_carrot", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQZBZmZnAA==", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Z29sZGVuX2NhcnJvdA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmdvbGRlbl9jYXJyb3QA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1154, + "key": "minecraft:skeleton_skull", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HARHAAAAAQAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6c2tlbGV0b25fc2t1bGw=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5za2VsZXRvbl9za3VsbAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1155, + "key": "minecraft:wither_skeleton_skull", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HARHAAAAAQAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6d2l0aGVyX3NrZWxldG9uX3NrdWxs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC53aXRoZXJfc2tlbGV0b25fc2t1bGwA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQI=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1156, + "key": "minecraft:player_head", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HARHAAAAAQAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6cGxheWVyX2hlYWQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5wbGF5ZXJfaGVhZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1157, + "key": "minecraft:zombie_head", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HARHAAAAAQAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6em9tYmllX2hlYWQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC56b21iaWVfaGVhZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1158, + "key": "minecraft:creeper_head", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HARHAAAAAQAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6Y3JlZXBlcl9oZWFk", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5jcmVlcGVyX2hlYWQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1159, + "key": "minecraft:dragon_head", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HARHAAAAAQAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6ZHJhZ29uX2hlYWQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5kcmFnb25faGVhZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQM=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1160, + "key": "minecraft:piglin_head", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HARHAAAAAQAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6cGlnbGluX2hlYWQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5waWdsaW5faGVhZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1161, + "key": "minecraft:nether_star", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:damage_resistant": "GRZtaW5lY3JhZnQ6aXNfZXhwbG9zaW9u", + "minecraft:enchantment_glint_override": "EwE=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6bmV0aGVyX3N0YXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0Lm5ldGhlcl9zdGFyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQI=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1162, + "key": "minecraft:pumpkin_pie", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQhAmZmaAA==", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6cHVtcGtpbl9waWU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LnB1bXBraW5fcGllAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1163, + "key": "minecraft:firework_rocket", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:fireworks": "OAEA", + "minecraft:item_model": "BxltaW5lY3JhZnQ6ZmlyZXdvcmtfcm9ja2V0", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmZpcmV3b3JrX3JvY2tldAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1164, + "key": "minecraft:firework_star", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZmlyZXdvcmtfc3Rhcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmZpcmV3b3JrX3N0YXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1165, + "key": "minecraft:enchanted_book", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantment_glint_override": "EwE=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6ZW5jaGFudGVkX2Jvb2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmVuY2hhbnRlZF9ib29rAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=", + "minecraft:stored_enchantments": "IQAB" + } + }, + { + "id": 1166, + "key": "minecraft:nether_brick", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6bmV0aGVyX2JyaWNr", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0Lm5ldGhlcl9icmljawA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1167, + "key": "minecraft:resin_brick", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6cmVzaW5fYnJpY2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LnJlc2luX2JyaWNrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1168, + "key": "minecraft:prismarine_shard", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6cHJpc21hcmluZV9zaGFyZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnByaXNtYXJpbmVfc2hhcmQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1169, + "key": "minecraft:prismarine_crystals", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6cHJpc21hcmluZV9jcnlzdGFscw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LnByaXNtYXJpbmVfY3J5c3RhbHMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1170, + "key": "minecraft:rabbit", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQM/5mZnAA==", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6cmFiYml0", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LnJhYmJpdAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1171, + "key": "minecraft:cooked_rabbit", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQVAwAAAAA==", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y29va2VkX3JhYmJpdA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmNvb2tlZF9yYWJiaXQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1172, + "key": "minecraft:rabbit_stew", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQpBQAAAAA==", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6cmFiYml0X3N0ZXc=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LnJhYmJpdF9zdGV3AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:use_remainder": "FwG+BgAA" + } + }, + { + "id": 1173, + "key": "minecraft:rabbit_foot", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6cmFiYml0X2Zvb3Q=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LnJhYmJpdF9mb290AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1174, + "key": "minecraft:rabbit_hide", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6cmFiYml0X2hpZGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LnJhYmJpdF9oaWRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1175, + "key": "minecraft:armor_stand", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6YXJtb3Jfc3RhbmQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmFybW9yX3N0YW5kAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1176, + "key": "minecraft:iron_horse_armor", + "components": { + "minecraft:attribute_modifiers": "DQIAFG1pbmVjcmFmdDphcm1vci5ib2R5QBQAAAAAAAAACQEUbWluZWNyYWZ0OmFybW9yLmJvZHkAAAAAAAAAAAAJAQ==", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAblBQEObWluZWNyYWZ0Omlyb24AAQI/AQEA", + "minecraft:item_model": "BxptaW5lY3JhZnQ6aXJvbl9ob3JzZV9hcm1vcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0Lmlyb25faG9yc2VfYXJtb3IA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1177, + "key": "minecraft:golden_horse_armor", + "components": { + "minecraft:attribute_modifiers": "DQIAFG1pbmVjcmFmdDphcm1vci5ib2R5QBwAAAAAAAAACQEUbWluZWNyYWZ0OmFybW9yLmJvZHkAAAAAAAAAAAAJAQ==", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAblBQEObWluZWNyYWZ0OmdvbGQAAQI/AQEA", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6Z29sZGVuX2hvcnNlX2FybW9y", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LmdvbGRlbl9ob3JzZV9hcm1vcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1178, + "key": "minecraft:diamond_horse_armor", + "components": { + "minecraft:attribute_modifiers": "DQIAFG1pbmVjcmFmdDphcm1vci5ib2R5QCYAAAAAAAAACQEUbWluZWNyYWZ0OmFybW9yLmJvZHlAAAAAAAAAAAAJAQ==", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAblBQERbWluZWNyYWZ0OmRpYW1vbmQAAQI/AQEA", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZGlhbW9uZF9ob3JzZV9hcm1vcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LmRpYW1vbmRfaG9yc2VfYXJtb3IA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1179, + "key": "minecraft:leather_horse_armor", + "components": { + "minecraft:attribute_modifiers": "DQIAFG1pbmVjcmFmdDphcm1vci5ib2R5QAgAAAAAAAAACQEUbWluZWNyYWZ0OmFybW9yLmJvZHkAAAAAAAAAAAAJAQ==", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAblBQERbWluZWNyYWZ0OmxlYXRoZXIAAQI/AQEA", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6bGVhdGhlcl9ob3JzZV9hcm1vcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LmxlYXRoZXJfaG9yc2VfYXJtb3IA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1180, + "key": "minecraft:lead", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw5taW5lY3JhZnQ6bGVhZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAE2l0ZW0ubWluZWNyYWZ0LmxlYWQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1181, + "key": "minecraft:name_tag", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6bmFtZV90YWc=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0Lm5hbWVfdGFnAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1182, + "key": "minecraft:command_block_minecart", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6Y29tbWFuZF9ibG9ja19taW5lY2FydA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWl0ZW0ubWluZWNyYWZ0LmNvbW1hbmRfYmxvY2tfbWluZWNhcnQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQM=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1183, + "key": "minecraft:mutton", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQI/mZmaAA==", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6bXV0dG9u", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0Lm11dHRvbgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1184, + "key": "minecraft:cooked_mutton", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQZBGZmaAA==", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Y29va2VkX211dHRvbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmNvb2tlZF9tdXR0b24A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1185, + "key": "minecraft:white_banner", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:banner_patterns": "OwA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6d2hpdGVfYmFubmVy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC53aGl0ZV9iYW5uZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1186, + "key": "minecraft:orange_banner", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:banner_patterns": "OwA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6b3JhbmdlX2Jhbm5lcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5vcmFuZ2VfYmFubmVyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1187, + "key": "minecraft:magenta_banner", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:banner_patterns": "OwA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6bWFnZW50YV9iYW5uZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX2Jhbm5lcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1188, + "key": "minecraft:light_blue_banner", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:banner_patterns": "OwA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6bGlnaHRfYmx1ZV9iYW5uZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX2Jhbm5lcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1189, + "key": "minecraft:yellow_banner", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:banner_patterns": "OwA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6eWVsbG93X2Jhbm5lcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC55ZWxsb3dfYmFubmVyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1190, + "key": "minecraft:lime_banner", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:banner_patterns": "OwA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6bGltZV9iYW5uZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5saW1lX2Jhbm5lcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1191, + "key": "minecraft:pink_banner", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:banner_patterns": "OwA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6cGlua19iYW5uZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5waW5rX2Jhbm5lcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1192, + "key": "minecraft:gray_banner", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:banner_patterns": "OwA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Z3JheV9iYW5uZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5ncmF5X2Jhbm5lcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1193, + "key": "minecraft:light_gray_banner", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:banner_patterns": "OwA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6bGlnaHRfZ3JheV9iYW5uZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X2Jhbm5lcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1194, + "key": "minecraft:cyan_banner", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:banner_patterns": "OwA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y3lhbl9iYW5uZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5jeWFuX2Jhbm5lcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1195, + "key": "minecraft:purple_banner", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:banner_patterns": "OwA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6cHVycGxlX2Jhbm5lcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5wdXJwbGVfYmFubmVyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1196, + "key": "minecraft:blue_banner", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:banner_patterns": "OwA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Ymx1ZV9iYW5uZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5ibHVlX2Jhbm5lcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1197, + "key": "minecraft:brown_banner", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:banner_patterns": "OwA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6YnJvd25fYmFubmVy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5icm93bl9iYW5uZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1198, + "key": "minecraft:green_banner", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:banner_patterns": "OwA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z3JlZW5fYmFubmVy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5ncmVlbl9iYW5uZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1199, + "key": "minecraft:red_banner", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:banner_patterns": "OwA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6cmVkX2Jhbm5lcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5yZWRfYmFubmVyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1200, + "key": "minecraft:black_banner", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:banner_patterns": "OwA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmxhY2tfYmFubmVy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5ibGFja19iYW5uZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1201, + "key": "minecraft:end_crystal", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantment_glint_override": "EwE=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6ZW5kX2NyeXN0YWw=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmVuZF9jcnlzdGFsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1202, + "key": "minecraft:chorus_fruit", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAQNBgAAA", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQRAGZmaAQ==", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6Y2hvcnVzX2ZydWl0", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmNob3J1c19mcnVpdAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:use_cooldown": "GD+AAAAA" + } + }, + { + "id": 1203, + "key": "minecraft:popped_chorus_fruit", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6cG9wcGVkX2Nob3J1c19mcnVpdA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LnBvcHBlZF9jaG9ydXNfZnJ1aXQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1204, + "key": "minecraft:torchflower_seeds", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6dG9yY2hmbG93ZXJfc2VlZHM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0LnRvcmNoZmxvd2VyX3NlZWRzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1205, + "key": "minecraft:pitcher_pod", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6cGl0Y2hlcl9wb2Q=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LnBpdGNoZXJfcG9kAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1206, + "key": "minecraft:beetroot", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQE/mZmaAA==", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6YmVldHJvb3Q=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LmJlZXRyb290AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1207, + "key": "minecraft:beetroot_seeds", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6YmVldHJvb3Rfc2VlZHM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LmJlZXRyb290X3NlZWRzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1208, + "key": "minecraft:beetroot_soup", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQZA5mZnAA==", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6YmVldHJvb3Rfc291cA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmJlZXRyb290X3NvdXAA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:use_remainder": "FwG+BgAA" + } + }, + { + "id": 1209, + "key": "minecraft:dragon_breath", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6ZHJhZ29uX2JyZWF0aA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LmRyYWdvbl9icmVhdGgA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1210, + "key": "minecraft:splash_potion", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6c3BsYXNoX3BvdGlvbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnNwbGFzaF9wb3Rpb24A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:potion_contents": "KQAAAAA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1211, + "key": "minecraft:spectral_arrow", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6c3BlY3RyYWxfYXJyb3c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0LnNwZWN0cmFsX2Fycm93AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1212, + "key": "minecraft:tipped_arrow", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6dGlwcGVkX2Fycm93", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LnRpcHBlZF9hcnJvdwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:potion_contents": "KQAAAAA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1213, + "key": "minecraft:lingering_potion", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6bGluZ2VyaW5nX3BvdGlvbg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmxpbmdlcmluZ19wb3Rpb24A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:potion_contents": "KQAAAAA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1214, + "key": "minecraft:shield", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:banner_patterns": "OwA=", + "minecraft:damage": "AwA=", + "minecraft:enchantments": "CgAB", + "minecraft:equippable": "HAVHAAAAAQAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6c2hpZWxk", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWl0ZW0ubWluZWNyYWZ0LnNoaWVsZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AtAC", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:repairable": "HQAfbWluZWNyYWZ0Ondvb2Rlbl90b29sX21hdGVyaWFscw==" + } + }, + { + "id": 1215, + "key": "minecraft:totem_of_undying", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:death_protection": "IAICAAMJAYQHAAEBABUBZAABAQALAKAGAAEBAD+AAAA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6dG90ZW1fb2ZfdW5keWluZw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LnRvdGVtX29mX3VuZHlpbmcA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1216, + "key": "minecraft:shulker_shell", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6c2h1bGtlcl9zaGVsbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnNodWxrZXJfc2hlbGwA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1217, + "key": "minecraft:iron_nugget", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6aXJvbl9udWdnZXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0Lmlyb25fbnVnZ2V0AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1218, + "key": "minecraft:knowledge_book", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6a25vd2xlZGdlX2Jvb2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0Lmtub3dsZWRnZV9ib29rAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQM=", + "minecraft:recipes": "NQkAAAAAAA==", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1219, + "key": "minecraft:debug_stick", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:debug_stick_state": "LgoA", + "minecraft:enchantment_glint_override": "EwE=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6ZGVidWdfc3RpY2s=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGml0ZW0ubWluZWNyYWZ0LmRlYnVnX3N0aWNrAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQM=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1220, + "key": "minecraft:music_disc_13", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6bXVzaWNfZGlzY18xMw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfMTMA", + "minecraft:jukebox_playable": "NAAMbWluZWNyYWZ0OjEzAQ==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1221, + "key": "minecraft:music_disc_cat", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6bXVzaWNfZGlzY19jYXQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfY2F0AA==", + "minecraft:jukebox_playable": "NAANbWluZWNyYWZ0OmNhdAE=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1222, + "key": "minecraft:music_disc_blocks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6bXVzaWNfZGlzY19ibG9ja3M=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfYmxvY2tzAA==", + "minecraft:jukebox_playable": "NAAQbWluZWNyYWZ0OmJsb2NrcwE=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1223, + "key": "minecraft:music_disc_chirp", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6bXVzaWNfZGlzY19jaGlycA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfY2hpcnAA", + "minecraft:jukebox_playable": "NAAPbWluZWNyYWZ0OmNoaXJwAQ==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1224, + "key": "minecraft:music_disc_creator", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6bXVzaWNfZGlzY19jcmVhdG9y", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfY3JlYXRvcgA=", + "minecraft:jukebox_playable": "NAARbWluZWNyYWZ0OmNyZWF0b3IB", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQI=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1225, + "key": "minecraft:music_disc_creator_music_box", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByZtaW5lY3JhZnQ6bXVzaWNfZGlzY19jcmVhdG9yX211c2ljX2JveA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAK2l0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfY3JlYXRvcl9tdXNpY19ib3gA", + "minecraft:jukebox_playable": "NAAbbWluZWNyYWZ0OmNyZWF0b3JfbXVzaWNfYm94AQ==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1226, + "key": "minecraft:music_disc_far", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6bXVzaWNfZGlzY19mYXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfZmFyAA==", + "minecraft:jukebox_playable": "NAANbWluZWNyYWZ0OmZhcgE=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1227, + "key": "minecraft:music_disc_mall", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6bXVzaWNfZGlzY19tYWxs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfbWFsbAA=", + "minecraft:jukebox_playable": "NAAObWluZWNyYWZ0Om1hbGwB", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1228, + "key": "minecraft:music_disc_mellohi", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6bXVzaWNfZGlzY19tZWxsb2hp", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfbWVsbG9oaQA=", + "minecraft:jukebox_playable": "NAARbWluZWNyYWZ0Om1lbGxvaGkB", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1229, + "key": "minecraft:music_disc_stal", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6bXVzaWNfZGlzY19zdGFs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2Nfc3RhbAA=", + "minecraft:jukebox_playable": "NAAObWluZWNyYWZ0OnN0YWwB", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1230, + "key": "minecraft:music_disc_strad", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6bXVzaWNfZGlzY19zdHJhZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2Nfc3RyYWQA", + "minecraft:jukebox_playable": "NAAPbWluZWNyYWZ0OnN0cmFkAQ==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1231, + "key": "minecraft:music_disc_ward", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6bXVzaWNfZGlzY193YXJk", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2Nfd2FyZAA=", + "minecraft:jukebox_playable": "NAAObWluZWNyYWZ0OndhcmQB", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1232, + "key": "minecraft:music_disc_11", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6bXVzaWNfZGlzY18xMQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfMTEA", + "minecraft:jukebox_playable": "NAAMbWluZWNyYWZ0OjExAQ==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1233, + "key": "minecraft:music_disc_wait", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6bXVzaWNfZGlzY193YWl0", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2Nfd2FpdAA=", + "minecraft:jukebox_playable": "NAAObWluZWNyYWZ0OndhaXQB", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1234, + "key": "minecraft:music_disc_otherside", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6bXVzaWNfZGlzY19vdGhlcnNpZGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2Nfb3RoZXJzaWRlAA==", + "minecraft:jukebox_playable": "NAATbWluZWNyYWZ0Om90aGVyc2lkZQE=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQI=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1235, + "key": "minecraft:music_disc_relic", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6bXVzaWNfZGlzY19yZWxpYw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfcmVsaWMA", + "minecraft:jukebox_playable": "NAAPbWluZWNyYWZ0OnJlbGljAQ==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1236, + "key": "minecraft:music_disc_5", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6bXVzaWNfZGlzY181", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfNQA=", + "minecraft:jukebox_playable": "NAALbWluZWNyYWZ0OjUB", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1237, + "key": "minecraft:music_disc_pigstep", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6bXVzaWNfZGlzY19waWdzdGVw", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfcGlnc3RlcAA=", + "minecraft:jukebox_playable": "NAARbWluZWNyYWZ0OnBpZ3N0ZXAB", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQI=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1238, + "key": "minecraft:music_disc_precipice", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6bXVzaWNfZGlzY19wcmVjaXBpY2U=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0Lm11c2ljX2Rpc2NfcHJlY2lwaWNlAA==", + "minecraft:jukebox_playable": "NAATbWluZWNyYWZ0OnByZWNpcGljZQE=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1239, + "key": "minecraft:disc_fragment_5", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6ZGlzY19mcmFnbWVudF81", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LmRpc2NfZnJhZ21lbnRfNQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1240, + "key": "minecraft:trident", + "components": { + "minecraft:attribute_modifiers": "DQICHG1pbmVjcmFmdDpiYXNlX2F0dGFja19kYW1hZ2VAIAAAAAAAAAABBBttaW5lY3JhZnQ6YmFzZV9hdHRhY2tfc3BlZWTABzMzQAAAAAABAQ==", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "GwE=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6dHJpZGVudA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFml0ZW0ubWluZWNyYWZ0LnRyaWRlbnQA", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AvoB", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQI=", + "minecraft:repair_cost": "EQA=", + "minecraft:tool": "GgA/gAAAAg==" + } + }, + { + "id": 1241, + "key": "minecraft:nautilus_shell", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6bmF1dGlsdXNfc2hlbGw=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0Lm5hdXRpbHVzX3NoZWxsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1242, + "key": "minecraft:heart_of_the_sea", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6aGVhcnRfb2ZfdGhlX3NlYQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2l0ZW0ubWluZWNyYWZ0LmhlYXJ0X29mX3RoZV9zZWEA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1243, + "key": "minecraft:crossbow", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:charged_projectiles": "JwA=", + "minecraft:damage": "AwA=", + "minecraft:enchantable": "GwE=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6Y3Jvc3Nib3c=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2l0ZW0ubWluZWNyYWZ0LmNyb3NzYm93AA==", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AtED", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1244, + "key": "minecraft:suspicious_stew", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQZA5mZnAQ==", + "minecraft:item_model": "BxltaW5lY3JhZnQ6c3VzcGljaW91c19zdGV3", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHml0ZW0ubWluZWNyYWZ0LnN1c3BpY2lvdXNfc3RldwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:suspicious_stew_effects": "KgA=", + "minecraft:use_remainder": "FwG+BgAA" + } + }, + { + "id": 1245, + "key": "minecraft:loom", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw5taW5lY3JhZnQ6bG9vbQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC5sb29tAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1246, + "key": "minecraft:flower_banner_pattern", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6Zmxvd2VyX2Jhbm5lcl9wYXR0ZXJu", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGl0ZW0ubWluZWNyYWZ0LmZsb3dlcl9iYW5uZXJfcGF0dGVybgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1247, + "key": "minecraft:creeper_banner_pattern", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6Y3JlZXBlcl9iYW5uZXJfcGF0dGVybg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWl0ZW0ubWluZWNyYWZ0LmNyZWVwZXJfYmFubmVyX3BhdHRlcm4A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1248, + "key": "minecraft:skull_banner_pattern", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6c2t1bGxfYmFubmVyX3BhdHRlcm4=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LnNrdWxsX2Jhbm5lcl9wYXR0ZXJuAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQI=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1249, + "key": "minecraft:mojang_banner_pattern", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6bW9qYW5nX2Jhbm5lcl9wYXR0ZXJu", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGl0ZW0ubWluZWNyYWZ0Lm1vamFuZ19iYW5uZXJfcGF0dGVybgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQI=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1250, + "key": "minecraft:globe_banner_pattern", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6Z2xvYmVfYmFubmVyX3BhdHRlcm4=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0Lmdsb2JlX2Jhbm5lcl9wYXR0ZXJuAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1251, + "key": "minecraft:piglin_banner_pattern", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6cGlnbGluX2Jhbm5lcl9wYXR0ZXJu", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGl0ZW0ubWluZWNyYWZ0LnBpZ2xpbl9iYW5uZXJfcGF0dGVybgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1252, + "key": "minecraft:flow_banner_pattern", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6Zmxvd19iYW5uZXJfcGF0dGVybg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LmZsb3dfYmFubmVyX3BhdHRlcm4A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQI=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1253, + "key": "minecraft:guster_banner_pattern", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6Z3VzdGVyX2Jhbm5lcl9wYXR0ZXJu", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGl0ZW0ubWluZWNyYWZ0Lmd1c3Rlcl9iYW5uZXJfcGF0dGVybgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQI=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1254, + "key": "minecraft:field_masoned_banner_pattern", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByZtaW5lY3JhZnQ6ZmllbGRfbWFzb25lZF9iYW5uZXJfcGF0dGVybg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAK2l0ZW0ubWluZWNyYWZ0LmZpZWxkX21hc29uZWRfYmFubmVyX3BhdHRlcm4A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1255, + "key": "minecraft:bordure_indented_banner_pattern", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByltaW5lY3JhZnQ6Ym9yZHVyZV9pbmRlbnRlZF9iYW5uZXJfcGF0dGVybg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALml0ZW0ubWluZWNyYWZ0LmJvcmR1cmVfaW5kZW50ZWRfYmFubmVyX3BhdHRlcm4A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1256, + "key": "minecraft:goat_horn", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6Z29hdF9ob3Ju", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LmdvYXRfaG9ybgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1257, + "key": "minecraft:composter", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6Y29tcG9zdGVy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5jb21wb3N0ZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1258, + "key": "minecraft:barrel", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6YmFycmVs", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5iYXJyZWwA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1259, + "key": "minecraft:smoker", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6c21va2Vy", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5zbW9rZXIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1260, + "key": "minecraft:blast_furnace", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6Ymxhc3RfZnVybmFjZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5ibGFzdF9mdXJuYWNlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1261, + "key": "minecraft:cartography_table", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6Y2FydG9ncmFwaHlfdGFibGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5jYXJ0b2dyYXBoeV90YWJsZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1262, + "key": "minecraft:fletching_table", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6ZmxldGNoaW5nX3RhYmxl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5mbGV0Y2hpbmdfdGFibGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1263, + "key": "minecraft:grindstone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6Z3JpbmRzdG9uZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5ncmluZHN0b25lAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1264, + "key": "minecraft:smithing_table", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6c21pdGhpbmdfdGFibGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5zbWl0aGluZ190YWJsZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1265, + "key": "minecraft:stonecutter", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6c3RvbmVjdXR0ZXI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zdG9uZWN1dHRlcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1266, + "key": "minecraft:bell", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw5taW5lY3JhZnQ6YmVsbA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGJsb2NrLm1pbmVjcmFmdC5iZWxsAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1267, + "key": "minecraft:lantern", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6bGFudGVybg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5sYW50ZXJuAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1268, + "key": "minecraft:soul_lantern", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6c291bF9sYW50ZXJu", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5zb3VsX2xhbnRlcm4A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1269, + "key": "minecraft:sweet_berries", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQI+zMzNAA==", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6c3dlZXRfYmVycmllcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGl0ZW0ubWluZWNyYWZ0LnN3ZWV0X2JlcnJpZXMA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1270, + "key": "minecraft:glow_berries", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0B2gQBAA==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQI+zMzNAA==", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z2xvd19iZXJyaWVz", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0Lmdsb3dfYmVycmllcwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1271, + "key": "minecraft:campfire", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6Y2FtcGZpcmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5jYW1wZmlyZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1272, + "key": "minecraft:soul_campfire", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:container": "PgA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6c291bF9jYW1wZmlyZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5zb3VsX2NhbXBmaXJlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1273, + "key": "minecraft:shroomlight", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6c2hyb29tbGlnaHQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5zaHJvb21saWdodAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1274, + "key": "minecraft:honeycomb", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6aG9uZXljb21i", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LmhvbmV5Y29tYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1275, + "key": "minecraft:bee_nest", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bees": "QAA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxJtaW5lY3JhZnQ6YmVlX25lc3Q=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGJsb2NrLm1pbmVjcmFmdC5iZWVfbmVzdAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1276, + "key": "minecraft:beehive", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:bees": "QAA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxFtaW5lY3JhZnQ6YmVlaGl2ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAF2Jsb2NrLm1pbmVjcmFmdC5iZWVoaXZlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1277, + "key": "minecraft:honey_bottle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "FkAAAAAC2gUAAQECEg==", + "minecraft:enchantments": "CgAB", + "minecraft:food": "FQY/mZmaAQ==", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6aG9uZXlfYm90dGxl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2l0ZW0ubWluZWNyYWZ0LmhvbmV5X2JvdHRsZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "ARA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=", + "minecraft:use_remainder": "FwGXCAAA" + } + }, + { + "id": 1278, + "key": "minecraft:honeycomb_block", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6aG9uZXljb21iX2Jsb2Nr", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5ob25leWNvbWJfYmxvY2sA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1279, + "key": "minecraft:lodestone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6bG9kZXN0b25l", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5sb2Rlc3RvbmUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1280, + "key": "minecraft:crying_obsidian", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6Y3J5aW5nX29ic2lkaWFu", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5jcnlpbmdfb2JzaWRpYW4A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1281, + "key": "minecraft:blackstone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6YmxhY2tzdG9uZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5ibGFja3N0b25lAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1282, + "key": "minecraft:blackstone_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6YmxhY2tzdG9uZV9zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5ibGFja3N0b25lX3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1283, + "key": "minecraft:blackstone_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6YmxhY2tzdG9uZV9zdGFpcnM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5ibGFja3N0b25lX3N0YWlycwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1284, + "key": "minecraft:gilded_blackstone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6Z2lsZGVkX2JsYWNrc3RvbmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5naWxkZWRfYmxhY2tzdG9uZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1285, + "key": "minecraft:polished_blackstone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6cG9saXNoZWRfYmxhY2tzdG9uZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ibGFja3N0b25lAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1286, + "key": "minecraft:polished_blackstone_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6cG9saXNoZWRfYmxhY2tzdG9uZV9zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKGJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ibGFja3N0b25lX3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1287, + "key": "minecraft:polished_blackstone_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByRtaW5lY3JhZnQ6cG9saXNoZWRfYmxhY2tzdG9uZV9zdGFpcnM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKmJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ibGFja3N0b25lX3N0YWlycwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1288, + "key": "minecraft:chiseled_polished_blackstone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByZtaW5lY3JhZnQ6Y2hpc2VsZWRfcG9saXNoZWRfYmxhY2tzdG9uZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALGJsb2NrLm1pbmVjcmFmdC5jaGlzZWxlZF9wb2xpc2hlZF9ibGFja3N0b25lAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1289, + "key": "minecraft:polished_blackstone_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByRtaW5lY3JhZnQ6cG9saXNoZWRfYmxhY2tzdG9uZV9icmlja3M=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKmJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ibGFja3N0b25lX2JyaWNrcwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1290, + "key": "minecraft:polished_blackstone_brick_slab", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByhtaW5lY3JhZnQ6cG9saXNoZWRfYmxhY2tzdG9uZV9icmlja19zbGFi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALmJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ibGFja3N0b25lX2JyaWNrX3NsYWIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1291, + "key": "minecraft:polished_blackstone_brick_stairs", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByptaW5lY3JhZnQ6cG9saXNoZWRfYmxhY2tzdG9uZV9icmlja19zdGFpcnM=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMGJsb2NrLm1pbmVjcmFmdC5wb2xpc2hlZF9ibGFja3N0b25lX2JyaWNrX3N0YWlycwA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1292, + "key": "minecraft:cracked_polished_blackstone_bricks", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByxtaW5lY3JhZnQ6Y3JhY2tlZF9wb2xpc2hlZF9ibGFja3N0b25lX2JyaWNrcw==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMmJsb2NrLm1pbmVjcmFmdC5jcmFja2VkX3BvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tzAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1293, + "key": "minecraft:respawn_anchor", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6cmVzcGF3bl9hbmNob3I=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5yZXNwYXduX2FuY2hvcgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1294, + "key": "minecraft:candle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxBtaW5lY3JhZnQ6Y2FuZGxl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFmJsb2NrLm1pbmVjcmFmdC5jYW5kbGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1295, + "key": "minecraft:white_candle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6d2hpdGVfY2FuZGxl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC53aGl0ZV9jYW5kbGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1296, + "key": "minecraft:orange_candle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6b3JhbmdlX2NhbmRsZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5vcmFuZ2VfY2FuZGxlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1297, + "key": "minecraft:magenta_candle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6bWFnZW50YV9jYW5kbGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHmJsb2NrLm1pbmVjcmFmdC5tYWdlbnRhX2NhbmRsZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1298, + "key": "minecraft:light_blue_candle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6bGlnaHRfYmx1ZV9jYW5kbGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5saWdodF9ibHVlX2NhbmRsZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1299, + "key": "minecraft:yellow_candle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6eWVsbG93X2NhbmRsZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC55ZWxsb3dfY2FuZGxlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1300, + "key": "minecraft:lime_candle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6bGltZV9jYW5kbGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5saW1lX2NhbmRsZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1301, + "key": "minecraft:pink_candle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6cGlua19jYW5kbGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5waW5rX2NhbmRsZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1302, + "key": "minecraft:gray_candle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Z3JheV9jYW5kbGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5ncmF5X2NhbmRsZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1303, + "key": "minecraft:light_gray_candle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6bGlnaHRfZ3JheV9jYW5kbGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5saWdodF9ncmF5X2NhbmRsZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1304, + "key": "minecraft:cyan_candle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y3lhbl9jYW5kbGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5jeWFuX2NhbmRsZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1305, + "key": "minecraft:purple_candle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6cHVycGxlX2NhbmRsZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC5wdXJwbGVfY2FuZGxlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1306, + "key": "minecraft:blue_candle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Ymx1ZV9jYW5kbGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5ibHVlX2NhbmRsZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1307, + "key": "minecraft:brown_candle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6YnJvd25fY2FuZGxl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5icm93bl9jYW5kbGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1308, + "key": "minecraft:green_candle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6Z3JlZW5fY2FuZGxl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5ncmVlbl9jYW5kbGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1309, + "key": "minecraft:red_candle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6cmVkX2NhbmRsZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGmJsb2NrLm1pbmVjcmFmdC5yZWRfY2FuZGxlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1310, + "key": "minecraft:black_candle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6YmxhY2tfY2FuZGxl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5ibGFja19jYW5kbGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1311, + "key": "minecraft:small_amethyst_bud", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6c21hbGxfYW1ldGh5c3RfYnVk", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5zbWFsbF9hbWV0aHlzdF9idWQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1312, + "key": "minecraft:medium_amethyst_bud", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6bWVkaXVtX2FtZXRoeXN0X2J1ZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5tZWRpdW1fYW1ldGh5c3RfYnVkAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1313, + "key": "minecraft:large_amethyst_bud", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6bGFyZ2VfYW1ldGh5c3RfYnVk", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC5sYXJnZV9hbWV0aHlzdF9idWQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1314, + "key": "minecraft:amethyst_cluster", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxptaW5lY3JhZnQ6YW1ldGh5c3RfY2x1c3Rlcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGJsb2NrLm1pbmVjcmFmdC5hbWV0aHlzdF9jbHVzdGVyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1315, + "key": "minecraft:pointed_dripstone", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6cG9pbnRlZF9kcmlwc3RvbmU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC5wb2ludGVkX2RyaXBzdG9uZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1316, + "key": "minecraft:ochre_froglight", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxltaW5lY3JhZnQ6b2NocmVfZnJvZ2xpZ2h0", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAH2Jsb2NrLm1pbmVjcmFmdC5vY2hyZV9mcm9nbGlnaHQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1317, + "key": "minecraft:verdant_froglight", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6dmVyZGFudF9mcm9nbGlnaHQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC52ZXJkYW50X2Zyb2dsaWdodAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1318, + "key": "minecraft:pearlescent_froglight", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6cGVhcmxlc2NlbnRfZnJvZ2xpZ2h0", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5wZWFybGVzY2VudF9mcm9nbGlnaHQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1319, + "key": "minecraft:frogspawn", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6ZnJvZ3NwYXdu", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWJsb2NrLm1pbmVjcmFmdC5mcm9nc3Bhd24A", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1320, + "key": "minecraft:echo_shard", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxRtaW5lY3JhZnQ6ZWNob19zaGFyZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGWl0ZW0ubWluZWNyYWZ0LmVjaG9fc2hhcmQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1321, + "key": "minecraft:brush", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:damage": "AwA=", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6YnJ1c2g=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFGl0ZW0ubWluZWNyYWZ0LmJydXNoAA==", + "minecraft:lore": "CAA=", + "minecraft:max_damage": "AkA=", + "minecraft:max_stack_size": "AQE=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1322, + "key": "minecraft:netherite_upgrade_smithing_template", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "By1taW5lY3JhZnQ6bmV0aGVyaXRlX3VwZ3JhZGVfc21pdGhpbmdfdGVtcGxhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMml0ZW0ubWluZWNyYWZ0Lm5ldGhlcml0ZV91cGdyYWRlX3NtaXRoaW5nX3RlbXBsYXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1323, + "key": "minecraft:sentry_armor_trim_smithing_template", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "By1taW5lY3JhZnQ6c2VudHJ5X2FybW9yX3RyaW1fc21pdGhpbmdfdGVtcGxhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMml0ZW0ubWluZWNyYWZ0LnNlbnRyeV9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1324, + "key": "minecraft:dune_armor_trim_smithing_template", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByttaW5lY3JhZnQ6ZHVuZV9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMGl0ZW0ubWluZWNyYWZ0LmR1bmVfYXJtb3JfdHJpbV9zbWl0aGluZ190ZW1wbGF0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1325, + "key": "minecraft:coast_armor_trim_smithing_template", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByxtaW5lY3JhZnQ6Y29hc3RfYXJtb3JfdHJpbV9zbWl0aGluZ190ZW1wbGF0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMWl0ZW0ubWluZWNyYWZ0LmNvYXN0X2FybW9yX3RyaW1fc21pdGhpbmdfdGVtcGxhdGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1326, + "key": "minecraft:wild_armor_trim_smithing_template", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByttaW5lY3JhZnQ6d2lsZF9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMGl0ZW0ubWluZWNyYWZ0LndpbGRfYXJtb3JfdHJpbV9zbWl0aGluZ190ZW1wbGF0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1327, + "key": "minecraft:ward_armor_trim_smithing_template", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByttaW5lY3JhZnQ6d2FyZF9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMGl0ZW0ubWluZWNyYWZ0LndhcmRfYXJtb3JfdHJpbV9zbWl0aGluZ190ZW1wbGF0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQI=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1328, + "key": "minecraft:eye_armor_trim_smithing_template", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByptaW5lY3JhZnQ6ZXllX2FybW9yX3RyaW1fc21pdGhpbmdfdGVtcGxhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAL2l0ZW0ubWluZWNyYWZ0LmV5ZV9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQI=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1329, + "key": "minecraft:vex_armor_trim_smithing_template", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByptaW5lY3JhZnQ6dmV4X2FybW9yX3RyaW1fc21pdGhpbmdfdGVtcGxhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAL2l0ZW0ubWluZWNyYWZ0LnZleF9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQI=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1330, + "key": "minecraft:tide_armor_trim_smithing_template", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByttaW5lY3JhZnQ6dGlkZV9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMGl0ZW0ubWluZWNyYWZ0LnRpZGVfYXJtb3JfdHJpbV9zbWl0aGluZ190ZW1wbGF0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1331, + "key": "minecraft:snout_armor_trim_smithing_template", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByxtaW5lY3JhZnQ6c25vdXRfYXJtb3JfdHJpbV9zbWl0aGluZ190ZW1wbGF0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMWl0ZW0ubWluZWNyYWZ0LnNub3V0X2FybW9yX3RyaW1fc21pdGhpbmdfdGVtcGxhdGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1332, + "key": "minecraft:rib_armor_trim_smithing_template", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByptaW5lY3JhZnQ6cmliX2FybW9yX3RyaW1fc21pdGhpbmdfdGVtcGxhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAL2l0ZW0ubWluZWNyYWZ0LnJpYl9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1333, + "key": "minecraft:spire_armor_trim_smithing_template", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByxtaW5lY3JhZnQ6c3BpcmVfYXJtb3JfdHJpbV9zbWl0aGluZ190ZW1wbGF0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMWl0ZW0ubWluZWNyYWZ0LnNwaXJlX2FybW9yX3RyaW1fc21pdGhpbmdfdGVtcGxhdGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQI=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1334, + "key": "minecraft:wayfinder_armor_trim_smithing_template", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BzBtaW5lY3JhZnQ6d2F5ZmluZGVyX2FybW9yX3RyaW1fc21pdGhpbmdfdGVtcGxhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUANWl0ZW0ubWluZWNyYWZ0LndheWZpbmRlcl9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1335, + "key": "minecraft:shaper_armor_trim_smithing_template", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "By1taW5lY3JhZnQ6c2hhcGVyX2FybW9yX3RyaW1fc21pdGhpbmdfdGVtcGxhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMml0ZW0ubWluZWNyYWZ0LnNoYXBlcl9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1336, + "key": "minecraft:silence_armor_trim_smithing_template", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "By5taW5lY3JhZnQ6c2lsZW5jZV9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAM2l0ZW0ubWluZWNyYWZ0LnNpbGVuY2VfYXJtb3JfdHJpbV9zbWl0aGluZ190ZW1wbGF0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQM=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1337, + "key": "minecraft:raiser_armor_trim_smithing_template", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "By1taW5lY3JhZnQ6cmFpc2VyX2FybW9yX3RyaW1fc21pdGhpbmdfdGVtcGxhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMml0ZW0ubWluZWNyYWZ0LnJhaXNlcl9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1338, + "key": "minecraft:host_armor_trim_smithing_template", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByttaW5lY3JhZnQ6aG9zdF9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMGl0ZW0ubWluZWNyYWZ0Lmhvc3RfYXJtb3JfdHJpbV9zbWl0aGluZ190ZW1wbGF0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1339, + "key": "minecraft:flow_armor_trim_smithing_template", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByttaW5lY3JhZnQ6Zmxvd19hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMGl0ZW0ubWluZWNyYWZ0LmZsb3dfYXJtb3JfdHJpbV9zbWl0aGluZ190ZW1wbGF0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1340, + "key": "minecraft:bolt_armor_trim_smithing_template", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByttaW5lY3JhZnQ6Ym9sdF9hcm1vcl90cmltX3NtaXRoaW5nX3RlbXBsYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAMGl0ZW0ubWluZWNyYWZ0LmJvbHRfYXJtb3JfdHJpbV9zbWl0aGluZ190ZW1wbGF0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1341, + "key": "minecraft:angler_pottery_sherd", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6YW5nbGVyX3BvdHRlcnlfc2hlcmQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LmFuZ2xlcl9wb3R0ZXJ5X3NoZXJkAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1342, + "key": "minecraft:archer_pottery_sherd", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6YXJjaGVyX3BvdHRlcnlfc2hlcmQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LmFyY2hlcl9wb3R0ZXJ5X3NoZXJkAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1343, + "key": "minecraft:arms_up_pottery_sherd", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6YXJtc191cF9wb3R0ZXJ5X3NoZXJk", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGl0ZW0ubWluZWNyYWZ0LmFybXNfdXBfcG90dGVyeV9zaGVyZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1344, + "key": "minecraft:blade_pottery_sherd", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6YmxhZGVfcG90dGVyeV9zaGVyZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LmJsYWRlX3BvdHRlcnlfc2hlcmQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1345, + "key": "minecraft:brewer_pottery_sherd", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6YnJld2VyX3BvdHRlcnlfc2hlcmQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LmJyZXdlcl9wb3R0ZXJ5X3NoZXJkAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1346, + "key": "minecraft:burn_pottery_sherd", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6YnVybl9wb3R0ZXJ5X3NoZXJk", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LmJ1cm5fcG90dGVyeV9zaGVyZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1347, + "key": "minecraft:danger_pottery_sherd", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6ZGFuZ2VyX3BvdHRlcnlfc2hlcmQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LmRhbmdlcl9wb3R0ZXJ5X3NoZXJkAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1348, + "key": "minecraft:explorer_pottery_sherd", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6ZXhwbG9yZXJfcG90dGVyeV9zaGVyZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWl0ZW0ubWluZWNyYWZ0LmV4cGxvcmVyX3BvdHRlcnlfc2hlcmQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1349, + "key": "minecraft:flow_pottery_sherd", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6Zmxvd19wb3R0ZXJ5X3NoZXJk", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0LmZsb3dfcG90dGVyeV9zaGVyZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1350, + "key": "minecraft:friend_pottery_sherd", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6ZnJpZW5kX3BvdHRlcnlfc2hlcmQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LmZyaWVuZF9wb3R0ZXJ5X3NoZXJkAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1351, + "key": "minecraft:guster_pottery_sherd", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6Z3VzdGVyX3BvdHRlcnlfc2hlcmQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0Lmd1c3Rlcl9wb3R0ZXJ5X3NoZXJkAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1352, + "key": "minecraft:heart_pottery_sherd", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6aGVhcnRfcG90dGVyeV9zaGVyZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LmhlYXJ0X3BvdHRlcnlfc2hlcmQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1353, + "key": "minecraft:heartbreak_pottery_sherd", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByJtaW5lY3JhZnQ6aGVhcnRicmVha19wb3R0ZXJ5X3NoZXJk", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJ2l0ZW0ubWluZWNyYWZ0LmhlYXJ0YnJlYWtfcG90dGVyeV9zaGVyZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1354, + "key": "minecraft:howl_pottery_sherd", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6aG93bF9wb3R0ZXJ5X3NoZXJk", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWl0ZW0ubWluZWNyYWZ0Lmhvd2xfcG90dGVyeV9zaGVyZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1355, + "key": "minecraft:miner_pottery_sherd", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6bWluZXJfcG90dGVyeV9zaGVyZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0Lm1pbmVyX3BvdHRlcnlfc2hlcmQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1356, + "key": "minecraft:mourner_pottery_sherd", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6bW91cm5lcl9wb3R0ZXJ5X3NoZXJk", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGl0ZW0ubWluZWNyYWZ0Lm1vdXJuZXJfcG90dGVyeV9zaGVyZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1357, + "key": "minecraft:plenty_pottery_sherd", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6cGxlbnR5X3BvdHRlcnlfc2hlcmQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LnBsZW50eV9wb3R0ZXJ5X3NoZXJkAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1358, + "key": "minecraft:prize_pottery_sherd", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6cHJpemVfcG90dGVyeV9zaGVyZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LnByaXplX3BvdHRlcnlfc2hlcmQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1359, + "key": "minecraft:scrape_pottery_sherd", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6c2NyYXBlX3BvdHRlcnlfc2hlcmQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2l0ZW0ubWluZWNyYWZ0LnNjcmFwZV9wb3R0ZXJ5X3NoZXJkAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1360, + "key": "minecraft:sheaf_pottery_sherd", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6c2hlYWZfcG90dGVyeV9zaGVyZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LnNoZWFmX3BvdHRlcnlfc2hlcmQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1361, + "key": "minecraft:shelter_pottery_sherd", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6c2hlbHRlcl9wb3R0ZXJ5X3NoZXJk", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGl0ZW0ubWluZWNyYWZ0LnNoZWx0ZXJfcG90dGVyeV9zaGVyZAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1362, + "key": "minecraft:skull_pottery_sherd", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6c2t1bGxfcG90dGVyeV9zaGVyZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LnNrdWxsX3BvdHRlcnlfc2hlcmQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1363, + "key": "minecraft:snort_pottery_sherd", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6c25vcnRfcG90dGVyeV9zaGVyZA==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIml0ZW0ubWluZWNyYWZ0LnNub3J0X3BvdHRlcnlfc2hlcmQA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1364, + "key": "minecraft:copper_grate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxZtaW5lY3JhZnQ6Y29wcGVyX2dyYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHGJsb2NrLm1pbmVjcmFmdC5jb3BwZXJfZ3JhdGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1365, + "key": "minecraft:exposed_copper_grate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6ZXhwb3NlZF9jb3BwZXJfZ3JhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5leHBvc2VkX2NvcHBlcl9ncmF0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1366, + "key": "minecraft:weathered_copper_grate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByBtaW5lY3JhZnQ6d2VhdGhlcmVkX2NvcHBlcl9ncmF0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJmJsb2NrLm1pbmVjcmFmdC53ZWF0aGVyZWRfY29wcGVyX2dyYXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1367, + "key": "minecraft:oxidized_copper_grate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6b3hpZGl6ZWRfY29wcGVyX2dyYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC5veGlkaXplZF9jb3BwZXJfZ3JhdGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1368, + "key": "minecraft:waxed_copper_grate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxxtaW5lY3JhZnQ6d2F4ZWRfY29wcGVyX2dyYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAImJsb2NrLm1pbmVjcmFmdC53YXhlZF9jb3BwZXJfZ3JhdGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1369, + "key": "minecraft:waxed_exposed_copper_grate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByRtaW5lY3JhZnQ6d2F4ZWRfZXhwb3NlZF9jb3BwZXJfZ3JhdGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKmJsb2NrLm1pbmVjcmFmdC53YXhlZF9leHBvc2VkX2NvcHBlcl9ncmF0ZQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1370, + "key": "minecraft:waxed_weathered_copper_grate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByZtaW5lY3JhZnQ6d2F4ZWRfd2VhdGhlcmVkX2NvcHBlcl9ncmF0ZQ==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUALGJsb2NrLm1pbmVjcmFmdC53YXhlZF93ZWF0aGVyZWRfY29wcGVyX2dyYXRlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1371, + "key": "minecraft:waxed_oxidized_copper_grate", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByVtaW5lY3JhZnQ6d2F4ZWRfb3hpZGl6ZWRfY29wcGVyX2dyYXRl", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAK2Jsb2NrLm1pbmVjcmFmdC53YXhlZF9veGlkaXplZF9jb3BwZXJfZ3JhdGUA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1372, + "key": "minecraft:copper_bulb", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxVtaW5lY3JhZnQ6Y29wcGVyX2J1bGI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAG2Jsb2NrLm1pbmVjcmFmdC5jb3BwZXJfYnVsYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1373, + "key": "minecraft:exposed_copper_bulb", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx1taW5lY3JhZnQ6ZXhwb3NlZF9jb3BwZXJfYnVsYg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAI2Jsb2NrLm1pbmVjcmFmdC5leHBvc2VkX2NvcHBlcl9idWxiAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1374, + "key": "minecraft:weathered_copper_bulb", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx9taW5lY3JhZnQ6d2VhdGhlcmVkX2NvcHBlcl9idWxi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJWJsb2NrLm1pbmVjcmFmdC53ZWF0aGVyZWRfY29wcGVyX2J1bGIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1375, + "key": "minecraft:oxidized_copper_bulb", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bx5taW5lY3JhZnQ6b3hpZGl6ZWRfY29wcGVyX2J1bGI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAJGJsb2NrLm1pbmVjcmFmdC5veGlkaXplZF9jb3BwZXJfYnVsYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1376, + "key": "minecraft:waxed_copper_bulb", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6d2F4ZWRfY29wcGVyX2J1bGI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIWJsb2NrLm1pbmVjcmFmdC53YXhlZF9jb3BwZXJfYnVsYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1377, + "key": "minecraft:waxed_exposed_copper_bulb", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByNtaW5lY3JhZnQ6d2F4ZWRfZXhwb3NlZF9jb3BwZXJfYnVsYg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKWJsb2NrLm1pbmVjcmFmdC53YXhlZF9leHBvc2VkX2NvcHBlcl9idWxiAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1378, + "key": "minecraft:waxed_weathered_copper_bulb", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByVtaW5lY3JhZnQ6d2F4ZWRfd2VhdGhlcmVkX2NvcHBlcl9idWxi", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAK2Jsb2NrLm1pbmVjcmFmdC53YXhlZF93ZWF0aGVyZWRfY29wcGVyX2J1bGIA", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1379, + "key": "minecraft:waxed_oxidized_copper_bulb", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "ByRtaW5lY3JhZnQ6d2F4ZWRfb3hpZGl6ZWRfY29wcGVyX2J1bGI=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAKmJsb2NrLm1pbmVjcmFmdC53YXhlZF9veGlkaXplZF9jb3BwZXJfYnVsYgA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1380, + "key": "minecraft:trial_spawner", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxdtaW5lY3JhZnQ6dHJpYWxfc3Bhd25lcg==", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWJsb2NrLm1pbmVjcmFmdC50cmlhbF9zcGF3bmVyAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1381, + "key": "minecraft:trial_key", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxNtaW5lY3JhZnQ6dHJpYWxfa2V5", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAGGl0ZW0ubWluZWNyYWZ0LnRyaWFsX2tleQA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1382, + "key": "minecraft:ominous_trial_key", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxttaW5lY3JhZnQ6b21pbm91c190cmlhbF9rZXk=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAIGl0ZW0ubWluZWNyYWZ0Lm9taW5vdXNfdHJpYWxfa2V5AA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1383, + "key": "minecraft:vault", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "Bw9taW5lY3JhZnQ6dmF1bHQ=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAFWJsb2NrLm1pbmVjcmFmdC52YXVsdAA=", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:rarity": "CQA=", + "minecraft:repair_cost": "EQA=" + } + }, + { + "id": 1384, + "key": "minecraft:ominous_bottle", + "components": { + "minecraft:attribute_modifiers": "DQAB", + "minecraft:consumable": "Fj/MzM0C2QQAAQSMCA==", + "minecraft:enchantments": "CgAB", + "minecraft:item_model": "BxhtaW5lY3JhZnQ6b21pbm91c19ib3R0bGU=", + "minecraft:item_name": "BgoIAAl0cmFuc2xhdGUAHWl0ZW0ubWluZWNyYWZ0Lm9taW5vdXNfYm90dGxlAA==", + "minecraft:lore": "CAA=", + "minecraft:max_stack_size": "AUA=", + "minecraft:ominous_bottle_amplifier": "MwA=", + "minecraft:rarity": "CQE=", + "minecraft:repair_cost": "EQA=" + } + } +] diff --git a/core/src/main/resources/mappings b/core/src/main/resources/mappings index e1eafe2c5..452312f88 160000 --- a/core/src/main/resources/mappings +++ b/core/src/main/resources/mappings @@ -1 +1 @@ -Subproject commit e1eafe2c5304012d23acba80659459f7868fe2b1 +Subproject commit 452312f88317cce019b8f336f485ffa7b2c19557 From 2019e53bad109d79077b544cd9d9ec15e8f69472 Mon Sep 17 00:00:00 2001 From: Alex <40795980+AlexProgrammerDE@users.noreply.github.com> Date: Thu, 5 Dec 2024 11:35:03 +0100 Subject: [PATCH 098/165] Feature: Accurate Java packet ticking (#5121) * Use proposed mcpl ticking PR * Remove more not needed overrides * Bump mcpl * Fix missing import * Bump mcpl * Switch to official version --------- Co-authored-by: chris <github@onechris.mozmail.com> --- .../platform/spigot/GeyserSpigotInjector.java | 2 +- .../java/org/geysermc/geyser/GeyserImpl.java | 3 -- .../geyser/network/UpstreamPacketHandler.java | 2 +- .../geyser/network/netty/LocalSession.java | 7 +-- .../registry/PacketTranslatorRegistry.java | 6 +-- .../geyser/session/GeyserSession.java | 49 +++++++++---------- .../entity/SkullBlockEntityTranslator.java | 7 +-- .../translator/protocol/PacketTranslator.java | 1 + .../entity/player/BedrockEmoteTranslator.java | 7 +-- .../java/JavaCustomPayloadTranslator.java | 6 --- .../java/JavaDisconnectTranslator.java | 5 -- .../java/JavaKeepAliveTranslator.java | 5 -- .../java/JavaLoginDisconnectTranslator.java | 5 -- .../java/JavaSelectKnownPacksTranslator.java | 6 --- .../JavaStartConfigurationTranslator.java | 6 --- .../player/JavaCookieRequestTranslator.java | 4 +- gradle/libs.versions.toml | 2 +- 17 files changed, 41 insertions(+), 82 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 a3402a752..9f7e21579 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 @@ -178,7 +178,7 @@ public class GeyserSpigotInjector extends GeyserInjector { MinecraftProtocol protocol = new MinecraftProtocol(); LocalSession session = new LocalSession(bootstrap.getGeyserConfig().getRemote().address(), bootstrap.getGeyserConfig().getRemote().port(), this.serverSocketAddress, - InetAddress.getLoopbackAddress().getHostAddress(), protocol, protocol.createHelper()); + InetAddress.getLoopbackAddress().getHostAddress(), protocol, Runnable::run); session.connect(); } diff --git a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java index 0a8222f8d..065c1f0cc 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java @@ -414,9 +414,6 @@ public class GeyserImpl implements GeyserApi, EventRegistrar { } } - // Ensure that PacketLib does not create an event loop for handling packets; we'll do that ourselves - TcpSession.USE_EVENT_LOOP_FOR_PACKETS = false; - pendingMicrosoftAuthentication = new PendingMicrosoftAuthentication(config.getPendingAuthenticationTimeout()); this.newsHandler = new NewsHandler(BRANCH, this.buildNumber()); 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 0cf161c6a..dfebb93dc 100644 --- a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java @@ -96,7 +96,7 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { } private PacketSignal translateAndDefault(BedrockPacket packet) { - Registries.BEDROCK_PACKET_TRANSLATORS.translate(packet.getClass(), packet, session); + Registries.BEDROCK_PACKET_TRANSLATORS.translate(packet.getClass(), packet, session, false); return PacketSignal.HANDLED; // PacketSignal.UNHANDLED will log a WARN publicly } 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 739c1c25e..3b86a0bf9 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 @@ -59,6 +59,7 @@ import java.net.Inet4Address; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; import java.util.concurrent.TimeUnit; /** @@ -72,11 +73,11 @@ public final class LocalSession extends TcpSession { private final String clientIp; private final PacketCodecHelper codecHelper; - public LocalSession(String host, int port, SocketAddress targetAddress, String clientIp, PacketProtocol protocol, MinecraftCodecHelper codecHelper) { - super(host, port, protocol); + public LocalSession(String host, int port, SocketAddress targetAddress, String clientIp, PacketProtocol protocol, Executor packetHandlerExecutor) { + super(host, port, protocol, packetHandlerExecutor); this.targetAddress = targetAddress; this.clientIp = clientIp; - this.codecHelper = codecHelper; + this.codecHelper = protocol.createHelper(); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/registry/PacketTranslatorRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/PacketTranslatorRegistry.java index b31f2b4f0..e81935edf 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/PacketTranslatorRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/PacketTranslatorRegistry.java @@ -56,15 +56,15 @@ public class PacketTranslatorRegistry<T> extends AbstractMappedRegistry<Class<? } @SuppressWarnings("unchecked") - public <P extends T> boolean translate(Class<? extends P> clazz, P packet, GeyserSession session) { + public <P extends T> boolean translate(Class<? extends P> clazz, P packet, GeyserSession session, boolean canRunImmediately) { if (session.getUpstream().isClosed() || session.isClosed()) { return false; } PacketTranslator<P> translator = (PacketTranslator<P>) this.mappings.get(clazz); if (translator != null) { - EventLoop eventLoop = session.getEventLoop(); - if (!translator.shouldExecuteInEventLoop() || eventLoop.inEventLoop()) { + EventLoop eventLoop = session.getTickEventLoop(); + if (canRunImmediately || !translator.shouldExecuteInEventLoop() || eventLoop.inEventLoop()) { translate0(session, translator, packet); } else { eventLoop.execute(() -> translate0(session, translator, 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 cfb981b7d..b4a8e6203 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -253,7 +253,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { * The loop where all packets and ticking is processed to prevent concurrency issues. * If this is manually called, ensure that any exceptions are properly handled. */ - private final EventLoop eventLoop; + private final EventLoop tickEventLoop; @Setter private AuthData authData; private BedrockClientData clientData; @@ -653,10 +653,10 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { private MinecraftProtocol protocol; - public GeyserSession(GeyserImpl geyser, BedrockServerSession bedrockServerSession, EventLoop eventLoop) { + public GeyserSession(GeyserImpl geyser, BedrockServerSession bedrockServerSession, EventLoop tickEventLoop) { this.geyser = geyser; this.upstream = new UpstreamSession(bedrockServerSession); - this.eventLoop = eventLoop; + this.tickEventLoop = tickEventLoop; this.erosionHandler = new GeyserboundHandshakePacketHandler(this); @@ -947,17 +947,17 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { boolean floodgate = this.remoteServer.authType() == AuthType.FLOODGATE; // Start ticking - tickThread = eventLoop.scheduleAtFixedRate(this::tick, 50, 50, TimeUnit.MILLISECONDS); + tickThread = tickEventLoop.scheduleAtFixedRate(this::tick, 50, 50, TimeUnit.MILLISECONDS); TcpSession downstream; if (geyser.getBootstrap().getSocketAddress() != null) { // We're going to connect through the JVM and not through TCP downstream = new LocalSession(this.remoteServer.address(), this.remoteServer.port(), geyser.getBootstrap().getSocketAddress(), upstream.getAddress().getAddress().getHostAddress(), - this.protocol, this.protocol.createHelper()); + this.protocol, tickEventLoop); this.downstream = new DownstreamSession(downstream); } else { - downstream = new TcpClientSession(this.remoteServer.address(), this.remoteServer.port(), this.protocol); + downstream = new TcpClientSession(this.remoteServer.address(), this.remoteServer.port(), "0.0.0.0", 0, this.protocol, null, tickEventLoop); this.downstream = new DownstreamSession(downstream); boolean resolveSrv = false; @@ -1143,7 +1143,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { @Override public void packetReceived(Session session, Packet packet) { - Registries.JAVA_PACKET_TRANSLATORS.translate(packet.getClass(), packet, GeyserSession.this); + Registries.JAVA_PACKET_TRANSLATORS.translate(packet.getClass(), packet, GeyserSession.this, true); } @Override @@ -1213,10 +1213,11 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { * Moves task to the session event loop if already not in it. Otherwise, the task is automatically ran. */ public void ensureInEventLoop(Runnable runnable) { - if (eventLoop.inEventLoop()) { - runnable.run(); + if (tickEventLoop.inEventLoop()) { + executeRunnable(runnable); return; } + executeInEventLoop(runnable); } @@ -1224,15 +1225,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { * Executes a task and prints a stack trace if an error occurs. */ public void executeInEventLoop(Runnable runnable) { - eventLoop.execute(() -> { - try { - runnable.run(); - } catch (ErosionCancellationException e) { - geyser.getLogger().debug("Caught ErosionCancellationException"); - } catch (Throwable e) { - geyser.getLogger().error("Error thrown in " + this.bedrockUsername() + "'s event loop!", e); - } - }); + tickEventLoop.execute(() -> executeRunnable(runnable)); } /** @@ -1241,19 +1234,25 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { * The task will not run if the session is closed. */ public ScheduledFuture<?> scheduleInEventLoop(Runnable runnable, long duration, TimeUnit timeUnit) { - return eventLoop.schedule(() -> { - try { + return tickEventLoop.schedule(() -> { + executeRunnable(() -> { if (!closed) { runnable.run(); } - } catch (ErosionCancellationException e) { - geyser.getLogger().debug("Caught ErosionCancellationException"); - } catch (Throwable e) { - geyser.getLogger().error("Error thrown in " + this.bedrockUsername() + "'s event loop!", e); - } + }); }, duration, timeUnit); } + private void executeRunnable(Runnable runnable) { + try { + runnable.run(); + } catch (ErosionCancellationException e) { + geyser.getLogger().debug("Caught ErosionCancellationException"); + } catch (Throwable e) { + geyser.getLogger().error("Error thrown in " + this.bedrockUsername() + "'s event loop!", e); + } + } + /** * Called every 50 milliseconds - one Minecraft tick. */ 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 be0f8560f..10d45658e 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 @@ -131,11 +131,8 @@ public class SkullBlockEntityTranslator extends BlockEntityTranslator implements session.getGeyser().getLogger().debug("Custom skull with invalid profile tag: " + blockPosition + " " + javaNbt); return; } - if (session.getEventLoop().inEventLoop()) { - putSkull(session, blockPosition, uuid, texturesProperty, blockState); - } else { - session.executeInEventLoop(() -> putSkull(session, blockPosition, uuid, texturesProperty, blockState)); - } + + session.ensureInEventLoop(() -> putSkull(session, blockPosition, uuid, texturesProperty, blockState)); }); // We don't have the textures yet, so we can't determine if a custom block was defined for this skull diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/PacketTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/PacketTranslator.java index d49cdd6d0..da5cd5cb0 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/PacketTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/PacketTranslator.java @@ -34,6 +34,7 @@ public abstract class PacketTranslator<T> { /** * Determines if this packet should be handled in the session's event loop. This should generally be true - * only when the packet has to be executed immediately should it be false. + * This method is only used for bedrock packets, java packets have a more sophisticated system through MCProtocolLib. */ public boolean shouldExecuteInEventLoop() { return true; diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockEmoteTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockEmoteTranslator.java index 7a37aa72e..07af4ddc4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockEmoteTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockEmoteTranslator.java @@ -61,11 +61,8 @@ public class BedrockEmoteTranslator extends PacketTranslator<EmotePacket> { for (GeyserSession otherSession : session.getGeyser().getSessionManager().getSessions().values()) { if (otherSession != session) { if (otherSession.isClosed()) continue; - if (otherSession.getEventLoop().inEventLoop()) { - playEmote(otherSession, javaId, xuid, emote); - } else { - otherSession.executeInEventLoop(() -> playEmote(otherSession, javaId, xuid, emote)); - } + + otherSession.ensureInEventLoop(() -> playEmote(otherSession, javaId, xuid, emote)); } } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java index 811449a99..c3108167b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java @@ -140,10 +140,4 @@ public class JavaCustomPayloadTranslator extends PacketTranslator<ClientboundCus }); } } - - @Override - public boolean shouldExecuteInEventLoop() { - // For Erosion packets - return false; - } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaDisconnectTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaDisconnectTranslator.java index 2eb08fb92..0012390cb 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaDisconnectTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaDisconnectTranslator.java @@ -38,9 +38,4 @@ public class JavaDisconnectTranslator extends PacketTranslator<ClientboundDiscon public void translate(GeyserSession session, ClientboundDisconnectPacket packet) { session.disconnect(MessageTranslator.convertMessage(packet.getReason(), session.locale())); } - - @Override - public boolean shouldExecuteInEventLoop() { - return false; - } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaKeepAliveTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaKeepAliveTranslator.java index 399c23080..ba57758da 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaKeepAliveTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaKeepAliveTranslator.java @@ -67,9 +67,4 @@ public class JavaKeepAliveTranslator extends PacketTranslator<ClientboundKeepAli latencyPacket.setTimestamp(timestamp); session.sendUpstreamPacketImmediately(latencyPacket); } - - @Override - public boolean shouldExecuteInEventLoop() { - return false; - } } 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 e92ae1bbd..0dd843dfa 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 @@ -98,9 +98,4 @@ public class JavaLoginDisconnectTranslator extends PacketTranslator<ClientboundL private boolean testForMissingProfilePublicKey(Component disconnectReason) { return disconnectReason instanceof TranslatableComponent component && "multiplayer.disconnect.missing_public_key".equals(component.key()); } - - @Override - public boolean shouldExecuteInEventLoop() { - return false; - } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectKnownPacksTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectKnownPacksTranslator.java index 5420bee90..67717febb 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectKnownPacksTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectKnownPacksTranslator.java @@ -59,10 +59,4 @@ public class JavaSelectKnownPacksTranslator extends PacketTranslator<Clientbound } session.sendDownstreamPacket(new ServerboundSelectKnownPacks(knownPacks)); } - - @Override - public boolean shouldExecuteInEventLoop() { - // This technically isn't correct behavior, but it prevents race conditions between MCProtocolLib's packet handler and ours. - return false; - } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaStartConfigurationTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaStartConfigurationTranslator.java index ea9a7c9d5..08d147a26 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaStartConfigurationTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaStartConfigurationTranslator.java @@ -43,10 +43,4 @@ public class JavaStartConfigurationTranslator extends PacketTranslator<Clientbou erosionHandler.close(); } } - - @Override - public boolean shouldExecuteInEventLoop() { - // Execute outside of event loop to cancel any pending erosion futures - return false; - } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaCookieRequestTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaCookieRequestTranslator.java index a44faed29..d19bff010 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaCookieRequestTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaCookieRequestTranslator.java @@ -28,8 +28,8 @@ package org.geysermc.geyser.translator.protocol.java.entity.player; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; -import org.geysermc.mcprotocollib.protocol.packet.common.clientbound.ClientboundCookieRequestPacket; -import org.geysermc.mcprotocollib.protocol.packet.common.clientbound.ServerboundCookieResponsePacket; +import org.geysermc.mcprotocollib.protocol.packet.cookie.clientbound.ClientboundCookieRequestPacket; +import org.geysermc.mcprotocollib.protocol.packet.cookie.serverbound.ServerboundCookieResponsePacket; @Translator(packet = ClientboundCookieRequestPacket.class) public class JavaCookieRequestTranslator extends PacketTranslator<ClientboundCookieRequestPacket> { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 029e444a5..ebd378d57 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,7 @@ protocol-common = "3.0.0.Beta5-20241203.200249-19" protocol-codec = "3.0.0.Beta5-20241203.200249-19" raknet = "1.0.0.CR3-20240416.144209-1" minecraftauth = "4.1.1" -mcprotocollib = "1.21.2-20241107.110329-3" +mcprotocollib = "1.21.2-20241127.160724-5" adventure = "4.14.0" adventure-platform = "4.3.0" junit = "5.9.2" From 92c7f9895b7fb0055d93433e04727c90ce9d37f6 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Thu, 5 Dec 2024 20:45:56 +0800 Subject: [PATCH 099/165] Implement new boat types --- .../org/geysermc/geyser/entity/EntityDefinitions.java | 4 ++++ .../java/org/geysermc/geyser/entity/type/BoatEntity.java | 9 ++++++++- .../java/org/geysermc/geyser/network/GameProtocol.java | 5 +++++ .../protocol/java/level/JavaBlockEventTranslator.java | 5 +++++ gradle/libs.versions.toml | 2 +- 5 files changed, 23 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 f48cf4053..8e485e14b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java @@ -238,6 +238,8 @@ public final class EntityDefinitions { public static final EntityDefinition<ChestBoatEntity> OAK_CHEST_BOAT; public static final EntityDefinition<OcelotEntity> OCELOT; public static final EntityDefinition<PaintingEntity> PAINTING; + public static final EntityDefinition<BoatEntity> PALE_OAK_BOAT; + public static final EntityDefinition<ChestBoatEntity> PALE_OAK_CHEST_BOAT; public static final EntityDefinition<PandaEntity> PANDA; public static final EntityDefinition<ParrotEntity> PARROT; public static final EntityDefinition<PhantomEntity> PHANTOM; @@ -593,6 +595,7 @@ public final class EntityDefinitions { MANGROVE_BOAT = buildBoat(boatBase, EntityType.MANGROVE_BOAT, BoatEntity.BoatVariant.MANGROVE); OAK_BOAT = buildBoat(boatBase, EntityType.OAK_BOAT, BoatEntity.BoatVariant.OAK); SPRUCE_BOAT = buildBoat(boatBase, EntityType.SPRUCE_BOAT, BoatEntity.BoatVariant.SPRUCE); + PALE_OAK_BOAT = buildBoat(boatBase, EntityType.PALE_OAK_BOAT, BoatEntity.BoatVariant.PALE_OAK); EntityDefinition<ChestBoatEntity> chestBoatBase = EntityDefinition.<ChestBoatEntity>inherited(null, boatBase) .build(); @@ -606,6 +609,7 @@ public final class EntityDefinitions { MANGROVE_CHEST_BOAT = buildChestBoat(chestBoatBase, EntityType.MANGROVE_CHEST_BOAT, BoatEntity.BoatVariant.MANGROVE); OAK_CHEST_BOAT = buildChestBoat(chestBoatBase, EntityType.OAK_CHEST_BOAT, BoatEntity.BoatVariant.OAK); SPRUCE_CHEST_BOAT = buildChestBoat(chestBoatBase, EntityType.SPRUCE_CHEST_BOAT, BoatEntity.BoatVariant.SPRUCE); + PALE_OAK_CHEST_BOAT = buildChestBoat(chestBoatBase, EntityType.PALE_OAK_CHEST_BOAT, BoatEntity.BoatVariant.PALE_OAK); } EntityDefinition<LivingEntity> livingEntityBase = EntityDefinition.inherited(LivingEntity::new, entityBase) diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java index 86accea17..6c7b6e122 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java @@ -34,6 +34,7 @@ import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.type.Item; +import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; @@ -77,6 +78,11 @@ public class BoatEntity extends Entity implements Leashable, Tickable { super(session, entityId, geyserId, uuid, definition, position.add(0d, definition.offset(), 0d), motion, yaw + 90, 0, yaw + 90); this.variant = variant; + // TODO remove once 1.21.40 is dropped + if (variant == BoatVariant.PALE_OAK && GameProtocol.isPreWinterDrop(session)) { + variant = BoatVariant.BIRCH; + } + dirtyMetadata.put(EntityDataTypes.VARIANT, variant.ordinal()); // Required to be able to move on land 1.16.200+ or apply gravity not in the water 1.16.100+ @@ -238,7 +244,8 @@ public class BoatEntity extends Entity implements Leashable, Tickable { DARK_OAK(Items.DARK_OAK_BOAT, Items.DARK_OAK_CHEST_BOAT), MANGROVE(Items.MANGROVE_BOAT, Items.MANGROVE_CHEST_BOAT), BAMBOO(Items.BAMBOO_RAFT, Items.BAMBOO_CHEST_RAFT), - CHERRY(Items.CHERRY_BOAT, Items.CHERRY_CHEST_BOAT); + CHERRY(Items.CHERRY_BOAT, Items.CHERRY_CHEST_BOAT), + PALE_OAK(Items.PALE_OAK_BOAT, Items.PALE_OAK_CHEST_BOAT); private final Item pickItem; final Item chestPickItem; 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 c762cf5d3..bb7032d25 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -30,6 +30,7 @@ import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748; import org.cloudburstmc.protocol.bedrock.codec.v766.Bedrock_v766; import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec; +import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodec; import org.geysermc.mcprotocollib.protocol.codec.PacketCodec; @@ -84,6 +85,10 @@ public final class GameProtocol { /* Bedrock convenience methods to gatekeep features and easily remove the check on version removal */ + public static boolean isPreWinterDrop(GeyserSession session) { + return session.getUpstream().getProtocolVersion() == Bedrock_v748.CODEC.getProtocolVersion(); + } + /** * Gets the {@link PacketCodec} for Minecraft: Java Edition. * 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 c94468c17..917075976 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 @@ -62,6 +62,11 @@ public class JavaBlockEventTranslator extends PacketTranslator<ClientboundBlockE Vector3i position = packet.getPosition(); BlockValue value = packet.getValue(); + if (value == null) { + session.getGeyser().getLogger().debug("Unable to handle packet %s - null value! ".formatted(packet.toString())); + return; + } + BlockEventPacket blockEventPacket = new BlockEventPacket(); blockEventPacket.setBlockPosition(position); diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 686064926..e9b922eae 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,7 @@ protocol-common = "3.0.0.Beta5-20241203.200249-19" protocol-codec = "3.0.0.Beta5-20241203.200249-19" raknet = "1.0.0.CR3-20240416.144209-1" minecraftauth = "4.1.1" -mcprotocollib = "1.21.4-SNAPSHOT" +mcprotocollib = "1.21.4-20241205.121506-8" adventure = "4.14.0" adventure-platform = "4.3.0" junit = "5.9.2" From a2184e4faeb04e76d4bee216776dca876d701c0c Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Fri, 6 Dec 2024 21:18:42 +0800 Subject: [PATCH 100/165] start on implementing creaking --- README.md | 2 +- .../fabric/src/main/resources/fabric.mod.json | 2 +- ....modrinth-uploading-conventions.gradle.kts | 2 +- .../geyser/entity/EntityDefinitions.java | 9 ++ .../type/living/monster/CreakingEntity.java | 87 +++++++++++++++++++ .../geyser/session/GeyserSession.java | 5 +- .../entity/JavaEntityEventTranslator.java | 6 ++ gradle/libs.versions.toml | 2 +- 8 files changed, 110 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 83a1d5c0b..9f5c9d8d5 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,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! ## Supported Versions -Geyser is currently supporting Minecraft Bedrock 1.21.40 - 1.21.50 and Minecraft Java 1.21.2/1.21.3. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). +Geyser is currently supporting Minecraft Bedrock 1.21.40 - 1.21.50 and Minecraft Java 1.21.4. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). ## Setting Up Take a look [here](https://geysermc.org/wiki/geyser/setup/) for how to set up Geyser. diff --git a/bootstrap/mod/fabric/src/main/resources/fabric.mod.json b/bootstrap/mod/fabric/src/main/resources/fabric.mod.json index a801eb207..4f50768f4 100644 --- a/bootstrap/mod/fabric/src/main/resources/fabric.mod.json +++ b/bootstrap/mod/fabric/src/main/resources/fabric.mod.json @@ -25,6 +25,6 @@ "depends": { "fabricloader": ">=0.16.7", "fabric": "*", - "minecraft": ">=1.21.2" + "minecraft": ">=1.21.4" } } diff --git a/build-logic/src/main/kotlin/geyser.modrinth-uploading-conventions.gradle.kts b/build-logic/src/main/kotlin/geyser.modrinth-uploading-conventions.gradle.kts index 59f85d182..4f445f455 100644 --- a/build-logic/src/main/kotlin/geyser.modrinth-uploading-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/geyser.modrinth-uploading-conventions.gradle.kts @@ -13,7 +13,7 @@ modrinth { versionNumber.set(projectVersion(project)) versionType.set("beta") changelog.set(System.getenv("CHANGELOG") ?: "") - gameVersions.addAll("1.21.2", libs.minecraft.get().version as String) + gameVersions.add(libs.minecraft.get().version as String) failSilently.set(true) syncBodyFrom.set(rootProject.file("README.md").readText()) 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 8e485e14b..d284cba3f 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java @@ -684,6 +684,15 @@ public final class EntityDefinitions { .addTranslator(MetadataType.BOOLEAN, CreakingEntity::setActive) .addTranslator(MetadataType.BOOLEAN, CreakingEntity::setIsTearingDown) .addTranslator(MetadataType.OPTIONAL_POSITION, CreakingEntity::setHomePos) + .properties(new GeyserEntityProperties.Builder() + .addEnum("minecraft:creaking_state", + "neutral", + "hostile_observed", + "hostile_unobserved", + "twitching", + "crumbling") + .addInt("minecraft:creaking_swaying_ticks", 0, 6) + .build()) .build(); CREEPER = EntityDefinition.inherited(CreeperEntity::new, mobEntityBase) .type(EntityType.CREEPER) diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java index 8cfaf7428..a1861ca69 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java @@ -27,6 +27,12 @@ package org.geysermc.geyser.entity.type.living.monster; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.math.vector.Vector3i; +import org.cloudburstmc.nbt.NbtMap; +import org.cloudburstmc.protocol.bedrock.data.LevelEvent; +import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; +import org.cloudburstmc.protocol.bedrock.packet.AddEntityPacket; +import org.cloudburstmc.protocol.bedrock.packet.LevelEventGenericPacket; +import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata; @@ -36,19 +42,100 @@ import java.util.Optional; import java.util.UUID; public class CreakingEntity extends MonsterEntity { + + private Vector3i homePosition; + public CreakingEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) { super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); } + @Override + protected void initializeMetadata() { + super.initializeMetadata(); + setFlag(EntityFlag.HIDDEN_WHEN_INVISIBLE, true); + setFlag(EntityFlag.FIRE_IMMUNE, true); + } + + @Override + public void addAdditionalSpawnData(AddEntityPacket addEntityPacket) { + propertyManager.add("minecraft:creaking_state", "neutral"); + propertyManager.add("minecraft:creaking_swaying_ticks", 0); + propertyManager.applyIntProperties(addEntityPacket.getProperties().getIntProperties()); + } + public void setCanMove(EntityMetadata<Boolean,? extends MetadataType<Boolean>> booleanEntityMetadata) { + if (booleanEntityMetadata.getValue()) { + setFlag(EntityFlag.BODY_ROTATION_BLOCKED, false); + + // unfreeze sound? SoundEvent.UNFREEZE + propertyManager.add("minecraft:creaking_state", "hostile_unobserved"); + updateBedrockEntityProperties(); + } else { + setFlag(EntityFlag.BODY_ROTATION_BLOCKED, true); + propertyManager.add("minecraft:creaking_state", "hostile_observed"); + updateBedrockEntityProperties(); + } + + GeyserImpl.getInstance().getLogger().warning("set can move; " + booleanEntityMetadata.toString()); } public void setActive(EntityMetadata<Boolean,? extends MetadataType<Boolean>> booleanEntityMetadata) { + if (booleanEntityMetadata.getValue()) { +// LevelSoundEvent2Packet addEntityPacket = new LevelSoundEvent2Packet(); +// addEntityPacket.setIdentifier("minecraft:creaking"); +// addEntityPacket.setPosition(position); +// addEntityPacket.setBabySound(false); +// addEntityPacket.setSound(SoundEvent.ACTIVATE); +// addEntityPacket.setExtraData(-1); +// session.sendUpstreamPacket(addEntityPacket); + +// setFlag(EntityFlag.HIDDEN_WHEN_INVISIBLE, true); +// setFlag(EntityFlag.BODY_ROTATION_BLOCKED, true); + } else { + propertyManager.add("minecraft:creaking_state", "neutral"); + } + GeyserImpl.getInstance().getLogger().warning("set active; " + booleanEntityMetadata.toString()); } public void setIsTearingDown(EntityMetadata<Boolean,? extends MetadataType<Boolean>> booleanEntityMetadata) { + GeyserImpl.getInstance().getLogger().warning("set isTearingDown; " + booleanEntityMetadata.toString()); + if (booleanEntityMetadata.getValue()) { + propertyManager.add("minecraft:creaking_state", "crumbling"); + updateBedrockEntityProperties(); +// LevelEventPacket levelEventPacket = new LevelEventPacket(); +// levelEventPacket.setType(ParticleType.CREAKING_CRUMBLE); +// levelEventPacket.setPosition(position); +// levelEventPacket.setData(0); + } } public void setHomePos(EntityMetadata<Optional<Vector3i>,? extends MetadataType<Optional<Vector3i>>> optionalEntityMetadata) { + if (optionalEntityMetadata.getValue().isPresent()) { + this.homePosition = optionalEntityMetadata.getValue().get(); + } else { + this.homePosition = null; + } + } + + public void createParticleBeam() { + if (this.homePosition != null) { + LevelEventGenericPacket levelEventGenericPacket = new LevelEventGenericPacket(); + levelEventGenericPacket.setType(LevelEvent.PARTICLE_CREAKING_HEART_TRIAL); + levelEventGenericPacket.setTag( + NbtMap.builder() + .putInt("CreakingAmount", 0) + .putFloat("CreakingX", position.getX()) + .putFloat("CreakingY", position.getY()) + .putFloat("CreakingZ", position.getZ()) + .putInt("HeartAmount", 20) + .putFloat("HeartX", homePosition.getX()) + .putFloat("HeartY", homePosition.getY()) + .putFloat("HeartZ", homePosition.getZ()) + .build() + ); + + GeyserImpl.getInstance().getLogger().warning(levelEventGenericPacket.toString()); + session.sendUpstreamPacket(levelEventGenericPacket); + } } } 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 d6fe6739b..cedf9ab66 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -1153,7 +1153,10 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { @Override public void packetError(PacketErrorEvent event) { - geyser.getLogger().warning(GeyserLocale.getLocaleStringLog("geyser.network.downstream_error", event.getCause().getMessage())); + geyser.getLogger().warning(GeyserLocale.getLocaleStringLog("geyser.network.downstream_error", + (event.getPacketClass() != null ? "(" + event.getPacketClass().getSimpleName() + ")" : "") + + event.getCause().getMessage()) + ); if (geyser.getConfig().isDebugMode()) event.getCause().printStackTrace(); event.setSuppress(true); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java index 6c2e02cd3..d52a2b501 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java @@ -43,6 +43,7 @@ import org.geysermc.geyser.entity.type.EvokerFangsEntity; import org.geysermc.geyser.entity.type.FishingHookEntity; import org.geysermc.geyser.entity.type.LivingEntity; import org.geysermc.geyser.entity.type.living.animal.ArmadilloEntity; +import org.geysermc.geyser.entity.type.living.monster.CreakingEntity; import org.geysermc.geyser.entity.type.living.monster.WardenEntity; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.session.GeyserSession; @@ -288,6 +289,11 @@ public class JavaEntityEventTranslator extends PacketTranslator<ClientboundEntit armadilloEntity.onPeeking(); } break; + case SHAKE: + if (entity instanceof CreakingEntity creakingEntity) { + creakingEntity.createParticleBeam(); + } + break; } if (entityEventPacket.getType() != null) { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e9b922eae..686064926 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,7 @@ protocol-common = "3.0.0.Beta5-20241203.200249-19" protocol-codec = "3.0.0.Beta5-20241203.200249-19" raknet = "1.0.0.CR3-20240416.144209-1" minecraftauth = "4.1.1" -mcprotocollib = "1.21.4-20241205.121506-8" +mcprotocollib = "1.21.4-SNAPSHOT" adventure = "4.14.0" adventure-platform = "4.3.0" junit = "5.9.2" From a41d705c42eeaa00789c5633448fc7de46c9f69a Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Sun, 8 Dec 2024 04:18:07 +0800 Subject: [PATCH 101/165] Some minor fixes, fix own block breaking progress not showing on the player's end --- .../geyser/entity/EntityDefinitions.java | 4 +- .../living/animal/tameable/WolfEntity.java | 9 ++-- .../type/living/monster/CreakingEntity.java | 21 +++++++--- .../updater/AnvilInventoryUpdater.java | 6 +-- .../geyser/session/cache/TagCache.java | 31 ++++++++++++++ .../session/cache/tags/GeyserHolderSet.java | 22 ---------- .../player/input/BedrockBlockActions.java | 4 +- .../java/JavaSelectKnownPacksTranslator.java | 2 +- .../entity/JavaEntityEventTranslator.java | 3 ++ .../level/JavaBlockDestructionTranslator.java | 7 +++- .../org/geysermc/geyser/util/BlockUtils.java | 41 +++++++------------ 11 files changed, 79 insertions(+), 71 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 d284cba3f..dab8cb6e7 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java @@ -685,13 +685,13 @@ public final class EntityDefinitions { .addTranslator(MetadataType.BOOLEAN, CreakingEntity::setIsTearingDown) .addTranslator(MetadataType.OPTIONAL_POSITION, CreakingEntity::setHomePos) .properties(new GeyserEntityProperties.Builder() - .addEnum("minecraft:creaking_state", + .addEnum(CreakingEntity.CREAKING_STATE, "neutral", "hostile_observed", "hostile_unobserved", "twitching", "crumbling") - .addInt("minecraft:creaking_swaying_ticks", 0, 6) + .addInt(CreakingEntity.CREAKING_SWAYING_TICKS, 0, 6) .build()) .build(); CREEPER = EntityDefinition.inherited(CreeperEntity::new, mobEntityBase) 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 67e5788c6..1b06f3860 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 @@ -38,8 +38,6 @@ import org.geysermc.geyser.item.enchantment.EnchantmentComponent; import org.geysermc.geyser.item.type.DyeItem; import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.session.cache.registry.JavaRegistries; -import org.geysermc.geyser.session.cache.tags.GeyserHolderSet; import org.geysermc.geyser.session.cache.tags.ItemTag; import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.util.InteractionResult; @@ -62,7 +60,7 @@ import java.util.UUID; public class WolfEntity extends TameableEntity { private byte collarColor = 14; // Red - default - private GeyserHolderSet<Item> repairableItems = null; + private HolderSet repairableItems = null; private boolean isCurseOfBinding = false; public WolfEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) { @@ -130,8 +128,7 @@ public class WolfEntity extends TameableEntity { public void setBody(ItemStack stack) { super.setBody(stack); isCurseOfBinding = ItemUtils.hasEffect(session, stack, EnchantmentComponent.PREVENT_ARMOR_CHANGE); - HolderSet set = GeyserItemStack.from(stack).getComponent(DataComponentType.REPAIRABLE); - repairableItems = GeyserHolderSet.convertHolderSet(JavaRegistries.ITEM, set); + repairableItems = GeyserItemStack.from(stack).getComponent(DataComponentType.REPAIRABLE); } @Override @@ -166,7 +163,7 @@ public class WolfEntity extends TameableEntity { return InteractiveTag.REMOVE_WOLF_ARMOR; } if (getFlag(EntityFlag.SITTING) && - session.getTagCache().is(repairableItems, itemInHand.asItem()) && + session.getTagCache().isItem(repairableItems, itemInHand.asItem()) && this.body.isValid() && this.body.getTag() != null && this.body.getTag().getInt("Damage") > 0) { return InteractiveTag.REPAIR_WOLF_ARMOR; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java index a1861ca69..1f2ddc37c 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java @@ -41,10 +41,21 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.MetadataTyp import java.util.Optional; import java.util.UUID; +/* + * Relevant bits: + * - LevelSoundEvent2Packet(sound=SPAWN, position=(233.5, 112.295, 4717.5), extraData=-1, identifier=minecraft:creaking, babySound=false, relativeVolumeDisabled=false) + * - [11:29:34:768] [CLIENT BOUND] - LevelSoundEvent2Packet(sound=CREAKING_HEART_SPAWN, position=(233.0, 110.0, 4717.0), extraData=-1, identifier=minecraft:creaking, babySound=false, relativeVolumeDisabled=false) + * - [11:29:34:768] [CLIENT BOUND] - LevelSoundEvent2Packet(sound=CREAKING_HEART_SPAWN, position=(235.0, 113.0, 4722.0), extraData=13734, identifier=, babySound=false, relativeVolumeDisabled=false) + * - [11:29:34:768] [CLIENT BOUND] - LevelEventPacket(type=PARTICLE_MOB_BLOCK_SPAWN, position=(233.0, 110.0, 4717.0), data=769) + * + */ public class CreakingEntity extends MonsterEntity { private Vector3i homePosition; + public static final String CREAKING_STATE = "minecraft:creaking_state"; + public static final String CREAKING_SWAYING_TICKS = "minecraft:creaking_swaying_ticks"; + public CreakingEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) { super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); } @@ -58,7 +69,7 @@ public class CreakingEntity extends MonsterEntity { @Override public void addAdditionalSpawnData(AddEntityPacket addEntityPacket) { - propertyManager.add("minecraft:creaking_state", "neutral"); + propertyManager.add(CREAKING_STATE, "neutral"); propertyManager.add("minecraft:creaking_swaying_ticks", 0); propertyManager.applyIntProperties(addEntityPacket.getProperties().getIntProperties()); } @@ -68,11 +79,11 @@ public class CreakingEntity extends MonsterEntity { setFlag(EntityFlag.BODY_ROTATION_BLOCKED, false); // unfreeze sound? SoundEvent.UNFREEZE - propertyManager.add("minecraft:creaking_state", "hostile_unobserved"); + propertyManager.add(CREAKING_STATE, "hostile_unobserved"); updateBedrockEntityProperties(); } else { setFlag(EntityFlag.BODY_ROTATION_BLOCKED, true); - propertyManager.add("minecraft:creaking_state", "hostile_observed"); + propertyManager.add(CREAKING_STATE, "hostile_observed"); updateBedrockEntityProperties(); } @@ -92,7 +103,7 @@ public class CreakingEntity extends MonsterEntity { // setFlag(EntityFlag.HIDDEN_WHEN_INVISIBLE, true); // setFlag(EntityFlag.BODY_ROTATION_BLOCKED, true); } else { - propertyManager.add("minecraft:creaking_state", "neutral"); + propertyManager.add(CREAKING_STATE, "neutral"); } GeyserImpl.getInstance().getLogger().warning("set active; " + booleanEntityMetadata.toString()); } @@ -100,7 +111,7 @@ public class CreakingEntity extends MonsterEntity { public void setIsTearingDown(EntityMetadata<Boolean,? extends MetadataType<Boolean>> booleanEntityMetadata) { GeyserImpl.getInstance().getLogger().warning("set isTearingDown; " + booleanEntityMetadata.toString()); if (booleanEntityMetadata.getValue()) { - propertyManager.add("minecraft:creaking_state", "crumbling"); + propertyManager.add(CREAKING_STATE, "crumbling"); updateBedrockEntityProperties(); // LevelEventPacket levelEventPacket = new LevelEventPacket(); // levelEventPacket.setType(ParticleType.CREAKING_CRUMBLE); 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 459d8adf8..3ea78a942 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 @@ -40,10 +40,7 @@ import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.item.BedrockEnchantment; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.enchantment.Enchantment; -import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.session.cache.registry.JavaRegistries; -import org.geysermc.geyser.session.cache.tags.GeyserHolderSet; import org.geysermc.geyser.translator.inventory.InventoryTranslator; import org.geysermc.geyser.translator.text.MessageTranslator; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; @@ -403,8 +400,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater { return false; } - GeyserHolderSet<Item> set = GeyserHolderSet.convertHolderSet(JavaRegistries.ITEM, repairable); - return session.getTagCache().is(set, material.asItem()); + return session.getTagCache().isItem(repairable, material.asItem()); } private boolean isRenaming(GeyserSession session, AnvilContainer anvilContainer, boolean bedrock) { diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java index 26b6aad96..c77081eb0 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java @@ -28,16 +28,19 @@ package org.geysermc.geyser.session.cache; import it.unimi.dsi.fastutil.ints.IntArrays; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import net.kyori.adventure.key.Key; +import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.item.type.Item; +import org.geysermc.geyser.level.block.type.Block; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.registry.JavaRegistries; import org.geysermc.geyser.session.cache.registry.JavaRegistryKey; import org.geysermc.geyser.session.cache.tags.GeyserHolderSet; import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.util.MinecraftKey; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; import org.geysermc.mcprotocollib.protocol.packet.common.clientbound.ClientboundUpdateTagsPacket; import javax.annotation.ParametersAreNonnullByDefault; @@ -127,6 +130,34 @@ public final class TagCache { return contains(holderSet.resolveRaw(this), holderSet.getRegistry().toNetworkId(session, object)); } + /** + * Accessible via the {@link #isItem(HolderSet, Item)} method. + * @return true if the specified network ID is in the given {@link HolderSet} set. + */ + private <T> boolean is(@Nullable HolderSet holderSet, @NonNull JavaRegistryKey<T> registry, int id) { + if (holderSet == null) { + return false; + } + + int[] entries = holderSet.resolve(key -> { + if (key.value().startsWith("#")) { + key = Key.key(key.namespace(), key.value().substring(1)); + } + return getRaw(new Tag<>(registry, key)); + }); + + return contains(entries, id); + } + + public boolean isItem(@Nullable HolderSet holderSet, @NonNull Item item) { + return is(holderSet, JavaRegistries.ITEM, item.javaId()); + } + + public boolean isBlock(@Nullable HolderSet holderSet, @NonNull Block block) { + return is(holderSet, JavaRegistries.BLOCK, block.javaId()); + } + + public <T> List<T> get(Tag<T> tag) { return mapRawArray(session, getRaw(tag), tag.registry()); } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java b/core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java index 0e0d117a4..c77f0a642 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java @@ -33,7 +33,6 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.TagCache; import org.geysermc.geyser.session.cache.registry.JavaRegistryKey; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; import java.util.List; import java.util.Objects; @@ -88,27 +87,6 @@ public final class GeyserHolderSet<T> { return tagCache.getRaw(Objects.requireNonNull(tag, "HolderSet must have a tag if it doesn't have a list of IDs")); } - /** - * Reads a MCPL {@link HolderSet} and turns it into a GeyserHolderSet. - * @param registry the registry the HolderSet contains IDs from. - * @param holderSet the HolderSet as the MCPL HolderSet object - */ - public static <T> GeyserHolderSet<T> convertHolderSet(@NonNull JavaRegistryKey<T> registry, @Nullable HolderSet holderSet) { - if (holderSet == null) { - return new GeyserHolderSet<>(registry, IntArrays.EMPTY_ARRAY); - } - - if (holderSet.getHolders() != null) { - return new GeyserHolderSet<>(registry, holderSet.getHolders()); - } - - if (holderSet.getLocation() != null) { - return new GeyserHolderSet<>(registry, new Tag<>(registry, holderSet.getLocation())); - } - - throw new IllegalStateException("HolderSet must have a tag or a list of IDs! " + holderSet); - } - /** * Reads a HolderSet from an object from NBT. * diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockBlockActions.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockBlockActions.java index ea386ebcf..b8facaa10 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockBlockActions.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockBlockActions.java @@ -89,7 +89,7 @@ final class BedrockBlockActions { LevelEventPacket startBreak = new LevelEventPacket(); startBreak.setType(LevelEvent.BLOCK_START_BREAK); startBreak.setPosition(vector.toFloat()); - double breakTime = BlockUtils.getSessionBreakTime(session, BlockState.of(blockState).block()) * 20; // TODO afdaöwelfunöwoaenf + double breakTime = BlockUtils.getSessionBreakTimeTicks(session, BlockState.of(blockState).block()); // If the block is custom or the breaking item is custom, we must keep track of break time ourselves GeyserItemStack item = session.getPlayerInventory().getItemInHand(); @@ -137,7 +137,7 @@ final class BedrockBlockActions { Direction direction = Direction.VALUES[blockFace]; spawnBlockBreakParticles(session, direction, vector, breakingBlockState); - double breakTime = BlockUtils.getSessionBreakTime(session, breakingBlockState.block()) * 20; + double breakTime = BlockUtils.getSessionBreakTimeTicks(session, breakingBlockState.block()); // If the block is custom, we must keep track of when it should break ourselves long blockBreakStartTime = session.getBlockBreakStartTime(); if (blockBreakStartTime != 0) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectKnownPacksTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectKnownPacksTranslator.java index 67717febb..f2ab22e60 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectKnownPacksTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectKnownPacksTranslator.java @@ -40,7 +40,7 @@ import java.util.Set; @Translator(packet = ClientboundSelectKnownPacks.class) public class JavaSelectKnownPacksTranslator extends PacketTranslator<ClientboundSelectKnownPacks> { // todo: dump from client? - private static final Set<String> KNOWN_PACK_IDS = Set.of("core", "winter_drop", "trade_rebalance", "redstone_experiments", "minecart_improvements"); + private static final Set<String> KNOWN_PACK_IDS = Set.of("core", "trade_rebalance", "redstone_experiments", "minecart_improvements"); @Override public void translate(GeyserSession session, ClientboundSelectKnownPacks packet) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java index d52a2b501..504348b5b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java @@ -37,6 +37,7 @@ import org.cloudburstmc.protocol.bedrock.packet.LevelSoundEvent2Packet; import org.cloudburstmc.protocol.bedrock.packet.PlaySoundPacket; import org.cloudburstmc.protocol.bedrock.packet.SetEntityDataPacket; import org.cloudburstmc.protocol.bedrock.packet.SetEntityMotionPacket; +import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.EvokerFangsEntity; @@ -294,6 +295,8 @@ public class JavaEntityEventTranslator extends PacketTranslator<ClientboundEntit creakingEntity.createParticleBeam(); } break; + default: + GeyserImpl.getInstance().getLogger().debug("unhandled entity event: " + packet); } if (entityEventPacket.getType() != null) { 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 674a1c583..c089e33a5 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 @@ -41,7 +41,12 @@ public class JavaBlockDestructionTranslator extends PacketTranslator<Clientbound @Override public void translate(GeyserSession session, ClientboundBlockDestructionPacket packet) { int state = session.getGeyser().getWorldManager().getBlockAt(session, packet.getPosition().getX(), packet.getPosition().getY(), packet.getPosition().getZ()); - int breakTime = (int) (65535 / Math.ceil(BlockUtils.getBreakTime(session, BlockState.of(state).block(), ItemMapping.AIR, null, false) * 20)); + int breakTime = 12; //(int) (65535 / Math.ceil(BlockUtils.getBreakTime(session, BlockState.of(state).block(), ItemMapping.AIR, null, false))); + // TODO we need to send a "total" time to Bedrock. + // Current plan: + // - start with block destroy time (if applicable) + // - track the time in ticks between stages + // - attempt to "extrapolate" to a value for Bedrock LevelEventPacket levelEventPacket = new LevelEventPacket(); levelEventPacket.setPosition(packet.getPosition().toFloat()); levelEventPacket.setType(LevelEvent.BLOCK_START_BREAK); 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 bd5ce861b..dd58672f8 100644 --- a/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java @@ -25,33 +25,31 @@ package org.geysermc.geyser.util; -import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3i; import org.geysermc.geyser.entity.attribute.GeyserAttributeType; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.level.block.type.Block; -import org.geysermc.geyser.level.block.type.BlockState; import org.geysermc.geyser.registry.BlockRegistries; -import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.EntityEffectCache; -import org.geysermc.geyser.session.cache.registry.JavaRegistries; -import org.geysermc.geyser.session.cache.tags.GeyserHolderSet; import org.geysermc.geyser.translator.collision.BlockCollision; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.ToolData; public final class BlockUtils { - public static float getBlockDestroyProgress(GeyserSession session, BlockState blockState, GeyserItemStack itemInHand) { - float destroySpeed = blockState.block().destroyTime(); + /** + * Returns the total mining progress added by mining the block in a single tick + * @return the mining progress added by this tick. + */ + public static float getBlockMiningProgressPerTick(GeyserSession session, Block block, GeyserItemStack itemInHand) { + float destroySpeed = block.destroyTime(); if (destroySpeed == -1) { return 0; } - int speedMultiplier = hasCorrectTool(session, blockState.block(), itemInHand) ? 30 : 100; - return getPlayerDestroySpeed(session, blockState, itemInHand) / destroySpeed / speedMultiplier; + int speedMultiplier = hasCorrectTool(session, block, itemInHand) ? 30 : 100; + return getPlayerDestroySpeed(session, block, itemInHand) / destroySpeed / speedMultiplier; } private static boolean hasCorrectTool(GeyserSession session, Block block, GeyserItemStack stack) { @@ -66,8 +64,7 @@ public final class BlockUtils { for (ToolData.Rule rule : tool.getRules()) { if (rule.getCorrectForDrops() != null) { - GeyserHolderSet<Block> set = GeyserHolderSet.convertHolderSet(JavaRegistries.BLOCK, rule.getBlocks()); - if (session.getTagCache().is(set, block)) { + if (session.getTagCache().isBlock(rule.getBlocks(), block)) { return rule.getCorrectForDrops(); } } @@ -84,8 +81,7 @@ public final class BlockUtils { for (ToolData.Rule rule : tool.getRules()) { if (rule.getSpeed() != null) { - GeyserHolderSet<Block> set = GeyserHolderSet.convertHolderSet(JavaRegistries.BLOCK, rule.getBlocks()); - if (session.getTagCache().is(set, block)) { + if (session.getTagCache().isBlock(rule.getBlocks(), block)) { return rule.getSpeed(); } } @@ -94,8 +90,8 @@ public final class BlockUtils { return tool.getDefaultMiningSpeed(); } - private static float getPlayerDestroySpeed(GeyserSession session, BlockState blockState, GeyserItemStack itemInHand) { - float destroySpeed = getItemDestroySpeed(session, blockState.block(), itemInHand); + private static float getPlayerDestroySpeed(GeyserSession session, Block block, GeyserItemStack itemInHand) { + float destroySpeed = getItemDestroySpeed(session, block, itemInHand); EntityEffectCache effectCache = session.getEffectCache(); if (destroySpeed > 1.0F) { @@ -133,17 +129,8 @@ public final class BlockUtils { return Math.max(cache.getHaste(), cache.getConduitPower()); } - public int getDestroyStage(GeyserSession session) { - return session.getDestroyProgress() > 0F ? (int) session.getDestroyProgress() * 10 : -1; - } - - // TODO 1.21.4 this changed probably; no more tiers - public static double getBreakTime(GeyserSession session, Block block, ItemMapping item, @Nullable DataComponents components, boolean isSessionPlayer) { - return 0.0; // TODO 1.21.4 - } - - public static double getSessionBreakTime(GeyserSession session, Block block) { - return 0.0; // TODO 1.21.4 + public static double getSessionBreakTimeTicks(GeyserSession session, Block block) { + return Math.ceil(1 / getBlockMiningProgressPerTick(session, block, session.getPlayerInventory().getItemInHand())); } /** From f610a0d12ba590deb7f4d793814cf3db461804bb Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Sun, 8 Dec 2024 05:34:10 +0800 Subject: [PATCH 102/165] Tidy up creaking entity code, remove debugging --- .../type/living/monster/CreakingEntity.java | 50 +++---------------- .../geyser/network/UpstreamPacketHandler.java | 9 ---- .../geyser/session/GeyserSession.java | 3 -- ...SetLocalPlayerAsInitializedTranslator.java | 1 - .../player/input/BedrockBlockActions.java | 1 - core/src/main/resources/mappings | 2 +- 6 files changed, 8 insertions(+), 58 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java index 1f2ddc37c..1a26eb43b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java @@ -32,7 +32,6 @@ import org.cloudburstmc.protocol.bedrock.data.LevelEvent; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.cloudburstmc.protocol.bedrock.packet.AddEntityPacket; import org.cloudburstmc.protocol.bedrock.packet.LevelEventGenericPacket; -import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata; @@ -41,14 +40,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.MetadataTyp import java.util.Optional; import java.util.UUID; -/* - * Relevant bits: - * - LevelSoundEvent2Packet(sound=SPAWN, position=(233.5, 112.295, 4717.5), extraData=-1, identifier=minecraft:creaking, babySound=false, relativeVolumeDisabled=false) - * - [11:29:34:768] [CLIENT BOUND] - LevelSoundEvent2Packet(sound=CREAKING_HEART_SPAWN, position=(233.0, 110.0, 4717.0), extraData=-1, identifier=minecraft:creaking, babySound=false, relativeVolumeDisabled=false) - * - [11:29:34:768] [CLIENT BOUND] - LevelSoundEvent2Packet(sound=CREAKING_HEART_SPAWN, position=(235.0, 113.0, 4722.0), extraData=13734, identifier=, babySound=false, relativeVolumeDisabled=false) - * - [11:29:34:768] [CLIENT BOUND] - LevelEventPacket(type=PARTICLE_MOB_BLOCK_SPAWN, position=(233.0, 110.0, 4717.0), data=769) - * - */ + public class CreakingEntity extends MonsterEntity { private Vector3i homePosition; @@ -70,53 +62,26 @@ public class CreakingEntity extends MonsterEntity { @Override public void addAdditionalSpawnData(AddEntityPacket addEntityPacket) { propertyManager.add(CREAKING_STATE, "neutral"); - propertyManager.add("minecraft:creaking_swaying_ticks", 0); + propertyManager.add(CREAKING_SWAYING_TICKS, 0); propertyManager.applyIntProperties(addEntityPacket.getProperties().getIntProperties()); } public void setCanMove(EntityMetadata<Boolean,? extends MetadataType<Boolean>> booleanEntityMetadata) { - if (booleanEntityMetadata.getValue()) { - setFlag(EntityFlag.BODY_ROTATION_BLOCKED, false); - - // unfreeze sound? SoundEvent.UNFREEZE - propertyManager.add(CREAKING_STATE, "hostile_unobserved"); - updateBedrockEntityProperties(); - } else { - setFlag(EntityFlag.BODY_ROTATION_BLOCKED, true); - propertyManager.add(CREAKING_STATE, "hostile_observed"); - updateBedrockEntityProperties(); - } - - GeyserImpl.getInstance().getLogger().warning("set can move; " + booleanEntityMetadata.toString()); + setFlag(EntityFlag.BODY_ROTATION_BLOCKED, !booleanEntityMetadata.getValue()); + propertyManager.add(CREAKING_STATE, booleanEntityMetadata.getValue() ? "hostile_unobserved" : "hostile_observed"); + updateBedrockEntityProperties(); } public void setActive(EntityMetadata<Boolean,? extends MetadataType<Boolean>> booleanEntityMetadata) { - if (booleanEntityMetadata.getValue()) { -// LevelSoundEvent2Packet addEntityPacket = new LevelSoundEvent2Packet(); -// addEntityPacket.setIdentifier("minecraft:creaking"); -// addEntityPacket.setPosition(position); -// addEntityPacket.setBabySound(false); -// addEntityPacket.setSound(SoundEvent.ACTIVATE); -// addEntityPacket.setExtraData(-1); -// session.sendUpstreamPacket(addEntityPacket); - -// setFlag(EntityFlag.HIDDEN_WHEN_INVISIBLE, true); -// setFlag(EntityFlag.BODY_ROTATION_BLOCKED, true); - } else { + if (!booleanEntityMetadata.getValue()) { propertyManager.add(CREAKING_STATE, "neutral"); } - GeyserImpl.getInstance().getLogger().warning("set active; " + booleanEntityMetadata.toString()); } public void setIsTearingDown(EntityMetadata<Boolean,? extends MetadataType<Boolean>> booleanEntityMetadata) { - GeyserImpl.getInstance().getLogger().warning("set isTearingDown; " + booleanEntityMetadata.toString()); if (booleanEntityMetadata.getValue()) { propertyManager.add(CREAKING_STATE, "crumbling"); updateBedrockEntityProperties(); -// LevelEventPacket levelEventPacket = new LevelEventPacket(); -// levelEventPacket.setType(ParticleType.CREAKING_CRUMBLE); -// levelEventPacket.setPosition(position); -// levelEventPacket.setData(0); } } @@ -134,7 +99,7 @@ public class CreakingEntity extends MonsterEntity { levelEventGenericPacket.setType(LevelEvent.PARTICLE_CREAKING_HEART_TRIAL); levelEventGenericPacket.setTag( NbtMap.builder() - .putInt("CreakingAmount", 0) + .putInt("CreakingAmount", 20) .putFloat("CreakingX", position.getX()) .putFloat("CreakingY", position.getY()) .putFloat("CreakingZ", position.getZ()) @@ -145,7 +110,6 @@ public class CreakingEntity extends MonsterEntity { .build() ); - GeyserImpl.getInstance().getLogger().warning(levelEventGenericPacket.toString()); session.sendUpstreamPacket(levelEventGenericPacket); } } 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 dfebb93dc..c67ea6545 100644 --- a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java @@ -30,7 +30,6 @@ import org.cloudburstmc.math.vector.Vector2f; 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.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; @@ -249,14 +248,6 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { stackPacket.getResourcePacks().add(new ResourcePackStackPacket.Entry(header.uuid().toString(), header.version().toString(), "")); } - if (GeyserImpl.getInstance().getConfig().isAddNonBedrockItems()) { - // Allow custom items to work - 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 cedf9ab66..b61cb7815 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -150,7 +150,6 @@ import org.geysermc.geyser.item.type.BlockItem; import org.geysermc.geyser.level.BedrockDimension; import org.geysermc.geyser.level.JavaDimension; 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; @@ -1671,8 +1670,6 @@ 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); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java index fcbd3bb8c..556d8cd8d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java @@ -40,7 +40,6 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.Serverbound public class BedrockSetLocalPlayerAsInitializedTranslator extends PacketTranslator<SetLocalPlayerAsInitializedPacket> { @Override public void translate(GeyserSession session, SetLocalPlayerAsInitializedPacket packet) { - GeyserImpl.getInstance().getLogger().info(packet.toString()); if (session.getPlayerEntity().getGeyserId() == packet.getRuntimeEntityId()) { if (!session.getUpstream().isInitialized()) { session.getUpstream().setInitialized(true); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockBlockActions.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockBlockActions.java index b8facaa10..c604f5be1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockBlockActions.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/input/BedrockBlockActions.java @@ -170,7 +170,6 @@ final class BedrockBlockActions { if (session.getGameMode() != GameMode.CREATIVE) { // As of 1.16.210: item frame items are taken out here. // Survival also sends START_BREAK, but by attaching our process here adventure mode also works - GeyserImpl.getInstance().getLogger().warning("abort break, not creative - item frame???"); Entity itemFrameEntity = ItemFrameEntity.getItemFrameEntity(session, vector); if (itemFrameEntity != null) { ServerboundInteractPacket interactPacket = new ServerboundInteractPacket(itemFrameEntity.getEntityId(), diff --git a/core/src/main/resources/mappings b/core/src/main/resources/mappings index 452312f88..64032d788 160000 --- a/core/src/main/resources/mappings +++ b/core/src/main/resources/mappings @@ -1 +1 @@ -Subproject commit 452312f88317cce019b8f336f485ffa7b2c19557 +Subproject commit 64032d7886e128858044e7e786479af3f1e876c8 From c298061d4dea3569a285b425bc4442d9e8445adc Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Sun, 8 Dec 2024 06:18:42 +0800 Subject: [PATCH 103/165] address review --- .../geyser/translator/inventory/LoomInventoryTranslator.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java index e294442f9..1fef4c4fd 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java @@ -156,7 +156,10 @@ public class LoomInventoryTranslator extends AbstractBlockInventoryTranslator { inputCopy.setNetId(session.getNextItemNetId()); BannerPatternLayer bannerPatternLayer = BannerItem.getJavaBannerPattern(session, pattern); // TODO if (bannerPatternLayer != null) { - List<BannerPatternLayer> patternsList = inputCopy.getComponentOrFallback(DataComponentType.BANNER_PATTERNS, new ArrayList<>()); + List<BannerPatternLayer> patternsList = inputCopy.getComponent(DataComponentType.BANNER_PATTERNS); + if (patternsList == null) { + patternsList = new ArrayList<>(); + } patternsList.add(bannerPatternLayer); inputCopy.getOrCreateComponents().put(DataComponentType.BANNER_PATTERNS, patternsList); } From bd3377bfcc0e09368ec4e85a0a78ae4678911877 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Sun, 8 Dec 2024 06:20:32 +0800 Subject: [PATCH 104/165] 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 64032d788..e8089e117 160000 --- a/core/src/main/resources/mappings +++ b/core/src/main/resources/mappings @@ -1 +1 @@ -Subproject commit 64032d7886e128858044e7e786479af3f1e876c8 +Subproject commit e8089e117605e60a5ced120926c49fae7617c665 From 1210639087d64b78213410b57df09508ab3149aa Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Sun, 8 Dec 2024 22:54:51 +0800 Subject: [PATCH 105/165] update item tags for 1.21.50 items --- .../resources/bedrock/item_tags.1_21_50.json | 39 +++++++++++++++---- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/core/src/main/resources/bedrock/item_tags.1_21_50.json b/core/src/main/resources/bedrock/item_tags.1_21_50.json index d9e63ed26..b8b94d6f3 100644 --- a/core/src/main/resources/bedrock/item_tags.1_21_50.json +++ b/core/src/main/resources/bedrock/item_tags.1_21_50.json @@ -6,6 +6,7 @@ "minecraft:banner" ], "minecraft:boat": [ + "minecraft:pale_oak_chest_boat", "minecraft:cherry_chest_boat", "minecraft:oak_chest_boat", "minecraft:mangrove_boat", @@ -23,9 +24,11 @@ "minecraft:mangrove_chest_boat", "minecraft:cherry_boat", "minecraft:bamboo_raft", - "minecraft:bamboo_chest_raft" + "minecraft:bamboo_chest_raft", + "minecraft:pale_oak_boat" ], "minecraft:boats": [ + "minecraft:pale_oak_chest_boat", "minecraft:cherry_chest_boat", "minecraft:oak_chest_boat", "minecraft:mangrove_boat", @@ -43,7 +46,8 @@ "minecraft:mangrove_chest_boat", "minecraft:cherry_boat", "minecraft:bamboo_raft", - "minecraft:bamboo_chest_raft" + "minecraft:bamboo_chest_raft", + "minecraft:pale_oak_boat" ], "minecraft:bookshelf_books": [ "minecraft:written_book", @@ -151,7 +155,8 @@ "minecraft:oxidized_copper_door", "minecraft:waxed_copper_door", "minecraft:waxed_exposed_copper_door", - "minecraft:waxed_oxidized_copper_door" + "minecraft:waxed_oxidized_copper_door", + "minecraft:pale_oak_door" ], "minecraft:golden_tier": [ "minecraft:golden_sword", @@ -170,6 +175,7 @@ "minecraft:hanging_sign": [ "minecraft:mangrove_hanging_sign", "minecraft:bamboo_hanging_sign", + "minecraft:pale_oak_hanging_sign", "minecraft:spruce_hanging_sign", "minecraft:birch_hanging_sign", "minecraft:cherry_hanging_sign", @@ -318,6 +324,9 @@ "minecraft:golden_pickaxe", "minecraft:netherite_pickaxe" ], + "minecraft:is_shears": [ + "minecraft:shears" + ], "minecraft:is_shovel": [ "minecraft:iron_shovel", "minecraft:wooden_shovel", @@ -382,6 +391,7 @@ "minecraft:writable_book" ], "minecraft:logs": [ + "minecraft:stripped_oak_log", "minecraft:mangrove_wood", "minecraft:spruce_wood", "minecraft:stripped_cherry_wood", @@ -390,12 +400,14 @@ "minecraft:spruce_log", "minecraft:acacia_wood", "minecraft:stripped_acacia_wood", + "minecraft:pale_oak_wood", "minecraft:stripped_warped_hyphae", "minecraft:acacia_log", "minecraft:stripped_warped_stem", "minecraft:oak_log", "minecraft:birch_log", "minecraft:jungle_log", + "minecraft:stripped_pale_oak_wood", "minecraft:dark_oak_log", "minecraft:jungle_wood", "minecraft:stripped_jungle_wood", @@ -405,10 +417,10 @@ "minecraft:stripped_oak_wood", "minecraft:stripped_birch_wood", "minecraft:stripped_dark_oak_wood", - "minecraft:stripped_oak_log", "minecraft:stripped_dark_oak_log", "minecraft:mangrove_log", "minecraft:stripped_jungle_log", + "minecraft:stripped_pale_oak_log", "minecraft:stripped_mangrove_wood", "minecraft:crimson_hyphae", "minecraft:stripped_cherry_log", @@ -416,6 +428,7 @@ "minecraft:stripped_acacia_log", "minecraft:crimson_stem", "minecraft:warped_hyphae", + "minecraft:pale_oak_log", "minecraft:stripped_spruce_log", "minecraft:warped_stem", "minecraft:stripped_crimson_hyphae", @@ -424,6 +437,7 @@ "minecraft:stripped_mangrove_log" ], "minecraft:logs_that_burn": [ + "minecraft:stripped_oak_log", "minecraft:mangrove_wood", "minecraft:spruce_wood", "minecraft:stripped_cherry_wood", @@ -431,10 +445,12 @@ "minecraft:spruce_log", "minecraft:acacia_wood", "minecraft:stripped_acacia_wood", + "minecraft:pale_oak_wood", "minecraft:acacia_log", "minecraft:oak_log", "minecraft:birch_log", "minecraft:jungle_log", + "minecraft:stripped_pale_oak_wood", "minecraft:dark_oak_log", "minecraft:jungle_wood", "minecraft:stripped_jungle_wood", @@ -444,14 +460,15 @@ "minecraft:stripped_oak_wood", "minecraft:stripped_birch_wood", "minecraft:stripped_dark_oak_wood", - "minecraft:stripped_oak_log", "minecraft:stripped_dark_oak_log", "minecraft:mangrove_log", "minecraft:stripped_jungle_log", + "minecraft:stripped_pale_oak_log", "minecraft:stripped_mangrove_wood", "minecraft:stripped_cherry_log", "minecraft:stripped_birch_log", "minecraft:stripped_acacia_log", + "minecraft:pale_oak_log", "minecraft:stripped_spruce_log", "minecraft:cherry_wood", "minecraft:cherry_log", @@ -505,6 +522,7 @@ "minecraft:acacia_planks", "minecraft:bamboo_planks", "minecraft:warped_planks", + "minecraft:pale_oak_planks", "minecraft:crimson_planks", "minecraft:cherry_planks" ], @@ -521,6 +539,7 @@ "minecraft:bamboo_hanging_sign", "minecraft:warped_sign", "minecraft:spruce_sign", + "minecraft:pale_oak_hanging_sign", "minecraft:spruce_hanging_sign", "minecraft:acacia_sign", "minecraft:birch_hanging_sign", @@ -534,7 +553,8 @@ "minecraft:acacia_hanging_sign", "minecraft:dark_oak_hanging_sign", "minecraft:crimson_hanging_sign", - "minecraft:warped_hanging_sign" + "minecraft:warped_hanging_sign", + "minecraft:pale_oak_sign" ], "minecraft:soul_fire_base_blocks": [ "minecraft:soul_soil", @@ -596,6 +616,7 @@ "minecraft:piglin_spawn_egg", "minecraft:wither_skeleton_spawn_egg", "minecraft:donkey_spawn_egg", + "minecraft:creaking_spawn_egg", "minecraft:mule_spawn_egg", "minecraft:skeleton_horse_spawn_egg", "minecraft:zombie_horse_spawn_egg", @@ -667,6 +688,7 @@ "minecraft:golden_boots" ], "minecraft:trim_materials": [ + "minecraft:resin_brick", "minecraft:diamond", "minecraft:iron_ingot", "minecraft:gold_ingot", @@ -743,6 +765,7 @@ "minecraft:red_carpet", "minecraft:brown_carpet", "minecraft:light_blue_wool", + "minecraft:green_carpet", "minecraft:white_wool", "minecraft:magenta_wool", "minecraft:yellow_wool", @@ -756,8 +779,7 @@ "minecraft:orange_carpet", "minecraft:light_blue_carpet", "minecraft:gray_carpet", - "minecraft:light_gray_carpet", - "minecraft:green_carpet" + "minecraft:light_gray_carpet" ], "minecraft:warped_stems": [ "minecraft:stripped_warped_hyphae", @@ -771,6 +793,7 @@ "minecraft:spruce_slab", "minecraft:bamboo_slab", "minecraft:warped_slab", + "minecraft:pale_oak_slab", "minecraft:mangrove_slab", "minecraft:cherry_slab", "minecraft:jungle_slab", From 1fea22d980409c5a7c21fd7f438e918ca473fb0b Mon Sep 17 00:00:00 2001 From: RK_01 <50594595+RaphiMC@users.noreply.github.com> Date: Mon, 9 Dec 2024 06:21:12 +0100 Subject: [PATCH 106/165] Implement ViaProxy client IP passthrough (#5202) --- .../viaproxy/GeyserViaProxyPlugin.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/bootstrap/viaproxy/src/main/java/org/geysermc/geyser/platform/viaproxy/GeyserViaProxyPlugin.java b/bootstrap/viaproxy/src/main/java/org/geysermc/geyser/platform/viaproxy/GeyserViaProxyPlugin.java index b5e614468..498f7d7c3 100644 --- a/bootstrap/viaproxy/src/main/java/org/geysermc/geyser/platform/viaproxy/GeyserViaProxyPlugin.java +++ b/bootstrap/viaproxy/src/main/java/org/geysermc/geyser/platform/viaproxy/GeyserViaProxyPlugin.java @@ -24,15 +24,19 @@ */ package org.geysermc.geyser.platform.viaproxy; +import io.netty.channel.AbstractChannel; import net.lenni0451.lambdaevents.EventHandler; +import net.lenni0451.reflect.stream.RStream; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import net.raphimc.viaproxy.ViaProxy; import net.raphimc.viaproxy.plugins.PluginManager; import net.raphimc.viaproxy.plugins.ViaProxyPlugin; +import net.raphimc.viaproxy.plugins.events.Client2ProxyChannelInitializeEvent; import net.raphimc.viaproxy.plugins.events.ConsoleCommandEvent; import net.raphimc.viaproxy.plugins.events.ProxyStartEvent; import net.raphimc.viaproxy.plugins.events.ProxyStopEvent; import net.raphimc.viaproxy.plugins.events.ShouldVerifyOnlineModeEvent; +import net.raphimc.viaproxy.plugins.events.types.ITyped; import org.apache.logging.log4j.LogManager; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.GeyserBootstrap; @@ -56,6 +60,7 @@ import org.geysermc.geyser.util.LoopbackUtil; import java.io.File; import java.io.IOException; import java.net.InetSocketAddress; +import java.net.SocketAddress; import java.nio.file.Files; import java.nio.file.Path; import java.util.UUID; @@ -109,6 +114,27 @@ public class GeyserViaProxyPlugin extends ViaProxyPlugin implements GeyserBootst } } + @EventHandler + private void onClient2ProxyChannelInitialize(Client2ProxyChannelInitializeEvent event) { + if (event.getType() != ITyped.Type.POST || event.isLegacyPassthrough()) { + return; + } + if (System.getProperty("geyser.viaproxy.disableIpPassthrough") != null) { // Temporary until Configurate branch is merged + return; + } + + final GeyserSession session = GeyserImpl.getInstance().onlineConnections().stream() + .filter(c -> c.getDownstream() != null) + .filter(c -> c.getDownstream().getSession().getLocalAddress().equals(event.getChannel().remoteAddress())) + .findAny().orElse(null); + if (session != null) { + final SocketAddress realAddress = session.getSocketAddress(); + if (event.getChannel() instanceof AbstractChannel) { + RStream.of(AbstractChannel.class, event.getChannel()).fields().by("remoteAddress").set(realAddress); + } + } + } + @EventHandler private void onProxyStart(final ProxyStartEvent event) { this.onGeyserEnable(); From 8b232d7900c44d43d78a28cfc2cbd6aa558a12a9 Mon Sep 17 00:00:00 2001 From: LetsGoAway <68365423+letsgoawaydev@users.noreply.github.com> Date: Mon, 9 Dec 2024 22:58:04 +0800 Subject: [PATCH 107/165] Handle ClientboundTickingStatePacket correctly and fix Throwable Scales (#4850) * Proper tick rate handling * Fix frozen variable getter * Fix formatting i think third attempt * Formatting fix attempt 5 fsdiofhsdioufhvuisdhviuo9ds * Fix stuff, also fixed the sizing of throwables as they were to big * Move update ticking state * Update core/src/main/java/org/geysermc/geyser/session/GeyserSession.java Co-authored-by: rtm516 <rtm516@users.noreply.github.com> * Fixes for spaces and documentation * Missed a space * wait now ive fixed it * Fix languages * try again to fix languages * Fix Java doc comments for tickable interface * Fix javadoc comment in Geyser Session * fix comment * fix some tick rate stuffs * Fix build fail * fix some stuff * merge * test * Update languages * Update mappings * delete broken stuff * Fix cooldown * fix cooldowns * Update core/src/main/java/org/geysermc/geyser/util/CooldownUtils.java Co-authored-by: chris <github@onechris.mozmail.com> * Update BoatEntity.java * Update GeyserSession.java * fix some stuff * Update CooldownUtils.java * fix some accidental formatting issues * Fix missing inport * Update GeyserSession.java * Update core/src/main/java/org/geysermc/geyser/entity/type/LivingEntity.java Co-authored-by: chris <github@onechris.mozmail.com> * Update core/src/main/java/org/geysermc/geyser/entity/type/ThrowableItemEntity.java Co-authored-by: chris <github@onechris.mozmail.com> * Fix missing import --------- Co-authored-by: rtm516 <rtm516@users.noreply.github.com> Co-authored-by: chris <github@onechris.mozmail.com> --- .../geyser/entity/EntityDefinitions.java | 5 +- .../geyser/entity/type/BoatEntity.java | 2 +- .../geyser/entity/type/EnderEyeEntity.java | 48 ++++++++ .../entity/type/ThrowableItemEntity.java | 55 +++++---- .../geysermc/geyser/entity/type/Tickable.java | 17 ++- .../geyser/session/GeyserSession.java | 114 +++++++++++------- .../geyser/session/cache/WorldCache.java | 10 +- .../BedrockMobEquipmentTranslator.java | 2 +- .../java/JavaTickingStateTranslator.java | 40 ++++++ .../java/JavaTickingStepTranslator.java | 40 ++++++ .../java/level/JavaCooldownTranslator.java | 2 +- .../JavaSetTitlesAnimationTranslator.java | 10 +- .../geysermc/geyser/util/CooldownUtils.java | 17 ++- 13 files changed, 278 insertions(+), 84 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/entity/type/EnderEyeEntity.java create mode 100644 core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaTickingStateTranslator.java create mode 100644 core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaTickingStepTranslator.java 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 47b97c934..b2922a570 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java @@ -38,6 +38,7 @@ import org.geysermc.geyser.entity.type.ChestBoatEntity; import org.geysermc.geyser.entity.type.CommandBlockMinecartEntity; import org.geysermc.geyser.entity.type.DisplayBaseEntity; import org.geysermc.geyser.entity.type.EnderCrystalEntity; +import org.geysermc.geyser.entity.type.EnderEyeEntity; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.EvokerFangsEntity; import org.geysermc.geyser.entity.type.ExpOrbEntity; @@ -197,7 +198,7 @@ public final class EntityDefinitions { public static final EntityDefinition<EvokerFangsEntity> EVOKER_FANGS; public static final EntityDefinition<ThrowableItemEntity> EXPERIENCE_BOTTLE; public static final EntityDefinition<ExpOrbEntity> EXPERIENCE_ORB; - public static final EntityDefinition<Entity> EYE_OF_ENDER; + public static final EntityDefinition<EnderEyeEntity> EYE_OF_ENDER; public static final EntityDefinition<FallingBlockEntity> FALLING_BLOCK; public static final EntityDefinition<FireballEntity> FIREBALL; public static final EntityDefinition<FireworkEntity> FIREWORK_ROCKET; @@ -345,7 +346,7 @@ public final class EntityDefinitions { .height(0.8f).width(0.5f) .identifier("minecraft:evocation_fang") .build(); - EYE_OF_ENDER = EntityDefinition.inherited(Entity::new, entityBase) + EYE_OF_ENDER = EntityDefinition.inherited(EnderEyeEntity::new, entityBase) .type(EntityType.EYE_OF_ENDER) .heightAndWidth(0.25f) .identifier("minecraft:eye_of_ender_signal") diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java index 86accea17..cae4dcd11 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java @@ -189,7 +189,7 @@ public class BoatEntity extends Entity implements Leashable, Tickable { session.sendDownstreamGamePacket(steerPacket); return; } - doTick = !doTick; // Run every 100 ms + doTick = !doTick; // Run every other tick if (!doTick || passengers.isEmpty()) { return; } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/EnderEyeEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/EnderEyeEntity.java new file mode 100644 index 000000000..cc5a58f21 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/entity/type/EnderEyeEntity.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 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.entity.type; + + +import org.cloudburstmc.math.vector.Vector3f; +import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; +import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.entity.EntityDefinitions; +import org.geysermc.geyser.session.GeyserSession; + +import java.util.UUID; + +public class EnderEyeEntity extends Entity { + public EnderEyeEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) { + super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); + } + + @Override + protected void initializeMetadata() { + super.initializeMetadata(); + // Correct sizing + dirtyMetadata.put(EntityDataTypes.SCALE, 0.5f); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableItemEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableItemEntity.java index 55334010f..fbbe2de50 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableItemEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableItemEntity.java @@ -25,12 +25,14 @@ package org.geysermc.geyser.entity.type; -import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata; -import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; import org.cloudburstmc.math.vector.Vector3f; +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.entity.EntityDefinitions; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata; +import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; import java.util.UUID; @@ -39,7 +41,7 @@ import java.util.UUID; */ public class ThrowableItemEntity extends ThrowableEntity { /** - * Number of ticks since the entity was spawned by the Java server + * Number of draw ticks since the entity was spawned by the Java server */ private int age; private boolean invisible; @@ -48,29 +50,38 @@ public class ThrowableItemEntity extends ThrowableEntity { super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); setFlag(EntityFlag.INVISIBLE, true); invisible = false; - } - - private void checkVisibility() { - if (invisible != getFlag(EntityFlag.INVISIBLE)) { - if (!invisible) { - Vector3f playerPos = session.getPlayerEntity().getPosition(); - // Prevent projectiles from blocking the player's screen - if (age >= 4 || position.distanceSquared(playerPos) > 16) { - setFlag(EntityFlag.INVISIBLE, false); - updateBedrockMetadata(); - } - } else { - setFlag(EntityFlag.INVISIBLE, true); - updateBedrockMetadata(); - } - } - age++; + age = 0; } @Override - public void tick() { + protected void initializeMetadata() { + super.initializeMetadata(); + // Correct sizing + dirtyMetadata.put(EntityDataTypes.SCALE, 0.5f); + } + + private void checkVisibility() { + age++; + + // Prevent projectiles from blocking the player's screen + if (session.isTickingFrozen()) { + // This may seem odd, but it matches java edition + Vector3f playerPos = session.getPlayerEntity().getPosition().down(EntityDefinitions.PLAYER.offset()); + setInvisible(playerPos.distanceSquared(position.add(0, definition.offset(), 0)) < 12.25); + } else { + setInvisible(age < 2); + } + + if (invisible != getFlag(EntityFlag.INVISIBLE)) { + setFlag(EntityFlag.INVISIBLE, invisible); + updateBedrockMetadata(); + } + } + + @Override + public void drawTick() { checkVisibility(); - super.tick(); + super.drawTick(); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/Tickable.java b/core/src/main/java/org/geysermc/geyser/entity/type/Tickable.java index 06bf45b3d..f61ff355f 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/Tickable.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/Tickable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * 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 @@ -26,8 +26,21 @@ package org.geysermc.geyser.entity.type; /** - * Implemented onto anything that should have code ran every Minecraft tick - 50 milliseconds. + * Implemented onto anything that should have code ran every Minecraft tick. + * By default, the Java server runs at 20 TPS, 50 milliseconds for each tick. */ public interface Tickable { + /** + * This function gets called every tick at all times, even when the server requests that + * the game should be frozen. This should be used for updating things that are always + * client side updated on Java, regardless of if the server is frozen or not. + */ + default void drawTick() { + } + + /** + * This function gets called every game tick as long as the + * game tick loop isn't frozen. + */ void tick(); } 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 b4a8e6203..d9e99b3b8 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * 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 @@ -183,6 +183,7 @@ import org.geysermc.geyser.util.ChunkUtils; import org.geysermc.geyser.util.EntityUtils; import org.geysermc.geyser.util.InventoryUtils; import org.geysermc.geyser.util.LoginEncryptionUtils; +import org.geysermc.geyser.util.MathUtils; import org.geysermc.geyser.util.MinecraftAuthLogger; import org.geysermc.mcprotocollib.auth.GameProfile; import org.geysermc.mcprotocollib.network.BuiltinFlags; @@ -600,7 +601,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { private boolean advancedTooltips = false; /** - * The thread that will run every 50 milliseconds - one Minecraft tick. + * The thread that will run every game tick. */ private ScheduledFuture<?> tickThread = null; @@ -644,7 +645,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { /** * Stores cookies sent by the Java server. */ - @Setter @Getter + @Setter private Map<String, byte[]> cookies = new Object2ObjectOpenHashMap<>(); private final GeyserCameraData cameraData; @@ -653,6 +654,16 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { private MinecraftProtocol protocol; + private int nanosecondsPerTick = 50000000; + private float millisecondsPerTick = 50.0f; + private boolean tickingFrozen = false; + /** + * The amount of ticks requested by the server that the game should proceed with, even if the game tick loop is frozen. + */ + @Setter + private int stepTicks = 0; + + public GeyserSession(GeyserImpl geyser, BedrockServerSession bedrockServerSession, EventLoop tickEventLoop) { this.geyser = geyser; this.upstream = new UpstreamSession(bedrockServerSession); @@ -895,38 +906,38 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { } task.cleanup(); // player is online -> remove pending authentication immediately return task.getAuthentication().handle((result, ex) -> { - if (ex != null) { - geyser.getLogger().error("Failed to log in with Microsoft code!", ex); - if (ex instanceof CompletionException ce - && ce.getCause() instanceof MinecraftRequestException mre - && mre.getResponse().getStatusCode() == 404) { - // Player is trying to join with a Microsoft account that doesn't have Java Edition purchased - disconnect(GeyserLocale.getPlayerLocaleString("geyser.network.remote.invalid_account", locale())); - } else { - disconnect(ex.toString()); - } - return false; - } + if (ex != null) { + geyser.getLogger().error("Failed to log in with Microsoft code!", ex); + if (ex instanceof CompletionException ce + && ce.getCause() instanceof MinecraftRequestException mre + && mre.getResponse().getStatusCode() == 404) { + // Player is trying to join with a Microsoft account that doesn't have Java Edition purchased + disconnect(GeyserLocale.getPlayerLocaleString("geyser.network.remote.invalid_account", locale())); + } else { + disconnect(ex.toString()); + } + return false; + } - StepMCProfile.MCProfile mcProfile = result.session().getMcProfile(); - StepMCToken.MCToken mcToken = mcProfile.getMcToken(); + StepMCProfile.MCProfile mcProfile = result.session().getMcProfile(); + StepMCToken.MCToken mcToken = mcProfile.getMcToken(); - this.protocol = new MinecraftProtocol( - new GameProfile(mcProfile.getId(), mcProfile.getName()), - mcToken.getAccessToken() - ); + this.protocol = new MinecraftProtocol( + new GameProfile(mcProfile.getId(), mcProfile.getName()), + mcToken.getAccessToken() + ); - try { - connectDownstream(); - } catch (Throwable t) { - t.printStackTrace(); - return false; - } + try { + connectDownstream(); + } catch (Throwable t) { + t.printStackTrace(); + return false; + } - // Save our auth chain for later use - geyser.saveAuthChain(bedrockUsername(), GSON.toJson(result.step().toJson(result.session()))); - return true; - }).getNow(false); + // Save our auth chain for later use + geyser.saveAuthChain(bedrockUsername(), GSON.toJson(result.step().toJson(result.session()))); + return true; + }).getNow(false); } /** @@ -947,14 +958,14 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { boolean floodgate = this.remoteServer.authType() == AuthType.FLOODGATE; // Start ticking - tickThread = tickEventLoop.scheduleAtFixedRate(this::tick, 50, 50, TimeUnit.MILLISECONDS); + tickThread = tickEventLoop.scheduleAtFixedRate(this::tick, nanosecondsPerTick, nanosecondsPerTick, TimeUnit.NANOSECONDS); TcpSession downstream; if (geyser.getBootstrap().getSocketAddress() != null) { // We're going to connect through the JVM and not through TCP downstream = new LocalSession(this.remoteServer.address(), this.remoteServer.port(), geyser.getBootstrap().getSocketAddress(), upstream.getAddress().getAddress().getHostAddress(), - this.protocol, tickEventLoop); + this.protocol, this.tickEventLoop); this.downstream = new DownstreamSession(downstream); } else { downstream = new TcpClientSession(this.remoteServer.address(), this.remoteServer.port(), "0.0.0.0", 0, this.protocol, null, tickEventLoop); @@ -1077,11 +1088,6 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { // Download and load the language for the player MinecraftLocale.downloadAndLoadLocale(locale); - -// if (sentSpawnPacket && !GameProtocol.isPre1_21_2(GeyserSession.this)) { -// // Possible form to close. -// upstream.sendPacket(new ClientboundCloseFormPacket()); -// } } @Override @@ -1243,6 +1249,19 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { }, duration, timeUnit); } + public void updateTickingState(float tickRate, boolean frozen) { + tickThread.cancel(false); + + this.tickingFrozen = frozen; + + tickRate = MathUtils.clamp(tickRate, 1.0f, 10000.0f); + + millisecondsPerTick = 1000.0f / tickRate; + + nanosecondsPerTick = MathUtils.ceil(1000000000.0f / tickRate); + tickThread = tickEventLoop.scheduleAtFixedRate(this::tick, nanosecondsPerTick, nanosecondsPerTick, TimeUnit.NANOSECONDS); + } + private void executeRunnable(Runnable runnable) { try { runnable.run(); @@ -1251,10 +1270,11 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { } catch (Throwable e) { geyser.getLogger().error("Error thrown in " + this.bedrockUsername() + "'s event loop!", e); } + } /** - * Called every 50 milliseconds - one Minecraft tick. + * Called every Minecraft tick. */ protected void tick() { try { @@ -1280,13 +1300,21 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { isInWorldBorderWarningArea = false; } + boolean gameShouldUpdate = !tickingFrozen || stepTicks > 0; + if (stepTicks > 0) { + --stepTicks; + } + Entity vehicle = playerEntity.getVehicle(); if (vehicle instanceof ClientVehicle clientVehicle && vehicle.isValid()) { clientVehicle.getVehicleComponent().tickVehicle(); } for (Tickable entity : entityCache.getTickableEntities()) { - entity.tick(); + entity.drawTick(); + if (gameShouldUpdate) { + entity.tick(); + } } if (armAnimationTicks >= 0) { @@ -1424,7 +1452,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { public void setClientData(BedrockClientData data) { this.clientData = data; this.inputCache.setInputMode( - org.cloudburstmc.protocol.bedrock.data.InputMode.values()[data.getCurrentInputMode().ordinal()]); + org.cloudburstmc.protocol.bedrock.data.InputMode.values()[data.getCurrentInputMode().ordinal()]); } /** @@ -1844,7 +1872,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { * Send a gamerule value to the client * * @param gameRule The gamerule to send - * @param value The value of the gamerule + * @param value The value of the gamerule */ public void sendGameRule(String gameRule, Object value) { GameRulesChangedPacket gameRulesChangedPacket = new GameRulesChangedPacket(); @@ -2110,7 +2138,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { @Override public UUID javaUuid() { - return playerEntity != null ? playerEntity.getUuid() : null ; + return playerEntity != null ? playerEntity.getUuid() : null; } @Override diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java index 609ac3f3b..eb57e0214 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java @@ -123,9 +123,13 @@ public final class WorldCache { SetTitlePacket titlePacket = new SetTitlePacket(); titlePacket.setType(SetTitlePacket.Type.TIMES); titlePacket.setText(""); - titlePacket.setFadeInTime(trueTitleFadeInTime); - titlePacket.setStayTime(trueTitleStayTime); - titlePacket.setFadeOutTime(trueTitleFadeOutTime); + + // We need a tick rate multiplier as otherwise the timings are incorrect on different tick rates because + // bedrock can only run at 20 TPS (50ms = 1 tick) + int tickrateMultiplier = Math.round(session.getMillisecondsPerTick()) / 50; + titlePacket.setFadeInTime(trueTitleFadeInTime * tickrateMultiplier); + titlePacket.setStayTime(trueTitleStayTime * tickrateMultiplier); + titlePacket.setFadeOutTime(trueTitleFadeOutTime * tickrateMultiplier); titlePacket.setPlatformOnlineId(""); titlePacket.setXuid(""); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMobEquipmentTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMobEquipmentTranslator.java index 35ad942d0..64681723e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMobEquipmentTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMobEquipmentTranslator.java @@ -66,7 +66,7 @@ public class BedrockMobEquipmentTranslator extends PacketTranslator<MobEquipment // (No need to send a release item packet - Java doesn't do this when swapping items) // Required to do it a tick later or else it doesn't register session.scheduleInEventLoop(() -> session.useItem(Hand.MAIN_HAND), - 50, TimeUnit.MILLISECONDS); + session.getNanosecondsPerTick(), TimeUnit.NANOSECONDS); } if (oldItem.getJavaId() != newItem.getJavaId()) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaTickingStateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaTickingStateTranslator.java new file mode 100644 index 000000000..85d4974cf --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaTickingStateTranslator.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 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.translator.protocol.java; + +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.protocol.PacketTranslator; +import org.geysermc.geyser.translator.protocol.Translator; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundTickingStatePacket; + +@Translator(packet = ClientboundTickingStatePacket.class) +public class JavaTickingStateTranslator extends PacketTranslator<ClientboundTickingStatePacket> { + + @Override + public void translate(GeyserSession session, ClientboundTickingStatePacket packet) { + session.updateTickingState(packet.getTickRate(), packet.isFrozen()); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaTickingStepTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaTickingStepTranslator.java new file mode 100644 index 000000000..f898b762a --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaTickingStepTranslator.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 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.translator.protocol.java; + +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.protocol.PacketTranslator; +import org.geysermc.geyser.translator.protocol.Translator; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundTickingStepPacket; + +@Translator(packet = ClientboundTickingStepPacket.class) +public class JavaTickingStepTranslator extends PacketTranslator<ClientboundTickingStepPacket> { + + @Override + public void translate(GeyserSession session, ClientboundTickingStepPacket packet) { + session.setStepTicks(packet.getTickSteps()); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaCooldownTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaCooldownTranslator.java index 2b14f015f..4097f5b78 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaCooldownTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaCooldownTranslator.java @@ -59,7 +59,7 @@ public class JavaCooldownTranslator extends PacketTranslator<ClientboundCooldown if (cooldownCategory != null) { PlayerStartItemCooldownPacket bedrockPacket = new PlayerStartItemCooldownPacket(); bedrockPacket.setItemCategory(cooldownCategory); - bedrockPacket.setCooldownDuration(packet.getCooldownTicks()); + bedrockPacket.setCooldownDuration(Math.round(packet.getCooldownTicks() * (session.getMillisecondsPerTick() / 50))); session.sendUpstreamPacket(bedrockPacket); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetTitlesAnimationTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetTitlesAnimationTranslator.java index 4bc5ba0c5..d310690d5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetTitlesAnimationTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetTitlesAnimationTranslator.java @@ -40,13 +40,15 @@ public class JavaSetTitlesAnimationTranslator extends PacketTranslator<Clientbou int stayTime = packet.getStay(); int fadeOutTime = packet.getFadeOut(); session.getWorldCache().setTitleTimes(fadeInTime, stayTime, fadeOutTime); - + // We need a tick rate multiplier as otherwise the timings are incorrect on different tick rates because + // bedrock can only run at 20 TPS (50ms = 1 tick) + int tickrateMultiplier = Math.round(session.getMillisecondsPerTick()) / 50; SetTitlePacket titlePacket = new SetTitlePacket(); titlePacket.setType(SetTitlePacket.Type.TIMES); titlePacket.setText(""); - titlePacket.setFadeInTime(fadeInTime); - titlePacket.setFadeOutTime(fadeOutTime); - titlePacket.setStayTime(stayTime); + titlePacket.setFadeInTime(fadeInTime * tickrateMultiplier); + titlePacket.setFadeOutTime(fadeOutTime * tickrateMultiplier); + titlePacket.setStayTime(stayTime * tickrateMultiplier); titlePacket.setXuid(""); titlePacket.setPlatformOnlineId(""); session.sendUpstreamPacket(titlePacket); 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 c020e96b2..9285e0b72 100644 --- a/core/src/main/java/org/geysermc/geyser/util/CooldownUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/CooldownUtils.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.util; import lombok.Getter; +import org.cloudburstmc.math.GenericMath; import org.cloudburstmc.protocol.bedrock.packet.SetTitlePacket; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.PreferencesCache; @@ -50,6 +51,7 @@ public class CooldownUtils { /** * Starts sending the fake cooldown to the Bedrock client. If the cooldown is not disabled, the sent type is the cooldownPreference in {@link PreferencesCache} + * * @param session GeyserSession */ public static void sendCooldown(GeyserSession session) { @@ -57,7 +59,9 @@ public class CooldownUtils { CooldownType sessionPreference = session.getPreferencesCache().getCooldownPreference(); if (sessionPreference == CooldownType.DISABLED) return; - if (session.getAttackSpeed() == 0.0 || session.getAttackSpeed() > 20) return; // 0.0 usually happens on login and causes issues with visuals; anything above 20 means a plugin like OldCombatMechanics is being used + if (session.getAttackSpeed() == 0.0 || session.getAttackSpeed() > 20) { + return; // 0.0 usually happens on login and causes issues with visuals; anything above 20 means a plugin like OldCombatMechanics is being used + } // Set the times to stay a bit with no fade in nor out SetTitlePacket titlePacket = new SetTitlePacket(); titlePacket.setType(SetTitlePacket.Type.TIMES); @@ -83,6 +87,7 @@ public class CooldownUtils { /** * Keeps updating the cooldown until the bar is complete. + * * @param session GeyserSession * @param sessionPreference The type of cooldown the client prefers * @param lastHitTime The time of the last hit. Used to gauge how long the cooldown is taking. @@ -102,7 +107,7 @@ public class CooldownUtils { session.sendUpstreamPacket(titlePacket); if (hasCooldown(session)) { session.scheduleInEventLoop(() -> - computeCooldown(session, sessionPreference, lastHitTime), 50, TimeUnit.MILLISECONDS); // Updated per tick. 1000 divided by 20 ticks equals 50 + computeCooldown(session, sessionPreference, lastHitTime), (long) restrain(session.getMillisecondsPerTick(), 50), TimeUnit.MILLISECONDS); // Updated per tick. 1000 divided by 20 ticks equals 50 } else { SetTitlePacket removeTitlePacket = new SetTitlePacket(); removeTitlePacket.setType(SetTitlePacket.Type.CLEAR); @@ -115,8 +120,9 @@ public class CooldownUtils { private static boolean hasCooldown(GeyserSession session) { long time = System.currentTimeMillis() - session.getLastHitTime(); - double cooldown = restrain(((double) time) * session.getAttackSpeed() / 1000d, 1.5); - return cooldown < 1.1; + double tickrateMultiplier = Math.max(session.getMillisecondsPerTick() / 50, 1.0); + double cooldown = restrain(((double) time) * session.getAttackSpeed() / (tickrateMultiplier * 1000.0), 1.0); + return cooldown < 1.0; } @@ -128,7 +134,8 @@ public class CooldownUtils { private static String getTitle(GeyserSession session) { long time = System.currentTimeMillis() - session.getLastHitTime(); - double cooldown = restrain(((double) time) * session.getAttackSpeed() / 1000d, 1); + double tickrateMultiplier = Math.max(session.getMillisecondsPerTick() / 50, 1.0); + double cooldown = restrain(((double) time) * session.getAttackSpeed() / (tickrateMultiplier * 1000.0), 1.0); int darkGrey = (int) Math.floor(10d * cooldown); int grey = 10 - darkGrey; From 94c258a4c910ffe39e6ca3c09ec3ff492713f0c1 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Tue, 10 Dec 2024 01:26:36 +0800 Subject: [PATCH 108/165] Update loom (and gradle), create basic recipes when there are too many possible combinations, update adapters --- .../kotlin/geyser.base-conventions.gradle.kts | 4 +- .../java/JavaRecipeBookAddTranslator.java | 67 +++++++++++++++++-- gradle.properties | 3 - gradle/libs.versions.toml | 4 +- gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 2 +- 6 files changed, 68 insertions(+), 14 deletions(-) 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 093f0a8c0..045015fe1 100644 --- a/build-logic/src/main/kotlin/geyser.base-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/geyser.base-conventions.gradle.kts @@ -26,8 +26,6 @@ dependencies { } repositories { - // mavenLocal() - mavenCentral() // Floodgate, Cumulus etc. @@ -69,4 +67,6 @@ repositories { // For Adventure snapshots maven("https://s01.oss.sonatype.org/content/repositories/snapshots/") + + //mavenLocal() } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java index 96c5951d5..8e83c9f55 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.translator.protocol.java; import com.google.common.collect.Lists; import it.unimi.dsi.fastutil.Pair; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.IntComparators; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import net.kyori.adventure.key.Key; import org.checkerframework.checker.nullness.qual.Nullable; @@ -75,12 +76,14 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.Clientbound import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.Comparator; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.UUID; +import java.util.stream.Collectors; @Translator(packet = ClientboundRecipeBookAddPacket.class) public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRecipeBookAddPacket> { @@ -386,10 +389,64 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec return Pair.of(Lists.cartesianProduct(inputs), output); } } - // TODO: - return Pair.of( - Collections.singletonList(inputs.stream().map(descriptors -> descriptors.get(0)).toList()), - output - ); + + int totalSimpleRecipes = inputs.stream().mapToInt(List::size).max().orElse(1); + + // Sort inputs to create "uniform" simple recipes, if possible + inputs = inputs.stream() + .map(descriptors -> descriptors.stream() + .sorted(ItemDescriptorWithCountComparator.INSTANCE) + .collect(Collectors.toList())) + .collect(Collectors.toList()); + + List<List<ItemDescriptorWithCount>> finalRecipes = new ArrayList<>(totalSimpleRecipes); + for (int i = 0; i < totalSimpleRecipes; i++) { + int current = i; + finalRecipes.add(inputs.stream().map(descriptors -> { + if (descriptors.size() > current) { + return descriptors.get(current); + } + return descriptors.get(0); + }).toList()); + } + + return Pair.of(finalRecipes, output); + } + + static class ItemDescriptorWithCountComparator implements Comparator<ItemDescriptorWithCount> { + + static ItemDescriptorWithCountComparator INSTANCE = new ItemDescriptorWithCountComparator(); + + @Override + public int compare(ItemDescriptorWithCount o1, ItemDescriptorWithCount o2) { + String tag1 = null, tag2 = null; + + // Collect item tags first + if (o1.getDescriptor() instanceof ItemTagDescriptor itemTagDescriptor) { + tag1 = itemTagDescriptor.getItemTag(); + } + + if (o2.getDescriptor() instanceof ItemTagDescriptor itemTagDescriptor) { + tag2 = itemTagDescriptor.getItemTag(); + } + + if (tag1 != null || tag2 != null) { + if (tag1 != null && tag2 != null) { + return tag1.compareTo(tag2); // Just sort based on their string id + } + + if (tag1 != null) { + return -1; + } + + return 1; // the second is an item tag; which should be r + } + + if (o1.getDescriptor() instanceof DefaultDescriptor defaultDescriptor1 && o2.getDescriptor() instanceof DefaultDescriptor defaultDescriptor2) { + return IntComparators.NATURAL_COMPARATOR.compare(defaultDescriptor1.getItemId().getRuntimeId(), defaultDescriptor2.getItemId().getRuntimeId()); + } + + throw new IllegalStateException("Unable to compare unknown item descriptors: " + o1 + " and " + o2); + } } } diff --git a/gradle.properties b/gradle.properties index 473c104f4..c380ec371 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,9 +6,6 @@ org.gradle.parallel=true org.gradle.caching=true org.gradle.vfs.watch=false -# TODO remove once architectury loom updates to 1.8 -loom.ignoreDependencyLoomVersionValidation=true - group=org.geysermc id=geyser version=2.6.0-SNAPSHOT diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 686064926..1166bab35 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -25,7 +25,7 @@ jline = "3.21.0" terminalconsoleappender = "1.2.0" folia = "1.19.4-R0.1-SNAPSHOT" viaversion = "4.9.2" -adapters = "1.15-SNAPSHOT" +adapters = "1.16-SNAPSHOT" cloud = "2.0.0-rc.2" cloud-minecraft = "2.0.0-beta.9" cloud-minecraft-modded = "2.0.0-beta.10" @@ -46,7 +46,7 @@ mockito = "5.+" indra = "3.1.3" shadow = "8.1.1" architectury-plugin = "3.4-SNAPSHOT" -architectury-loom = "1.7-SNAPSHOT" +architectury-loom = "1.9-SNAPSHOT" minotaur = "2.8.7" lombok = "8.4" blossom = "2.1.0" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a4413138c..94113f200 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 1aa94a426..b740cf133 100755 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. From 1f3590d48885d380fa1e06c8fbdced68d40b1d72 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Tue, 10 Dec 2024 03:01:09 +0800 Subject: [PATCH 109/165] revert map color changes --- .../org/geysermc/geyser/level/MapColor.java | 507 +++++++++--------- 1 file changed, 257 insertions(+), 250 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/level/MapColor.java b/core/src/main/java/org/geysermc/geyser/level/MapColor.java index 4b891e9b7..a599f9146 100644 --- a/core/src/main/java/org/geysermc/geyser/level/MapColor.java +++ b/core/src/main/java/org/geysermc/geyser/level/MapColor.java @@ -26,261 +26,268 @@ package org.geysermc.geyser.level; public enum MapColor { - COLOR_0(0), - COLOR_1(0), - COLOR_2(0), - COLOR_3(0), - COLOR_4(-10912473), - COLOR_5(-9594576), - COLOR_6(-8408520), - COLOR_7(-12362211), - COLOR_8(-5331853), - COLOR_9(-2766452), - COLOR_10(-530013), - COLOR_11(-8225962), - COLOR_12(-7566196), - COLOR_13(-5526613), - COLOR_14(-3684409), - COLOR_15(-9868951), - COLOR_16(-4980736), - COLOR_17(-2359296), - COLOR_18(-65536), - COLOR_19(-7929856), - COLOR_20(-9408332), - COLOR_21(-7697700), - COLOR_22(-6250241), - COLOR_23(-11250553), - COLOR_24(-9079435), - COLOR_25(-7303024), - COLOR_26(-5789785), - COLOR_27(-10987432), - COLOR_28(-16754944), - COLOR_29(-16750080), - COLOR_30(-16745472), - COLOR_31(-16760576), - COLOR_32(-4934476), - COLOR_33(-2302756), - COLOR_34(-1), - COLOR_35(-7895161), - COLOR_36(-9210239), - COLOR_37(-7499618), - COLOR_38(-5986120), - COLOR_39(-11118495), - COLOR_40(-9810890), - COLOR_41(-8233406), - COLOR_42(-6853299), - COLOR_43(-11585240), - COLOR_44(-11579569), - COLOR_45(-10461088), - COLOR_46(-9408400), - COLOR_47(-12895429), - COLOR_48(-13816396), - COLOR_49(-13158436), - COLOR_50(-12566273), - COLOR_51(-14605945), - COLOR_52(-10202062), - COLOR_53(-8690114), - COLOR_54(-7375032), - COLOR_55(-11845850), - COLOR_56(-4935252), - COLOR_57(-2303533), - COLOR_58(-779), - COLOR_59(-7895679), - COLOR_60(-6792924), - COLOR_61(-4559572), - COLOR_62(-2588877), - COLOR_63(-9288933), - COLOR_64(-8571496), - COLOR_65(-6733382), - COLOR_66(-5092136), - COLOR_67(-10606478), - COLOR_68(-12030824), - COLOR_69(-10976070), - COLOR_70(-10053160), - COLOR_71(-13217422), - COLOR_72(-6184668), - COLOR_73(-3816148), - COLOR_74(-1710797), - COLOR_75(-8816357), - COLOR_76(-10907631), - COLOR_77(-9588715), - COLOR_78(-8401895), - COLOR_79(-12358643), - COLOR_80(-5613196), - COLOR_81(-3117682), - COLOR_82(-884827), - COLOR_83(-8371369), - COLOR_84(-13290187), - COLOR_85(-12500671), - COLOR_86(-11776948), - COLOR_87(-14145496), - COLOR_88(-9671572), - COLOR_89(-8092540), - COLOR_90(-6710887), - COLOR_91(-11447983), - COLOR_92(-13280916), - COLOR_93(-12489340), - COLOR_94(-11763815), - COLOR_95(-14138543), - COLOR_96(-10933123), - COLOR_97(-9619815), - COLOR_98(-8437838), - COLOR_99(-12377762), - COLOR_100(-14404227), - COLOR_101(-13876839), - COLOR_102(-13415246), - COLOR_103(-14997410), - COLOR_104(-12045020), - COLOR_105(-10993364), - COLOR_106(-10073037), - COLOR_107(-13228005), - COLOR_108(-12035804), - COLOR_109(-10982100), - COLOR_110(-10059981), - COLOR_111(-13221093), - COLOR_112(-9690076), - COLOR_113(-8115156), - COLOR_114(-6737101), - COLOR_115(-11461861), - COLOR_116(-15658735), - COLOR_117(-15395563), - COLOR_118(-15132391), - COLOR_119(-15921907), - COLOR_120(-5199818), - COLOR_121(-2634430), - COLOR_122(-332211), - COLOR_123(-8094168), - COLOR_124(-12543338), - COLOR_125(-11551561), - COLOR_126(-10691627), - COLOR_127(-13601936), - COLOR_128(-13346124), - COLOR_129(-12620068), - COLOR_130(-11894529), - COLOR_131(-14204025), - COLOR_132(-16738008), - COLOR_133(-16729294), - COLOR_134(-16721606), - COLOR_135(-16748002), - COLOR_136(-10798046), - COLOR_137(-9483734), - COLOR_138(-8301007), - COLOR_139(-12309223), - COLOR_140(-11599616), - COLOR_141(-10485504), - COLOR_142(-9436672), - COLOR_143(-12910336), - COLOR_144(-7111567), - COLOR_145(-4941686), - COLOR_146(-3034719), - COLOR_147(-9544363), - COLOR_148(-9422567), - COLOR_149(-7780833), - COLOR_150(-6335964), - COLOR_151(-11261165), - COLOR_152(-9880244), - COLOR_153(-8369315), - COLOR_154(-6989972), - COLOR_155(-11653575), - COLOR_156(-11580319), - COLOR_157(-10461833), - COLOR_158(-9409398), - COLOR_159(-12895927), - COLOR_160(-8168167), - COLOR_161(-6262241), - COLOR_162(-4553436), - COLOR_163(-10336749), - COLOR_164(-12037595), - COLOR_165(-10984403), - COLOR_166(-9997003), - COLOR_167(-13222628), - COLOR_168(-9423305), - COLOR_169(-7716285), - COLOR_170(-6271666), - COLOR_171(-11261911), - COLOR_172(-14148584), - COLOR_173(-13556962), - COLOR_174(-13031133), - COLOR_175(-14805742), - COLOR_176(-10532027), - COLOR_177(-9151404), - COLOR_178(-7902366), - COLOR_179(-12109773), - COLOR_180(-12763072), - COLOR_181(-11841713), - COLOR_182(-11051940), - COLOR_183(-13750224), - COLOR_184(-11128002), - COLOR_185(-9879989), - COLOR_186(-8763048), - COLOR_187(-12573138), - COLOR_188(-13292736), - COLOR_189(-12503729), - COLOR_190(-11780516), - COLOR_191(-14147536), - COLOR_192(-13294824), - COLOR_193(-12506338), - COLOR_194(-11783645), - COLOR_195(-14149102), - COLOR_196(-13289187), - COLOR_197(-12499420), - COLOR_198(-11775446), - COLOR_199(-14144746), - COLOR_200(-10212832), - COLOR_201(-8768729), - COLOR_202(-7455698), - COLOR_203(-11854056), - COLOR_204(-15069429), - COLOR_205(-14740979), - COLOR_206(-14346736), - COLOR_207(-15529208), - COLOR_208(-8052446), - COLOR_209(-6084310), - COLOR_210(-4378575), - COLOR_211(-10217191), - COLOR_212(-9950140), - COLOR_213(-8440237), - COLOR_214(-7061663), - COLOR_215(-11656909), - COLOR_216(-12578540), - COLOR_217(-11594471), - COLOR_218(-10741475), - COLOR_219(-13628145), - COLOR_220(-15771554), - COLOR_221(-15569805), - COLOR_222(-15303034), - COLOR_223(-16039354), - COLOR_224(-14130078), - COLOR_225(-13469064), - COLOR_226(-12939636), - COLOR_227(-14791862), - COLOR_228(-12837077), - COLOR_229(-11918027), - COLOR_230(-11129794), - COLOR_231(-13822176), - COLOR_232(-15827107), - COLOR_233(-15623310), - COLOR_234(-15420283), - COLOR_235(-16097466), - COLOR_236(-12171706), - COLOR_237(-11119018), - COLOR_238(-10197916), - COLOR_239(-13355980), - COLOR_240(-6784153), - COLOR_241(-4548994), - COLOR_242(-2576493), - COLOR_243(-9282483), - COLOR_244(-10914455), - COLOR_245(-9596799), - COLOR_246(-8411242), - COLOR_247(-12363697); + COLOR_0(-1, -1, -1), + COLOR_1(-1, -1, -1), + COLOR_2(-1, -1, -1), + COLOR_3(-1, -1, -1), + COLOR_4(89, 125, 39), + COLOR_5(109, 153, 48), + COLOR_6(127, 178, 56), + COLOR_7(67, 94, 29), + COLOR_8(174, 164, 115), + COLOR_9(213, 201, 140), + COLOR_10(247, 233, 163), + COLOR_11(130, 123, 86), + COLOR_12(140, 140, 140), + COLOR_13(171, 171, 171), + COLOR_14(199, 199, 199), + COLOR_15(105, 105, 105), + COLOR_16(180, 0, 0), + COLOR_17(220, 0, 0), + COLOR_18(255, 0, 0), + COLOR_19(135, 0, 0), + COLOR_20(112, 112, 180), + COLOR_21(138, 138, 220), + COLOR_22(160, 160, 255), + COLOR_23(84, 84, 135), + COLOR_24(117, 117, 117), + COLOR_25(144, 144, 144), + COLOR_26(167, 167, 167), + COLOR_27(88, 88, 88), + COLOR_28(0, 87, 0), + COLOR_29(0, 106, 0), + COLOR_30(0, 124, 0), + COLOR_31(0, 65, 0), + COLOR_32(180, 180, 180), + COLOR_33(220, 220, 220), + COLOR_34(255, 255, 255), + COLOR_35(135, 135, 135), + COLOR_36(115, 118, 129), + COLOR_37(141, 144, 158), + COLOR_38(164, 168, 184), + COLOR_39(86, 88, 97), + COLOR_40(106, 76, 54), + COLOR_41(130, 94, 66), + COLOR_42(151, 109, 77), + COLOR_43(79, 57, 40), + COLOR_44(79, 79, 79), + COLOR_45(96, 96, 96), + COLOR_46(112, 112, 112), + COLOR_47(59, 59, 59), + COLOR_48(45, 45, 180), + COLOR_49(55, 55, 220), + COLOR_50(64, 64, 255), + COLOR_51(33, 33, 135), + COLOR_52(100, 84, 50), + COLOR_53(123, 102, 62), + COLOR_54(143, 119, 72), + COLOR_55(75, 63, 38), + COLOR_56(180, 177, 172), + COLOR_57(220, 217, 211), + COLOR_58(255, 252, 245), + COLOR_59(135, 133, 129), + COLOR_60(152, 89, 36), + COLOR_61(186, 109, 44), + COLOR_62(216, 127, 51), + COLOR_63(114, 67, 27), + COLOR_64(125, 53, 152), + COLOR_65(153, 65, 186), + COLOR_66(178, 76, 216), + COLOR_67(94, 40, 114), + COLOR_68(72, 108, 152), + COLOR_69(88, 132, 186), + COLOR_70(102, 153, 216), + COLOR_71(54, 81, 114), + COLOR_72(161, 161, 36), + COLOR_73(197, 197, 44), + COLOR_74(229, 229, 51), + COLOR_75(121, 121, 27), + COLOR_76(89, 144, 17), + COLOR_77(109, 176, 21), + COLOR_78(127, 204, 25), + COLOR_79(67, 108, 13), + COLOR_80(170, 89, 116), + COLOR_81(208, 109, 142), + COLOR_82(242, 127, 165), + COLOR_83(128, 67, 87), + COLOR_84(53, 53, 53), + COLOR_85(65, 65, 65), + COLOR_86(76, 76, 76), + COLOR_87(40, 40, 40), + COLOR_88(108, 108, 108), + COLOR_89(132, 132, 132), + COLOR_90(153, 153, 153), + COLOR_91(81, 81, 81), + COLOR_92(53, 89, 108), + COLOR_93(65, 109, 132), + COLOR_94(76, 127, 153), + COLOR_95(40, 67, 81), + COLOR_96(89, 44, 125), + COLOR_97(109, 54, 153), + COLOR_98(127, 63, 178), + COLOR_99(67, 33, 94), + COLOR_100(36, 53, 125), + COLOR_101(44, 65, 153), + COLOR_102(51, 76, 178), + COLOR_103(27, 40, 94), + COLOR_104(72, 53, 36), + COLOR_105(88, 65, 44), + COLOR_106(102, 76, 51), + COLOR_107(54, 40, 27), + COLOR_108(72, 89, 36), + COLOR_109(88, 109, 44), + COLOR_110(102, 127, 51), + COLOR_111(54, 67, 27), + COLOR_112(108, 36, 36), + COLOR_113(132, 44, 44), + COLOR_114(153, 51, 51), + COLOR_115(81, 27, 27), + COLOR_116(17, 17, 17), + COLOR_117(21, 21, 21), + COLOR_118(25, 25, 25), + COLOR_119(13, 13, 13), + COLOR_120(176, 168, 54), + COLOR_121(215, 205, 66), + COLOR_122(250, 238, 77), + COLOR_123(132, 126, 40), + COLOR_124(64, 154, 150), + COLOR_125(79, 188, 183), + COLOR_126(92, 219, 213), + COLOR_127(48, 115, 112), + COLOR_128(52, 90, 180), + COLOR_129(63, 110, 220), + COLOR_130(74, 128, 255), + COLOR_131(39, 67, 135), + COLOR_132(0, 153, 40), + COLOR_133(0, 187, 50), + COLOR_134(0, 217, 58), + COLOR_135(0, 114, 30), + COLOR_136(91, 60, 34), + COLOR_137(111, 74, 42), + COLOR_138(129, 86, 49), + COLOR_139(68, 45, 25), + COLOR_140(79, 1, 0), + COLOR_141(96, 1, 0), + COLOR_142(112, 2, 0), + COLOR_143(59, 1, 0), + COLOR_144(147, 124, 113), + COLOR_145(180, 152, 138), + COLOR_146(209, 177, 161), + COLOR_147(110, 93, 85), + COLOR_148(112, 57, 25), + COLOR_149(137, 70, 31), + COLOR_150(159, 82, 36), + COLOR_151(84, 43, 19), + COLOR_152(105, 61, 76), + COLOR_153(128, 75, 93), + COLOR_154(149, 87, 108), + COLOR_155(78, 46, 57), + COLOR_156(79, 76, 97), + COLOR_157(96, 93, 119), + COLOR_158(112, 108, 138), + COLOR_159(59, 57, 73), + COLOR_160(131, 93, 25), + COLOR_161(160, 114, 31), + COLOR_162(186, 133, 36), + COLOR_163(98, 70, 19), + COLOR_164(72, 82, 37), + COLOR_165(88, 100, 45), + COLOR_166(103, 117, 53), + COLOR_167(54, 61, 28), + COLOR_168(112, 54, 55), + COLOR_169(138, 66, 67), + COLOR_170(160, 77, 78), + COLOR_171(84, 40, 41), + COLOR_172(40, 28, 24), + COLOR_173(49, 35, 30), + COLOR_174(57, 41, 35), + COLOR_175(30, 21, 18), + COLOR_176(95, 75, 69), + COLOR_177(116, 92, 84), + COLOR_178(135, 107, 98), + COLOR_179(71, 56, 51), + COLOR_180(61, 64, 64), + COLOR_181(75, 79, 79), + COLOR_182(87, 92, 92), + COLOR_183(46, 48, 48), + COLOR_184(86, 51, 62), + COLOR_185(105, 62, 75), + COLOR_186(122, 73, 88), + COLOR_187(64, 38, 46), + COLOR_188(53, 43, 64), + COLOR_189(65, 53, 79), + COLOR_190(76, 62, 92), + COLOR_191(40, 32, 48), + COLOR_192(53, 35, 24), + COLOR_193(65, 43, 30), + COLOR_194(76, 50, 35), + COLOR_195(40, 26, 18), + COLOR_196(53, 57, 29), + COLOR_197(65, 70, 36), + COLOR_198(76, 82, 42), + COLOR_199(40, 43, 22), + COLOR_200(100, 42, 32), + COLOR_201(122, 51, 39), + COLOR_202(142, 60, 46), + COLOR_203(75, 31, 24), + COLOR_204(26, 15, 11), + COLOR_205(31, 18, 13), + COLOR_206(37, 22, 16), + COLOR_207(19, 11, 8), + COLOR_208(133, 33, 34), + COLOR_209(163, 41, 42), + COLOR_210(189, 48, 49), + COLOR_211(100, 25, 25), + COLOR_212(104, 44, 68), + COLOR_213(127, 54, 83), + COLOR_214(148, 63, 97), + COLOR_215(78, 33, 51), + COLOR_216(64, 17, 20), + COLOR_217(79, 21, 25), + COLOR_218(92, 25, 29), + COLOR_219(48, 13, 15), + COLOR_220(15, 88, 94), + COLOR_221(18, 108, 115), + COLOR_222(22, 126, 134), + COLOR_223(11, 66, 70), + COLOR_224(40, 100, 98), + COLOR_225(50, 122, 120), + COLOR_226(58, 142, 140), + COLOR_227(30, 75, 74), + COLOR_228(60, 31, 43), + COLOR_229(74, 37, 53), + COLOR_230(86, 44, 62), + COLOR_231(45, 23, 32), + COLOR_232(14, 127, 93), + COLOR_233(17, 155, 114), + COLOR_234(20, 180, 133), + COLOR_235(10, 95, 70), + COLOR_236(70, 70, 70), + COLOR_237(86, 86, 86), + COLOR_238(100, 100, 100), + COLOR_239(52, 52, 52), + COLOR_240(152, 123, 103), + COLOR_241(186, 150, 126), + COLOR_242(216, 175, 147), + COLOR_243(114, 92, 77), + COLOR_244(89, 117, 105), + COLOR_245(109, 144, 129), + COLOR_246(127, 167, 150), + COLOR_247(67, 88, 79); private static final MapColor[] VALUES = values(); private final int value; - MapColor(int value) { - this.value = value; + MapColor(int red, int green, int blue) { + int alpha = 255; + if (red == -1 && green == -1 && blue == -1) + alpha = 0; // transparent + + this.value = ((alpha & 0xFF) << 24) | + ((red & 0xFF) << 16) | + ((green & 0xFF) << 8) | + (blue & 0xFF); } public static MapColor fromId(int id) { From c575689f2e8cbc8c70882c064f585bdfe5ee01ad Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Tue, 10 Dec 2024 03:11:57 +0800 Subject: [PATCH 110/165] let's not spam debug mode with an unused entity event --- .../protocol/java/entity/JavaEntityEventTranslator.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java index 504348b5b..2e2734410 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java @@ -295,6 +295,9 @@ public class JavaEntityEventTranslator extends PacketTranslator<ClientboundEntit creakingEntity.createParticleBeam(); } break; + case SQUID_RESET_ROTATION: + // unused, but spams a bit + break; default: GeyserImpl.getInstance().getLogger().debug("unhandled entity event: " + packet); } From 357fd137dc6d5a9111ded2e9c64cf11e10bfd5bf Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Mon, 9 Dec 2024 22:42:40 -0500 Subject: [PATCH 111/165] Some touch-ups --- .../main/kotlin/geyser.base-conventions.gradle.kts | 4 ++-- .../type/living/animal/tameable/WolfEntity.java | 6 +++++- .../entity/type/living/monster/CreakingEntity.java | 11 +++++++---- .../java/org/geysermc/geyser/item/type/Item.java | 12 +++++++++--- 4 files changed, 23 insertions(+), 10 deletions(-) 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 045015fe1..093f0a8c0 100644 --- a/build-logic/src/main/kotlin/geyser.base-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/geyser.base-conventions.gradle.kts @@ -26,6 +26,8 @@ dependencies { } repositories { + // mavenLocal() + mavenCentral() // Floodgate, Cumulus etc. @@ -67,6 +69,4 @@ repositories { // For Adventure snapshots maven("https://s01.oss.sonatype.org/content/repositories/snapshots/") - - //mavenLocal() } 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 1b06f3860..ff2d57aef 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 @@ -128,7 +128,11 @@ public class WolfEntity extends TameableEntity { public void setBody(ItemStack stack) { super.setBody(stack); isCurseOfBinding = ItemUtils.hasEffect(session, stack, EnchantmentComponent.PREVENT_ARMOR_CHANGE); - repairableItems = GeyserItemStack.from(stack).getComponent(DataComponentType.REPAIRABLE); + if (stack != null && stack.getDataComponents() != null) { + repairableItems = stack.getDataComponents().get(DataComponentType.REPAIRABLE); + } else { + repairableItems = null; + } } @Override diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java index 1a26eb43b..1b9fdd8a4 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java @@ -40,14 +40,12 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.MetadataTyp import java.util.Optional; import java.util.UUID; - public class CreakingEntity extends MonsterEntity { - - private Vector3i homePosition; - public static final String CREAKING_STATE = "minecraft:creaking_state"; public static final String CREAKING_SWAYING_TICKS = "minecraft:creaking_swaying_ticks"; + private Vector3i homePosition; + public CreakingEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) { super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); } @@ -62,6 +60,11 @@ public class CreakingEntity extends MonsterEntity { @Override public void addAdditionalSpawnData(AddEntityPacket addEntityPacket) { propertyManager.add(CREAKING_STATE, "neutral"); + // also, the creaking seems to have this minecraft:creaking_swaying_ticks thingy + // which i guess is responsible for some animation? + // it's sent over the network, all 6 "stages" 50ms in between of each other. + // no clue what it's used for tbh, so i'm not gonna bother implementing it + // - chris propertyManager.add(CREAKING_SWAYING_TICKS, 0); propertyManager.applyIntProperties(addEntityPacket.getProperties().getIntProperties()); } 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 b12ab4d67..51750e7b1 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 @@ -49,10 +49,12 @@ import org.geysermc.geyser.text.MinecraftLocale; import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.geyser.translator.text.MessageTranslator; import org.geysermc.geyser.util.MinecraftKey; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponent; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DyedItemColor; import org.geysermc.mcprotocollib.protocol.data.game.item.component.ItemEnchantments; +import org.jetbrains.annotations.UnmodifiableView; import java.util.ArrayList; import java.util.HashMap; @@ -103,14 +105,18 @@ public class Item { * Otherwise, prefer using GeyserItemStack's getComponent */ @NonNull + @UnmodifiableView public DataComponents gatherComponents(DataComponents others) { if (others == null) { return baseComponents; } - DataComponents components = baseComponents.clone(); - components.getDataComponents().putAll(others.getDataComponents()); - return new DataComponents(ImmutableMap.copyOf(components.getDataComponents())); + //noinspection UnstableApiUsage + var builder = ImmutableMap.<DataComponentType<?>, DataComponent<?, ?>>builderWithExpectedSize( + baseComponents.getDataComponents().size() + others.getDataComponents().size()); + builder.putAll(baseComponents.getDataComponents()); + builder.putAll(others.getDataComponents()); + return new DataComponents(builder.build()); } @Nullable From 8779eab5e5e11a781dd04e558744aff3f9228bb1 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Tue, 10 Dec 2024 20:44:29 +0800 Subject: [PATCH 112/165] Revert a change, ensure that gathering all components works and doesn't throw due to duplicate keys --- .../entity/type/living/animal/tameable/WolfEntity.java | 6 +----- .../main/java/org/geysermc/geyser/item/type/Item.java | 10 +++------- 2 files changed, 4 insertions(+), 12 deletions(-) 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 ff2d57aef..1b06f3860 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 @@ -128,11 +128,7 @@ public class WolfEntity extends TameableEntity { public void setBody(ItemStack stack) { super.setBody(stack); isCurseOfBinding = ItemUtils.hasEffect(session, stack, EnchantmentComponent.PREVENT_ARMOR_CHANGE); - if (stack != null && stack.getDataComponents() != null) { - repairableItems = stack.getDataComponents().get(DataComponentType.REPAIRABLE); - } else { - repairableItems = null; - } + repairableItems = GeyserItemStack.from(stack).getComponent(DataComponentType.REPAIRABLE); } @Override 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 51750e7b1..c5dff3ad0 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 @@ -49,7 +49,6 @@ import org.geysermc.geyser.text.MinecraftLocale; import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.geyser.translator.text.MessageTranslator; import org.geysermc.geyser.util.MinecraftKey; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponent; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DyedItemColor; @@ -111,12 +110,9 @@ public class Item { return baseComponents; } - //noinspection UnstableApiUsage - var builder = ImmutableMap.<DataComponentType<?>, DataComponent<?, ?>>builderWithExpectedSize( - baseComponents.getDataComponents().size() + others.getDataComponents().size()); - builder.putAll(baseComponents.getDataComponents()); - builder.putAll(others.getDataComponents()); - return new DataComponents(builder.build()); + DataComponents components = baseComponents.clone(); + components.getDataComponents().putAll(others.getDataComponents()); + return new DataComponents(ImmutableMap.copyOf(components.getDataComponents())); } @Nullable From 94d77b403b4ee26516438d58e6fd7f8ac6a52128 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Tue, 10 Dec 2024 23:13:32 +0800 Subject: [PATCH 113/165] Add some code comments, update BungeeCord version check --- .../bungeecord/GeyserBungeePlugin.java | 2 +- .../living/animal/tameable/WolfEntity.java | 1 + .../geyser/inventory/GeyserItemStack.java | 13 +++++++++++++ .../org/geysermc/geyser/item/type/Item.java | 18 +++++++++++++++--- 4 files changed, 30 insertions(+), 4 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 7adfd488f..290bf2a4e 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 @@ -83,7 +83,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_21"); + ProtocolConstants.class.getField("MINECRAFT_1_21_4"); } catch (NoSuchFieldException e) { geyserLogger.error(" / \\"); geyserLogger.error(" / \\"); 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 1b06f3860..b108c9fbe 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 @@ -128,6 +128,7 @@ public class WolfEntity extends TameableEntity { public void setBody(ItemStack stack) { super.setBody(stack); isCurseOfBinding = ItemUtils.hasEffect(session, stack, EnchantmentComponent.PREVENT_ARMOR_CHANGE); + // Not using ItemStack#getDataComponents as that wouldn't include default item components repairableItems = GeyserItemStack.from(stack).getComponent(DataComponentType.REPAIRABLE); } 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 c595ea1b5..4ddff305e 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java @@ -125,6 +125,10 @@ public class GeyserItemStack { return isEmpty() ? null : components; } + /** + * @return whether this GeyserItemStack has any additional components on top of + * the base item components. + */ public boolean hasNonBaseComponents() { return components != null; } @@ -137,6 +141,15 @@ public class GeyserItemStack { return components; } + /** + * Returns the stored data component for a given {@link DataComponentType}, or null. + * <p> + * This method will first check the additional components that may exist, + * and fallback to the item's default (or, "base") components if need be. + * @param type the {@link DataComponentType} to query + * @return the value for said type, or null. + * @param <T> the value's type + */ @Nullable public <T> T getComponent(@NonNull DataComponentType<T> type) { if (components == null) { 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 c5dff3ad0..19789e086 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 @@ -100,21 +100,33 @@ public class Item { } /** - * Returns a modifiable DataComponents map. Should only be used when it must be modified. - * Otherwise, prefer using GeyserItemStack's getComponent + * Returns an unmodifiable {@link DataComponents} view containing known data components. + * Optionally, additional components can be provided to replace (or add to) + * the items' base components. + * To add data components, use {@link GeyserItemStack#getOrCreateComponents()}. */ @NonNull @UnmodifiableView - public DataComponents gatherComponents(DataComponents others) { + public DataComponents gatherComponents(@Nullable DataComponents others) { if (others == null) { return baseComponents; } + // Start with the base components that always exist DataComponents components = baseComponents.clone(); + // Add all additional components; these can override base components! + // e.g. custom stack size components.getDataComponents().putAll(others.getDataComponents()); + + // Return an unmodified map of the merged components return new DataComponents(ImmutableMap.copyOf(components.getDataComponents())); } + /** + * Returns this items value (or null) for a specific {@link DataComponentType}. + * Prefer using {@link GeyserItemStack#getComponent(DataComponentType)} + * to also query additional components that would override the default ones. + */ @Nullable public <T> T getComponent(@NonNull DataComponentType<T> type) { return baseComponents.get(type); From 5b90b114b52131da79e9579adb359041c9b703b2 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Wed, 11 Dec 2024 01:28:30 +0800 Subject: [PATCH 114/165] Remove unneeded code in CodecProcessor, make Bungee version checker automatically check for the required version --- .../bungeecord/GeyserBungeePlugin.java | 25 ++--- .../geyser/network/CodecProcessor.java | 96 ++----------------- 2 files changed, 20 insertions(+), 101 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 290bf2a4e..918c13b93 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 @@ -41,6 +41,7 @@ import org.geysermc.geyser.command.CommandSourceConverter; import org.geysermc.geyser.command.GeyserCommandSource; 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.bungeecord.command.BungeeCommandSource; @@ -58,6 +59,7 @@ import java.net.SocketAddress; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Collection; +import java.util.List; import java.util.Optional; import java.util.UUID; import java.util.concurrent.TimeUnit; @@ -80,18 +82,19 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap { public void onGeyserInitialize() { GeyserLocale.init(this); - // 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_21_4"); - } catch (NoSuchFieldException e) { - geyserLogger.error(" / \\"); - geyserLogger.error(" / \\"); - geyserLogger.error(" / | \\"); - geyserLogger.error(" / | \\ " + GeyserLocale.getLocaleStringLog("geyser.bootstrap.unsupported_proxy", getProxy().getName())); - geyserLogger.error(" / \\ " + GeyserLocale.getLocaleStringLog("geyser.may_not_work_as_intended_all_caps")); - geyserLogger.error(" / o \\"); - geyserLogger.error("/_____________\\"); + List<Integer> supportedProtocols = ProtocolConstants.SUPPORTED_VERSION_IDS; + if (!supportedProtocols.contains(GameProtocol.getJavaProtocolVersion())) { + geyserLogger.error(" / \\"); + geyserLogger.error(" / \\"); + geyserLogger.error(" / | \\"); + geyserLogger.error(" / | \\ " + GeyserLocale.getLocaleStringLog("geyser.bootstrap.unsupported_proxy", getProxy().getName())); + geyserLogger.error(" / \\ " + GeyserLocale.getLocaleStringLog("geyser.may_not_work_as_intended_all_caps")); + geyserLogger.error(" / o \\"); + geyserLogger.error("/_____________\\"); + } + } catch (Throwable e) { + geyserLogger.warning("Unable to check the versions supported by this proxy! " + e.getMessage()); } if (!this.loadConfig()) { diff --git a/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java b/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java index 15aa8bc2c..de654ed62 100644 --- a/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java +++ b/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java @@ -35,17 +35,11 @@ import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.MoveEntityAbsolut import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.PlayerHotbarSerializer_v291; import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.SetEntityLinkSerializer_v291; import org.cloudburstmc.protocol.bedrock.codec.v390.serializer.PlayerSkinSerializer_v390; -import org.cloudburstmc.protocol.bedrock.codec.v407.serializer.InventoryContentSerializer_v407; -import org.cloudburstmc.protocol.bedrock.codec.v407.serializer.InventorySlotSerializer_v407; import org.cloudburstmc.protocol.bedrock.codec.v419.serializer.MovePlayerSerializer_v419; import org.cloudburstmc.protocol.bedrock.codec.v486.serializer.BossEventSerializer_v486; import org.cloudburstmc.protocol.bedrock.codec.v557.serializer.SetEntityDataSerializer_v557; import org.cloudburstmc.protocol.bedrock.codec.v662.serializer.SetEntityMotionSerializer_v662; -import org.cloudburstmc.protocol.bedrock.codec.v712.serializer.InventoryContentSerializer_v712; -import org.cloudburstmc.protocol.bedrock.codec.v712.serializer.InventorySlotSerializer_v712; import org.cloudburstmc.protocol.bedrock.codec.v712.serializer.MobArmorEquipmentSerializer_v712; -import org.cloudburstmc.protocol.bedrock.codec.v729.serializer.InventoryContentSerializer_v729; -import org.cloudburstmc.protocol.bedrock.codec.v729.serializer.InventorySlotSerializer_v729; import org.cloudburstmc.protocol.bedrock.codec.v748.serializer.InventoryContentSerializer_v748; import org.cloudburstmc.protocol.bedrock.codec.v748.serializer.InventorySlotSerializer_v748; import org.cloudburstmc.protocol.bedrock.packet.AnvilDamagePacket; @@ -95,6 +89,7 @@ import org.cloudburstmc.protocol.common.util.VarInts; /** * Processes the Bedrock codec to remove or modify unused or unsafe packets and fields. */ +@SuppressWarnings("deprecation") class CodecProcessor { /** @@ -126,27 +121,9 @@ class CodecProcessor { public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, BedrockPacket packet) { } }; - /** * Serializer that throws an exception when trying to deserialize InventoryContentPacket since server-auth inventory is used. */ - private static final BedrockPacketSerializer<InventoryContentPacket> INVENTORY_CONTENT_SERIALIZER_V407 = new InventoryContentSerializer_v407() { - @Override - public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, InventoryContentPacket packet) { - throw new IllegalArgumentException("Client cannot send InventoryContentPacket in server-auth inventory environment!"); - } - }; - - /** - * Serializer that throws an exception when trying to deserialize InventoryContentPacket since server-auth inventory is used. - */ - private static final BedrockPacketSerializer<InventoryContentPacket> INVENTORY_CONTENT_SERIALIZER_V712 = new InventoryContentSerializer_v712() { - @Override - public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, InventoryContentPacket packet) { - throw new IllegalArgumentException("Client cannot send InventoryContentPacket in server-auth inventory environment!"); - } - }; - private static final BedrockPacketSerializer<InventoryContentPacket> INVENTORY_CONTENT_SERIALIZER_V748 = new InventoryContentSerializer_v748() { @Override public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, InventoryContentPacket packet) { @@ -154,40 +131,9 @@ class CodecProcessor { } }; - private static final BedrockPacketSerializer<InventoryContentPacket> INVENTORY_CONTENT_SERIALIZER_V729 = new InventoryContentSerializer_v729() { - @Override - public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, InventoryContentPacket packet) { - throw new IllegalArgumentException("Client cannot send InventoryContentPacket in server-auth inventory environment!"); - } - }; - - /** - * Serializer that throws an exception when trying to deserialize InventorySlotPacket since server-auth inventory is used. - */ - private static final BedrockPacketSerializer<InventorySlotPacket> INVENTORY_SLOT_SERIALIZER_V407 = new InventorySlotSerializer_v407() { - @Override - public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, InventorySlotPacket packet) { - throw new IllegalArgumentException("Client cannot send InventorySlotPacket in server-auth inventory environment!"); - } - }; - /* * Serializer that throws an exception when trying to deserialize InventorySlotPacket since server-auth inventory is used. */ - private static final BedrockPacketSerializer<InventorySlotPacket> INVENTORY_SLOT_SERIALIZER_V712 = new InventorySlotSerializer_v712() { - @Override - public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, InventorySlotPacket packet) { - throw new IllegalArgumentException("Client cannot send InventorySlotPacket in server-auth inventory environment!"); - } - }; - - private static final BedrockPacketSerializer<InventorySlotPacket> INVENTORY_SLOT_SERIALIZER_V729 = new InventorySlotSerializer_v729() { - @Override - public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, InventorySlotPacket packet) { - throw new IllegalArgumentException("Client cannot send InventorySlotPacket in server-auth inventory environment!"); - } - }; - private static final BedrockPacketSerializer<InventorySlotPacket> INVENTORY_SLOT_SERIALIZER_V748 = new InventorySlotSerializer_v748() { @Override public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, InventorySlotPacket packet) { @@ -297,32 +243,6 @@ class CodecProcessor { @SuppressWarnings("unchecked") static BedrockCodec processCodec(BedrockCodec codec) { - boolean is748OrAbove = codec.getProtocolVersion() >= 748; - boolean is729OrAbove = codec.getProtocolVersion() >= 729; - boolean is712OrAbove = codec.getProtocolVersion() >= 712; - - BedrockPacketSerializer<InventoryContentPacket> inventoryContentSerializer; - if (is748OrAbove) { - inventoryContentSerializer = INVENTORY_CONTENT_SERIALIZER_V748; - } else if (is729OrAbove) { - inventoryContentSerializer = INVENTORY_CONTENT_SERIALIZER_V729; - } else if (is712OrAbove) { - inventoryContentSerializer = INVENTORY_CONTENT_SERIALIZER_V712; - } else { - inventoryContentSerializer = INVENTORY_CONTENT_SERIALIZER_V407; - } - - BedrockPacketSerializer<InventorySlotPacket> inventorySlotSerializer; - if (is748OrAbove) { - inventorySlotSerializer = INVENTORY_SLOT_SERIALIZER_V748; - } else if (is729OrAbove) { - inventorySlotSerializer = INVENTORY_SLOT_SERIALIZER_V729; - } else if (is712OrAbove) { - inventorySlotSerializer = INVENTORY_SLOT_SERIALIZER_V712; - } else { - inventorySlotSerializer = INVENTORY_SLOT_SERIALIZER_V407; - } - BedrockCodec.Builder codecBuilder = codec.toBuilder() // Illegal unused serverbound EDU packets .updateSerializer(PhotoTransferPacket.class, ILLEGAL_SERIALIZER) @@ -350,15 +270,15 @@ class CodecProcessor { .updateSerializer(AnvilDamagePacket.class, IGNORED_SERIALIZER) .updateSerializer(RefreshEntitlementsPacket.class, IGNORED_SERIALIZER) // Illegal when serverbound due to Geyser specific setup - .updateSerializer(InventoryContentPacket.class, inventoryContentSerializer) - .updateSerializer(InventorySlotPacket.class, inventorySlotSerializer) + .updateSerializer(InventoryContentPacket.class, INVENTORY_CONTENT_SERIALIZER_V748) + .updateSerializer(InventorySlotPacket.class, INVENTORY_SLOT_SERIALIZER_V748) .updateSerializer(MovePlayerPacket.class, MOVE_PLAYER_SERIALIZER) .updateSerializer(MoveEntityAbsolutePacket.class, MOVE_ENTITY_SERIALIZER) .updateSerializer(RiderJumpPacket.class, ILLEGAL_SERIALIZER) .updateSerializer(PlayerInputPacket.class, ILLEGAL_SERIALIZER) // Ignored only when serverbound .updateSerializer(BossEventPacket.class, BOSS_EVENT_SERIALIZER) - .updateSerializer(MobArmorEquipmentPacket.class, is712OrAbove ? MOB_ARMOR_EQUIPMENT_SERIALIZER_V712 : MOB_ARMOR_EQUIPMENT_SERIALIZER_V291) + .updateSerializer(MobArmorEquipmentPacket.class, MOB_ARMOR_EQUIPMENT_SERIALIZER_V712) .updateSerializer(PlayerHotbarPacket.class, PLAYER_HOTBAR_SERIALIZER) .updateSerializer(PlayerSkinPacket.class, PLAYER_SKIN_SERIALIZER) .updateSerializer(SetEntityDataPacket.class, SET_ENTITY_DATA_SERIALIZER) @@ -373,12 +293,8 @@ class CodecProcessor { // Ignored bidirectional packets .updateSerializer(ClientCacheStatusPacket.class, IGNORED_SERIALIZER) .updateSerializer(SimpleEventPacket.class, IGNORED_SERIALIZER) - .updateSerializer(MultiplayerSettingsPacket.class, IGNORED_SERIALIZER); - - if (codec.getProtocolVersion() < 685) { - // Ignored bidirectional packets - codecBuilder.updateSerializer(TickSyncPacket.class, IGNORED_SERIALIZER); - } + .updateSerializer(MultiplayerSettingsPacket.class, IGNORED_SERIALIZER) + .updateSerializer(TickSyncPacket.class, IGNORED_SERIALIZER); return codecBuilder.build(); } From b843be58d00b49044fe79c2028299a9ba7703919 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Wed, 11 Dec 2024 01:41:08 +0800 Subject: [PATCH 115/165] don't set an illegal serializer for removed packet --- .../main/java/org/geysermc/geyser/network/CodecProcessor.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java b/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java index de654ed62..b3f3af5ff 100644 --- a/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java +++ b/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java @@ -83,7 +83,6 @@ import org.cloudburstmc.protocol.bedrock.packet.SettingsCommandPacket; import org.cloudburstmc.protocol.bedrock.packet.SimpleEventPacket; import org.cloudburstmc.protocol.bedrock.packet.SubChunkRequestPacket; import org.cloudburstmc.protocol.bedrock.packet.SubClientLoginPacket; -import org.cloudburstmc.protocol.bedrock.packet.TickSyncPacket; import org.cloudburstmc.protocol.common.util.VarInts; /** @@ -293,8 +292,7 @@ class CodecProcessor { // Ignored bidirectional packets .updateSerializer(ClientCacheStatusPacket.class, IGNORED_SERIALIZER) .updateSerializer(SimpleEventPacket.class, IGNORED_SERIALIZER) - .updateSerializer(MultiplayerSettingsPacket.class, IGNORED_SERIALIZER) - .updateSerializer(TickSyncPacket.class, IGNORED_SERIALIZER); + .updateSerializer(MultiplayerSettingsPacket.class, IGNORED_SERIALIZER); return codecBuilder.build(); } From 4d12c291087b371fc6ef937dfebc4c4e5e4c7474 Mon Sep 17 00:00:00 2001 From: Eclipse <eclipse@eclipseisoffline.xyz> Date: Tue, 10 Dec 2024 21:22:39 +0000 Subject: [PATCH 116/165] Fix default attribute modifiers, add more equipment slot group names for attribute modifiers (#5211) --- .../translator/item/ItemTranslator.java | 53 ++++++++++--------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java index 54bbe086c..691a320e5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.translator.item; +import net.kyori.adventure.key.Key; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TranslatableComponent; import net.kyori.adventure.text.format.NamedTextColor; @@ -38,6 +39,7 @@ import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.entity.attribute.GeyserAttributeType; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.components.Rarity; @@ -52,6 +54,7 @@ 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 org.geysermc.geyser.util.MinecraftKey; import org.geysermc.mcprotocollib.auth.GameProfile; import org.geysermc.mcprotocollib.auth.GameProfile.Texture; import org.geysermc.mcprotocollib.auth.GameProfile.TextureType; @@ -89,16 +92,21 @@ public final class ItemTranslator { ItemAttributeModifiers.EquipmentSlotGroup.FEET }; private static final DecimalFormat ATTRIBUTE_FORMAT = new DecimalFormat("0.#####"); + private static final Key BASE_ATTACK_DAMAGE_ID = MinecraftKey.key("base_attack_damage"); + private static final Key BASE_ATTACK_SPEED_ID = MinecraftKey.key("base_attack_speed"); static { - // These are the only slots that are used and have translation strings + // Maps slot groups to their respective translation names, ordered in their Java edition order in the item tooltip SLOT_NAMES = new EnumMap<>(ItemAttributeModifiers.EquipmentSlotGroup.class); + SLOT_NAMES.put(ItemAttributeModifiers.EquipmentSlotGroup.ANY, "any"); SLOT_NAMES.put(ItemAttributeModifiers.EquipmentSlotGroup.MAIN_HAND, "mainhand"); SLOT_NAMES.put(ItemAttributeModifiers.EquipmentSlotGroup.OFF_HAND, "offhand"); + SLOT_NAMES.put(ItemAttributeModifiers.EquipmentSlotGroup.HAND, "hand"); SLOT_NAMES.put(ItemAttributeModifiers.EquipmentSlotGroup.FEET, "feet"); SLOT_NAMES.put(ItemAttributeModifiers.EquipmentSlotGroup.LEGS, "legs"); SLOT_NAMES.put(ItemAttributeModifiers.EquipmentSlotGroup.CHEST, "chest"); SLOT_NAMES.put(ItemAttributeModifiers.EquipmentSlotGroup.HEAD, "head"); + SLOT_NAMES.put(ItemAttributeModifiers.EquipmentSlotGroup.ARMOR, "armor"); SLOT_NAMES.put(ItemAttributeModifiers.EquipmentSlotGroup.BODY, "body"); } @@ -175,7 +183,7 @@ public final class ItemTranslator { ItemAttributeModifiers attributeModifiers = components.get(DataComponentType.ATTRIBUTE_MODIFIERS); if (attributeModifiers != null && attributeModifiers.isShowInTooltip() && !hideTooltips) { // only add if attribute modifiers do not indicate to hide them - addAttributeLore(attributeModifiers, nbtBuilder, session.locale()); + addAttributeLore(session, attributeModifiers, nbtBuilder, session.locale()); } if (session.isAdvancedTooltips() && !hideTooltips) { @@ -229,31 +237,17 @@ public final class ItemTranslator { * @param modifiers the attribute modifiers of the ItemStack * @param language the locale of the player */ - private static void addAttributeLore(ItemAttributeModifiers modifiers, BedrockItemBuilder builder, String language) { + private static void addAttributeLore(GeyserSession session, ItemAttributeModifiers modifiers, BedrockItemBuilder builder, String language) { // maps each slot to the modifiers applied when in such slot Map<ItemAttributeModifiers.EquipmentSlotGroup, List<String>> slotsToModifiers = new HashMap<>(); for (ItemAttributeModifiers.Entry entry : modifiers.getModifiers()) { // convert the modifier tag to a lore entry - String loreEntry = attributeToLore(entry.getAttribute(), entry.getModifier(), language); + String loreEntry = attributeToLore(session, entry.getAttribute(), entry.getModifier(), language); if (loreEntry == null) { continue; // invalid or failed } - ItemAttributeModifiers.EquipmentSlotGroup slotGroup = entry.getSlot(); - if (slotGroup == ItemAttributeModifiers.EquipmentSlotGroup.ARMOR) { - // modifier applies to all armor slots - for (ItemAttributeModifiers.EquipmentSlotGroup slot : ARMOR_SLOT_NAMES) { - slotsToModifiers.computeIfAbsent(slot, s -> new ArrayList<>()).add(loreEntry); - } - } else if (slotGroup == ItemAttributeModifiers.EquipmentSlotGroup.ANY) { - // modifier applies to all slots implicitly - for (var slot : SLOT_NAMES.keySet()) { - slotsToModifiers.computeIfAbsent(slot, s -> new ArrayList<>()).add(loreEntry); - } - } else { - // modifier applies to only the specified slot - slotsToModifiers.computeIfAbsent(slotGroup, s -> new ArrayList<>()).add(loreEntry); - } + slotsToModifiers.computeIfAbsent(entry.getSlot(), s -> new ArrayList<>()).add(loreEntry); } // iterate through the small array, not the map, so that ordering matches Java Edition @@ -279,7 +273,7 @@ public final class ItemTranslator { } @Nullable - private static String attributeToLore(int attribute, ItemAttributeModifiers.AttributeModifier modifier, String language) { + private static String attributeToLore(GeyserSession session, int attribute, ItemAttributeModifiers.AttributeModifier modifier, String language) { double amount = modifier.getAmount(); if (amount == 0) { return null; @@ -289,24 +283,35 @@ public final class ItemTranslator { // the namespace does not need to be present, but if it is, the java client ignores it as of pre-1.20.5 ModifierOperation operation = modifier.getOperation(); + boolean baseModifier = false; String operationTotal = switch (operation) { case ADD -> { - if (name.equals("generic.knockback_resistance")) { + if (name.equals("knockback_resistance")) { amount *= 10; } + + if (modifier.getId().equals(BASE_ATTACK_DAMAGE_ID)) { + amount += session.getPlayerEntity().attributeOrDefault(GeyserAttributeType.ATTACK_DAMAGE); + baseModifier = true; + } else if (modifier.getId().equals(BASE_ATTACK_SPEED_ID)) { + amount += session.getPlayerEntity().attributeOrDefault(GeyserAttributeType.ATTACK_SPEED); + baseModifier = true; + } + yield ATTRIBUTE_FORMAT.format(amount); } case ADD_MULTIPLIED_BASE, ADD_MULTIPLIED_TOTAL -> ATTRIBUTE_FORMAT.format(amount * 100) + "%"; }; - if (amount > 0) { + if (amount > 0 && !baseModifier) { operationTotal = "+" + operationTotal; } + Component attributeComponent = Component.text() .resetStyle() - .color(amount > 0 ? NamedTextColor.BLUE : NamedTextColor.RED) - .append(Component.text(operationTotal + " "), Component.translatable("attribute.name." + name)) + .color(baseModifier ? NamedTextColor.DARK_GREEN : amount > 0 ? NamedTextColor.BLUE : NamedTextColor.RED) + .append(Component.text(" " + operationTotal + " "), Component.translatable("attribute.name." + name)) .build(); return MessageTranslator.convertMessage(attributeComponent, language); From b2045a5b3d55eb51fd6caef9207bb082d860751a Mon Sep 17 00:00:00 2001 From: Valaphee The Meerkat <32491319+valaphee@users.noreply.github.com> Date: Wed, 11 Dec 2024 03:04:33 +0100 Subject: [PATCH 117/165] Fix skull mix-up by not reusing skulls (#5206) --- .../entity/type/player/SkullPlayerEntity.java | 11 ----- .../geyser/session/cache/SkullCache.java | 45 ++++--------------- 2 files changed, 9 insertions(+), 47 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/player/SkullPlayerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/player/SkullPlayerEntity.java index 1c5060de0..4c8d1d20b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/player/SkullPlayerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/player/SkullPlayerEntity.java @@ -102,17 +102,6 @@ public class SkullPlayerEntity extends PlayerEntity { session.sendUpstreamPacket(addPlayerPacket); } - /** - * Hide the player entity so that it can be reused for a different skull. - */ - public void free() { - setFlag(EntityFlag.INVISIBLE, true); - updateBedrockMetadata(); - - // Move skull entity out of the way - moveAbsolute(session.getPlayerEntity().getPosition().up(128), 0, 0, 0, false, true); - } - public void updateSkull(SkullCache.Skull skull) { skullPosition = skull.getPosition(); 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 0eec39b0b..a3cf1247f 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 @@ -50,20 +50,14 @@ import java.util.*; public class SkullCache { private final int maxVisibleSkulls; private final boolean cullingEnabled; - + private final int skullRenderDistanceSquared; - - /** - * The time in milliseconds before unused skull entities are despawned - */ - private static final long CLEANUP_PERIOD = 10000; @Getter private final Map<Vector3i, Skull> skulls = new Object2ObjectOpenHashMap<>(); private final List<Skull> inRangeSkulls = new ArrayList<>(); - private final Deque<SkullPlayerEntity> unusedSkullEntities = new ArrayDeque<>(); private int totalSkullEntities = 0; private final GeyserSession session; @@ -188,43 +182,26 @@ public class SkullCache { } } } - - // Occasionally clean up unused entities as we want to keep skull - // entities around for later use, to reduce "player" pop-in - if ((System.currentTimeMillis() - lastCleanup) > CLEANUP_PERIOD) { - lastCleanup = System.currentTimeMillis(); - for (SkullPlayerEntity entity : unusedSkullEntities) { - entity.despawnEntity(); - totalSkullEntities--; - } - unusedSkullEntities.clear(); - } } private void assignSkullEntity(Skull skull) { if (skull.entity != null) { return; } - if (unusedSkullEntities.isEmpty()) { - if (!cullingEnabled || totalSkullEntities < maxVisibleSkulls) { - // Create a new entity - long geyserId = session.getEntityCache().getNextEntityId().incrementAndGet(); - skull.entity = new SkullPlayerEntity(session, geyserId); - skull.entity.spawnEntity(); - skull.entity.updateSkull(skull); - totalSkullEntities++; - } - } else { - // Reuse an entity - skull.entity = unusedSkullEntities.removeFirst(); + if (!cullingEnabled || totalSkullEntities < maxVisibleSkulls) { + // Create a new entity + long geyserId = session.getEntityCache().getNextEntityId().incrementAndGet(); + skull.entity = new SkullPlayerEntity(session, geyserId); + skull.entity.spawnEntity(); skull.entity.updateSkull(skull); + totalSkullEntities++; } } private void freeSkullEntity(Skull skull) { if (skull.entity != null) { - skull.entity.free(); - unusedSkullEntities.addFirst(skull.entity); + skull.entity.despawnEntity(); + totalSkullEntities--; skull.entity = null; } } @@ -250,10 +227,6 @@ public class SkullCache { } skulls.clear(); inRangeSkulls.clear(); - for (SkullPlayerEntity skull : unusedSkullEntities) { - skull.despawnEntity(); - } - unusedSkullEntities.clear(); totalSkullEntities = 0; lastPlayerPosition = null; } From b36bc9e95accc97b22d6993c0fd71fc6650c2e57 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Wed, 11 Dec 2024 23:31:23 +0800 Subject: [PATCH 118/165] Indicate 1.21.51 support --- .../main/java/org/geysermc/geyser/network/GameProtocol.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 bb7032d25..7aaeef87d 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -48,7 +48,7 @@ public final class GameProtocol { * release of the game that Geyser supports. */ public static final BedrockCodec DEFAULT_BEDROCK_CODEC = CodecProcessor.processCodec(Bedrock_v766.CODEC.toBuilder() - .minecraftVersion("1.21.50") + .minecraftVersion("1.21.51") .build()); /** @@ -66,7 +66,9 @@ public final class GameProtocol { SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v748.CODEC.toBuilder() .minecraftVersion("1.21.40 - 1.21.44") .build())); - SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC); + SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC.toBuilder() + .minecraftVersion("1.21.50 - 1.21.51") + .build()); } /** From f24ba549df44c2effec31b9ba82d319321b1129a Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Thu, 12 Dec 2024 09:13:04 +0800 Subject: [PATCH 119/165] Target master branch for 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 e8089e117..8707dd144 160000 --- a/core/src/main/resources/mappings +++ b/core/src/main/resources/mappings @@ -1 +1 @@ -Subproject commit e8089e117605e60a5ced120926c49fae7617c665 +Subproject commit 8707dd144b20632f4a2f4b5497d8e5fb211e6c93 From c8dadd8342c5c8fba14a5da962700f741c3b116b Mon Sep 17 00:00:00 2001 From: Eclipse <eclipse@eclipseisoffline.xyz> Date: Sat, 14 Dec 2024 18:31:24 +0000 Subject: [PATCH 120/165] Remove Java attribute entity type prefixes (#5228) --- .../entity/attribute/GeyserAttributeType.java | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) 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 833f2f46d..10e93810e 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 @@ -35,22 +35,22 @@ import lombok.Getter; public enum GeyserAttributeType { // Universal Attributes - FOLLOW_RANGE("minecraft:generic.follow_range", "minecraft:follow_range", 0f, 2048f, 32f), - KNOCKBACK_RESISTANCE("minecraft:generic.knockback_resistance", "minecraft:knockback_resistance", 0f, 1f, 0f), - MOVEMENT_SPEED("minecraft:generic.movement_speed", "minecraft:movement", 0f, 1024f, 0.1f), - FLYING_SPEED("minecraft:generic.flying_speed", "minecraft:movement", 0.0f, 1024.0f, 0.4000000059604645f), - ATTACK_DAMAGE("minecraft:generic.attack_damage", "minecraft:attack_damage", 0f, 2048f, 1f), - HORSE_JUMP_STRENGTH("minecraft:horse.jump_strength", "minecraft:horse.jump_strength", 0.0f, 2.0f, 0.7f), - LUCK("minecraft:generic.luck", "minecraft:luck", -1024f, 1024f, 0f), + FOLLOW_RANGE("minecraft:follow_range", "minecraft:follow_range", 0f, 2048f, 32f), + KNOCKBACK_RESISTANCE("minecraft:knockback_resistance", "minecraft:knockback_resistance", 0f, 1f, 0f), + MOVEMENT_SPEED("minecraft:movement_speed", "minecraft:movement", 0f, 1024f, 0.1f), + FLYING_SPEED("minecraft:flying_speed", "minecraft:movement", 0.0f, 1024.0f, 0.4000000059604645f), + ATTACK_DAMAGE("minecraft:attack_damage", "minecraft:attack_damage", 0f, 2048f, 1f), + HORSE_JUMP_STRENGTH("minecraft:jump_strength", "minecraft:horse.jump_strength", 0.0f, 2.0f, 0.7f), + LUCK("minecraft:luck", "minecraft:luck", -1024f, 1024f, 0f), // Java Attributes - ARMOR("minecraft:generic.armor", null, 0f, 30f, 0f), - ARMOR_TOUGHNESS("minecraft:generic.armor_toughness", null, 0F, 20f, 0f), - ATTACK_KNOCKBACK("minecraft:generic.attack_knockback", null, 1.5f, Float.MAX_VALUE, 0f), - ATTACK_SPEED("minecraft:generic.attack_speed", null, 0f, 1024f, 4f), - MAX_HEALTH("minecraft:generic.max_health", null, 0f, 1024f, 20f), - SCALE("minecraft:generic.scale", null, 0.0625f, 16f, 1f), - BLOCK_INTERACTION_RANGE("minecraft:player.block_interaction_range", null, 0.0f, 64f, 4.5f), + ARMOR("minecraft:armor", null, 0f, 30f, 0f), + ARMOR_TOUGHNESS("minecraft:armor_toughness", null, 0F, 20f, 0f), + ATTACK_KNOCKBACK("minecraft:attack_knockback", null, 1.5f, Float.MAX_VALUE, 0f), + ATTACK_SPEED("minecraft:attack_speed", null, 0f, 1024f, 4f), + MAX_HEALTH("minecraft:max_health", null, 0f, 1024f, 20f), + SCALE("minecraft:scale", null, 0.0625f, 16f, 1f), + BLOCK_INTERACTION_RANGE("minecraft:block_interaction_range", null, 0.0f, 64f, 4.5f), MINING_EFFICIENCY("minecraft:mining_efficiency", null, 0f, 1024f, 0f), BLOCK_BREAK_SPEED("minecraft:block_break_speed", null, 0f, 1024f, 1f), SUBMERGED_MINING_SPEED("minecraft:submerged_mining_speed", null, 0f, 20f, 0.2f), From 54bdb639cba95b19d0d50f2727c8421d8754972f Mon Sep 17 00:00:00 2001 From: AlexDev_ <56083016+alexdev03@users.noreply.github.com> Date: Sun, 15 Dec 2024 16:15:55 +0100 Subject: [PATCH 121/165] Fix for plugins that use display entities as nametag (#5157) * Fix for display entity nametags * Added check * Moved lines count to TextDisplayEntity class Removed useless offset * Reset lines when text is null * Conversation changes * Changed y offset formula Removed space * Played around with the yOffset a bit --------- Co-authored-by: Tim203 <mctim203@gmail.com> --- .../geyser/entity/type/TextDisplayEntity.java | 16 ++++++++++++++++ .../org/geysermc/geyser/util/EntityUtils.java | 12 ++++++++++++ 2 files changed, 28 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 8b47ce1ed..0cd207c52 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 @@ -25,18 +25,25 @@ package org.geysermc.geyser.entity.type; +import lombok.Getter; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.text.MessageTranslator; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata; +import org.jetbrains.annotations.Nullable; import java.util.UUID; // Note: 1.19.4 requires that the billboard is set to something in order to show, on Java Edition +@Getter public class TextDisplayEntity extends DisplayBaseEntity { + + private int lineCount; + public TextDisplayEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) { super(session, entityId, geyserId, uuid, definition, position.add(0, definition.offset(), 0), motion, yaw, pitch, headYaw); } @@ -61,5 +68,14 @@ public class TextDisplayEntity extends DisplayBaseEntity { public void setText(EntityMetadata<Component, ?> entityMetadata) { this.dirtyMetadata.put(EntityDataTypes.NAME, MessageTranslator.convertMessage(entityMetadata.getValue())); + calculateLineCount(entityMetadata.getValue()); + } + + private void calculateLineCount(@Nullable Component text) { + if (text == null) { + lineCount = 0; + return; + } + lineCount = PlainTextComponentSerializer.plainText().serialize(text).split("\n").length; } } 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 034975b15..388162a49 100644 --- a/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java @@ -209,6 +209,18 @@ public final class EntityUtils { zOffset = displayTranslation.getZ(); } } + case PLAYER -> { + if (passenger instanceof TextDisplayEntity textDisplay) { + Vector3f displayTranslation = textDisplay.getTranslation(); + int lines = textDisplay.getLineCount(); + if (displayTranslation != null && lines != 0) { + float multiplier = .1414f; + xOffset = displayTranslation.getX(); + yOffset += displayTranslation.getY() + multiplier * lines; + zOffset = displayTranslation.getZ(); + } + } + } } if (mount instanceof ChestBoatEntity) { xOffset = 0.15F; From a5c77a707241e07dae5654d17de1e1fd2ceec022 Mon Sep 17 00:00:00 2001 From: rtm516 <rtm516@users.noreply.github.com> Date: Sun, 15 Dec 2024 22:40:14 +0000 Subject: [PATCH 122/165] Add extension update folder (#4929) * Add extension update folder * Check the update folder exists before trying to use it * Remove old jars under different names for the same extensions * Store file path to save on calls * Fix storing path * Update languages * Update core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java Co-authored-by: chris <github@onechris.mozmail.com> * Only pull data from the map once * Update core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java Co-authored-by: Konicai <71294714+Konicai@users.noreply.github.com> * Move to consumer function for processing extension folders * Add back some comments * Allow cleanup of multiple old extensions * Address review comments * Tidy logger calls --------- Co-authored-by: chris <github@onechris.mozmail.com> Co-authored-by: Konicai <71294714+Konicai@users.noreply.github.com> --- .../extension/GeyserExtensionLoader.java | 136 ++++++++++++------ .../geyser/util/ThrowingBiConsumer.java | 42 ++++++ 2 files changed, 136 insertions(+), 42 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/util/ThrowingBiConsumer.java 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 a56e00671..10cbcf556 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java +++ b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java @@ -31,6 +31,7 @@ import lombok.RequiredArgsConstructor; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.api.util.ApiVersion; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.api.GeyserApi; import org.geysermc.geyser.api.event.ExtensionEventBus; import org.geysermc.geyser.api.extension.Extension; @@ -42,6 +43,7 @@ import org.geysermc.geyser.api.extension.exception.InvalidDescriptionException; import org.geysermc.geyser.api.extension.exception.InvalidExtensionException; import org.geysermc.geyser.extension.event.GeyserExtensionEventBus; import org.geysermc.geyser.text.GeyserLocale; +import org.geysermc.geyser.util.ThrowingBiConsumer; import java.io.IOException; import java.io.Reader; @@ -51,10 +53,12 @@ import java.nio.file.Files; import java.nio.file.NoSuchFileException; import java.nio.file.Path; import java.nio.file.StandardCopyOption; +import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.function.BiConsumer; import java.util.regex.Pattern; @RequiredArgsConstructor @@ -155,6 +159,7 @@ public class GeyserExtensionLoader extends ExtensionLoader { @Override protected void loadAllExtensions(@NonNull ExtensionManager extensionManager) { + GeyserLogger logger = GeyserImpl.getInstance().getLogger(); try { if (Files.notExists(extensionsDirectory)) { Files.createDirectory(extensionsDirectory); @@ -163,55 +168,68 @@ public class GeyserExtensionLoader extends ExtensionLoader { Map<String, Path> extensions = new LinkedHashMap<>(); Map<String, GeyserExtensionContainer> loadedExtensions = new LinkedHashMap<>(); - Pattern[] extensionFilters = this.extensionFilters(); - List<Path> extensionPaths = Files.walk(extensionsDirectory).toList(); - extensionPaths.forEach(path -> { - if (Files.isDirectory(path)) { - return; - } + Path updateDirectory = extensionsDirectory.resolve("update"); + if (Files.isDirectory(updateDirectory)) { + // Step 1: Collect the extension files that currently exist so they can be replaced + Map<String, List<Path>> extensionFiles = new HashMap<>(); + this.processExtensionsFolder(extensionsDirectory, (path, description) -> { + extensionFiles.computeIfAbsent(description.id(), k -> new ArrayList<>()).add(path); + }, (path, e) -> { + // this file will throw again when we actually try to load extensions, and it will be handled there + }); - for (Pattern filter : extensionFilters) { - if (!filter.matcher(path.getFileName().toString()).matches()) { - return; - } - } - - try { - GeyserExtensionDescription description = this.extensionDescription(path); - - String name = description.name(); - String id = description.id(); - if (extensions.containsKey(id) || extensionManager.extension(id) != null) { - GeyserImpl.getInstance().getLogger().warning(GeyserLocale.getLocaleStringLog("geyser.extensions.load.duplicate", name, path.toString())); - return; - } - - // Check whether an extensions' requested api version is compatible - ApiVersion.Compatibility compatibility = GeyserApi.api().geyserApiVersion().supportsRequestedVersion( - description.humanApiVersion(), - description.majorApiVersion(), - description.minorApiVersion() - ); - - if (compatibility != ApiVersion.Compatibility.COMPATIBLE) { - // Workaround for the switch to the Geyser API version instead of the Base API version in extensions - if (compatibility == ApiVersion.Compatibility.HUMAN_DIFFER && description.humanApiVersion() == 1) { - GeyserImpl.getInstance().getLogger().warning("The extension %s requested the Base API version %s, which is deprecated in favor of specifying the Geyser API version. Please update the extension, or contact its developer." - .formatted(name, description.apiVersion())); - } else { - GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.extensions.load.failed_api_version", name, description.apiVersion())); - return; + // Step 2: Move the updated/new extensions + this.processExtensionsFolder(updateDirectory, (path, description) -> { + // Remove the old extension files with the same ID if it exists + List<Path> oldExtensionFiles = extensionFiles.get(description.id()); + if (oldExtensionFiles != null) { + for (Path oldExtensionFile : oldExtensionFiles) { + Files.delete(oldExtensionFile); } } - GeyserExtensionContainer container = this.loadExtension(path, description); - extensions.put(id, path); - loadedExtensions.put(id, container); - } catch (Throwable e) { - GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.extensions.load.failed_with_name", path.getFileName(), path.toAbsolutePath()), e); + // Overwrite the extension with the new jar + Files.move(path, extensionsDirectory.resolve(path.getFileName()), StandardCopyOption.REPLACE_EXISTING); + }, (path, e) -> { + logger.error(GeyserLocale.getLocaleStringLog("geyser.extensions.update.failed", path.getFileName()), e); + }); + } + + // Step 3: Load the extensions + this.processExtensionsFolder(extensionsDirectory, (path, description) -> { + String name = description.name(); + String id = description.id(); + if (extensions.containsKey(id) || extensionManager.extension(id) != null) { + logger.warning(GeyserLocale.getLocaleStringLog("geyser.extensions.load.duplicate", name, path.toString())); + return; } + + // Check whether an extensions' requested api version is compatible + ApiVersion.Compatibility compatibility = GeyserApi.api().geyserApiVersion().supportsRequestedVersion( + description.humanApiVersion(), + description.majorApiVersion(), + description.minorApiVersion() + ); + + if (compatibility != ApiVersion.Compatibility.COMPATIBLE) { + // Workaround for the switch to the Geyser API version instead of the Base API version in extensions + if (compatibility == ApiVersion.Compatibility.HUMAN_DIFFER && description.humanApiVersion() == 1) { + logger.warning("The extension %s requested the Base API version %s, which is deprecated in favor of specifying the Geyser API version. Please update the extension, or contact its developer." + .formatted(name, description.apiVersion())); + } else { + logger.error(GeyserLocale.getLocaleStringLog("geyser.extensions.load.failed_api_version", name, description.apiVersion())); + return; + } + } + + GeyserExtensionContainer container = this.loadExtension(path, description); + extensions.put(id, path); + loadedExtensions.put(id, container); + }, (path, e) -> { + logger.error(GeyserLocale.getLocaleStringLog("geyser.extensions.load.failed_with_name", path.getFileName(), path.toAbsolutePath()), e); }); + // Step 4: Register the extensions for (GeyserExtensionContainer container : loadedExtensions.values()) { this.extensionContainers.put(container.extension(), container); this.register(container.extension(), extensionManager); @@ -221,6 +239,40 @@ public class GeyserExtensionLoader extends ExtensionLoader { } } + /** + * Process extension jars in a folder and call the accept or reject consumer based on the result + * + * @param directory the directory to process + * @param accept the consumer to call when an extension is accepted + * @param reject the consumer to call when an extension is rejected + * @throws IOException if an I/O error occurs + */ + private void processExtensionsFolder(Path directory, ThrowingBiConsumer<Path, GeyserExtensionDescription> accept, BiConsumer<Path, Throwable> reject) throws IOException { + List<Path> extensionPaths = Files.list(directory).toList(); + Pattern[] extensionFilters = this.extensionFilters(); + extensionPaths.forEach(path -> { + if (Files.isDirectory(path)) { + return; + } + + // Only look at files that meet the extension filter + for (Pattern filter : extensionFilters) { + if (!filter.matcher(path.getFileName().toString()).matches()) { + return; + } + } + + try { + // Try load the description, so we know it's a valid extension + GeyserExtensionDescription description = this.extensionDescription(path); + + accept.acceptThrows(path, description); + } catch (Throwable e) { + reject.accept(path, e); + } + }); + } + @Override protected boolean isEnabled(@NonNull Extension extension) { return this.extensionContainers.get(extension).enabled; diff --git a/core/src/main/java/org/geysermc/geyser/util/ThrowingBiConsumer.java b/core/src/main/java/org/geysermc/geyser/util/ThrowingBiConsumer.java new file mode 100644 index 000000000..96adbb5c9 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/util/ThrowingBiConsumer.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 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.util; + +import java.util.function.BiConsumer; + +@FunctionalInterface +public interface ThrowingBiConsumer<T, U> extends BiConsumer<T, U> { + @Override + default void accept(T t, U u) { + try { + acceptThrows(t, u); + } catch (Throwable e) { + throw new RuntimeException(e); + } + } + + void acceptThrows(T t, U u) throws Throwable; +} From 64c7adcacfb1ad39c7035ab0c9ccf81468e75485 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Mon, 16 Dec 2024 10:54:36 +0800 Subject: [PATCH 123/165] Fix: Geyser-Spigot not loading on 1.16.5, remove unused code --- .../geyser/entity/type/BoatEntity.java | 34 ++++++------------- .../geyser/entity/type/ChestBoatEntity.java | 6 ---- .../DataComponentRegistryPopulator.java | 3 +- gradle/libs.versions.toml | 6 ++-- 4 files changed, 16 insertions(+), 33 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java index 04df96361..7d789fb2a 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java @@ -32,8 +32,6 @@ import org.cloudburstmc.protocol.bedrock.packet.AnimatePacket; import org.cloudburstmc.protocol.bedrock.packet.MoveEntityAbsolutePacket; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.entity.EntityDefinitions; -import org.geysermc.geyser.item.Items; -import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; @@ -220,10 +218,6 @@ public class BoatEntity extends Entity implements Leashable, Tickable { return leashHolderBedrockId; } - public Item getPickItem() { - return variant.pickItem; - } - private void sendAnimationPacket(GeyserSession session, Entity rower, AnimatePacket.Action action, float rowTime) { AnimatePacket packet = new AnimatePacket(); packet.setRuntimeEntityId(rower.getGeyserId()); @@ -236,23 +230,17 @@ public class BoatEntity extends Entity implements Leashable, Tickable { * Ordered by Bedrock ordinal */ public enum BoatVariant { - OAK(Items.OAK_BOAT, Items.OAK_CHEST_BOAT), - SPRUCE(Items.SPRUCE_BOAT, Items.SPRUCE_CHEST_BOAT), - BIRCH(Items.BIRCH_BOAT, Items.BIRCH_CHEST_BOAT), - JUNGLE(Items.JUNGLE_BOAT, Items.JUNGLE_CHEST_BOAT), - ACACIA(Items.ACACIA_BOAT, Items.ACACIA_CHEST_BOAT), - DARK_OAK(Items.DARK_OAK_BOAT, Items.DARK_OAK_CHEST_BOAT), - MANGROVE(Items.MANGROVE_BOAT, Items.MANGROVE_CHEST_BOAT), - BAMBOO(Items.BAMBOO_RAFT, Items.BAMBOO_CHEST_RAFT), - CHERRY(Items.CHERRY_BOAT, Items.CHERRY_CHEST_BOAT), - PALE_OAK(Items.PALE_OAK_BOAT, Items.PALE_OAK_CHEST_BOAT); + OAK, + SPRUCE, + BIRCH, + JUNGLE, + ACACIA, + DARK_OAK, + MANGROVE, + BAMBOO, + CHERRY, + PALE_OAK; - private final Item pickItem; - final Item chestPickItem; - - BoatVariant(Item pickItem, Item chestPickItem) { - this.pickItem = pickItem; - this.chestPickItem = chestPickItem; - } + BoatVariant() {} } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ChestBoatEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ChestBoatEntity.java index 967da41df..5475ca772 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ChestBoatEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ChestBoatEntity.java @@ -27,7 +27,6 @@ package org.geysermc.geyser.entity.type; import org.cloudburstmc.math.vector.Vector3f; import org.geysermc.geyser.entity.EntityDefinition; -import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; @@ -49,9 +48,4 @@ public class ChestBoatEntity extends BoatEntity { public InteractionResult interact(Hand hand) { return passengers.isEmpty() && !session.isSneaking() ? super.interact(hand) : InteractionResult.SUCCESS; } - - @Override - public Item getPickItem() { - return this.variant.chestPickItem; - } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java index 386c795d2..d8547bbfc 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java @@ -55,7 +55,8 @@ public final class DataComponentRegistryPopulator { GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); List<DataComponents> defaultComponents; try (InputStream stream = bootstrap.getResourceOrThrow("java/item_data_components.json")) { - JsonElement rootElement = JsonParser.parseReader(new InputStreamReader(stream)); + //noinspection deprecation - 1.16.5 breaks otherwise + JsonElement rootElement = new JsonParser().parse(new InputStreamReader(stream)); JsonArray jsonArray = rootElement.getAsJsonArray(); defaultComponents = new ObjectArrayList<>(jsonArray.size()); diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1166bab35..b90436644 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,9 +10,9 @@ netty-io-uring = "0.0.25.Final-SNAPSHOT" guava = "29.0-jre" gson = "2.3.1" # Provided by Spigot 1.8.8 websocket = "1.5.1" -protocol-connection = "3.0.0.Beta5-20241203.200249-19" -protocol-common = "3.0.0.Beta5-20241203.200249-19" -protocol-codec = "3.0.0.Beta5-20241203.200249-19" +protocol-connection = "3.0.0.Beta5-20241213.160944-20" +protocol-common = "3.0.0.Beta5-20241213.160944-20" +protocol-codec = "3.0.0.Beta5-20241213.160944-20" raknet = "1.0.0.CR3-20240416.144209-1" minecraftauth = "4.1.1" mcprotocollib = "1.21.4-SNAPSHOT" From 006fe75e5af5f5686fb18051415663cb8ceaaa1b Mon Sep 17 00:00:00 2001 From: Adri <adrigamer2950@gmail.com> Date: Sun, 22 Dec 2024 03:51:13 +0100 Subject: [PATCH 124/165] fix: Wrong map colors (#5238) --- .../org/geysermc/geyser/level/MapColor.java | 416 +++++++++--------- 1 file changed, 208 insertions(+), 208 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/level/MapColor.java b/core/src/main/java/org/geysermc/geyser/level/MapColor.java index a599f9146..f4b4fb697 100644 --- a/core/src/main/java/org/geysermc/geyser/level/MapColor.java +++ b/core/src/main/java/org/geysermc/geyser/level/MapColor.java @@ -30,26 +30,26 @@ public enum MapColor { COLOR_1(-1, -1, -1), COLOR_2(-1, -1, -1), COLOR_3(-1, -1, -1), - COLOR_4(89, 125, 39), - COLOR_5(109, 153, 48), - COLOR_6(127, 178, 56), - COLOR_7(67, 94, 29), - COLOR_8(174, 164, 115), - COLOR_9(213, 201, 140), - COLOR_10(247, 233, 163), - COLOR_11(130, 123, 86), + COLOR_4(39, 125, 89), + COLOR_5(48, 153, 109), + COLOR_6(56, 178, 127), + COLOR_7(29, 94, 67), + COLOR_8(115, 164, 174), + COLOR_9(140, 201, 213), + COLOR_10(163, 233, 247), + COLOR_11(86, 123, 130), COLOR_12(140, 140, 140), COLOR_13(171, 171, 171), COLOR_14(199, 199, 199), COLOR_15(105, 105, 105), - COLOR_16(180, 0, 0), - COLOR_17(220, 0, 0), - COLOR_18(255, 0, 0), - COLOR_19(135, 0, 0), - COLOR_20(112, 112, 180), - COLOR_21(138, 138, 220), - COLOR_22(160, 160, 255), - COLOR_23(84, 84, 135), + COLOR_16(0, 0, 180), + COLOR_17(0, 0, 220), + COLOR_18(0, 0, 255), + COLOR_19(0, 0, 135), + COLOR_20(180, 112, 112), + COLOR_21(220, 138, 138), + COLOR_22(255, 160, 160), + COLOR_23(135, 84, 84), COLOR_24(117, 117, 117), COLOR_25(144, 144, 144), COLOR_26(167, 167, 167), @@ -62,54 +62,54 @@ public enum MapColor { COLOR_33(220, 220, 220), COLOR_34(255, 255, 255), COLOR_35(135, 135, 135), - COLOR_36(115, 118, 129), - COLOR_37(141, 144, 158), - COLOR_38(164, 168, 184), - COLOR_39(86, 88, 97), - COLOR_40(106, 76, 54), - COLOR_41(130, 94, 66), - COLOR_42(151, 109, 77), - COLOR_43(79, 57, 40), + COLOR_36(129, 118, 115), + COLOR_37(158, 144, 141), + COLOR_38(184, 168, 164), + COLOR_39(97, 88, 86), + COLOR_40(54, 76, 106), + COLOR_41(66, 94, 130), + COLOR_42(77, 109, 151), + COLOR_43(40, 57, 79), COLOR_44(79, 79, 79), COLOR_45(96, 96, 96), COLOR_46(112, 112, 112), COLOR_47(59, 59, 59), - COLOR_48(45, 45, 180), - COLOR_49(55, 55, 220), - COLOR_50(64, 64, 255), - COLOR_51(33, 33, 135), - COLOR_52(100, 84, 50), - COLOR_53(123, 102, 62), - COLOR_54(143, 119, 72), - COLOR_55(75, 63, 38), - COLOR_56(180, 177, 172), - COLOR_57(220, 217, 211), - COLOR_58(255, 252, 245), - COLOR_59(135, 133, 129), - COLOR_60(152, 89, 36), - COLOR_61(186, 109, 44), - COLOR_62(216, 127, 51), - COLOR_63(114, 67, 27), - COLOR_64(125, 53, 152), - COLOR_65(153, 65, 186), - COLOR_66(178, 76, 216), - COLOR_67(94, 40, 114), - COLOR_68(72, 108, 152), - COLOR_69(88, 132, 186), - COLOR_70(102, 153, 216), - COLOR_71(54, 81, 114), - COLOR_72(161, 161, 36), - COLOR_73(197, 197, 44), - COLOR_74(229, 229, 51), - COLOR_75(121, 121, 27), - COLOR_76(89, 144, 17), - COLOR_77(109, 176, 21), - COLOR_78(127, 204, 25), - COLOR_79(67, 108, 13), - COLOR_80(170, 89, 116), - COLOR_81(208, 109, 142), - COLOR_82(242, 127, 165), - COLOR_83(128, 67, 87), + COLOR_48(180, 45, 45), + COLOR_49(220, 55, 55), + COLOR_50(255, 64, 64), + COLOR_51(135, 33, 33), + COLOR_52(50, 84, 100), + COLOR_53(62, 102, 123), + COLOR_54(72, 119, 143), + COLOR_55(38, 63, 75), + COLOR_56(172, 177, 180), + COLOR_57(211, 217, 220), + COLOR_58(245, 252, 255), + COLOR_59(129, 133, 135), + COLOR_60(36, 89, 152), + COLOR_61(44, 109, 186), + COLOR_62(51, 127, 216), + COLOR_63(27, 67, 114), + COLOR_64(152, 53, 125), + COLOR_65(186, 65, 153), + COLOR_66(216, 76, 178), + COLOR_67(114, 40, 94), + COLOR_68(152, 108, 72), + COLOR_69(186, 132, 88), + COLOR_70(216, 153, 102), + COLOR_71(114, 81, 54), + COLOR_72(36, 161, 161), + COLOR_73(44, 197, 197), + COLOR_74(51, 229, 229), + COLOR_75(27, 121, 121), + COLOR_76(17, 144, 89), + COLOR_77(21, 176, 109), + COLOR_78(25, 204, 127), + COLOR_79(13, 108, 67), + COLOR_80(116, 89, 170), + COLOR_81(142, 109, 208), + COLOR_82(165, 127, 242), + COLOR_83(87, 67, 128), COLOR_84(53, 53, 53), COLOR_85(65, 65, 65), COLOR_86(76, 76, 76), @@ -118,162 +118,162 @@ public enum MapColor { COLOR_89(132, 132, 132), COLOR_90(153, 153, 153), COLOR_91(81, 81, 81), - COLOR_92(53, 89, 108), - COLOR_93(65, 109, 132), - COLOR_94(76, 127, 153), - COLOR_95(40, 67, 81), - COLOR_96(89, 44, 125), - COLOR_97(109, 54, 153), - COLOR_98(127, 63, 178), - COLOR_99(67, 33, 94), - COLOR_100(36, 53, 125), - COLOR_101(44, 65, 153), - COLOR_102(51, 76, 178), - COLOR_103(27, 40, 94), - COLOR_104(72, 53, 36), - COLOR_105(88, 65, 44), - COLOR_106(102, 76, 51), - COLOR_107(54, 40, 27), - COLOR_108(72, 89, 36), - COLOR_109(88, 109, 44), - COLOR_110(102, 127, 51), - COLOR_111(54, 67, 27), - COLOR_112(108, 36, 36), - COLOR_113(132, 44, 44), - COLOR_114(153, 51, 51), - COLOR_115(81, 27, 27), + COLOR_92(108, 89, 53), + COLOR_93(132, 109, 65), + COLOR_94(153, 127, 76), + COLOR_95(81, 67, 40), + COLOR_96(125, 44, 89), + COLOR_97(153, 54, 109), + COLOR_98(178, 63, 127), + COLOR_99(94, 33, 67), + COLOR_100(125, 53, 36), + COLOR_101(153, 65, 44), + COLOR_102(178, 76, 51), + COLOR_103(94, 40, 27), + COLOR_104(36, 53, 72), + COLOR_105(44, 65, 88), + COLOR_106(51, 76, 102), + COLOR_107(27, 40, 54), + COLOR_108(36, 89, 72), + COLOR_109(44, 109, 88), + COLOR_110(51, 127, 102), + COLOR_111(27, 67, 54), + COLOR_112(36, 36, 108), + COLOR_113(44, 44, 132), + COLOR_114(51, 51, 153), + COLOR_115(27, 27, 81), COLOR_116(17, 17, 17), COLOR_117(21, 21, 21), COLOR_118(25, 25, 25), COLOR_119(13, 13, 13), - COLOR_120(176, 168, 54), - COLOR_121(215, 205, 66), - COLOR_122(250, 238, 77), - COLOR_123(132, 126, 40), - COLOR_124(64, 154, 150), - COLOR_125(79, 188, 183), - COLOR_126(92, 219, 213), - COLOR_127(48, 115, 112), - COLOR_128(52, 90, 180), - COLOR_129(63, 110, 220), - COLOR_130(74, 128, 255), - COLOR_131(39, 67, 135), - COLOR_132(0, 153, 40), - COLOR_133(0, 187, 50), - COLOR_134(0, 217, 58), - COLOR_135(0, 114, 30), - COLOR_136(91, 60, 34), - COLOR_137(111, 74, 42), - COLOR_138(129, 86, 49), - COLOR_139(68, 45, 25), - COLOR_140(79, 1, 0), - COLOR_141(96, 1, 0), - COLOR_142(112, 2, 0), - COLOR_143(59, 1, 0), - COLOR_144(147, 124, 113), - COLOR_145(180, 152, 138), - COLOR_146(209, 177, 161), - COLOR_147(110, 93, 85), - COLOR_148(112, 57, 25), - COLOR_149(137, 70, 31), - COLOR_150(159, 82, 36), - COLOR_151(84, 43, 19), - COLOR_152(105, 61, 76), - COLOR_153(128, 75, 93), - COLOR_154(149, 87, 108), - COLOR_155(78, 46, 57), - COLOR_156(79, 76, 97), - COLOR_157(96, 93, 119), - COLOR_158(112, 108, 138), - COLOR_159(59, 57, 73), - COLOR_160(131, 93, 25), - COLOR_161(160, 114, 31), - COLOR_162(186, 133, 36), - COLOR_163(98, 70, 19), - COLOR_164(72, 82, 37), - COLOR_165(88, 100, 45), - COLOR_166(103, 117, 53), - COLOR_167(54, 61, 28), - COLOR_168(112, 54, 55), - COLOR_169(138, 66, 67), - COLOR_170(160, 77, 78), - COLOR_171(84, 40, 41), - COLOR_172(40, 28, 24), - COLOR_173(49, 35, 30), - COLOR_174(57, 41, 35), - COLOR_175(30, 21, 18), - COLOR_176(95, 75, 69), - COLOR_177(116, 92, 84), - COLOR_178(135, 107, 98), - COLOR_179(71, 56, 51), - COLOR_180(61, 64, 64), - COLOR_181(75, 79, 79), - COLOR_182(87, 92, 92), - COLOR_183(46, 48, 48), - COLOR_184(86, 51, 62), - COLOR_185(105, 62, 75), - COLOR_186(122, 73, 88), - COLOR_187(64, 38, 46), - COLOR_188(53, 43, 64), - COLOR_189(65, 53, 79), - COLOR_190(76, 62, 92), - COLOR_191(40, 32, 48), - COLOR_192(53, 35, 24), - COLOR_193(65, 43, 30), - COLOR_194(76, 50, 35), - COLOR_195(40, 26, 18), - COLOR_196(53, 57, 29), - COLOR_197(65, 70, 36), - COLOR_198(76, 82, 42), - COLOR_199(40, 43, 22), - COLOR_200(100, 42, 32), - COLOR_201(122, 51, 39), - COLOR_202(142, 60, 46), - COLOR_203(75, 31, 24), - COLOR_204(26, 15, 11), - COLOR_205(31, 18, 13), - COLOR_206(37, 22, 16), - COLOR_207(19, 11, 8), - COLOR_208(133, 33, 34), - COLOR_209(163, 41, 42), - COLOR_210(189, 48, 49), - COLOR_211(100, 25, 25), - COLOR_212(104, 44, 68), - COLOR_213(127, 54, 83), - COLOR_214(148, 63, 97), - COLOR_215(78, 33, 51), - COLOR_216(64, 17, 20), - COLOR_217(79, 21, 25), - COLOR_218(92, 25, 29), - COLOR_219(48, 13, 15), - COLOR_220(15, 88, 94), - COLOR_221(18, 108, 115), - COLOR_222(22, 126, 134), - COLOR_223(11, 66, 70), - COLOR_224(40, 100, 98), - COLOR_225(50, 122, 120), - COLOR_226(58, 142, 140), - COLOR_227(30, 75, 74), - COLOR_228(60, 31, 43), - COLOR_229(74, 37, 53), - COLOR_230(86, 44, 62), - COLOR_231(45, 23, 32), - COLOR_232(14, 127, 93), - COLOR_233(17, 155, 114), - COLOR_234(20, 180, 133), - COLOR_235(10, 95, 70), + COLOR_120(54, 168, 176), + COLOR_121(66, 205, 215), + COLOR_122(77, 238, 250), + COLOR_123(40, 126, 132), + COLOR_124(150, 154, 64), + COLOR_125(183, 188, 79), + COLOR_126(213, 219, 92), + COLOR_127(112, 115, 48), + COLOR_128(180, 90, 52), + COLOR_129(220, 110, 63), + COLOR_130(255, 128, 74), + COLOR_131(135, 67, 39), + COLOR_132(40, 153, 0), + COLOR_133(50, 187, 0), + COLOR_134(58, 217, 0), + COLOR_135(30, 114, 0), + COLOR_136(34, 60, 91), + COLOR_137(42, 74, 111), + COLOR_138(49, 86, 129), + COLOR_139(25, 45, 68), + COLOR_140(0, 1, 79), + COLOR_141(0, 1, 96), + COLOR_142(0, 2, 112), + COLOR_143(0, 1, 59), + COLOR_144(113, 124, 147), + COLOR_145(138, 152, 180), + COLOR_146(161, 177, 209), + COLOR_147(85, 93, 110), + COLOR_148(25, 57, 112), + COLOR_149(31, 70, 137), + COLOR_150(36, 82, 159), + COLOR_151(19, 43, 84), + COLOR_152(76, 61, 105), + COLOR_153(93, 75, 128), + COLOR_154(108, 87, 149), + COLOR_155(57, 46, 78), + COLOR_156(97, 76, 79), + COLOR_157(119, 93, 96), + COLOR_158(138, 108, 112), + COLOR_159(73, 57, 59), + COLOR_160(25, 93, 131), + COLOR_161(31, 114, 160), + COLOR_162(36, 133, 186), + COLOR_163(19, 70, 98), + COLOR_164(37, 82, 72), + COLOR_165(45, 100, 88), + COLOR_166(53, 117, 103), + COLOR_167(28, 61, 54), + COLOR_168(55, 54, 112), + COLOR_169(67, 66, 138), + COLOR_170(78, 77, 160), + COLOR_171(41, 40, 84), + COLOR_172(24, 28, 40), + COLOR_173(30, 35, 49), + COLOR_174(35, 41, 57), + COLOR_175(18, 21, 30), + COLOR_176(69, 75, 95), + COLOR_177(84, 92, 116), + COLOR_178(98, 107, 135), + COLOR_179(51, 56, 71), + COLOR_180(64, 64, 61), + COLOR_181(79, 79, 75), + COLOR_182(92, 92, 87), + COLOR_183(48, 48, 46), + COLOR_184(62, 51, 86), + COLOR_185(75, 62, 105), + COLOR_186(88, 73, 122), + COLOR_187(46, 38, 64), + COLOR_188(64, 43, 53), + COLOR_189(79, 53, 65), + COLOR_190(92, 62, 76), + COLOR_191(48, 32, 40), + COLOR_192(24, 35, 53), + COLOR_193(30, 43, 65), + COLOR_194(35, 50, 76), + COLOR_195(18, 26, 40), + COLOR_196(29, 57, 53), + COLOR_197(36, 70, 65), + COLOR_198(42, 82, 76), + COLOR_199(22, 43, 40), + COLOR_200(32, 42, 100), + COLOR_201(39, 51, 122), + COLOR_202(46, 60, 142), + COLOR_203(24, 31, 75), + COLOR_204(11, 15, 26), + COLOR_205(13, 18, 31), + COLOR_206(16, 22, 37), + COLOR_207(8, 11, 19), + COLOR_208(34, 33, 133), + COLOR_209(42, 41, 163), + COLOR_210(49, 48, 189), + COLOR_211(25, 25, 100), + COLOR_212(68, 44, 104), + COLOR_213(83, 54, 127), + COLOR_214(97, 63, 148), + COLOR_215(51, 33, 78), + COLOR_216(20, 17, 64), + COLOR_217(25, 21, 79), + COLOR_218(29, 25, 92), + COLOR_219(15, 13, 48), + COLOR_220(94, 88, 15), + COLOR_221(115, 108, 18), + COLOR_222(134, 126, 22), + COLOR_223(70, 66, 11), + COLOR_224(98, 100, 40), + COLOR_225(120, 122, 50), + COLOR_226(140, 142, 58), + COLOR_227(74, 75, 30), + COLOR_228(43, 31, 60), + COLOR_229(53, 37, 74), + COLOR_230(62, 44, 86), + COLOR_231(32, 23, 45), + COLOR_232(93, 127, 14), + COLOR_233(114, 155, 17), + COLOR_234(133, 180, 20), + COLOR_235(70, 95, 10), COLOR_236(70, 70, 70), COLOR_237(86, 86, 86), COLOR_238(100, 100, 100), COLOR_239(52, 52, 52), - COLOR_240(152, 123, 103), - COLOR_241(186, 150, 126), - COLOR_242(216, 175, 147), - COLOR_243(114, 92, 77), - COLOR_244(89, 117, 105), - COLOR_245(109, 144, 129), - COLOR_246(127, 167, 150), - COLOR_247(67, 88, 79); + COLOR_240(103, 123, 152), + COLOR_241(126, 150, 186), + COLOR_242(147, 175, 216), + COLOR_243(77, 92, 114), + COLOR_244(105, 117, 89), + COLOR_245(129, 144, 109), + COLOR_246(150, 167, 127), + COLOR_247(79, 88, 67); private static final MapColor[] VALUES = values(); From 7b5c1bb370ae88409bb89b8c78c824a36fe1bc43 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Mon, 23 Dec 2024 03:29:40 +0800 Subject: [PATCH 125/165] Bump mcpl and mappings --- core/src/main/resources/mappings | 2 +- gradle/libs.versions.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/resources/mappings b/core/src/main/resources/mappings index 8707dd144..e277062f3 160000 --- a/core/src/main/resources/mappings +++ b/core/src/main/resources/mappings @@ -1 +1 @@ -Subproject commit 8707dd144b20632f4a2f4b5497d8e5fb211e6c93 +Subproject commit e277062f3bccbe772baefcd631f0a5442311467c diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b90436644..65cef50f8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,7 @@ protocol-common = "3.0.0.Beta5-20241213.160944-20" protocol-codec = "3.0.0.Beta5-20241213.160944-20" raknet = "1.0.0.CR3-20240416.144209-1" minecraftauth = "4.1.1" -mcprotocollib = "1.21.4-SNAPSHOT" +mcprotocollib = "1.21.4-20241222.190029-11" adventure = "4.14.0" adventure-platform = "4.3.0" junit = "5.9.2" From 030b935d8a1953bc9735ce4bd95b6c105d047b2d Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Tue, 24 Dec 2024 00:18:26 +0800 Subject: [PATCH 126/165] Fix: item frames showing names for items without a custom name (fixes https://github.com/GeyserMC/Geyser/issues/5194) --- .../geyser/entity/type/ItemFrameEntity.java | 17 +++++++++++++---- .../geyser/item/type/ShulkerBoxItem.java | 2 +- .../geyser/translator/item/ItemTranslator.java | 6 +++--- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java index f38e727c0..acb3df2b6 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java @@ -113,14 +113,23 @@ public class ItemFrameEntity extends Entity { if (entityMetadata.getValue() != null) { this.heldItem = entityMetadata.getValue(); ItemData itemData = ItemTranslator.translateToBedrock(session, heldItem); - String customIdentifier = session.getItemMappings().getCustomIdMappings().get(itemData.getDefinition().getRuntimeId()); NbtMapBuilder builder = NbtMap.builder(); - builder.putByte("Count", (byte) itemData.getCount()); - if (itemData.getTag() != null) { - builder.put("tag", itemData.getTag()); + NbtMap itemDataTag = itemData.getTag(); + if (itemDataTag != null) { + // Remove custom name that Geyser sets for items due to translating default components + String customName = ItemTranslator.getCustomName(session, heldItem.getDataComponents(), + session.getItemMappings().getMapping(heldItem), 'f', false); + if (customName == null) { + // No custom name found, must modify tag if custom name exists + NbtMapBuilder copy = itemDataTag.toBuilder(); + copy.remove("display"); // Also removes lore, but, should not matter + itemDataTag = copy.build(); + } + + builder.put("tag", itemDataTag); } builder.putShort("Damage", (short) itemData.getDamage()); builder.putString("Name", customIdentifier != null ? customIdentifier : session.getItemMappings().getMapping(entityMetadata.getValue()).getBedrockIdentifier()); diff --git a/core/src/main/java/org/geysermc/geyser/item/type/ShulkerBoxItem.java b/core/src/main/java/org/geysermc/geyser/item/type/ShulkerBoxItem.java index c3b739adc..d8d2c347d 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/ShulkerBoxItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/ShulkerBoxItem.java @@ -98,7 +98,7 @@ public class ShulkerBoxItem extends BlockItem { // Only the display name is what we have interest in, so just translate that if relevant if (boxComponents != null) { - String customName = ItemTranslator.getCustomName(session, boxComponents, boxMapping, '7'); + String customName = ItemTranslator.getCustomName(session, boxComponents, boxMapping, '7', true); if (customName != null) { boxItemNbt.putCompound("tag", NbtMap.builder() .putCompound("display", NbtMap.builder() diff --git a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java index 691a320e5..96b64f56d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java @@ -173,7 +173,7 @@ public final class ItemTranslator { javaItem.translateComponentsToBedrock(session, components, nbtBuilder); Rarity rarity = Rarity.fromId(components.getOrDefault(DataComponentType.RARITY, 0)); - String customName = getCustomName(session, components, bedrockItem, rarity.getColor()); + String customName = getCustomName(session, components, bedrockItem, rarity.getColor(), true); if (customName != null) { nbtBuilder.setCustomName(customName); } @@ -493,7 +493,7 @@ public final class ItemTranslator { * @param translationColor if this item is not available on Java, the color that the new name should be. * Normally, this should just be white, but for shulker boxes this should be gray. */ - public static String getCustomName(GeyserSession session, DataComponents components, ItemMapping mapping, char translationColor) { + public static String getCustomName(GeyserSession session, DataComponents components, ItemMapping mapping, char translationColor, boolean includeDefault) { if (components != null) { // ItemStack#getHoverName as of 1.20.5 Component customName = components.get(DataComponentType.CUSTOM_NAME); @@ -514,7 +514,7 @@ public final class ItemTranslator { } } customName = components.get(DataComponentType.ITEM_NAME); - if (customName != null) { + if (customName != null && includeDefault) { // Get the translated name and prefix it with a reset char to prevent italics - matches Java Edition // behavior as of 1.21 return ChatColor.RESET + ChatColor.ESCAPE + translationColor + MessageTranslator.convertMessage(customName, session.locale()); From 6bd60d42339482580dd7f501d5ff436f63945a97 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Tue, 24 Dec 2024 01:43:04 +0800 Subject: [PATCH 127/165] Fix: Default components breaking item stacking while crafting. --- .../geysermc/geyser/entity/type/ItemFrameEntity.java | 12 +----------- .../java/org/geysermc/geyser/item/type/Item.java | 11 +++++++++-- .../translator/inventory/InventoryTranslator.java | 2 +- .../geyser/translator/item/BedrockItemBuilder.java | 5 +++-- .../geyser/translator/item/ItemTranslator.java | 2 +- 5 files changed, 15 insertions(+), 17 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java index acb3df2b6..ba3dfb79d 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java @@ -118,17 +118,7 @@ public class ItemFrameEntity extends Entity { NbtMapBuilder builder = NbtMap.builder(); builder.putByte("Count", (byte) itemData.getCount()); NbtMap itemDataTag = itemData.getTag(); - if (itemDataTag != null) { - // Remove custom name that Geyser sets for items due to translating default components - String customName = ItemTranslator.getCustomName(session, heldItem.getDataComponents(), - session.getItemMappings().getMapping(heldItem), 'f', false); - if (customName == null) { - // No custom name found, must modify tag if custom name exists - NbtMapBuilder copy = itemDataTag.toBuilder(); - copy.remove("display"); // Also removes lore, but, should not matter - itemDataTag = copy.build(); - } - + if (itemData.getTag() != null) { builder.put("tag", itemDataTag); } builder.putShort("Damage", (short) 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 19789e086..738d57788 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 @@ -191,7 +191,9 @@ public class Item { } Integer repairCost = components.get(DataComponentType.REPAIR_COST); - if (repairCost != null) { + // Java sets repair cost to 0 on all items via default components, that trips up Bedrock crafting. + // See https://github.com/GeyserMC/Geyser/issues/5220 for more details + if (repairCost != null && repairCost != 0) { builder.putInt("RepairCost", repairCost); } @@ -202,7 +204,12 @@ public class Item { // Prevents the client from trying to stack items with untranslated components // Relies on correct hash code implementation, and some luck - builder.putInt("GeyserHash", components.hashCode()); // TODO: don't rely on this + // However, we should only set a hash when the components differ from the default ones, + // otherwise Bedrock can't stack these when crafting items since it's predicted recipe output + // does not contain the GeyserHash. See https://github.com/GeyserMC/Geyser/issues/5220 for more details + if (!baseComponents.equals(components)) { + builder.putInt("GeyserHash", components.hashCode()); // TODO: don't rely on this + } } /** 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 f7e3bfc2a..b4f507af5 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 @@ -246,7 +246,7 @@ public abstract class InventoryTranslator { boolean isSourceCursor = isCursor(transferAction.getSource()); boolean isDestCursor = isCursor(transferAction.getDestination()); - if ((this) instanceof PlayerInventoryTranslator) { + if (this instanceof PlayerInventoryTranslator) { if (destSlot == 5) { //only set the head if the destination is the head slot GeyserItemStack javaItem = inventory.getItem(sourceSlot); diff --git a/core/src/main/java/org/geysermc/geyser/translator/item/BedrockItemBuilder.java b/core/src/main/java/org/geysermc/geyser/translator/item/BedrockItemBuilder.java index e989288c2..2f51c0007 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/item/BedrockItemBuilder.java +++ b/core/src/main/java/org/geysermc/geyser/translator/item/BedrockItemBuilder.java @@ -122,12 +122,13 @@ public final class BedrockItemBuilder { */ @Nullable public NbtMap build() { - if (customName != null || lore != null) { + boolean validLore = lore != null && !lore.isEmpty(); + if (customName != null || validLore) { NbtMapBuilder display = NbtMap.builder(); if (customName != null) { display.putString("Name", customName); } - if (lore != null) { + if (validLore) { display.putList("Lore", NbtType.STRING, lore); } getOrCreateNbt().put("display", display.build()); diff --git a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java index 96b64f56d..b8959c7b8 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java @@ -173,7 +173,7 @@ public final class ItemTranslator { javaItem.translateComponentsToBedrock(session, components, nbtBuilder); Rarity rarity = Rarity.fromId(components.getOrDefault(DataComponentType.RARITY, 0)); - String customName = getCustomName(session, components, bedrockItem, rarity.getColor(), true); + String customName = getCustomName(session, components, bedrockItem, rarity.getColor(), false); if (customName != null) { nbtBuilder.setCustomName(customName); } From 623ec2bb8fbeda967b94e6c95c19ceba0b9692ba Mon Sep 17 00:00:00 2001 From: rtm516 <rtm516@users.noreply.github.com> Date: Fri, 27 Dec 2024 04:53:22 +0000 Subject: [PATCH 128/165] Fix map colors (#5239) * Revert "fix: Wrong map colors (#5238)" This reverts commit 006fe75e5af5f5686fb18051415663cb8ceaaa1b. * Correctly send BGR over the network for map colors --- .../org/geysermc/geyser/level/MapColor.java | 426 +++++++++--------- .../java/level/JavaMapItemDataTranslator.java | 2 +- 2 files changed, 216 insertions(+), 212 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/level/MapColor.java b/core/src/main/java/org/geysermc/geyser/level/MapColor.java index f4b4fb697..da0c0a4b2 100644 --- a/core/src/main/java/org/geysermc/geyser/level/MapColor.java +++ b/core/src/main/java/org/geysermc/geyser/level/MapColor.java @@ -30,26 +30,26 @@ public enum MapColor { COLOR_1(-1, -1, -1), COLOR_2(-1, -1, -1), COLOR_3(-1, -1, -1), - COLOR_4(39, 125, 89), - COLOR_5(48, 153, 109), - COLOR_6(56, 178, 127), - COLOR_7(29, 94, 67), - COLOR_8(115, 164, 174), - COLOR_9(140, 201, 213), - COLOR_10(163, 233, 247), - COLOR_11(86, 123, 130), + COLOR_4(89, 125, 39), + COLOR_5(109, 153, 48), + COLOR_6(127, 178, 56), + COLOR_7(67, 94, 29), + COLOR_8(174, 164, 115), + COLOR_9(213, 201, 140), + COLOR_10(247, 233, 163), + COLOR_11(130, 123, 86), COLOR_12(140, 140, 140), COLOR_13(171, 171, 171), COLOR_14(199, 199, 199), COLOR_15(105, 105, 105), - COLOR_16(0, 0, 180), - COLOR_17(0, 0, 220), - COLOR_18(0, 0, 255), - COLOR_19(0, 0, 135), - COLOR_20(180, 112, 112), - COLOR_21(220, 138, 138), - COLOR_22(255, 160, 160), - COLOR_23(135, 84, 84), + COLOR_16(180, 0, 0), + COLOR_17(220, 0, 0), + COLOR_18(255, 0, 0), + COLOR_19(135, 0, 0), + COLOR_20(112, 112, 180), + COLOR_21(138, 138, 220), + COLOR_22(160, 160, 255), + COLOR_23(84, 84, 135), COLOR_24(117, 117, 117), COLOR_25(144, 144, 144), COLOR_26(167, 167, 167), @@ -62,54 +62,54 @@ public enum MapColor { COLOR_33(220, 220, 220), COLOR_34(255, 255, 255), COLOR_35(135, 135, 135), - COLOR_36(129, 118, 115), - COLOR_37(158, 144, 141), - COLOR_38(184, 168, 164), - COLOR_39(97, 88, 86), - COLOR_40(54, 76, 106), - COLOR_41(66, 94, 130), - COLOR_42(77, 109, 151), - COLOR_43(40, 57, 79), + COLOR_36(115, 118, 129), + COLOR_37(141, 144, 158), + COLOR_38(164, 168, 184), + COLOR_39(86, 88, 97), + COLOR_40(106, 76, 54), + COLOR_41(130, 94, 66), + COLOR_42(151, 109, 77), + COLOR_43(79, 57, 40), COLOR_44(79, 79, 79), COLOR_45(96, 96, 96), COLOR_46(112, 112, 112), COLOR_47(59, 59, 59), - COLOR_48(180, 45, 45), - COLOR_49(220, 55, 55), - COLOR_50(255, 64, 64), - COLOR_51(135, 33, 33), - COLOR_52(50, 84, 100), - COLOR_53(62, 102, 123), - COLOR_54(72, 119, 143), - COLOR_55(38, 63, 75), - COLOR_56(172, 177, 180), - COLOR_57(211, 217, 220), - COLOR_58(245, 252, 255), - COLOR_59(129, 133, 135), - COLOR_60(36, 89, 152), - COLOR_61(44, 109, 186), - COLOR_62(51, 127, 216), - COLOR_63(27, 67, 114), - COLOR_64(152, 53, 125), - COLOR_65(186, 65, 153), - COLOR_66(216, 76, 178), - COLOR_67(114, 40, 94), - COLOR_68(152, 108, 72), - COLOR_69(186, 132, 88), - COLOR_70(216, 153, 102), - COLOR_71(114, 81, 54), - COLOR_72(36, 161, 161), - COLOR_73(44, 197, 197), - COLOR_74(51, 229, 229), - COLOR_75(27, 121, 121), - COLOR_76(17, 144, 89), - COLOR_77(21, 176, 109), - COLOR_78(25, 204, 127), - COLOR_79(13, 108, 67), - COLOR_80(116, 89, 170), - COLOR_81(142, 109, 208), - COLOR_82(165, 127, 242), - COLOR_83(87, 67, 128), + COLOR_48(45, 45, 180), + COLOR_49(55, 55, 220), + COLOR_50(64, 64, 255), + COLOR_51(33, 33, 135), + COLOR_52(100, 84, 50), + COLOR_53(123, 102, 62), + COLOR_54(143, 119, 72), + COLOR_55(75, 63, 38), + COLOR_56(180, 177, 172), + COLOR_57(220, 217, 211), + COLOR_58(255, 252, 245), + COLOR_59(135, 133, 129), + COLOR_60(152, 89, 36), + COLOR_61(186, 109, 44), + COLOR_62(216, 127, 51), + COLOR_63(114, 67, 27), + COLOR_64(125, 53, 152), + COLOR_65(153, 65, 186), + COLOR_66(178, 76, 216), + COLOR_67(94, 40, 114), + COLOR_68(72, 108, 152), + COLOR_69(88, 132, 186), + COLOR_70(102, 153, 216), + COLOR_71(54, 81, 114), + COLOR_72(161, 161, 36), + COLOR_73(197, 197, 44), + COLOR_74(229, 229, 51), + COLOR_75(121, 121, 27), + COLOR_76(89, 144, 17), + COLOR_77(109, 176, 21), + COLOR_78(127, 204, 25), + COLOR_79(67, 108, 13), + COLOR_80(170, 89, 116), + COLOR_81(208, 109, 142), + COLOR_82(242, 127, 165), + COLOR_83(128, 67, 87), COLOR_84(53, 53, 53), COLOR_85(65, 65, 65), COLOR_86(76, 76, 76), @@ -118,162 +118,162 @@ public enum MapColor { COLOR_89(132, 132, 132), COLOR_90(153, 153, 153), COLOR_91(81, 81, 81), - COLOR_92(108, 89, 53), - COLOR_93(132, 109, 65), - COLOR_94(153, 127, 76), - COLOR_95(81, 67, 40), - COLOR_96(125, 44, 89), - COLOR_97(153, 54, 109), - COLOR_98(178, 63, 127), - COLOR_99(94, 33, 67), - COLOR_100(125, 53, 36), - COLOR_101(153, 65, 44), - COLOR_102(178, 76, 51), - COLOR_103(94, 40, 27), - COLOR_104(36, 53, 72), - COLOR_105(44, 65, 88), - COLOR_106(51, 76, 102), - COLOR_107(27, 40, 54), - COLOR_108(36, 89, 72), - COLOR_109(44, 109, 88), - COLOR_110(51, 127, 102), - COLOR_111(27, 67, 54), - COLOR_112(36, 36, 108), - COLOR_113(44, 44, 132), - COLOR_114(51, 51, 153), - COLOR_115(27, 27, 81), + COLOR_92(53, 89, 108), + COLOR_93(65, 109, 132), + COLOR_94(76, 127, 153), + COLOR_95(40, 67, 81), + COLOR_96(89, 44, 125), + COLOR_97(109, 54, 153), + COLOR_98(127, 63, 178), + COLOR_99(67, 33, 94), + COLOR_100(36, 53, 125), + COLOR_101(44, 65, 153), + COLOR_102(51, 76, 178), + COLOR_103(27, 40, 94), + COLOR_104(72, 53, 36), + COLOR_105(88, 65, 44), + COLOR_106(102, 76, 51), + COLOR_107(54, 40, 27), + COLOR_108(72, 89, 36), + COLOR_109(88, 109, 44), + COLOR_110(102, 127, 51), + COLOR_111(54, 67, 27), + COLOR_112(108, 36, 36), + COLOR_113(132, 44, 44), + COLOR_114(153, 51, 51), + COLOR_115(81, 27, 27), COLOR_116(17, 17, 17), COLOR_117(21, 21, 21), COLOR_118(25, 25, 25), COLOR_119(13, 13, 13), - COLOR_120(54, 168, 176), - COLOR_121(66, 205, 215), - COLOR_122(77, 238, 250), - COLOR_123(40, 126, 132), - COLOR_124(150, 154, 64), - COLOR_125(183, 188, 79), - COLOR_126(213, 219, 92), - COLOR_127(112, 115, 48), - COLOR_128(180, 90, 52), - COLOR_129(220, 110, 63), - COLOR_130(255, 128, 74), - COLOR_131(135, 67, 39), - COLOR_132(40, 153, 0), - COLOR_133(50, 187, 0), - COLOR_134(58, 217, 0), - COLOR_135(30, 114, 0), - COLOR_136(34, 60, 91), - COLOR_137(42, 74, 111), - COLOR_138(49, 86, 129), - COLOR_139(25, 45, 68), - COLOR_140(0, 1, 79), - COLOR_141(0, 1, 96), - COLOR_142(0, 2, 112), - COLOR_143(0, 1, 59), - COLOR_144(113, 124, 147), - COLOR_145(138, 152, 180), - COLOR_146(161, 177, 209), - COLOR_147(85, 93, 110), - COLOR_148(25, 57, 112), - COLOR_149(31, 70, 137), - COLOR_150(36, 82, 159), - COLOR_151(19, 43, 84), - COLOR_152(76, 61, 105), - COLOR_153(93, 75, 128), - COLOR_154(108, 87, 149), - COLOR_155(57, 46, 78), - COLOR_156(97, 76, 79), - COLOR_157(119, 93, 96), - COLOR_158(138, 108, 112), - COLOR_159(73, 57, 59), - COLOR_160(25, 93, 131), - COLOR_161(31, 114, 160), - COLOR_162(36, 133, 186), - COLOR_163(19, 70, 98), - COLOR_164(37, 82, 72), - COLOR_165(45, 100, 88), - COLOR_166(53, 117, 103), - COLOR_167(28, 61, 54), - COLOR_168(55, 54, 112), - COLOR_169(67, 66, 138), - COLOR_170(78, 77, 160), - COLOR_171(41, 40, 84), - COLOR_172(24, 28, 40), - COLOR_173(30, 35, 49), - COLOR_174(35, 41, 57), - COLOR_175(18, 21, 30), - COLOR_176(69, 75, 95), - COLOR_177(84, 92, 116), - COLOR_178(98, 107, 135), - COLOR_179(51, 56, 71), - COLOR_180(64, 64, 61), - COLOR_181(79, 79, 75), - COLOR_182(92, 92, 87), - COLOR_183(48, 48, 46), - COLOR_184(62, 51, 86), - COLOR_185(75, 62, 105), - COLOR_186(88, 73, 122), - COLOR_187(46, 38, 64), - COLOR_188(64, 43, 53), - COLOR_189(79, 53, 65), - COLOR_190(92, 62, 76), - COLOR_191(48, 32, 40), - COLOR_192(24, 35, 53), - COLOR_193(30, 43, 65), - COLOR_194(35, 50, 76), - COLOR_195(18, 26, 40), - COLOR_196(29, 57, 53), - COLOR_197(36, 70, 65), - COLOR_198(42, 82, 76), - COLOR_199(22, 43, 40), - COLOR_200(32, 42, 100), - COLOR_201(39, 51, 122), - COLOR_202(46, 60, 142), - COLOR_203(24, 31, 75), - COLOR_204(11, 15, 26), - COLOR_205(13, 18, 31), - COLOR_206(16, 22, 37), - COLOR_207(8, 11, 19), - COLOR_208(34, 33, 133), - COLOR_209(42, 41, 163), - COLOR_210(49, 48, 189), - COLOR_211(25, 25, 100), - COLOR_212(68, 44, 104), - COLOR_213(83, 54, 127), - COLOR_214(97, 63, 148), - COLOR_215(51, 33, 78), - COLOR_216(20, 17, 64), - COLOR_217(25, 21, 79), - COLOR_218(29, 25, 92), - COLOR_219(15, 13, 48), - COLOR_220(94, 88, 15), - COLOR_221(115, 108, 18), - COLOR_222(134, 126, 22), - COLOR_223(70, 66, 11), - COLOR_224(98, 100, 40), - COLOR_225(120, 122, 50), - COLOR_226(140, 142, 58), - COLOR_227(74, 75, 30), - COLOR_228(43, 31, 60), - COLOR_229(53, 37, 74), - COLOR_230(62, 44, 86), - COLOR_231(32, 23, 45), - COLOR_232(93, 127, 14), - COLOR_233(114, 155, 17), - COLOR_234(133, 180, 20), - COLOR_235(70, 95, 10), + COLOR_120(176, 168, 54), + COLOR_121(215, 205, 66), + COLOR_122(250, 238, 77), + COLOR_123(132, 126, 40), + COLOR_124(64, 154, 150), + COLOR_125(79, 188, 183), + COLOR_126(92, 219, 213), + COLOR_127(48, 115, 112), + COLOR_128(52, 90, 180), + COLOR_129(63, 110, 220), + COLOR_130(74, 128, 255), + COLOR_131(39, 67, 135), + COLOR_132(0, 153, 40), + COLOR_133(0, 187, 50), + COLOR_134(0, 217, 58), + COLOR_135(0, 114, 30), + COLOR_136(91, 60, 34), + COLOR_137(111, 74, 42), + COLOR_138(129, 86, 49), + COLOR_139(68, 45, 25), + COLOR_140(79, 1, 0), + COLOR_141(96, 1, 0), + COLOR_142(112, 2, 0), + COLOR_143(59, 1, 0), + COLOR_144(147, 124, 113), + COLOR_145(180, 152, 138), + COLOR_146(209, 177, 161), + COLOR_147(110, 93, 85), + COLOR_148(112, 57, 25), + COLOR_149(137, 70, 31), + COLOR_150(159, 82, 36), + COLOR_151(84, 43, 19), + COLOR_152(105, 61, 76), + COLOR_153(128, 75, 93), + COLOR_154(149, 87, 108), + COLOR_155(78, 46, 57), + COLOR_156(79, 76, 97), + COLOR_157(96, 93, 119), + COLOR_158(112, 108, 138), + COLOR_159(59, 57, 73), + COLOR_160(131, 93, 25), + COLOR_161(160, 114, 31), + COLOR_162(186, 133, 36), + COLOR_163(98, 70, 19), + COLOR_164(72, 82, 37), + COLOR_165(88, 100, 45), + COLOR_166(103, 117, 53), + COLOR_167(54, 61, 28), + COLOR_168(112, 54, 55), + COLOR_169(138, 66, 67), + COLOR_170(160, 77, 78), + COLOR_171(84, 40, 41), + COLOR_172(40, 28, 24), + COLOR_173(49, 35, 30), + COLOR_174(57, 41, 35), + COLOR_175(30, 21, 18), + COLOR_176(95, 75, 69), + COLOR_177(116, 92, 84), + COLOR_178(135, 107, 98), + COLOR_179(71, 56, 51), + COLOR_180(61, 64, 64), + COLOR_181(75, 79, 79), + COLOR_182(87, 92, 92), + COLOR_183(46, 48, 48), + COLOR_184(86, 51, 62), + COLOR_185(105, 62, 75), + COLOR_186(122, 73, 88), + COLOR_187(64, 38, 46), + COLOR_188(53, 43, 64), + COLOR_189(65, 53, 79), + COLOR_190(76, 62, 92), + COLOR_191(40, 32, 48), + COLOR_192(53, 35, 24), + COLOR_193(65, 43, 30), + COLOR_194(76, 50, 35), + COLOR_195(40, 26, 18), + COLOR_196(53, 57, 29), + COLOR_197(65, 70, 36), + COLOR_198(76, 82, 42), + COLOR_199(40, 43, 22), + COLOR_200(100, 42, 32), + COLOR_201(122, 51, 39), + COLOR_202(142, 60, 46), + COLOR_203(75, 31, 24), + COLOR_204(26, 15, 11), + COLOR_205(31, 18, 13), + COLOR_206(37, 22, 16), + COLOR_207(19, 11, 8), + COLOR_208(133, 33, 34), + COLOR_209(163, 41, 42), + COLOR_210(189, 48, 49), + COLOR_211(100, 25, 25), + COLOR_212(104, 44, 68), + COLOR_213(127, 54, 83), + COLOR_214(148, 63, 97), + COLOR_215(78, 33, 51), + COLOR_216(64, 17, 20), + COLOR_217(79, 21, 25), + COLOR_218(92, 25, 29), + COLOR_219(48, 13, 15), + COLOR_220(15, 88, 94), + COLOR_221(18, 108, 115), + COLOR_222(22, 126, 134), + COLOR_223(11, 66, 70), + COLOR_224(40, 100, 98), + COLOR_225(50, 122, 120), + COLOR_226(58, 142, 140), + COLOR_227(30, 75, 74), + COLOR_228(60, 31, 43), + COLOR_229(74, 37, 53), + COLOR_230(86, 44, 62), + COLOR_231(45, 23, 32), + COLOR_232(14, 127, 93), + COLOR_233(17, 155, 114), + COLOR_234(20, 180, 133), + COLOR_235(10, 95, 70), COLOR_236(70, 70, 70), COLOR_237(86, 86, 86), COLOR_238(100, 100, 100), COLOR_239(52, 52, 52), - COLOR_240(103, 123, 152), - COLOR_241(126, 150, 186), - COLOR_242(147, 175, 216), - COLOR_243(77, 92, 114), - COLOR_244(105, 117, 89), - COLOR_245(129, 144, 109), - COLOR_246(150, 167, 127), - COLOR_247(79, 88, 67); + COLOR_240(152, 123, 103), + COLOR_241(186, 150, 126), + COLOR_242(216, 175, 147), + COLOR_243(114, 92, 77), + COLOR_244(89, 117, 105), + COLOR_245(109, 144, 129), + COLOR_246(127, 167, 150), + COLOR_247(67, 88, 79); private static final MapColor[] VALUES = values(); @@ -285,16 +285,20 @@ public enum MapColor { alpha = 0; // transparent this.value = ((alpha & 0xFF) << 24) | - ((red & 0xFF) << 16) | + ((blue & 0xFF) << 16) | ((green & 0xFF) << 8) | - (blue & 0xFF); + (red & 0xFF); } public static MapColor fromId(int id) { return id >= 0 && id < VALUES.length ? VALUES[id] : COLOR_0; } - public int getARGB() { + /** + * Get the ABGR value of the color, bedrock uses this over the network + * @return the int value of the color + */ + public int getABGR() { return value; } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaMapItemDataTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaMapItemDataTranslator.java index 52a08ab29..94c4736c6 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaMapItemDataTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaMapItemDataTranslator.java @@ -65,7 +65,7 @@ public class JavaMapItemDataTranslator extends PacketTranslator<ClientboundMapIt int idx = 0; for (byte colorId : data.getData()) { - colors[idx++] = MapColor.fromId(colorId & 0xFF).getARGB(); + colors[idx++] = MapColor.fromId(colorId & 0xFF).getABGR(); } mapItemDataPacket.setColors(colors); From f1ed841e079d33fc1244123e3102dbd967aa502a Mon Sep 17 00:00:00 2001 From: Alex <40795980+AlexProgrammerDE@users.noreply.github.com> Date: Sat, 4 Jan 2025 14:28:54 +0100 Subject: [PATCH 129/165] Add support for rcon console command senders (#5261) RemoteConsoleCommandSender does not inherit ConsoleCommandSender, so we gotta handle it explicitly. --- .../geyser/platform/spigot/command/SpigotCommandSource.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 c1fb837c2..9f897b095 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.CommandSender; import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.command.RemoteConsoleCommandSender; import org.bukkit.entity.Player; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -76,7 +77,7 @@ public class SpigotCommandSource implements GeyserCommandSource { @Override public boolean isConsole() { - return handle instanceof ConsoleCommandSender; + return handle instanceof ConsoleCommandSender || handle instanceof RemoteConsoleCommandSender; } @Override From a19f0305fb8ffbeac4d6bbe00143841f5f9f9ff5 Mon Sep 17 00:00:00 2001 From: BugTeaON <99161186+BUGTeas@users.noreply.github.com> Date: Sun, 5 Jan 2025 19:41:35 +0800 Subject: [PATCH 130/165] Fix `item_name` component not working, improve display of custom effects and shulker box tooltips for item names (#5255) * Show custom effects information in HUD, and be able to hide it using hide_additional_tooltip component * Make vanilla default components no longer affect the translation of custom name (Fix item_name component not work) * Fix book title display in tooltips of shulker box * Fix colored item name display in tooltips of shulker box * Add some code comments * Block vanilla potion name translation when has hide_additional_tooltip component * Add some brackets --- .../geyser/entity/type/ItemFrameEntity.java | 12 ++- .../geysermc/geyser/item/type/PotionItem.java | 13 --- .../geyser/item/type/ShulkerBoxItem.java | 7 +- .../geyser/item/type/TippedArrowItem.java | 14 --- .../translator/item/ItemTranslator.java | 91 ++++++++++++++----- 5 files changed, 85 insertions(+), 52 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java index ba3dfb79d..afe0dcdc6 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java @@ -118,7 +118,17 @@ public class ItemFrameEntity extends Entity { NbtMapBuilder builder = NbtMap.builder(); builder.putByte("Count", (byte) itemData.getCount()); NbtMap itemDataTag = itemData.getTag(); - if (itemData.getTag() != null) { + if (itemDataTag != null) { + // Remove custom name that Geyser sets for items due to translating non-"custom_name" components + String customName = ItemTranslator.getCustomName(session, heldItem.getDataComponents(), + session.getItemMappings().getMapping(heldItem), 'f', true, false); + if (customName == null) { + // No custom name found, must modify tag if custom name exists + NbtMapBuilder copy = itemDataTag.toBuilder(); + copy.remove("display"); // Also removes lore, but, should not matter + itemDataTag = copy.build(); + } + builder.put("tag", itemDataTag); } builder.putShort("Damage", (short) itemData.getDamage()); 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 4cc3756cd..89e60b325 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 @@ -34,9 +34,7 @@ import org.geysermc.geyser.inventory.item.Potion; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.geyser.translator.item.CustomItemTranslator; -import org.geysermc.geyser.translator.item.ItemTranslator; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.PotionContents; @@ -70,17 +68,6 @@ public class PotionItem extends Item { return super.translateToBedrock(session, count, components, mapping, mappings); } - @Override - public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNull DataComponents components, @NonNull BedrockItemBuilder builder) { - // Make custom effect information visible - PotionContents potionContents = components.get(DataComponentType.POTION_CONTENTS); - if (potionContents != null) { - ItemTranslator.addPotionEffectLore(potionContents, builder, session.locale()); - } - - super.translateComponentsToBedrock(session, components, builder); - } - @Override public @NonNull GeyserItemStack translateToJava(GeyserSession session, @NonNull ItemData itemData, @NonNull ItemMapping mapping, @NonNull ItemMappings mappings) { Potion potion = Potion.getByBedrockId(itemData.getDamage()); diff --git a/core/src/main/java/org/geysermc/geyser/item/type/ShulkerBoxItem.java b/core/src/main/java/org/geysermc/geyser/item/type/ShulkerBoxItem.java index d8d2c347d..5d14f748c 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/ShulkerBoxItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/ShulkerBoxItem.java @@ -35,6 +35,7 @@ import org.geysermc.geyser.item.Items; import org.geysermc.geyser.level.block.type.Block; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.text.ChatColor; import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.geyser.translator.item.CustomItemTranslator; import org.geysermc.geyser.translator.item.ItemTranslator; @@ -98,8 +99,12 @@ public class ShulkerBoxItem extends BlockItem { // Only the display name is what we have interest in, so just translate that if relevant if (boxComponents != null) { - String customName = ItemTranslator.getCustomName(session, boxComponents, boxMapping, '7', true); + String customName = ItemTranslator.getCustomName(session, boxComponents, boxMapping, '7', false, true); if (customName != null) { + // Fix count display (e.g., x16) with incorrect color due to some items with colored names + if (customName.contains("" + ChatColor.ESCAPE)) { + customName += ChatColor.RESET + ChatColor.GRAY; + } boxItemNbt.putCompound("tag", NbtMap.builder() .putCompound("display", NbtMap.builder() .putString("Name", customName) diff --git a/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java b/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java index 9e212ebef..09e4ee21f 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java @@ -25,15 +25,12 @@ package org.geysermc.geyser.item.type; -import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.inventory.item.Potion; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.translator.item.BedrockItemBuilder; -import org.geysermc.geyser.translator.item.ItemTranslator; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.PotionContents; @@ -60,15 +57,4 @@ public class TippedArrowItem extends ArrowItem { } return super.translateToBedrock(session, count, components, mapping, mappings); } - - @Override - public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNull DataComponents components, @NonNull BedrockItemBuilder builder) { - // Make custom effect information visible - PotionContents potionContents = components.get(DataComponentType.POTION_CONTENTS); - if (potionContents != null) { - ItemTranslator.addPotionEffectLore(potionContents, builder, session.locale()); - } - - super.translateComponentsToBedrock(session, components, builder); - } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java index b8959c7b8..3f9bf7446 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java @@ -41,6 +41,7 @@ import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.entity.attribute.GeyserAttributeType; import org.geysermc.geyser.inventory.GeyserItemStack; +import org.geysermc.geyser.inventory.item.Potion; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.components.Rarity; import org.geysermc.geyser.item.type.Item; @@ -70,6 +71,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.item.component.ItemAttribut import org.geysermc.mcprotocollib.protocol.data.game.item.component.MobEffectDetails; import org.geysermc.mcprotocollib.protocol.data.game.item.component.MobEffectInstance; import org.geysermc.mcprotocollib.protocol.data.game.item.component.PotionContents; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.WrittenBookContent; import java.text.DecimalFormat; import java.util.ArrayList; @@ -163,18 +165,25 @@ public final class ItemTranslator { .build(); } - public static ItemData.@NonNull Builder translateToBedrock(GeyserSession session, Item javaItem, ItemMapping bedrockItem, int count, @Nullable DataComponents components) { + public static ItemData.@NonNull Builder translateToBedrock(GeyserSession session, Item javaItem, ItemMapping bedrockItem, int count, @Nullable DataComponents customComponents) { BedrockItemBuilder nbtBuilder = new BedrockItemBuilder(); // Populates default components that aren't sent over the network - components = javaItem.gatherComponents(components); + DataComponents components = javaItem.gatherComponents(customComponents); // Translate item-specific components javaItem.translateComponentsToBedrock(session, components, nbtBuilder); Rarity rarity = Rarity.fromId(components.getOrDefault(DataComponentType.RARITY, 0)); - String customName = getCustomName(session, components, bedrockItem, rarity.getColor(), false); + String customName = getCustomName(session, customComponents, bedrockItem, rarity.getColor(), false, false); if (customName != null) { + PotionContents potionContents = components.get(DataComponentType.POTION_CONTENTS); + // Make custom effect information visible + // Ignore when item have "hide_additional_tooltip" component + if (potionContents != null && components.get(DataComponentType.HIDE_ADDITIONAL_TOOLTIP) == null) { + customName += getPotionEffectInfo(potionContents, session.locale()); + } + nbtBuilder.setCustomName(customName); } @@ -336,7 +345,8 @@ public final class ItemTranslator { Effect.INFESTED ); - public static void addPotionEffectLore(PotionContents contents, BedrockItemBuilder builder, String language) { + public static String getPotionEffectInfo(PotionContents contents, String language) { + StringBuilder finalText = new StringBuilder(); List<MobEffectInstance> effectInstanceList = contents.getCustomEffects(); for (MobEffectInstance effectInstance : effectInstanceList) { Effect effect = effectInstance.getEffect(); @@ -372,8 +382,40 @@ public final class ItemTranslator { .color((negativeEffectList.contains(effect)) ? NamedTextColor.RED : NamedTextColor.BLUE) .append(appendTranslatable) .build(); - builder.getOrCreateLore().add(MessageTranslator.convertMessage(component, language)); + // Bedrock supports wrap lines with '\n' in a single string in custom name + finalText.append('\n').append(MessageTranslator.convertMessage(component, language)); } + return finalText.toString(); + } + + public static String getPotionName(PotionContents contents, ItemMapping mapping, boolean hideAdditionalTooltip, String language) { + String customPotionName = contents.getCustomName(); + Potion potion = Potion.getByJavaId(contents.getPotionId()); + + if (customPotionName != null) { + // "custom_name" tag in "potion_contents" component + return MessageTranslator.convertMessage( + Component.translatable(mapping.getJavaItem().translationKey() + ".effect." + customPotionName), + language); + } + if (!hideAdditionalTooltip && !contents.getCustomEffects().isEmpty()) { + // Make a name when has custom effects + String potionName; + if (potion != null) { + potionName = potion.toString().toLowerCase(Locale.ROOT); + if (potionName.startsWith("strong_")) { + potionName = potionName.substring(6); + } else if (potionName.startsWith("long_")) { + potionName = potionName.substring(4); + } + } else { + potionName = "empty"; + } + return MessageTranslator.convertMessage( + Component.translatable(mapping.getJavaItem().translationKey() + ".effect." + potionName), + language); + } + return null; } private static void addAdvancedTooltips(@Nullable DataComponents components, BedrockItemBuilder builder, Item item, String language) { @@ -493,31 +535,34 @@ public final class ItemTranslator { * @param translationColor if this item is not available on Java, the color that the new name should be. * Normally, this should just be white, but for shulker boxes this should be gray. */ - public static String getCustomName(GeyserSession session, DataComponents components, ItemMapping mapping, char translationColor, boolean includeDefault) { + public static String getCustomName(GeyserSession session, DataComponents components, ItemMapping mapping, char translationColor, boolean customNameOnly, boolean includeAll) { if (components != null) { // ItemStack#getHoverName as of 1.20.5 Component customName = components.get(DataComponentType.CUSTOM_NAME); if (customName != null) { return MessageTranslator.convertMessage(customName, session.locale()); } - PotionContents potionContents = components.get(DataComponentType.POTION_CONTENTS); - if (potionContents != null) { - // "custom_name" tag in "potion_contents" component - String customPotionName = potionContents.getCustomName(); - if (customPotionName != null) { - Component component = Component.text() - .resetStyle() - .color(NamedTextColor.WHITE) - .append(Component.translatable(mapping.getJavaItem().translationKey() + ".effect." + customPotionName)) - .build(); - return MessageTranslator.convertMessage(component, session.locale()); + if (!customNameOnly) { + PotionContents potionContents = components.get(DataComponentType.POTION_CONTENTS); + if (potionContents != null) { + String potionName = getPotionName(potionContents, mapping, components.get(DataComponentType.HIDE_ADDITIONAL_TOOLTIP) != null, session.locale()); + if (potionName != null) { + return ChatColor.RESET + ChatColor.ESCAPE + translationColor + potionName; + } + } + if (includeAll) { + // Fix book title display in tooltips of shulker box + WrittenBookContent bookContent = components.get(DataComponentType.WRITTEN_BOOK_CONTENT); + if (bookContent != null) { + return ChatColor.RESET + ChatColor.ESCAPE + translationColor + bookContent.getTitle().getRaw(); + } + } + customName = components.get(DataComponentType.ITEM_NAME); + if (customName != null) { + // Get the translated name and prefix it with a reset char to prevent italics - matches Java Edition + // behavior as of 1.21 + return ChatColor.RESET + ChatColor.ESCAPE + translationColor + MessageTranslator.convertMessage(customName, session.locale()); } - } - customName = components.get(DataComponentType.ITEM_NAME); - if (customName != null && includeDefault) { - // Get the translated name and prefix it with a reset char to prevent italics - matches Java Edition - // behavior as of 1.21 - return ChatColor.RESET + ChatColor.ESCAPE + translationColor + MessageTranslator.convertMessage(customName, session.locale()); } } From ddd1afabd1a4be415209a248e03cf7a793e4056e Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Sun, 5 Jan 2025 10:34:57 -0500 Subject: [PATCH 131/165] Bundle support (#5145) * Bundle support * Touchups * Correct bundle mapping * Grabbing a bundle from creative mode does work * Fix inserting items that already exist in a bundle * Add bundle drop workaround * Address review --- .../geyser/inventory/GeyserItemStack.java | 47 +- .../geysermc/geyser/inventory/Inventory.java | 8 +- .../geyser/inventory/click/Click.java | 3 + .../geyser/inventory/click/ClickPlan.java | 110 ++- .../geyser/session/GeyserSession.java | 12 + .../geyser/session/cache/BundleCache.java | 383 ++++++++ .../inventory/BundleInventoryTranslator.java | 339 +++++++ .../inventory/InventoryTranslator.java | 27 +- .../inventory/PlayerInventoryTranslator.java | 20 +- ...BedrockInventoryTransactionTranslator.java | 8 +- .../JavaContainerSetContentTranslator.java | 5 +- .../JavaContainerSetSlotTranslator.java | 1 + .../JavaSetCursorItemTranslator.java | 1 + .../JavaSetPlayerInventoryTranslator.java | 4 +- .../geysermc/geyser/util/InventoryUtils.java | 1 + .../geyser/util/thirdparty/Fraction.java | 911 ++++++++++++++++++ core/src/main/resources/mappings | 2 +- 17 files changed, 1856 insertions(+), 26 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/session/cache/BundleCache.java create mode 100644 core/src/main/java/org/geysermc/geyser/translator/inventory/BundleInventoryTranslator.java create mode 100644 core/src/main/java/org/geysermc/geyser/util/thirdparty/Fraction.java 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 4ddff305e..77ca7bfb5 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java @@ -39,6 +39,7 @@ 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.session.cache.BundleCache; import org.geysermc.geyser.translator.item.ItemTranslator; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; @@ -59,19 +60,23 @@ public class GeyserItemStack { private DataComponents components; private int netId; + @EqualsAndHashCode.Exclude + private BundleCache.BundleData bundleData; + @Getter(AccessLevel.NONE) @Setter(AccessLevel.NONE) @EqualsAndHashCode.Exclude private Item item; private GeyserItemStack(int javaId, int amount, DataComponents components) { - this(javaId, amount, components, 1); + this(javaId, amount, components, 1, null); } - private GeyserItemStack(int javaId, int amount, DataComponents components, int netId) { + private GeyserItemStack(int javaId, int amount, DataComponents components, int netId, BundleCache.BundleData bundleData) { this.javaId = javaId; this.amount = amount; this.components = components; this.netId = netId; + this.bundleData = bundleData; } public static @NonNull GeyserItemStack of(int javaId, int amount) { @@ -173,6 +178,24 @@ public class GeyserItemStack { return isEmpty() ? 0 : netId; } + public int getBundleId() { + if (isEmpty()) { + return -1; + } + + return bundleData == null ? -1 : bundleData.bundleId(); + } + + public void mergeBundleData(GeyserSession session, BundleCache.BundleData oldBundleData) { + if (oldBundleData != null && this.bundleData != null) { + // Old bundle; re-use old IDs + this.bundleData.updateNetIds(session, oldBundleData); + } else if (this.bundleData != null) { + // New bundle; allocate new ID + session.getBundleCache().markNewBundle(this.bundleData); + } + } + public void add(int add) { amount += add; } @@ -186,6 +209,21 @@ public class GeyserItemStack { } public @Nullable ItemStack getItemStack(int newAmount) { + if (isEmpty()) { + return null; + } + // Sync our updated bundle data to server, if applicable + // Not fresh from server? Then we have changes to apply!~ + if (bundleData != null && !bundleData.freshFromServer()) { + if (!bundleData.contents().isEmpty()) { + getOrCreateComponents().put(DataComponentType.BUNDLE_CONTENTS, bundleData.toComponent()); + } else { + if (components != null) { + // Empty list = no component = should delete + components.getDataComponents().remove(DataComponentType.BUNDLE_CONTENTS); + } + } + } return isEmpty() ? null : new ItemStack(javaId, newAmount, components); } @@ -196,7 +234,8 @@ public class GeyserItemStack { ItemData.Builder itemData = ItemTranslator.translateToBedrock(session, javaId, amount, components); itemData.netId(getNetId()); itemData.usingNetId(true); - return itemData.build(); + + return session.getBundleCache().checkForBundle(this, itemData); } public ItemMapping getMapping(GeyserSession session) { @@ -229,6 +268,6 @@ public class GeyserItemStack { } public GeyserItemStack copy(int newAmount) { - return isEmpty() ? EMPTY : new GeyserItemStack(javaId, newAmount, components == null ? null : components.clone(), netId); + return isEmpty() ? EMPTY : new GeyserItemStack(javaId, newAmount, components == null ? null : components.clone(), netId, bundleData == null ? null : bundleData.copy()); } } 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 09d04f17c..c960ed1a2 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java @@ -142,15 +142,21 @@ public abstract class Inventory { } } - protected void updateItemNetId(GeyserItemStack oldItem, GeyserItemStack newItem, GeyserSession session) { + public static void updateItemNetId(GeyserItemStack oldItem, GeyserItemStack newItem, GeyserSession session) { if (!newItem.isEmpty()) { ItemDefinition oldMapping = ItemTranslator.getBedrockItemDefinition(session, oldItem); ItemDefinition newMapping = ItemTranslator.getBedrockItemDefinition(session, newItem); if (oldMapping.equals(newMapping)) { newItem.setNetId(oldItem.getNetId()); + newItem.mergeBundleData(session, oldItem.getBundleData()); } else { newItem.setNetId(session.getNextItemNetId()); + session.getBundleCache().markNewBundle(newItem.getBundleData()); + session.getBundleCache().onOldItemDelete(oldItem); } + } else { + // Empty item means no more bundle if one existed. + session.getBundleCache().onOldItemDelete(oldItem); } } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/click/Click.java b/core/src/main/java/org/geysermc/geyser/inventory/click/Click.java index 6897786c1..cf16d0b6f 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/click/Click.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/click/Click.java @@ -31,7 +31,10 @@ import lombok.AllArgsConstructor; @AllArgsConstructor public enum Click { LEFT(ContainerActionType.CLICK_ITEM, ClickItemAction.LEFT_CLICK), + LEFT_BUNDLE(ContainerActionType.CLICK_ITEM, ClickItemAction.LEFT_CLICK), + LEFT_BUNDLE_FROM_CURSOR(ContainerActionType.CLICK_ITEM, ClickItemAction.LEFT_CLICK), RIGHT(ContainerActionType.CLICK_ITEM, ClickItemAction.RIGHT_CLICK), + RIGHT_BUNDLE(ContainerActionType.CLICK_ITEM, ClickItemAction.RIGHT_CLICK), LEFT_SHIFT(ContainerActionType.SHIFT_CLICK_ITEM, ShiftClickItemAction.LEFT_CLICK), DROP_ONE(ContainerActionType.DROP_ITEM, DropItemAction.DROP_FROM_SELECTED), DROP_ALL(ContainerActionType.DROP_ITEM, DropItemAction.DROP_SELECTED_STACK), diff --git a/core/src/main/java/org/geysermc/geyser/inventory/click/ClickPlan.java b/core/src/main/java/org/geysermc/geyser/inventory/click/ClickPlan.java index 9d6f4d3e3..d4344f6e8 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/click/ClickPlan.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/click/ClickPlan.java @@ -25,19 +25,26 @@ package org.geysermc.geyser.inventory.click; -import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; -import org.geysermc.mcprotocollib.protocol.data.game.inventory.ContainerActionType; -import org.geysermc.mcprotocollib.protocol.data.game.inventory.ContainerType; -import org.geysermc.mcprotocollib.protocol.data.game.inventory.MoveToHotbarAction; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundContainerClickPacket; -import it.unimi.dsi.fastutil.ints.*; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.ints.IntOpenHashSet; +import it.unimi.dsi.fastutil.ints.IntSet; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.SlotType; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.inventory.BundleInventoryTranslator; import org.geysermc.geyser.translator.inventory.CraftingInventoryTranslator; import org.geysermc.geyser.translator.inventory.InventoryTranslator; import org.geysermc.geyser.util.InventoryUtils; +import org.geysermc.geyser.util.thirdparty.Fraction; +import org.geysermc.mcprotocollib.protocol.data.game.inventory.ContainerActionType; +import org.geysermc.mcprotocollib.protocol.data.game.inventory.ContainerType; +import org.geysermc.mcprotocollib.protocol.data.game.inventory.MoveToHotbarAction; +import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundContainerClickPacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundSelectBundleItemPacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundSetCreativeModeSlotPacket; import org.jetbrains.annotations.Contract; import java.util.ArrayList; @@ -52,7 +59,8 @@ public final class ClickPlan { */ private Int2ObjectMap<ItemStack> changedItems; private GeyserItemStack simulatedCursor; - private boolean finished; + private int desiredBundleSlot; + private boolean executionBegan; private final GeyserSession session; private final InventoryTranslator translator; @@ -67,7 +75,7 @@ public final class ClickPlan { this.simulatedItems = new Int2ObjectOpenHashMap<>(inventory.getSize()); this.changedItems = null; this.simulatedCursor = session.getPlayerInventory().getCursor().copy(); - this.finished = false; + this.executionBegan = false; gridSize = translator.getGridSize(); } @@ -82,7 +90,7 @@ public final class ClickPlan { } public void add(Click click, int slot, boolean force) { - if (finished) + if (executionBegan) throw new UnsupportedOperationException("ClickPlan already executed"); if (click == Click.LEFT_OUTSIDE || click == Click.RIGHT_OUTSIDE) { @@ -97,6 +105,7 @@ public final class ClickPlan { } public void execute(boolean refresh) { + executionBegan = true; //update geyser inventory after simulation to avoid net id desync resetSimulation(); ListIterator<ClickAction> planIter = plan.listIterator(); @@ -159,7 +168,27 @@ public final class ClickPlan { for (Int2ObjectMap.Entry<GeyserItemStack> simulatedSlot : simulatedItems.int2ObjectEntrySet()) { inventory.setItem(simulatedSlot.getIntKey(), simulatedSlot.getValue(), session); } - finished = true; + } + + public void executeForCreativeMode() { + executionBegan = true; + //update geyser inventory after simulation to avoid net id desync + resetSimulation(); + changedItems = new Int2ObjectOpenHashMap<>(); + for (ClickAction action : plan) { + simulateAction(action); + } + session.getPlayerInventory().setCursor(simulatedCursor, session); + for (Int2ObjectMap.Entry<GeyserItemStack> simulatedSlot : simulatedItems.int2ObjectEntrySet()) { + inventory.setItem(simulatedSlot.getIntKey(), simulatedSlot.getValue(), session); + } + for (Int2ObjectMap.Entry<ItemStack> changedSlot : changedItems.int2ObjectEntrySet()) { + ItemStack value = changedSlot.getValue(); + ItemStack toSend = InventoryUtils.isEmpty(value) ? new ItemStack(-1, 0, null) : value; + session.sendDownstreamGamePacket( + new ServerboundSetCreativeModeSlotPacket((short) changedSlot.getIntKey(), toSend) + ); + } } public Inventory getInventory() { @@ -187,6 +216,10 @@ public final class ClickPlan { return simulatedItems.computeIfAbsent(slot, k -> inventory.getItem(slot).copy()); } + public void setDesiredBundleSlot(int desiredBundleSlot) { + this.desiredBundleSlot = desiredBundleSlot; + } + public GeyserItemStack getCursor() { return simulatedCursor; } @@ -275,8 +308,60 @@ public final class ClickPlan { } else if (InventoryUtils.canStack(cursor, clicked)) { cursor.sub(1); add(action.slot, clicked, 1); + } else { + // Can't stack, but both the cursor and the slot have an item + // (Called for bundles) + setCursor(clicked); + setItem(action.slot, cursor); } break; + case LEFT_BUNDLE: + Fraction bundleWeight = BundleInventoryTranslator.calculateBundleWeight(clicked.getBundleData().contents()); + int amountToAddInBundle = Math.min(BundleInventoryTranslator.capacityForItemStack(bundleWeight, cursor), cursor.getAmount()); + GeyserItemStack toInsertInBundle = cursor.copy(amountToAddInBundle); + if (executionBegan) { + clicked.getBundleData().contents().add(0, toInsertInBundle); + session.getBundleCache().onItemAdded(clicked); // Must be run before onSlotItemChange as the latter exports an ItemStack from the bundle + } + onSlotItemChange(action.slot, clicked); + cursor.sub(amountToAddInBundle); + break; + case LEFT_BUNDLE_FROM_CURSOR: + List<GeyserItemStack> contents = cursor.getBundleData().contents(); + bundleWeight = BundleInventoryTranslator.calculateBundleWeight(contents); + amountToAddInBundle = Math.min(BundleInventoryTranslator.capacityForItemStack(bundleWeight, clicked), clicked.getAmount()); + toInsertInBundle = clicked.copy(amountToAddInBundle); + if (executionBegan) { + cursor.getBundleData().contents().add(0, toInsertInBundle); + session.getBundleCache().onItemAdded(cursor); + } + sub(action.slot, clicked, amountToAddInBundle); + break; + case RIGHT_BUNDLE: + if (!cursor.isEmpty()) { + // Bundle should be in player's hand. + GeyserItemStack itemStack = cursor.getBundleData() + .contents() + .remove(0); + if (executionBegan) { + session.getBundleCache().onItemRemoved(cursor, 0); + } + setItem(action.slot, itemStack); + break; + } + + if (executionBegan) { + sendSelectedBundleSlot(action.slot); + } + GeyserItemStack itemStack = clicked.getBundleData() + .contents() + .remove(desiredBundleSlot); + if (executionBegan) { + session.getBundleCache().onItemRemoved(clicked, desiredBundleSlot); + } + onSlotItemChange(action.slot, clicked); + setCursor(itemStack); + break; case SWAP_TO_HOTBAR_1: swap(action.slot, inventory.getOffsetForHotbar(0), clicked); break; @@ -319,6 +404,11 @@ public final class ClickPlan { } } + private void sendSelectedBundleSlot(int slot) { + // Looks like this is also technically sent in creative mode. + session.sendDownstreamGamePacket(new ServerboundSelectBundleItemPacket(slot, desiredBundleSlot)); + } + /** * Swap between two inventory slots without a cursor. This should only be used with {@link ContainerActionType#MOVE_TO_HOTBAR_SLOT} */ 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 3bdf23e39..b3a38f32f 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -158,6 +158,7 @@ import org.geysermc.geyser.session.auth.AuthData; import org.geysermc.geyser.session.auth.BedrockClientData; import org.geysermc.geyser.session.cache.AdvancementsCache; import org.geysermc.geyser.session.cache.BookEditCache; +import org.geysermc.geyser.session.cache.BundleCache; import org.geysermc.geyser.session.cache.ChunkCache; import org.geysermc.geyser.session.cache.EntityCache; import org.geysermc.geyser.session.cache.EntityEffectCache; @@ -275,6 +276,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { private final AdvancementsCache advancementsCache; private final BookEditCache bookEditCache; + private final BundleCache bundleCache; private final ChunkCache chunkCache; private final EntityCache entityCache; private final EntityEffectCache effectCache; @@ -677,6 +679,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { this.advancementsCache = new AdvancementsCache(this); this.bookEditCache = new BookEditCache(this); + this.bundleCache = new BundleCache(this); this.chunkCache = new ChunkCache(this); this.entityCache = new EntityCache(this); this.effectCache = new EntityEffectCache(); @@ -1352,6 +1355,8 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { } } + this.bundleCache.tick(); + if (spawned) { // Could move this to the PlayerAuthInput translator, in the event the player lags // but this will work once we implement matching Java custom tick cycles @@ -1470,6 +1475,13 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { hand, worldCache.nextPredictionSequence(), playerEntity.getYaw(), playerEntity.getPitch())); } + public void releaseItem() { + // Followed to the Minecraft Protocol specification outlined at wiki.vg + ServerboundPlayerActionPacket releaseItemPacket = new ServerboundPlayerActionPacket(PlayerAction.RELEASE_USE_ITEM, Vector3i.ZERO, + Direction.DOWN, 0); + sendDownstreamGamePacket(releaseItemPacket); + } + /** * Checks to see if a shield is in either hand to activate blocking. If so, it sets the Bedrock client to display * blocking and sends a packet to the Java server. diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/BundleCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/BundleCache.java new file mode 100644 index 000000000..8ad31949b --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/session/cache/BundleCache.java @@ -0,0 +1,383 @@ +/* + * Copyright (c) 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.session.cache; + +import org.checkerframework.checker.nullness.qual.Nullable; +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.FullContainerName; +import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; +import org.cloudburstmc.protocol.bedrock.packet.ContainerRegistryCleanupPacket; +import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket; +import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket; +import org.geysermc.geyser.inventory.GeyserItemStack; +import org.geysermc.geyser.inventory.Inventory; +import org.geysermc.geyser.inventory.PlayerInventory; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.session.cache.tags.ItemTag; +import org.geysermc.geyser.util.InventoryUtils; +import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public final class BundleCache { + private static final int BUNDLE_CONTAINER_ID = 125; // BDS 1.21.44 + private final GeyserSession session; + private int nextBundleId; + + private int releaseTick = -1; + + public BundleCache(GeyserSession session) { + this.session = session; + } + + /** + * Checks to see if the given item from the server is a bundle. + * If so, we initialize our bundle cache. + */ + public void initialize(GeyserItemStack itemStack) { + // Message before 1.21.4 - "Can't check for BUNDLE_CONTENTS, which may be missing if the bundle is empty." + // Now irrelevant, but keeping as-is for the time being. + if (session.getTagCache().is(ItemTag.BUNDLES, itemStack)) { + if (itemStack.getBundleData() != null) { + session.getGeyser().getLogger().warning("Stack has bundle data already! It should not!"); + if (session.getGeyser().getConfig().isDebugMode()) { + session.getGeyser().getLogger().debug("Player: " + session.javaUsername()); + session.getGeyser().getLogger().debug("Stack: " + itemStack); + } + } + + BundleData bundleData; + List<ItemStack> rawContents = itemStack.getComponent(DataComponentType.BUNDLE_CONTENTS); + if (rawContents != null) { + // Use existing list and transform it to support net IDs + bundleData = new BundleData(session, rawContents); + } else { + // This is valid behavior (as of vanilla 1.21.2) if the bundle is empty. + // Create new list + bundleData = new BundleData(); + } + itemStack.setBundleData(bundleData); + } + } + + public void markNewBundle(@Nullable BundleData bundleData) { + if (bundleData == null) { + return; + } + if (bundleData.bundleId != -1) { + return; + } + bundleData.bundleId = nextBundleId++; + for (GeyserItemStack stack : bundleData.contents()) { + stack.setNetId(session.getNextItemNetId()); + session.getBundleCache().markNewBundle(stack.getBundleData()); + } + } + + public ItemData checkForBundle(GeyserItemStack itemStack, ItemData.Builder itemData) { + if (itemStack.getBundleData() == null) { + return itemData.build(); + } + // Not ideal, since Cloudburst NBT is immutable, but there isn't another ideal intersection between + // item instance tracking and item translation + // (Java just reads the contents of each item, while Bedrock kind of wants its own ID for each bundle item stack) + List<GeyserItemStack> contents = itemStack.getBundleData().contents(); + int containerId = itemStack.getBundleId(); + + if (containerId == -1) { + session.getGeyser().getLogger().warning("Bundle ID should not be -1!"); + } + + NbtMap nbt = itemData.build().getTag(); + NbtMapBuilder builder = nbt == null ? NbtMap.builder() : nbt.toBuilder(); + builder.putInt("bundle_id", containerId); + itemData.tag(builder.build()); + + // Now that the tag is updated... + ItemData finalItem = itemData.build(); + + if (!itemStack.getBundleData().triggerFullContentsUpdate) { + // We are probably in the middle of updating one slot. Let's save bandwidth! :) + return finalItem; + } + + // This is how BDS does it, so while it isn't pretty, it is accurate. + // Ensure that all bundle slots are cleared when we re-send data. + // Otherwise, if we don't indicate an item for a slot, Bedrock will think + // the old item still exists. + ItemData[] array = new ItemData[64]; + Arrays.fill(array, ItemData.AIR); + List<ItemData> bedrockItems = Arrays.asList(array); + // Reverse order to ensure contents line up with Java. + int j = 0; + for (int i = contents.size() - 1; i >= 0; i--) { + // Ensure item data can be tracked + bedrockItems.set(j++, contents.get(i).getItemData(session)); + } + InventoryContentPacket packet = new InventoryContentPacket(); + packet.setContainerId(BUNDLE_CONTAINER_ID); + packet.setContents(bedrockItems); + packet.setContainerNameData(BundleCache.createContainer(containerId)); + packet.setStorageItem(finalItem); + session.sendUpstreamPacket(packet); + + return finalItem; + } + + /* + * We need to send an InventorySlotPacket to the Bedrock client so it updates its changes and doesn't desync. + */ + + public void onItemAdded(GeyserItemStack bundle) { + BundleData data = bundle.getBundleData(); + data.freshFromServer = false; + data.triggerFullContentsUpdate = false; + + List<GeyserItemStack> contents = data.contents(); + int bedrockSlot = platformConvertSlot(contents.size(), 0); + ItemData bedrockContent = contents.get(0).getItemData(session); + + sendInventoryPacket(data.bundleId(), bedrockSlot, bedrockContent, bundle.getItemData(session)); + + data.triggerFullContentsUpdate = true; + } + + public void onItemRemoved(GeyserItemStack bundle, int slot) { + // Whatever item used to be in here should have been removed *before* this was triggered. + BundleData data = bundle.getBundleData(); + data.freshFromServer = false; + data.triggerFullContentsUpdate = false; + + List<GeyserItemStack> contents = data.contents(); + ItemData baseBundle = bundle.getItemData(session); + // This first slot is now blank! + sendInventoryPacket(data.bundleId(), platformConvertSlot(contents.size() + 1, 0), ItemData.AIR, baseBundle); + // Adjust the index of every item that came before this item. + for (int i = 0; i < slot; i++) { + sendInventoryPacket(data.bundleId(), platformConvertSlot(contents.size(), i), + contents.get(i).getItemData(session), baseBundle); + } + + data.triggerFullContentsUpdate = true; + } + + private void sendInventoryPacket(int bundleId, int bedrockSlot, ItemData bedrockContent, ItemData baseBundle) { + InventorySlotPacket packet = new InventorySlotPacket(); + packet.setContainerId(BUNDLE_CONTAINER_ID); + packet.setItem(bedrockContent); + packet.setSlot(bedrockSlot); + packet.setContainerNameData(createContainer(bundleId)); + packet.setStorageItem(baseBundle); + session.sendUpstreamPacket(packet); + } + + /** + * If a bundle is no longer present in the working inventory, delete the cache + * from the client. + */ + public void onOldItemDelete(GeyserItemStack itemStack) { + if (itemStack.getBundleId() != -1) { + // Clean up old container ID, to match BDS behavior. + ContainerRegistryCleanupPacket packet = new ContainerRegistryCleanupPacket(); + packet.getContainers().add(createContainer(itemStack.getBundleId())); + session.sendUpstreamPacket(packet); + } + } + + public void onInventoryClose(Inventory inventory) { + if (inventory instanceof PlayerInventory) { + // Don't bother; items are still here. + return; + } + + for (int i = 0; i < inventory.getSize(); i++) { + GeyserItemStack item = inventory.getItem(i); + onOldItemDelete(item); + } + } + + /* All utilities to track when a release item packet should be sent. + * As of 1.21.50, Bedrock seems to be picky and inspecific when sending its own release packet, + * but if Java does not receive a release packet, then it will continue to drop items out of a bundle. + * This workaround releases items on behalf of the client if it does not send a packet, while respecting + * if Bedrock sends its own. */ + + public void awaitRelease() { + if (session.getTagCache().is(ItemTag.BUNDLES, session.getPlayerInventory().getItemInHand())) { + releaseTick = session.getTicks() + 1; + } + } + + public void markRelease() { + releaseTick = -1; + } + + public void tick() { + if (this.releaseTick != -1) { + if (session.getTicks() >= this.releaseTick) { + session.releaseItem(); + markRelease(); + } + } + } + + /** + * Bidirectional; works for both Bedrock and Java. + */ + public static int platformConvertSlot(int contentsSize, int rawSlot) { + return contentsSize - rawSlot - 1; + } + + public static FullContainerName createContainer(int id) { + return new FullContainerName(ContainerSlotType.DYNAMIC_CONTAINER, id); + } + + /** + * Primarily exists to support net IDs within bundles. + * Important to prevent accidental item deletion in creative mode. + */ + public static final class BundleData { + private final List<GeyserItemStack> contents; + /** + * Will be set to a positive integer after checking for existing bundle data. + */ + private int bundleId = -1; + /** + * If false, blocks a complete InventoryContentPacket being sent to the server. + */ + private boolean triggerFullContentsUpdate = true; + /** + * Sets whether data is accurate from the server; if so, any old bundle contents + * will be overwritten. + * This will be set to false if we are the most recent change-makers. + */ + private boolean freshFromServer = true; + + BundleData(GeyserSession session, List<ItemStack> contents) { + this(); + for (ItemStack content : contents) { + GeyserItemStack itemStack = GeyserItemStack.from(content); + // Check recursively + session.getBundleCache().initialize(itemStack); + this.contents.add(itemStack); + } + } + + BundleData() { + this.contents = new ArrayList<>(); + } + + public int bundleId() { + return bundleId; + } + + public List<GeyserItemStack> contents() { + return contents; + } + + public boolean freshFromServer() { + return freshFromServer; + } + + public List<ItemStack> toComponent() { + List<ItemStack> component = new ArrayList<>(this.contents.size()); + for (GeyserItemStack content : this.contents) { + component.add(content.getItemStack()); + } + return component; + } + + /** + * Merge in changes from the server and re-use net IDs where possible. + */ + public void updateNetIds(GeyserSession session, BundleData oldData) { + List<GeyserItemStack> oldContents = oldData.contents(); + // Items can't exactly be rearranged in a bundle; they can only be removed at an index, or inserted. + int oldIndex = 0; + for (int newIndex = 0; newIndex < this.contents.size(); newIndex++) { + GeyserItemStack itemStack = this.contents.get(newIndex); + if (oldIndex >= oldContents.size()) { + // Assume new item if it goes out of bounds of our existing stack + if (this.freshFromServer) { + // Only update net IDs for new items if the data is fresh from server. + // Otherwise, we can update net IDs for something that already has + // net IDs allocated, which can cause desyncs. + Inventory.updateItemNetId(GeyserItemStack.EMPTY, itemStack, session); + session.getBundleCache().markNewBundle(itemStack.getBundleData()); + } + continue; + } + + GeyserItemStack oldItem = oldContents.get(oldIndex); + // If it stacks with the old item at this index, then + if (!InventoryUtils.canStack(oldItem, itemStack)) { + // New item? + boolean found = false; + if (oldIndex + 1 < oldContents.size()) { + oldItem = oldContents.get(oldIndex + 1); + if (InventoryUtils.canStack(oldItem, itemStack)) { + // Permanently increment and assume all contents shifted here + oldIndex++; + found = true; + } + } + if (!found && oldIndex - 1 >= 0) { + oldItem = oldContents.get(oldIndex - 1); + if (InventoryUtils.canStack(oldItem, itemStack)) { + // Permanently decrement and assume all contents shifted here + oldIndex--; + found = true; + } + } + if (!found) { + oldItem = GeyserItemStack.EMPTY; + } + } + + if (oldItem != GeyserItemStack.EMPTY || this.freshFromServer) { + Inventory.updateItemNetId(oldItem, itemStack, session); + } + oldIndex++; + } + this.bundleId = oldData.bundleId(); + } + + public BundleData copy() { + BundleData data = new BundleData(); + data.bundleId = this.bundleId; + for (GeyserItemStack content : this.contents) { + data.contents.add(content.copy()); + } + data.freshFromServer = this.freshFromServer; + return data; + } + } +} diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/BundleInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/BundleInventoryTranslator.java new file mode 100644 index 000000000..1b42e537f --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/BundleInventoryTranslator.java @@ -0,0 +1,339 @@ +/* + * Copyright (c) 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.translator.inventory; + +import it.unimi.dsi.fastutil.ints.IntOpenHashSet; +import it.unimi.dsi.fastutil.ints.IntSet; +import it.unimi.dsi.fastutil.ints.IntSets; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequest; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequestSlotData; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.ItemStackRequestAction; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.SwapAction; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.TransferItemStackRequestAction; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.response.ItemStackResponse; +import org.geysermc.geyser.inventory.GeyserItemStack; +import org.geysermc.geyser.inventory.Inventory; +import org.geysermc.geyser.inventory.click.Click; +import org.geysermc.geyser.inventory.click.ClickPlan; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.session.cache.BundleCache; +import org.geysermc.geyser.util.InventoryUtils; +import org.geysermc.geyser.util.thirdparty.Fraction; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; + +import java.util.List; + +import static org.geysermc.geyser.translator.inventory.InventoryTranslator.*; + +public final class BundleInventoryTranslator { + /** + * @return a processed bundle interaction, or null to resume normal transaction handling. + */ + @Nullable + static ItemStackResponse handleBundle(GeyserSession session, InventoryTranslator translator, Inventory inventory, ItemStackRequest request, boolean sendCreativePackets) { + TransferItemStackRequestAction action = null; + for (ItemStackRequestAction requestAction : request.getActions()) { + if (requestAction instanceof SwapAction swapAction) { + if (isBundle(swapAction.getSource()) && isBundle(swapAction.getDestination())) { + // Can be seen when inserting an item that's already present within the bundle + continue; + } + return null; + } + + if (!(requestAction instanceof TransferItemStackRequestAction transferAction)) { + // No other known bundle action that does not use transfer actions + return null; + } + boolean sourceIsBundle = isBundle(transferAction.getSource()); + boolean destIsBundle = isBundle(transferAction.getDestination()); + if (sourceIsBundle && destIsBundle) { + // The client is rearranging the bundle inventory; we're going to ignore translating these actions. + continue; + } + if (sourceIsBundle || destIsBundle) { + // This action is moving to a bundle or moving out of a bundle. This is the one we want to track + action = transferAction; + } else { + // Neither location is a bundle location. We don't need to deal with this here. + return null; + } + } + if (action == null) { + return null; + } + + ClickPlan plan = new ClickPlan(session, translator, inventory); + if (isBundle(action.getDestination())) { + // Placing into bundle + var bundleSlotData = action.getDestination(); + var inventorySlotData = action.getSource(); + int bundleId = bundleSlotData.getContainerName().getDynamicId(); + GeyserItemStack cursor = session.getPlayerInventory().getCursor(); + + if (cursor.getBundleId() == bundleId) { + List<GeyserItemStack> contents = cursor.getBundleData().contents(); + // Placing items into bundles can mean their contents are empty + + // We are currently holding the bundle and trying to pick an item up. + int sourceSlot = translator.bedrockSlotToJava(inventorySlotData); + GeyserItemStack sourceItem = inventory.getItem(sourceSlot); + if (sourceItem.isEmpty()) { + // This would be treated as just... plumping the bundle down, + // and that should not be called here. + return rejectRequest(request); + } + if (inventorySlotData.getStackNetworkId() != sourceItem.getNetId()) { + return rejectRequest(request); + } + + // Note that this is also called in ClickPlan. Not ideal... + Fraction bundleWeight = calculateBundleWeight(contents); + int allowedCapacity = Math.min(capacityForItemStack(bundleWeight, sourceItem), sourceItem.getAmount()); + + if (action.getCount() != allowedCapacity) { + // Might trigger if bundle weight is different between Java and Bedrock (see calculateBundleWeight) + return rejectRequest(request); + } + + plan.add(Click.LEFT_BUNDLE_FROM_CURSOR, sourceSlot); + if (sendCreativePackets) { + plan.executeForCreativeMode(); + } else { + plan.execute(false); + } + return acceptRequest(request, translator.makeContainerEntries(session, inventory, IntSets.singleton(sourceSlot))); + } + + for (int javaSlot = 0; javaSlot < inventory.getSize(); javaSlot++) { + GeyserItemStack bundle = inventory.getItem(javaSlot); + if (bundle.getBundleId() != bundleId) { + continue; + } + + if (!translator.checkNetId(session, inventory, inventorySlotData)) { + return rejectRequest(request); + } + + // Placing items into bundles can mean their contents are empty + // Bundle slot does not matter; Java always appends an item to the beginning of a bundle inventory + + IntSet affectedSlots = new IntOpenHashSet(2); + affectedSlots.add(javaSlot); + + boolean slotIsInventory = !isCursor(inventorySlotData); + int sourceSlot; + // If source is cursor, logic lines up better with Java. + if (slotIsInventory) { + // Simulate picking up the item and adding it to our cursor, + // which is what Java would expect + sourceSlot = translator.bedrockSlotToJava(inventorySlotData); + plan.add(Click.LEFT, sourceSlot); + affectedSlots.add(sourceSlot); + } else { + sourceSlot = -1; + } + + Fraction bundleWeight = calculateBundleWeight(bundle.getBundleData().contents()); + // plan.getCursor() covers if we just picked up the item above from a slot + int allowedCapacity = Math.min(capacityForItemStack(bundleWeight, plan.getCursor()), plan.getCursor().getAmount()); + if (action.getCount() != allowedCapacity) { + // Might trigger if bundle weight is different between Java and Bedrock (see calculateBundleWeight) + return rejectRequest(request); + } + + plan.add(Click.LEFT_BUNDLE, javaSlot); + + if (slotIsInventory && allowedCapacity != plan.getCursor().getAmount()) { + // We will need to place the item back in its original slot. + plan.add(Click.LEFT, sourceSlot); + } + + if (sendCreativePackets) { + plan.executeForCreativeMode(); + } else { + plan.execute(false); + } + return acceptRequest(request, translator.makeContainerEntries(session, inventory, affectedSlots)); + } + + // Could not find bundle in inventory + + } else { + // Taking from bundle + var bundleSlotData = action.getSource(); + var inventorySlotData = action.getDestination(); + int bundleId = bundleSlotData.getContainerName().getDynamicId(); + GeyserItemStack cursor = session.getPlayerInventory().getCursor(); + if (cursor.getBundleId() == bundleId) { + // We are currently holding the bundle + List<GeyserItemStack> contents = cursor.getBundleData().contents(); + if (contents.isEmpty()) { + // Nothing would be ejected? + return rejectRequest(request); + } + + // Can't select bundle slots while holding bundle in any version; don't set desired bundle slot + + if (bundleSlotData.getStackNetworkId() != contents.get(0).getNetId()) { + // We're pulling out the first item; if something mismatches, wuh oh. + return rejectRequest(request); + } + + int destSlot = translator.bedrockSlotToJava(inventorySlotData); + if (!inventory.getItem(destSlot).isEmpty()) { + // Illegal action to place an item down on an existing stack, even if + // the bundle contains the item. + return rejectRequest(request); + } + plan.add(Click.RIGHT_BUNDLE, destSlot); + if (sendCreativePackets) { + plan.executeForCreativeMode(); + } else { + plan.execute(false); + } + return acceptRequest(request, translator.makeContainerEntries(session, inventory, IntSets.singleton(destSlot))); + } + + // We need context of what slot the bundle is in. + for (int javaSlot = 0; javaSlot < inventory.getSize(); javaSlot++) { + GeyserItemStack bundle = inventory.getItem(javaSlot); + if (bundle.getBundleId() != bundleId) { + continue; + } + + List<GeyserItemStack> contents = bundle.getBundleData().contents(); + int rawSelectedSlot = bundleSlotData.getSlot(); + if (rawSelectedSlot >= contents.size()) { + // Illegal? + return rejectRequest(request); + } + + // Bedrock's indexes are flipped around - first item shown to it is the last index. + int slot = BundleCache.platformConvertSlot(contents.size(), rawSelectedSlot); + plan.setDesiredBundleSlot(slot); + + // We'll need it even if the final destination isn't the cursor. + // I can't think of a situation where we shouldn't reject it and use a temp slot, + // but we will see. + if (!cursor.isEmpty()) { + return rejectRequest(request); + } + + IntSet affectedSlots = new IntOpenHashSet(2); + affectedSlots.add(javaSlot); + GeyserItemStack bundledItem = contents.get(slot); + if (bundledItem.getNetId() != bundleSlotData.getStackNetworkId()) { + // !!! + return rejectRequest(request); + } + + plan.add(Click.RIGHT_BUNDLE, javaSlot); + // If false, simple logic that matches nicely with Java Edition + if (!isCursor(inventorySlotData)) { + // Alas, two-click time. + int destSlot = translator.bedrockSlotToJava(inventorySlotData); + GeyserItemStack existing = inventory.getItem(destSlot); + + // Empty slot is good, but otherwise let's just check that + // the two can stack... + if (!existing.isEmpty()) { + if (!InventoryUtils.canStack(bundledItem, existing)) { + return rejectRequest(request); + } + } + + // Copy the full stack to the new slot. + plan.add(Click.LEFT, destSlot); + affectedSlots.add(destSlot); + } + + if (sendCreativePackets) { + plan.executeForCreativeMode(); + } else { + plan.execute(false); + } + return acceptRequest(request, translator.makeContainerEntries(session, inventory, affectedSlots)); + } + + // Could not find bundle in inventory + } + return rejectRequest(request); + } + + private static final Fraction BUNDLE_IN_BUNDLE_WEIGHT = Fraction.getFraction(1, 16); + + public static Fraction calculateBundleWeight(List<GeyserItemStack> contents) { + Fraction fraction = Fraction.ZERO; + + for (GeyserItemStack content : contents) { + fraction = fraction.add(calculateWeight(content) + .multiplyBy(Fraction.getFraction(content.getAmount(), 1))); + } + + return fraction; + } + + private static Fraction calculateWeight(GeyserItemStack itemStack) { + if (itemStack.getBundleData() != null) { + return BUNDLE_IN_BUNDLE_WEIGHT.add(calculateBundleWeight(itemStack.getBundleData().contents())); + } + DataComponents components = itemStack.getComponents(); + if (components != null) { + // NOTE: this seems to be Java-only, so it can technically cause a bundle weight desync, + // but it'll be so rare we can probably ignore it. + List<?> bees = components.get(DataComponentType.BEES); + if (bees != null && !bees.isEmpty()) { + // Bees be heavy, I guess. + return Fraction.ONE; + } + } + return Fraction.getFraction(1, itemStack.getComponentOrFallback(DataComponentType.MAX_STACK_SIZE, itemStack.asItem().defaultMaxStackSize())); + } + + public static int capacityForItemStack(Fraction bundleWeight, GeyserItemStack itemStack) { + Fraction inverse = Fraction.ONE.subtract(bundleWeight); + return Math.max(inverse.divideBy(calculateWeight(itemStack)).intValue(), 0); + } + + static boolean isBundle(ItemStackRequestSlotData slotData) { + return slotData.getContainerName().getContainer() == ContainerSlotType.DYNAMIC_CONTAINER; + } + + static boolean isBundle(ClickPlan plan, int slot) { + return isBundle(plan.getItem(slot)); + } + + static boolean isBundle(GeyserItemStack stack) { + return stack.getBundleData() != null; + } + + private BundleInventoryTranslator() { + } +} 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 b4f507af5..e6c670eea 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,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import static org.geysermc.geyser.translator.inventory.BundleInventoryTranslator.isBundle; + @AllArgsConstructor public abstract class InventoryTranslator { @@ -241,6 +243,13 @@ public abstract class InventoryTranslator { return rejectRequest(request); } + // Might be a bundle action... let's check. + ItemStackResponse bundleResponse = BundleInventoryTranslator.handleBundle(session, this, inventory, request, false); + if (bundleResponse != null) { + // We can simplify a lot of logic because we aren't expecting multi-slot interactions. + return bundleResponse; + } + int sourceSlot = bedrockSlotToJava(transferAction.getSource()); int destSlot = bedrockSlotToJava(transferAction.getDestination()); boolean isSourceCursor = isCursor(transferAction.getSource()); @@ -393,6 +402,7 @@ public abstract class InventoryTranslator { break; } case SWAP: { + // TODO breaks with bundles SwapAction swapAction = (SwapAction) action; ItemStackRequestSlotData source = swapAction.getSource(); ItemStackRequestSlotData destination = swapAction.getDestination(); @@ -426,18 +436,24 @@ public abstract class InventoryTranslator { } } + // A note on all the bundle checks for clicks... + // Left clicking in these contexts can count as using the bundle + // and adding the stack to the contents of the bundle. + // In these cases, we can safely use right-clicking while holding the bundle + // as its stack size is 1. + if (isSourceCursor && isDestCursor) { //??? return rejectRequest(request); } else if (isSourceCursor) { //swap cursor if (InventoryUtils.canStack(cursor, plan.getItem(destSlot))) { //TODO: cannot simply swap if cursor stacks with slot (temp slot) return rejectRequest(request); } - plan.add(Click.LEFT, destSlot); + plan.add(isBundle(plan, destSlot) || isBundle(cursor) ? Click.RIGHT : Click.LEFT, destSlot); } else if (isDestCursor) { //swap cursor if (InventoryUtils.canStack(cursor, plan.getItem(sourceSlot))) { //TODO return rejectRequest(request); } - plan.add(Click.LEFT, sourceSlot); + plan.add(isBundle(plan, sourceSlot) || isBundle(cursor) ? Click.RIGHT : Click.LEFT, sourceSlot); } else { if (!cursor.isEmpty()) { //TODO: (temp slot) return rejectRequest(request); @@ -449,7 +465,7 @@ public abstract class InventoryTranslator { return rejectRequest(request); } plan.add(Click.LEFT, sourceSlot); //pickup source into cursor - plan.add(Click.LEFT, destSlot); //swap cursor with dest slot + plan.add(isBundle(plan, sourceSlot) || isBundle(plan, destSlot) ? Click.RIGHT : Click.LEFT, destSlot); //swap cursor with dest slot plan.add(Click.LEFT, sourceSlot); //release cursor onto source } break; @@ -915,6 +931,11 @@ public abstract class InventoryTranslator { } public boolean checkNetId(GeyserSession session, Inventory inventory, ItemStackRequestSlotData slotInfoData) { + if (BundleInventoryTranslator.isBundle(slotInfoData)) { + // Will thoroughly be investigated, if needed, in bundle checks. + return true; + } + int netId = slotInfoData.getStackNetworkId(); // "In my testing, sometimes the client thinks the netId of an item in the crafting grid is 1, even though we never said it was. // I think it only happens when we manually set the grid but that was my quick fix" diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java index 445b4715b..371d61714 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java @@ -265,6 +265,15 @@ public class PlayerInventoryTranslator extends InventoryTranslator { return rejectRequest(request, false); } + // Might be a bundle action... let's check. + // If we're in creative mode, instead of replacing logic (more hassle for updates), + // let's just reuse as much logic as possible!! + ItemStackResponse bundleResponse = BundleInventoryTranslator.handleBundle(session, this, inventory, request, true); + if (bundleResponse != null) { + // We can simplify a lot of logic because we aren't expecting multi-slot interactions. + return bundleResponse; + } + int transferAmount = transferAction.getCount(); if (isCursor(transferAction.getDestination())) { int sourceSlot = bedrockSlotToJava(transferAction.getSource()); @@ -415,6 +424,7 @@ public class PlayerInventoryTranslator extends InventoryTranslator { @Override protected ItemStackResponse translateCreativeRequest(GeyserSession session, Inventory inventory, ItemStackRequest request) { ItemStack javaCreativeItem = null; + boolean bundle = false; IntSet affectedSlots = new IntOpenHashSet(); CraftState craftState = CraftState.START; for (ItemStackRequestAction action : request.getActions()) { @@ -469,8 +479,10 @@ public class PlayerInventoryTranslator extends InventoryTranslator { if (isCursor(transferAction.getDestination())) { if (session.getPlayerInventory().getCursor().isEmpty()) { GeyserItemStack newItemStack = GeyserItemStack.from(javaCreativeItem); + session.getBundleCache().initialize(newItemStack); newItemStack.setAmount(transferAction.getCount()); session.getPlayerInventory().setCursor(newItemStack, session); + bundle = newItemStack.getBundleData() != null; } else { session.getPlayerInventory().getCursor().add(transferAction.getCount()); } @@ -479,8 +491,10 @@ public class PlayerInventoryTranslator extends InventoryTranslator { int destSlot = bedrockSlotToJava(transferAction.getDestination()); if (inventory.getItem(destSlot).isEmpty()) { GeyserItemStack newItemStack = GeyserItemStack.from(javaCreativeItem); + session.getBundleCache().initialize(newItemStack); newItemStack.setAmount(transferAction.getCount()); inventory.setItem(destSlot, newItemStack, session); + bundle = newItemStack.getBundleData() != null; } else { inventory.getItem(destSlot).add(transferAction.getCount()); } @@ -520,7 +534,11 @@ public class PlayerInventoryTranslator extends InventoryTranslator { int slot = it.nextInt(); sendCreativeAction(session, inventory, slot); } - return acceptRequest(request, makeContainerEntries(session, inventory, affectedSlots)); + // On the bundle check: + // We can also accept the request, but sending a bad request indicates to Geyser to refresh the inventory + // and we need to refresh the inventory to send the bundle ID/inventory to the client. + // It's not great, but I don't want to create a container class for request responses + return bundle ? rejectRequest(request, false) : acceptRequest(request, makeContainerEntries(session, inventory, affectedSlots)); } private static void sendCreativeAction(GeyserSession session, Inventory inventory, int slot) { 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 422c45b9b..db1a05011 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 @@ -411,6 +411,8 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve session.useItem(Hand.MAIN_HAND); + session.getBundleCache().awaitRelease(); + List<LegacySetItemSlotData> legacySlots = packet.getLegacySlots(); if (packet.getActions().size() == 1 && !legacySlots.isEmpty()) { InventoryActionData actionData = packet.getActions().get(0); @@ -439,10 +441,8 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve break; case ITEM_RELEASE: if (packet.getActionType() == 0) { - // Followed to the Minecraft Protocol specification outlined at wiki.vg - ServerboundPlayerActionPacket releaseItemPacket = new ServerboundPlayerActionPacket(PlayerAction.RELEASE_USE_ITEM, Vector3i.ZERO, - Direction.DOWN, 0); - session.sendDownstreamGamePacket(releaseItemPacket); + session.releaseItem(); + session.getBundleCache().markRelease(); } break; case ITEM_USE_ON_ENTITY: diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetContentTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetContentTranslator.java index f2445856d..cc229b993 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetContentTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetContentTranslator.java @@ -64,6 +64,7 @@ public class JavaContainerSetContentTranslator extends PacketTranslator<Clientbo } GeyserItemStack newItem = GeyserItemStack.from(packet.getItems()[i]); + session.getBundleCache().initialize(newItem); inventory.setItem(i, newItem, session); } @@ -73,7 +74,9 @@ public class JavaContainerSetContentTranslator extends PacketTranslator<Clientbo session.setEmulatePost1_16Logic(stateId > 0 || stateId != inventory.getStateId()); inventory.setStateId(stateId); - session.getPlayerInventory().setCursor(GeyserItemStack.from(packet.getCarriedItem()), session); + GeyserItemStack cursor = GeyserItemStack.from(packet.getCarriedItem()); + session.getBundleCache().initialize(cursor); + session.getPlayerInventory().setCursor(cursor, session); InventoryUtils.updateCursor(session); if (session.getInventoryTranslator() instanceof SmithingInventoryTranslator) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java index fe61c8579..0ef547248 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java @@ -93,6 +93,7 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound } GeyserItemStack newItem = GeyserItemStack.from(packet.getItem()); + session.getBundleCache().initialize(newItem); if (packet.getContainerId() == 0 && !(translator instanceof PlayerInventoryTranslator)) { // In rare cases, the window ID can still be 0 but Java treats it as valid // This behavior still exists as of Java Edition 1.21.2, despite the new packet diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaSetCursorItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaSetCursorItemTranslator.java index df11bf1af..649da8ea4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaSetCursorItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaSetCursorItemTranslator.java @@ -38,6 +38,7 @@ public class JavaSetCursorItemTranslator extends PacketTranslator<ClientboundSet @Override public void translate(GeyserSession session, ClientboundSetCursorItemPacket packet) { GeyserItemStack newItem = GeyserItemStack.from(packet.getContents()); + session.getBundleCache().initialize(newItem); session.getPlayerInventory().setCursor(newItem, session); InventoryUtils.updateCursor(session); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaSetPlayerInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaSetPlayerInventoryTranslator.java index 58b30bfc8..b64805227 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaSetPlayerInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaSetPlayerInventoryTranslator.java @@ -55,7 +55,9 @@ public class JavaSetPlayerInventoryTranslator extends PacketTranslator<Clientbou return; } - session.getPlayerInventory().setItem(slot, GeyserItemStack.from(packet.getContents()), session); + GeyserItemStack newItem = GeyserItemStack.from(packet.getContents()); + session.getBundleCache().initialize(newItem); + session.getPlayerInventory().setItem(slot, newItem, session); InventoryTranslator.PLAYER_INVENTORY_TRANSLATOR.updateSlot(session, session.getPlayerInventory(), slot); } } 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 14a64d57a..ba11a20c7 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java @@ -140,6 +140,7 @@ public class InventoryUtils { } } session.setInventoryTranslator(InventoryTranslator.PLAYER_INVENTORY_TRANSLATOR); + session.getBundleCache().onInventoryClose(inventory); session.setOpenInventory(null); } diff --git a/core/src/main/java/org/geysermc/geyser/util/thirdparty/Fraction.java b/core/src/main/java/org/geysermc/geyser/util/thirdparty/Fraction.java new file mode 100644 index 000000000..892743925 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/util/thirdparty/Fraction.java @@ -0,0 +1,911 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.geysermc.geyser.util.thirdparty; // Geyser + +import java.math.BigInteger; +import java.util.Objects; + +/** + * {@link Fraction} is a {@link Number} implementation that + * stores fractions accurately. + * + * <p>This class is immutable, and interoperable with most methods that accept + * a {@link Number}.</p> + * + * <p>Note that this class is intended for common use cases, it is <i>int</i> + * based and thus suffers from various overflow issues. For a BigInteger based + * equivalent, please see the Commons Math BigFraction class.</p> + * + * @since 2.0 + */ +// Geyser: Java Edition uses this for 1.21.3 bundle calculation. Rather than +// Reimplementing an open-source class or bringing in a whole library, +// the single class is used to ensure accuracy. +public final class Fraction extends Number implements Comparable<Fraction> { + + /** + * Required for serialization support. Lang version 2.0. + * + * @see java.io.Serializable + */ + private static final long serialVersionUID = 65382027393090L; + + /** + * {@link Fraction} representation of 0. + */ + public static final Fraction ZERO = new Fraction(0, 1); + /** + * {@link Fraction} representation of 1. + */ + public static final Fraction ONE = new Fraction(1, 1); + /** + * {@link Fraction} representation of 1/2. + */ + public static final Fraction ONE_HALF = new Fraction(1, 2); + /** + * {@link Fraction} representation of 1/3. + */ + public static final Fraction ONE_THIRD = new Fraction(1, 3); + /** + * {@link Fraction} representation of 2/3. + */ + public static final Fraction TWO_THIRDS = new Fraction(2, 3); + /** + * {@link Fraction} representation of 1/4. + */ + public static final Fraction ONE_QUARTER = new Fraction(1, 4); + /** + * {@link Fraction} representation of 2/4. + */ + public static final Fraction TWO_QUARTERS = new Fraction(2, 4); + /** + * {@link Fraction} representation of 3/4. + */ + public static final Fraction THREE_QUARTERS = new Fraction(3, 4); + /** + * {@link Fraction} representation of 1/5. + */ + public static final Fraction ONE_FIFTH = new Fraction(1, 5); + /** + * {@link Fraction} representation of 2/5. + */ + public static final Fraction TWO_FIFTHS = new Fraction(2, 5); + /** + * {@link Fraction} representation of 3/5. + */ + public static final Fraction THREE_FIFTHS = new Fraction(3, 5); + /** + * {@link Fraction} representation of 4/5. + */ + public static final Fraction FOUR_FIFTHS = new Fraction(4, 5); + + + /** + * Add two integers, checking for overflow. + * + * @param x an addend + * @param y an addend + * @return the sum {@code x+y} + * @throws ArithmeticException if the result can not be represented as + * an int + */ + private static int addAndCheck(final int x, final int y) { + final long s = (long) x + (long) y; + if (s < Integer.MIN_VALUE || s > Integer.MAX_VALUE) { + throw new ArithmeticException("overflow: add"); + } + return (int) s; + } + /** + * Creates a {@link Fraction} instance from a {@code double} value. + * + * <p>This method uses the <a href="https://web.archive.org/web/20210516065058/http%3A//archives.math.utk.edu/articles/atuyl/confrac/"> + * continued fraction algorithm</a>, computing a maximum of + * 25 convergents and bounding the denominator by 10,000.</p> + * + * @param value the double value to convert + * @return a new fraction instance that is close to the value + * @throws ArithmeticException if {@code |value| > Integer.MAX_VALUE} + * or {@code value = NaN} + * @throws ArithmeticException if the calculated denominator is {@code zero} + * @throws ArithmeticException if the algorithm does not converge + */ + public static Fraction getFraction(double value) { + final int sign = value < 0 ? -1 : 1; + value = Math.abs(value); + if (value > Integer.MAX_VALUE || Double.isNaN(value)) { + throw new ArithmeticException("The value must not be greater than Integer.MAX_VALUE or NaN"); + } + final int wholeNumber = (int) value; + value -= wholeNumber; + + int numer0 = 0; // the pre-previous + int denom0 = 1; // the pre-previous + int numer1 = 1; // the previous + int denom1 = 0; // the previous + int numer2; // the current, setup in calculation + int denom2; // the current, setup in calculation + int a1 = (int) value; + int a2; + double x1 = 1; + double x2; + double y1 = value - a1; + double y2; + double delta1, delta2 = Double.MAX_VALUE; + double fraction; + int i = 1; + do { + delta1 = delta2; + a2 = (int) (x1 / y1); + x2 = y1; + y2 = x1 - a2 * y1; + numer2 = a1 * numer1 + numer0; + denom2 = a1 * denom1 + denom0; + fraction = (double) numer2 / (double) denom2; + delta2 = Math.abs(value - fraction); + a1 = a2; + x1 = x2; + y1 = y2; + numer0 = numer1; + denom0 = denom1; + numer1 = numer2; + denom1 = denom2; + i++; + } while (delta1 > delta2 && denom2 <= 10000 && denom2 > 0 && i < 25); + if (i == 25) { + throw new ArithmeticException("Unable to convert double to fraction"); + } + return getReducedFraction((numer0 + wholeNumber * denom0) * sign, denom0); + } + + /** + * Creates a {@link Fraction} instance with the 2 parts + * of a fraction Y/Z. + * + * <p>Any negative signs are resolved to be on the numerator.</p> + * + * @param numerator the numerator, for example the three in 'three sevenths' + * @param denominator the denominator, for example the seven in 'three sevenths' + * @return a new fraction instance + * @throws ArithmeticException if the denominator is {@code zero} + * or the denominator is {@code negative} and the numerator is {@code Integer#MIN_VALUE} + */ + public static Fraction getFraction(int numerator, int denominator) { + if (denominator == 0) { + throw new ArithmeticException("The denominator must not be zero"); + } + if (denominator < 0) { + if (numerator == Integer.MIN_VALUE || denominator == Integer.MIN_VALUE) { + throw new ArithmeticException("overflow: can't negate"); + } + numerator = -numerator; + denominator = -denominator; + } + return new Fraction(numerator, denominator); + } + /** + * Creates a {@link Fraction} instance with the 3 parts + * of a fraction X Y/Z. + * + * <p>The negative sign must be passed in on the whole number part.</p> + * + * @param whole the whole number, for example the one in 'one and three sevenths' + * @param numerator the numerator, for example the three in 'one and three sevenths' + * @param denominator the denominator, for example the seven in 'one and three sevenths' + * @return a new fraction instance + * @throws ArithmeticException if the denominator is {@code zero} + * @throws ArithmeticException if the denominator is negative + * @throws ArithmeticException if the numerator is negative + * @throws ArithmeticException if the resulting numerator exceeds + * {@code Integer.MAX_VALUE} + */ + public static Fraction getFraction(final int whole, final int numerator, final int denominator) { + if (denominator == 0) { + throw new ArithmeticException("The denominator must not be zero"); + } + if (denominator < 0) { + throw new ArithmeticException("The denominator must not be negative"); + } + if (numerator < 0) { + throw new ArithmeticException("The numerator must not be negative"); + } + final long numeratorValue; + if (whole < 0) { + numeratorValue = whole * (long) denominator - numerator; + } else { + numeratorValue = whole * (long) denominator + numerator; + } + if (numeratorValue < Integer.MIN_VALUE || numeratorValue > Integer.MAX_VALUE) { + throw new ArithmeticException("Numerator too large to represent as an Integer."); + } + return new Fraction((int) numeratorValue, denominator); + } + /** + * Creates a Fraction from a {@link String}. + * + * <p>The formats accepted are:</p> + * + * <ol> + * <li>{@code double} String containing a dot</li> + * <li>'X Y/Z'</li> + * <li>'Y/Z'</li> + * <li>'X' (a simple whole number)</li> + * </ol> + * <p>and a .</p> + * + * @param str the string to parse, must not be {@code null} + * @return the new {@link Fraction} instance + * @throws NullPointerException if the string is {@code null} + * @throws NumberFormatException if the number format is invalid + */ + public static Fraction getFraction(String str) { + Objects.requireNonNull(str, "str"); + // parse double format + int pos = str.indexOf('.'); + if (pos >= 0) { + return getFraction(Double.parseDouble(str)); + } + + // parse X Y/Z format + pos = str.indexOf(' '); + if (pos > 0) { + final int whole = Integer.parseInt(str.substring(0, pos)); + str = str.substring(pos + 1); + pos = str.indexOf('/'); + if (pos < 0) { + throw new NumberFormatException("The fraction could not be parsed as the format X Y/Z"); + } + final int numer = Integer.parseInt(str.substring(0, pos)); + final int denom = Integer.parseInt(str.substring(pos + 1)); + return getFraction(whole, numer, denom); + } + + // parse Y/Z format + pos = str.indexOf('/'); + if (pos < 0) { + // simple whole number + return getFraction(Integer.parseInt(str), 1); + } + final int numer = Integer.parseInt(str.substring(0, pos)); + final int denom = Integer.parseInt(str.substring(pos + 1)); + return getFraction(numer, denom); + } + + /** + * Creates a reduced {@link Fraction} instance with the 2 parts + * of a fraction Y/Z. + * + * <p>For example, if the input parameters represent 2/4, then the created + * fraction will be 1/2.</p> + * + * <p>Any negative signs are resolved to be on the numerator.</p> + * + * @param numerator the numerator, for example the three in 'three sevenths' + * @param denominator the denominator, for example the seven in 'three sevenths' + * @return a new fraction instance, with the numerator and denominator reduced + * @throws ArithmeticException if the denominator is {@code zero} + */ + public static Fraction getReducedFraction(int numerator, int denominator) { + if (denominator == 0) { + throw new ArithmeticException("The denominator must not be zero"); + } + if (numerator == 0) { + return ZERO; // normalize zero. + } + // allow 2^k/-2^31 as a valid fraction (where k>0) + if (denominator == Integer.MIN_VALUE && (numerator & 1) == 0) { + numerator /= 2; + denominator /= 2; + } + if (denominator < 0) { + if (numerator == Integer.MIN_VALUE || denominator == Integer.MIN_VALUE) { + throw new ArithmeticException("overflow: can't negate"); + } + numerator = -numerator; + denominator = -denominator; + } + // simplify fraction. + final int gcd = greatestCommonDivisor(numerator, denominator); + numerator /= gcd; + denominator /= gcd; + return new Fraction(numerator, denominator); + } + + /** + * Gets the greatest common divisor of the absolute value of + * two numbers, using the "binary gcd" method which avoids + * division and modulo operations. See Knuth 4.5.2 algorithm B. + * This algorithm is due to Josef Stein (1961). + * + * @param u a non-zero number + * @param v a non-zero number + * @return the greatest common divisor, never zero + */ + private static int greatestCommonDivisor(int u, int v) { + // From Commons Math: + if (u == 0 || v == 0) { + if (u == Integer.MIN_VALUE || v == Integer.MIN_VALUE) { + throw new ArithmeticException("overflow: gcd is 2^31"); + } + return Math.abs(u) + Math.abs(v); + } + // if either operand is abs 1, return 1: + if (Math.abs(u) == 1 || Math.abs(v) == 1) { + return 1; + } + // keep u and v negative, as negative integers range down to + // -2^31, while positive numbers can only be as large as 2^31-1 + // (i.e. we can't necessarily negate a negative number without + // overflow) + if (u > 0) { + u = -u; + } // make u negative + if (v > 0) { + v = -v; + } // make v negative + // B1. [Find power of 2] + int k = 0; + while ((u & 1) == 0 && (v & 1) == 0 && k < 31) { // while u and v are both even... + u /= 2; + v /= 2; + k++; // cast out twos. + } + if (k == 31) { + throw new ArithmeticException("overflow: gcd is 2^31"); + } + // B2. Initialize: u and v have been divided by 2^k and at least + // one is odd. + int t = (u & 1) == 1 ? v : -(u / 2)/* B3 */; + // t negative: u was odd, v may be even (t replaces v) + // t positive: u was even, v is odd (t replaces u) + do { + /* assert u<0 && v<0; */ + // B4/B3: cast out twos from t. + while ((t & 1) == 0) { // while t is even. + t /= 2; // cast out twos + } + // B5 [reset max(u,v)] + if (t > 0) { + u = -t; + } else { + v = t; + } + // B6/B3. at this point both u and v should be odd. + t = (v - u) / 2; + // |u| larger: t positive (replace u) + // |v| larger: t negative (replace v) + } while (t != 0); + return -u * (1 << k); // gcd is u*2^k + } + + /** + * Multiply two integers, checking for overflow. + * + * @param x a factor + * @param y a factor + * @return the product {@code x*y} + * @throws ArithmeticException if the result can not be represented as + * an int + */ + private static int mulAndCheck(final int x, final int y) { + final long m = (long) x * (long) y; + if (m < Integer.MIN_VALUE || m > Integer.MAX_VALUE) { + throw new ArithmeticException("overflow: mul"); + } + return (int) m; + } + + /** + * Multiply two non-negative integers, checking for overflow. + * + * @param x a non-negative factor + * @param y a non-negative factor + * @return the product {@code x*y} + * @throws ArithmeticException if the result can not be represented as + * an int + */ + private static int mulPosAndCheck(final int x, final int y) { + /* assert x>=0 && y>=0; */ + final long m = (long) x * (long) y; + if (m > Integer.MAX_VALUE) { + throw new ArithmeticException("overflow: mulPos"); + } + return (int) m; + } + + /** + * Subtract two integers, checking for overflow. + * + * @param x the minuend + * @param y the subtrahend + * @return the difference {@code x-y} + * @throws ArithmeticException if the result can not be represented as + * an int + */ + private static int subAndCheck(final int x, final int y) { + final long s = (long) x - (long) y; + if (s < Integer.MIN_VALUE || s > Integer.MAX_VALUE) { + throw new ArithmeticException("overflow: add"); + } + return (int) s; + } + + /** + * The numerator number part of the fraction (the three in three sevenths). + */ + private final int numerator; + + /** + * The denominator number part of the fraction (the seven in three sevenths). + */ + private final int denominator; + + /** + * Cached output hashCode (class is immutable). + */ + private transient int hashCode; + + /** + * Cached output toString (class is immutable). + */ + private transient String toString; + + /** + * Cached output toProperString (class is immutable). + */ + private transient String toProperString; + + /** + * Constructs a {@link Fraction} instance with the 2 parts + * of a fraction Y/Z. + * + * @param numerator the numerator, for example the three in 'three sevenths' + * @param denominator the denominator, for example the seven in 'three sevenths' + */ + private Fraction(final int numerator, final int denominator) { + this.numerator = numerator; + this.denominator = denominator; + } + + /** + * Gets a fraction that is the positive equivalent of this one. + * <p>More precisely: {@code (fraction >= 0 ? this : -fraction)}</p> + * + * <p>The returned fraction is not reduced.</p> + * + * @return {@code this} if it is positive, or a new positive fraction + * instance with the opposite signed numerator + */ + public Fraction abs() { + if (numerator >= 0) { + return this; + } + return negate(); + } + + /** + * Adds the value of this fraction to another, returning the result in reduced form. + * The algorithm follows Knuth, 4.5.1. + * + * @param fraction the fraction to add, must not be {@code null} + * @return a {@link Fraction} instance with the resulting values + * @throws NullPointerException if the fraction is {@code null} + * @throws ArithmeticException if the resulting numerator or denominator exceeds + * {@code Integer.MAX_VALUE} + */ + public Fraction add(final Fraction fraction) { + return addSub(fraction, true /* add */); + } + + /** + * Implement add and subtract using algorithm described in Knuth 4.5.1. + * + * @param fraction the fraction to subtract, must not be {@code null} + * @param isAdd true to add, false to subtract + * @return a {@link Fraction} instance with the resulting values + * @throws IllegalArgumentException if the fraction is {@code null} + * @throws ArithmeticException if the resulting numerator or denominator + * cannot be represented in an {@code int}. + */ + private Fraction addSub(final Fraction fraction, final boolean isAdd) { + Objects.requireNonNull(fraction, "fraction"); + // zero is identity for addition. + if (numerator == 0) { + return isAdd ? fraction : fraction.negate(); + } + if (fraction.numerator == 0) { + return this; + } + // if denominators are randomly distributed, d1 will be 1 about 61% + // of the time. + final int d1 = greatestCommonDivisor(denominator, fraction.denominator); + if (d1 == 1) { + // result is ( (u*v' +/- u'v) / u'v') + final int uvp = mulAndCheck(numerator, fraction.denominator); + final int upv = mulAndCheck(fraction.numerator, denominator); + return new Fraction(isAdd ? addAndCheck(uvp, upv) : subAndCheck(uvp, upv), mulPosAndCheck(denominator, + fraction.denominator)); + } + // the quantity 't' requires 65 bits of precision; see knuth 4.5.1 + // exercise 7. we're going to use a BigInteger. + // t = u(v'/d1) +/- v(u'/d1) + final BigInteger uvp = BigInteger.valueOf(numerator).multiply(BigInteger.valueOf(fraction.denominator / d1)); + final BigInteger upv = BigInteger.valueOf(fraction.numerator).multiply(BigInteger.valueOf(denominator / d1)); + final BigInteger t = isAdd ? uvp.add(upv) : uvp.subtract(upv); + // but d2 doesn't need extra precision because + // d2 = gcd(t,d1) = gcd(t mod d1, d1) + final int tmodd1 = t.mod(BigInteger.valueOf(d1)).intValue(); + final int d2 = tmodd1 == 0 ? d1 : greatestCommonDivisor(tmodd1, d1); + + // result is (t/d2) / (u'/d1)(v'/d2) + final BigInteger w = t.divide(BigInteger.valueOf(d2)); + if (w.bitLength() > 31) { + throw new ArithmeticException("overflow: numerator too large after multiply"); + } + return new Fraction(w.intValue(), mulPosAndCheck(denominator / d1, fraction.denominator / d2)); + } + + /** + * Compares this object to another based on size. + * + * <p>Note: this class has a natural ordering that is inconsistent + * with equals, because, for example, equals treats 1/2 and 2/4 as + * different, whereas compareTo treats them as equal. + * + * @param other the object to compare to + * @return -1 if this is less, 0 if equal, +1 if greater + * @throws ClassCastException if the object is not a {@link Fraction} + * @throws NullPointerException if the object is {@code null} + */ + @Override + public int compareTo(final Fraction other) { + if (this == other) { + return 0; + } + if (numerator == other.numerator && denominator == other.denominator) { + return 0; + } + + // otherwise see which is less + final long first = (long) numerator * (long) other.denominator; + final long second = (long) other.numerator * (long) denominator; + return Long.compare(first, second); + } + + /** + * Divide the value of this fraction by another. + * + * @param fraction the fraction to divide by, must not be {@code null} + * @return a {@link Fraction} instance with the resulting values + * @throws NullPointerException if the fraction is {@code null} + * @throws ArithmeticException if the fraction to divide by is zero + * @throws ArithmeticException if the resulting numerator or denominator exceeds + * {@code Integer.MAX_VALUE} + */ + public Fraction divideBy(final Fraction fraction) { + Objects.requireNonNull(fraction, "fraction"); + if (fraction.numerator == 0) { + throw new ArithmeticException("The fraction to divide by must not be zero"); + } + return multiplyBy(fraction.invert()); + } + + /** + * Gets the fraction as a {@code double}. This calculates the fraction + * as the numerator divided by denominator. + * + * @return the fraction as a {@code double} + */ + @Override + public double doubleValue() { + return (double) numerator / (double) denominator; + } + + /** + * Compares this fraction to another object to test if they are equal.. + * + * <p>To be equal, both values must be equal. Thus 2/4 is not equal to 1/2.</p> + * + * @param obj the reference object with which to compare + * @return {@code true} if this object is equal + */ + @Override + public boolean equals(final Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof Fraction)) { + return false; + } + final Fraction other = (Fraction) obj; + return getNumerator() == other.getNumerator() && getDenominator() == other.getDenominator(); + } + + /** + * Gets the fraction as a {@code float}. This calculates the fraction + * as the numerator divided by denominator. + * + * @return the fraction as a {@code float} + */ + @Override + public float floatValue() { + return (float) numerator / (float) denominator; + } + + /** + * Gets the denominator part of the fraction. + * + * @return the denominator fraction part + */ + public int getDenominator() { + return denominator; + } + + /** + * Gets the numerator part of the fraction. + * + * <p>This method may return a value greater than the denominator, an + * improper fraction, such as the seven in 7/4.</p> + * + * @return the numerator fraction part + */ + public int getNumerator() { + return numerator; + } + + /** + * Gets the proper numerator, always positive. + * + * <p>An improper fraction 7/4 can be resolved into a proper one, 1 3/4. + * This method returns the 3 from the proper fraction.</p> + * + * <p>If the fraction is negative such as -7/4, it can be resolved into + * -1 3/4, so this method returns the positive proper numerator, 3.</p> + * + * @return the numerator fraction part of a proper fraction, always positive + */ + public int getProperNumerator() { + return Math.abs(numerator % denominator); + } + + /** + * Gets the proper whole part of the fraction. + * + * <p>An improper fraction 7/4 can be resolved into a proper one, 1 3/4. + * This method returns the 1 from the proper fraction.</p> + * + * <p>If the fraction is negative such as -7/4, it can be resolved into + * -1 3/4, so this method returns the positive whole part -1.</p> + * + * @return the whole fraction part of a proper fraction, that includes the sign + */ + public int getProperWhole() { + return numerator / denominator; + } + + /** + * Gets a hashCode for the fraction. + * + * @return a hash code value for this object + */ + @Override + public int hashCode() { + if (hashCode == 0) { + // hash code update should be atomic. + hashCode = 37 * (37 * 17 + getNumerator()) + getDenominator(); + } + return hashCode; + } + + /** + * Gets the fraction as an {@code int}. This returns the whole number + * part of the fraction. + * + * @return the whole number fraction part + */ + @Override + public int intValue() { + return numerator / denominator; + } + + /** + * Gets a fraction that is the inverse (1/fraction) of this one. + * + * <p>The returned fraction is not reduced.</p> + * + * @return a new fraction instance with the numerator and denominator + * inverted. + * @throws ArithmeticException if the fraction represents zero. + */ + public Fraction invert() { + if (numerator == 0) { + throw new ArithmeticException("Unable to invert zero."); + } + if (numerator==Integer.MIN_VALUE) { + throw new ArithmeticException("overflow: can't negate numerator"); + } + if (numerator<0) { + return new Fraction(-denominator, -numerator); + } + return new Fraction(denominator, numerator); + } + + /** + * Gets the fraction as a {@code long}. This returns the whole number + * part of the fraction. + * + * @return the whole number fraction part + */ + @Override + public long longValue() { + return (long) numerator / denominator; + } + + /** + * Multiplies the value of this fraction by another, returning the + * result in reduced form. + * + * @param fraction the fraction to multiply by, must not be {@code null} + * @return a {@link Fraction} instance with the resulting values + * @throws NullPointerException if the fraction is {@code null} + * @throws ArithmeticException if the resulting numerator or denominator exceeds + * {@code Integer.MAX_VALUE} + */ + public Fraction multiplyBy(final Fraction fraction) { + Objects.requireNonNull(fraction, "fraction"); + if (numerator == 0 || fraction.numerator == 0) { + return ZERO; + } + // knuth 4.5.1 + // make sure we don't overflow unless the result *must* overflow. + final int d1 = greatestCommonDivisor(numerator, fraction.denominator); + final int d2 = greatestCommonDivisor(fraction.numerator, denominator); + return getReducedFraction(mulAndCheck(numerator / d1, fraction.numerator / d2), + mulPosAndCheck(denominator / d2, fraction.denominator / d1)); + } + + /** + * Gets a fraction that is the negative (-fraction) of this one. + * + * <p>The returned fraction is not reduced.</p> + * + * @return a new fraction instance with the opposite signed numerator + */ + public Fraction negate() { + // the positive range is one smaller than the negative range of an int. + if (numerator==Integer.MIN_VALUE) { + throw new ArithmeticException("overflow: too large to negate"); + } + return new Fraction(-numerator, denominator); + } + + /** + * Gets a fraction that is raised to the passed in power. + * + * <p>The returned fraction is in reduced form.</p> + * + * @param power the power to raise the fraction to + * @return {@code this} if the power is one, {@link #ONE} if the power + * is zero (even if the fraction equals ZERO) or a new fraction instance + * raised to the appropriate power + * @throws ArithmeticException if the resulting numerator or denominator exceeds + * {@code Integer.MAX_VALUE} + */ + public Fraction pow(final int power) { + if (power == 1) { + return this; + } + if (power == 0) { + return ONE; + } + if (power < 0) { + if (power == Integer.MIN_VALUE) { // MIN_VALUE can't be negated. + return this.invert().pow(2).pow(-(power / 2)); + } + return this.invert().pow(-power); + } + final Fraction f = this.multiplyBy(this); + if (power % 2 == 0) { // if even... + return f.pow(power / 2); + } + return f.pow(power / 2).multiplyBy(this); + } + + /** + * Reduce the fraction to the smallest values for the numerator and + * denominator, returning the result. + * + * <p>For example, if this fraction represents 2/4, then the result + * will be 1/2.</p> + * + * @return a new reduced fraction instance, or this if no simplification possible + */ + public Fraction reduce() { + if (numerator == 0) { + return equals(ZERO) ? this : ZERO; + } + final int gcd = greatestCommonDivisor(Math.abs(numerator), denominator); + if (gcd == 1) { + return this; + } + return getFraction(numerator / gcd, denominator / gcd); + } + + /** + * Subtracts the value of another fraction from the value of this one, + * returning the result in reduced form. + * + * @param fraction the fraction to subtract, must not be {@code null} + * @return a {@link Fraction} instance with the resulting values + * @throws NullPointerException if the fraction is {@code null} + * @throws ArithmeticException if the resulting numerator or denominator + * cannot be represented in an {@code int}. + */ + public Fraction subtract(final Fraction fraction) { + return addSub(fraction, false /* subtract */); + } + + /** + * Gets the fraction as a proper {@link String} in the format X Y/Z. + * + * <p>The format used in '<i>wholeNumber</i> <i>numerator</i>/<i>denominator</i>'. + * If the whole number is zero it will be omitted. If the numerator is zero, + * only the whole number is returned.</p> + * + * @return a {@link String} form of the fraction + */ + public String toProperString() { + if (toProperString == null) { + if (numerator == 0) { + toProperString = "0"; + } else if (numerator == denominator) { + toProperString = "1"; + } else if (numerator == -1 * denominator) { + toProperString = "-1"; + } else if ((numerator > 0 ? -numerator : numerator) < -denominator) { + // note that we do the magnitude comparison test above with + // NEGATIVE (not positive) numbers, since negative numbers + // have a larger range. otherwise numerator==Integer.MIN_VALUE + // is handled incorrectly. + final int properNumerator = getProperNumerator(); + if (properNumerator == 0) { + toProperString = Integer.toString(getProperWhole()); + } else { + toProperString = getProperWhole() + " " + properNumerator + "/" + getDenominator(); + } + } else { + toProperString = getNumerator() + "/" + getDenominator(); + } + } + return toProperString; + } + + /** + * Gets the fraction as a {@link String}. + * + * <p>The format used is '<i>numerator</i>/<i>denominator</i>' always. + * + * @return a {@link String} form of the fraction + */ + @Override + public String toString() { + if (toString == null) { + toString = getNumerator() + "/" + getDenominator(); + } + return toString; + } +} diff --git a/core/src/main/resources/mappings b/core/src/main/resources/mappings index e277062f3..6808d0e16 160000 --- a/core/src/main/resources/mappings +++ b/core/src/main/resources/mappings @@ -1 +1 @@ -Subproject commit e277062f3bccbe772baefcd631f0a5442311467c +Subproject commit 6808d0e16a85e5e569d9d7f89ace59c73196c1f4 From 65f7bdb3c025d6f07c09abbdea73d88fb56f0fec Mon Sep 17 00:00:00 2001 From: Oliver <59418903+Oliver-makes-code@users.noreply.github.com> Date: Thu, 9 Jan 2025 12:57:27 -0600 Subject: [PATCH 132/165] Fix modded items not having a bedrock ID set (#5271) --- .../geyser/registry/populator/CustomItemRegistryPopulator.java | 1 + 1 file changed, 1 insertion(+) 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 3d2ca4ef9..ec1e16e79 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 @@ -143,6 +143,7 @@ public class CustomItemRegistryPopulator { Items.register(item, customItemData.javaId()); ItemMapping customItemMapping = ItemMapping.builder() + .bedrockIdentifier(customIdentifier) .bedrockDefinition(new SimpleItemDefinition(customIdentifier, customItemId, true)) .bedrockData(0) .bedrockBlockDefinition(null) From 1267b2e5ab1c6293930d84c54eda7709344e0833 Mon Sep 17 00:00:00 2001 From: Eclipse <eclipse@eclipseisoffline.xyz> Date: Thu, 9 Jan 2025 20:53:01 +0000 Subject: [PATCH 133/165] Update fabric.mod.json to new fabric api mod id (#5272) --- bootstrap/mod/fabric/src/main/resources/fabric.mod.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bootstrap/mod/fabric/src/main/resources/fabric.mod.json b/bootstrap/mod/fabric/src/main/resources/fabric.mod.json index 4f50768f4..a1c786c2f 100644 --- a/bootstrap/mod/fabric/src/main/resources/fabric.mod.json +++ b/bootstrap/mod/fabric/src/main/resources/fabric.mod.json @@ -24,7 +24,7 @@ ], "depends": { "fabricloader": ">=0.16.7", - "fabric": "*", + "fabric-api": "*", "minecraft": ">=1.21.4" } } From 58e2f17e08998c4945153c2bb25b7259f3d4e217 Mon Sep 17 00:00:00 2001 From: chris <github@onechris.mozmail.com> Date: Sun, 12 Jan 2025 20:44:33 +0100 Subject: [PATCH 134/165] Fix: Brand message being sent too early (#5265) * Fix: Brand message not being sent, send lowercase locale, ensure the MCPL default listener comes first * Refactor disconnect handling * apparently default listeners aren't always first... huh * fix issue with bundle cache attempting to check a null inventory --- .../event/bedrock/SessionDisconnectEvent.java | 2 +- .../connection/GeyserBedrockPingEvent.java | 6 +- .../event/java/ServerDefineCommandsEvent.java | 2 +- .../api/event/java/ServerTransferEvent.java | 2 +- .../java/org/geysermc/geyser/GeyserImpl.java | 5 +- .../type/SessionDisconnectEventImpl.java} | 27 +- .../geyser/network/InvalidPacketHandler.java | 10 +- .../geyser/session/DownstreamSession.java | 5 +- .../geyser/session/GeyserSession.java | 220 ++-------------- .../geyser/session/GeyserSessionAdapter.java | 242 ++++++++++++++++++ .../SessionDisconnectListener.java} | 61 ++--- .../java/JavaLoginFinishedTranslator.java | 3 +- .../player/JavaTransferPacketTranslator.java | 4 +- .../geysermc/geyser/util/InventoryUtils.java | 2 +- 14 files changed, 338 insertions(+), 253 deletions(-) rename core/src/main/java/org/geysermc/geyser/{translator/protocol/java/JavaDisconnectTranslator.java => event/type/SessionDisconnectEventImpl.java} (61%) create mode 100644 core/src/main/java/org/geysermc/geyser/session/GeyserSessionAdapter.java rename core/src/main/java/org/geysermc/geyser/{translator/protocol/java/JavaLoginDisconnectTranslator.java => session/SessionDisconnectListener.java} (58%) 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 index 05e3415a0..f97f32f92 100644 --- 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 @@ -50,7 +50,7 @@ public class SessionDisconnectEvent extends ConnectionEvent { } /** - * Sets the disconnect reason, thereby overriding th original reason. + * Sets the disconnect message shown to the Bedrock client. * * @param disconnectReason the reason for the disconnect */ 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 10ccb93d5..64d3cb44f 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 @@ -33,10 +33,10 @@ import org.geysermc.event.Event; import java.net.InetSocketAddress; /** - * Called whenever Geyser gets pinged + * Called whenever Geyser gets pinged by a Bedrock client. * <p> - * 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. + * 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 the information provided in this event. */ public interface GeyserBedrockPingEvent extends Event { diff --git a/api/src/main/java/org/geysermc/geyser/api/event/java/ServerDefineCommandsEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/java/ServerDefineCommandsEvent.java index 299c9d6dd..40268d5b2 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/java/ServerDefineCommandsEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/java/ServerDefineCommandsEvent.java @@ -37,7 +37,7 @@ import java.util.Set; * <br> * This event is mapped to the existence of Brigadier on the server. */ -public class ServerDefineCommandsEvent extends ConnectionEvent implements Cancellable { +public final class ServerDefineCommandsEvent extends ConnectionEvent implements Cancellable { private final Set<? extends CommandInfo> commands; private boolean cancelled; diff --git a/api/src/main/java/org/geysermc/geyser/api/event/java/ServerTransferEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/java/ServerTransferEvent.java index 594e28ef0..f32d84f6a 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/java/ServerTransferEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/java/ServerTransferEvent.java @@ -37,7 +37,7 @@ import java.util.Map; * Fired when the Java server sends a transfer request to a different Java server. * Geyser Extensions can listen to this event and set a target server ip/port for Bedrock players to be transferred to. */ -public class ServerTransferEvent extends ConnectionEvent { +public final class ServerTransferEvent extends ConnectionEvent { private final String host; private final int port; diff --git a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java index 065c1f0cc..5171c0633 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java @@ -74,6 +74,7 @@ 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.event.type.SessionDisconnectEventImpl; import org.geysermc.geyser.extension.GeyserExtensionManager; import org.geysermc.geyser.impl.MinecraftVersionImpl; import org.geysermc.geyser.level.BedrockDimension; @@ -86,6 +87,7 @@ 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; +import org.geysermc.geyser.session.SessionDisconnectListener; import org.geysermc.geyser.session.SessionManager; import org.geysermc.geyser.session.cache.RegistryCache; import org.geysermc.geyser.skin.FloodgateSkinUploader; @@ -101,7 +103,6 @@ import org.geysermc.geyser.util.MinecraftAuthLogger; import org.geysermc.geyser.util.NewsHandler; import org.geysermc.geyser.util.VersionCheckUtils; import org.geysermc.geyser.util.WebUtils; -import org.geysermc.mcprotocollib.network.tcp.TcpSession; import java.io.File; import java.io.FileWriter; @@ -266,6 +267,8 @@ public class GeyserImpl implements GeyserApi, EventRegistrar { // Register our general permissions when possible eventBus.subscribe(this, GeyserRegisterPermissionsEvent.class, Permissions::register); + // Replace disconnect messages whenever necessary + eventBus.subscribe(this, SessionDisconnectEventImpl.class, SessionDisconnectListener::onSessionDisconnect); startInstance(); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaDisconnectTranslator.java b/core/src/main/java/org/geysermc/geyser/event/type/SessionDisconnectEventImpl.java similarity index 61% rename from core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaDisconnectTranslator.java rename to core/src/main/java/org/geysermc/geyser/event/type/SessionDisconnectEventImpl.java index 0012390cb..b746979df 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaDisconnectTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/event/type/SessionDisconnectEventImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2025 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 @@ -23,19 +23,26 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.translator.protocol.java; +package org.geysermc.geyser.event.type; -import org.geysermc.mcprotocollib.protocol.packet.common.clientbound.ClientboundDisconnectPacket; +import lombok.Getter; +import net.kyori.adventure.text.Component; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.api.event.bedrock.SessionDisconnectEvent; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.translator.protocol.PacketTranslator; -import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.translator.text.MessageTranslator; -@Translator(packet = ClientboundDisconnectPacket.class) -public class JavaDisconnectTranslator extends PacketTranslator<ClientboundDisconnectPacket> { +/** + * A wrapper around the {@link SessionDisconnectEvent} that allows + * Geyser to access the underlying component when replacing disconnect messages. + */ +@Getter +public class SessionDisconnectEventImpl extends SessionDisconnectEvent { - @Override - public void translate(GeyserSession session, ClientboundDisconnectPacket packet) { - session.disconnect(MessageTranslator.convertMessage(packet.getReason(), session.locale())); + private final Component reasonComponent; + + public SessionDisconnectEventImpl(@NonNull GeyserSession session, Component reason) { + super(session, MessageTranslator.convertToPlainText(reason, session.locale())); + this.reasonComponent = reason; } } diff --git a/core/src/main/java/org/geysermc/geyser/network/InvalidPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/InvalidPacketHandler.java index 1b653891e..974d6fdce 100644 --- a/core/src/main/java/org/geysermc/geyser/network/InvalidPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/InvalidPacketHandler.java @@ -28,6 +28,8 @@ package org.geysermc.geyser.network; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import lombok.RequiredArgsConstructor; +import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.session.GeyserSession; import java.util.stream.Stream; @@ -45,16 +47,20 @@ public class InvalidPacketHandler extends ChannelInboundHandlerAdapter { .findFirst() .orElse(cause); + GeyserLogger logger = GeyserImpl.getInstance().getLogger(); if (!(rootCause instanceof IllegalArgumentException)) { // Kick users that cause exceptions - session.getGeyser().getLogger().warning("Exception caught in session of" + session.bedrockUsername() + ": " + rootCause.getMessage()); + logger.warning("Exception caught in session of" + session.bedrockUsername() + ": " + rootCause.getMessage()); session.disconnect("An internal error occurred!"); return; } // Kick users that try to send illegal packets - session.getGeyser().getLogger().warning(rootCause.getMessage()); + logger.warning("Illegal packet from " + session.bedrockUsername() + ": " + rootCause.getMessage()); + if (logger.isDebug()) { + cause.printStackTrace(); + } session.disconnect("Invalid packet received!"); } } diff --git a/core/src/main/java/org/geysermc/geyser/session/DownstreamSession.java b/core/src/main/java/org/geysermc/geyser/session/DownstreamSession.java index 8845cdbea..c1db89484 100644 --- a/core/src/main/java/org/geysermc/geyser/session/DownstreamSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/DownstreamSession.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.session; import lombok.Getter; import lombok.RequiredArgsConstructor; +import net.kyori.adventure.text.Component; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.mcprotocollib.network.packet.Packet; import org.geysermc.mcprotocollib.network.tcp.TcpSession; @@ -41,11 +42,11 @@ public class DownstreamSession { this.session.send(packet); } - public void disconnect(String reason) { + public void disconnect(Component reason) { this.session.disconnect(reason); } - public void disconnect(String reason, Throwable throwable) { + public void disconnect(Component reason, Throwable throwable) { this.session.disconnect(reason, throwable); } 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 b3a38f32f..111b966f7 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -41,6 +41,7 @@ import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; import net.kyori.adventure.key.Key; +import net.kyori.adventure.text.Component; import net.raphimc.minecraftauth.responsehandler.exception.MinecraftRequestException; import net.raphimc.minecraftauth.step.java.StepMCProfile; import net.raphimc.minecraftauth.step.java.StepMCToken; @@ -109,9 +110,6 @@ import org.geysermc.api.util.InputMode; import org.geysermc.api.util.UiProfile; import org.geysermc.cumulus.form.Form; import org.geysermc.cumulus.form.util.FormBuilder; -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; @@ -121,9 +119,7 @@ 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; -import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.command.GeyserCommandSource; import org.geysermc.geyser.configuration.EmoteOffhandWorkaroundOption; import org.geysermc.geyser.configuration.GeyserConfiguration; @@ -138,6 +134,7 @@ import org.geysermc.geyser.entity.vehicle.ClientVehicle; import org.geysermc.geyser.erosion.AbstractGeyserboundPacketHandler; import org.geysermc.geyser.erosion.ErosionCancellationException; import org.geysermc.geyser.erosion.GeyserboundHandshakePacketHandler; +import org.geysermc.geyser.event.type.SessionDisconnectEventImpl; import org.geysermc.geyser.impl.camera.CameraDefinitions; import org.geysermc.geyser.impl.camera.GeyserCameraData; import org.geysermc.geyser.inventory.Inventory; @@ -174,11 +171,8 @@ import org.geysermc.geyser.session.cache.TagCache; import org.geysermc.geyser.session.cache.TeleportCache; import org.geysermc.geyser.session.cache.WorldBorder; import org.geysermc.geyser.session.cache.WorldCache; -import org.geysermc.geyser.skin.FloodgateSkinUploader; import org.geysermc.geyser.text.GeyserLocale; -import org.geysermc.geyser.text.MinecraftLocale; import org.geysermc.geyser.translator.inventory.InventoryTranslator; -import org.geysermc.geyser.translator.text.MessageTranslator; import org.geysermc.geyser.util.ChunkUtils; import org.geysermc.geyser.util.EntityUtils; import org.geysermc.geyser.util.InventoryUtils; @@ -187,19 +181,13 @@ import org.geysermc.geyser.util.MathUtils; import org.geysermc.geyser.util.MinecraftAuthLogger; import org.geysermc.mcprotocollib.auth.GameProfile; import org.geysermc.mcprotocollib.network.BuiltinFlags; -import org.geysermc.mcprotocollib.network.Session; -import org.geysermc.mcprotocollib.network.event.session.ConnectedEvent; -import org.geysermc.mcprotocollib.network.event.session.DisconnectedEvent; -import org.geysermc.mcprotocollib.network.event.session.PacketErrorEvent; -import org.geysermc.mcprotocollib.network.event.session.PacketSendingEvent; -import org.geysermc.mcprotocollib.network.event.session.SessionAdapter; import org.geysermc.mcprotocollib.network.packet.Packet; import org.geysermc.mcprotocollib.network.tcp.TcpClientSession; import org.geysermc.mcprotocollib.network.tcp.TcpSession; +import org.geysermc.mcprotocollib.protocol.ClientListener; import org.geysermc.mcprotocollib.protocol.MinecraftConstants; import org.geysermc.mcprotocollib.protocol.MinecraftProtocol; import org.geysermc.mcprotocollib.protocol.data.ProtocolState; -import org.geysermc.mcprotocollib.protocol.data.UnexpectedEncryptionException; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.Pose; import org.geysermc.mcprotocollib.protocol.data.game.entity.object.Direction; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; @@ -212,7 +200,6 @@ import org.geysermc.mcprotocollib.protocol.data.game.setting.SkinPart; import org.geysermc.mcprotocollib.protocol.data.game.statistic.CustomStatistic; import org.geysermc.mcprotocollib.protocol.data.game.statistic.Statistic; import org.geysermc.mcprotocollib.protocol.packet.common.serverbound.ServerboundClientInformationPacket; -import org.geysermc.mcprotocollib.protocol.packet.handshake.serverbound.ClientIntentionPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundChatCommandSignedPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundChatPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundClientTickEndPacket; @@ -221,9 +208,7 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.Serv import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundUseItemPacket; import org.geysermc.mcprotocollib.protocol.packet.login.serverbound.ServerboundCustomQueryAnswerPacket; -import java.net.ConnectException; import java.net.InetSocketAddress; -import java.nio.charset.StandardCharsets; import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; @@ -231,6 +216,7 @@ import java.util.BitSet; import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Queue; import java.util.Set; @@ -359,8 +345,8 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { // Exposed for GeyserConnect usage protected boolean sentSpawnPacket; - private boolean loggedIn; - private boolean loggingIn; + boolean loggedIn; + boolean loggingIn; @Setter private boolean spawned; @@ -525,11 +511,6 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { @Setter private long blockBreakStartTime; - /** - * // TODO - */ - private long destroyProgress; - /** * Stores whether the player intended to place a bucket. */ @@ -658,6 +639,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { private final GeyserEntityData entityData; + @Getter(AccessLevel.MODULE) private MinecraftProtocol protocol; private int nanosecondsPerTick = 50000000; @@ -962,7 +944,6 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { this.cookies = loginEvent.cookies(); this.remoteServer = loginEvent.remoteServer(); - boolean floodgate = this.remoteServer.authType() == AuthType.FLOODGATE; // Start ticking tickThread = tickEventLoop.scheduleAtFixedRate(this::tick, nanosecondsPerTick, nanosecondsPerTick, TimeUnit.NANOSECONDS); @@ -1001,188 +982,30 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { // We'll handle this since we have the registry data on hand downstream.setFlag(MinecraftConstants.SEND_BLANK_KNOWN_PACKS_RESPONSE, false); - downstream.addListener(new SessionAdapter() { - @Override - public void packetSending(PacketSendingEvent event) { - //todo move this somewhere else - if (event.getPacket() instanceof ClientIntentionPacket) { - String addressSuffix; - if (floodgate) { - byte[] encryptedData; + // We manually add the default listener to ensure the order of listeners. + protocol.setUseDefaultListeners(false); - try { - FloodgateSkinUploader skinUploader = geyser.getSkinUploader(); - FloodgateCipher cipher = geyser.getCipher(); + // MCPL listener comes first to handle protocol state switching before Geyser translates packets + downstream.addListener(new ClientListener(ProtocolState.LOGIN, loginEvent.transferring())); + // Geyser adapter second to ensure translating packets in the correct states + downstream.addListener(new GeyserSessionAdapter(this)); - String bedrockAddress = upstream.getAddress().getAddress().getHostAddress(); - // both BungeeCord and Velocity remove the IPv6 scope (if there is one) for Spigot - int ipv6ScopeIndex = bedrockAddress.indexOf('%'); - if (ipv6ScopeIndex != -1) { - bedrockAddress = bedrockAddress.substring(0, ipv6ScopeIndex); - } - - encryptedData = cipher.encryptFromString(BedrockData.of( - clientData.getGameVersion(), - authData.name(), - authData.xuid(), - clientData.getDeviceOs().ordinal(), - clientData.getLanguageCode(), - clientData.getUiProfile().ordinal(), - clientData.getCurrentInputMode().ordinal(), - bedrockAddress, - skinUploader.getId(), - skinUploader.getVerifyCode() - ).toString()); - } catch (Exception e) { - geyser.getLogger().error(GeyserLocale.getLocaleStringLog("geyser.auth.floodgate.encrypt_fail"), e); - disconnect(GeyserLocale.getPlayerLocaleString("geyser.auth.floodgate.encrypt_fail", getClientData().getLanguageCode())); - return; - } - - addressSuffix = '\0' + new String(encryptedData, StandardCharsets.UTF_8); - } else { - addressSuffix = ""; - } - - ClientIntentionPacket intentionPacket = event.getPacket(); - - String address; - if (geyser.getConfig().getRemote().isForwardHost()) { - address = clientData.getServerAddress().split(":")[0]; - } else { - address = intentionPacket.getHostname(); - } - - event.setPacket(intentionPacket.withHostname(address + addressSuffix)); - } - } - - @Override - public void connected(ConnectedEvent event) { - loggingIn = false; - loggedIn = true; - - if (downstream instanceof LocalSession) { - // Connected directly to the server - geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.network.remote.connect_internal", - authData.name(), protocol.getProfile().getName())); - } else { - // Connected to an IP address - geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.network.remote.connect", - authData.name(), protocol.getProfile().getName(), remoteServer.address())); - } - - UUID uuid = protocol.getProfile().getId(); - if (uuid == null) { - // Set what our UUID *probably* is going to be - if (remoteServer.authType() == AuthType.FLOODGATE) { - uuid = new UUID(0, Long.parseLong(authData.xuid())); - } else { - uuid = UUID.nameUUIDFromBytes(("OfflinePlayer:" + protocol.getProfile().getName()).getBytes(StandardCharsets.UTF_8)); - } - } - playerEntity.setUuid(uuid); - playerEntity.setUsername(protocol.getProfile().getName()); - - String locale = clientData.getLanguageCode(); - - // Let the user know there locale may take some time to download - // as it has to be extracted from a JAR - if (locale.equalsIgnoreCase("en_us") && !MinecraftLocale.LOCALE_MAPPINGS.containsKey("en_us")) { - // This should probably be left hardcoded as it will only show for en_us clients - sendMessage("Loading your locale (en_us); if this isn't already downloaded, this may take some time"); - } - - // Download and load the language for the player - MinecraftLocale.downloadAndLoadLocale(locale); - } - - @Override - public void disconnected(DisconnectedEvent event) { - loggingIn = false; - - String disconnectMessage; - Throwable cause = event.getCause(); - if (cause instanceof UnexpectedEncryptionException) { - if (remoteServer.authType() != AuthType.FLOODGATE) { - // Server expects online mode - disconnectMessage = GeyserLocale.getPlayerLocaleString("geyser.network.remote.authentication_type_mismatch", locale()); - // Explain that they may be looking for Floodgate. - geyser.getLogger().warning(GeyserLocale.getLocaleStringLog( - geyser.getPlatformType() == PlatformType.STANDALONE ? - "geyser.network.remote.floodgate_explanation_standalone" - : "geyser.network.remote.floodgate_explanation_plugin", - Constants.FLOODGATE_DOWNLOAD_LOCATION - )); - } else { - // Likely that Floodgate is not configured correctly. - disconnectMessage = GeyserLocale.getPlayerLocaleString("geyser.network.remote.floodgate_login_error", locale()); - if (geyser.getPlatformType() == PlatformType.STANDALONE) { - geyser.getLogger().warning(GeyserLocale.getLocaleStringLog("geyser.network.remote.floodgate_login_error_standalone")); - } - } - } else if (cause instanceof ConnectException) { - // Server is offline, probably - disconnectMessage = GeyserLocale.getPlayerLocaleString("geyser.network.remote.server_offline", locale()); - } else { - disconnectMessage = MessageTranslator.convertMessage(event.getReason()); - } - - if (downstream instanceof LocalSession) { - geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.network.remote.disconnect_internal", authData.name(), disconnectMessage)); - } else { - geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.network.remote.disconnect", authData.name(), remoteServer.address(), disconnectMessage)); - } - if (cause != null) { - if (cause.getMessage() != null) { - GeyserImpl.getInstance().getLogger().error(cause.getMessage()); - } else { - GeyserImpl.getInstance().getLogger().error("An exception occurred: ", cause); - } - if (geyser.getConfig().isDebugMode()) { - cause.printStackTrace(); - } - } - if ((!GeyserSession.this.closed && GeyserSession.this.loggedIn) || cause != null) { - // GeyserSession is disconnected via session.disconnect() called indirectly be the server - // This needs to be "initiated" here when there is an exception, but also when the Netty connection - // is closed without a disconnect packet - in this case, closed will still be false, but loggedIn - // will also be true as GeyserSession#disconnect will not have been called. - GeyserSession.this.disconnect(disconnectMessage); - } - - loggedIn = false; - } - - @Override - public void packetReceived(Session session, Packet packet) { - Registries.JAVA_PACKET_TRANSLATORS.translate(packet.getClass(), packet, GeyserSession.this, true); - } - - @Override - public void packetError(PacketErrorEvent event) { - geyser.getLogger().warning(GeyserLocale.getLocaleStringLog("geyser.network.downstream_error", - (event.getPacketClass() != null ? "(" + event.getPacketClass().getSimpleName() + ")" : "") + - event.getCause().getMessage()) - ); - if (geyser.getConfig().isDebugMode()) - event.getCause().printStackTrace(); - event.setSuppress(true); - } - }); + downstream.connect(false, loginEvent.transferring()); if (!daylightCycle) { setDaylightCycle(true); } - - downstream.connect(false, loginEvent.transferring()); } public void disconnect(String reason) { + disconnect(Component.text(reason)); + } + + public void disconnect(Component reason) { if (!closed) { loggedIn = false; - SessionDisconnectEvent disconnectEvent = new SessionDisconnectEvent(this, reason); + SessionDisconnectEvent disconnectEvent = new SessionDisconnectEventImpl(this, reason); if (authData != null && clientData != null) { // can occur if player disconnects before Bedrock auth finishes // Fire SessionDisconnectEvent geyser.getEventBus().fire(disconnectEvent); @@ -1819,7 +1642,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { } if (protocol.getOutboundState() != intendedState) { - geyser.getLogger().debug("Tried to send " + packet.getClass().getSimpleName() + " packet while not in " + intendedState.name() + " outbound state"); + geyser.getLogger().warning("Tried to send " + packet.getClass().getSimpleName() + " packet while not in " + intendedState.name() + " outbound state. Current state: " + protocol.getOutboundState().name()); return; } @@ -2016,7 +1839,8 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { * Send a packet to the server to indicate client render distance, locale, skin parts, and hand preference. */ public void sendJavaClientSettings() { - ServerboundClientInformationPacket clientSettingsPacket = new ServerboundClientInformationPacket(locale(), + // Locale is lowercase on Java - (https://github.com/GeyserMC/Geyser/issues/5235) + ServerboundClientInformationPacket clientSettingsPacket = new ServerboundClientInformationPacket(locale().toLowerCase(Locale.ROOT), getRenderDistance(), ChatVisibility.FULL, true, SKIN_PARTS, HandPreference.RIGHT_HAND, false, true, ParticleStatus.ALL); // TODO particle status sendDownstreamPacket(clientSettingsPacket); diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSessionAdapter.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSessionAdapter.java new file mode 100644 index 000000000..9e17e9cd3 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSessionAdapter.java @@ -0,0 +1,242 @@ +/* + * Copyright (c) 2025 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.session; + +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.network.AuthType; +import org.geysermc.geyser.api.util.PlatformType; +import org.geysermc.geyser.network.netty.LocalSession; +import org.geysermc.geyser.registry.Registries; +import org.geysermc.geyser.session.auth.BedrockClientData; +import org.geysermc.geyser.skin.FloodgateSkinUploader; +import org.geysermc.geyser.text.GeyserLocale; +import org.geysermc.geyser.text.MinecraftLocale; +import org.geysermc.geyser.translator.text.MessageTranslator; +import org.geysermc.mcprotocollib.network.Session; +import org.geysermc.mcprotocollib.network.event.session.ConnectedEvent; +import org.geysermc.mcprotocollib.network.event.session.DisconnectedEvent; +import org.geysermc.mcprotocollib.network.event.session.PacketErrorEvent; +import org.geysermc.mcprotocollib.network.event.session.PacketSendingEvent; +import org.geysermc.mcprotocollib.network.event.session.SessionAdapter; +import org.geysermc.mcprotocollib.network.packet.Packet; +import org.geysermc.mcprotocollib.protocol.data.UnexpectedEncryptionException; +import org.geysermc.mcprotocollib.protocol.packet.handshake.serverbound.ClientIntentionPacket; + +import java.net.ConnectException; +import java.nio.charset.StandardCharsets; +import java.util.UUID; + +public class GeyserSessionAdapter extends SessionAdapter { + + private final GeyserImpl geyser; + private final GeyserSession geyserSession; + private final boolean floodgate; + private final String locale; + + public GeyserSessionAdapter(GeyserSession session) { + this.geyserSession = session; + this.floodgate = session.remoteServer().authType() == AuthType.FLOODGATE; + this.geyser = GeyserImpl.getInstance(); + this.locale = session.locale(); + } + + @Override + public void packetSending(PacketSendingEvent event) { + if (event.getPacket() instanceof ClientIntentionPacket) { + BedrockClientData clientData = geyserSession.getClientData(); + + String addressSuffix; + if (floodgate) { + byte[] encryptedData; + + try { + FloodgateSkinUploader skinUploader = geyser.getSkinUploader(); + FloodgateCipher cipher = geyser.getCipher(); + + String bedrockAddress = geyserSession.getUpstream().getAddress().getAddress().getHostAddress(); + // both BungeeCord and Velocity remove the IPv6 scope (if there is one) for Spigot + int ipv6ScopeIndex = bedrockAddress.indexOf('%'); + if (ipv6ScopeIndex != -1) { + bedrockAddress = bedrockAddress.substring(0, ipv6ScopeIndex); + } + + encryptedData = cipher.encryptFromString(BedrockData.of( + clientData.getGameVersion(), + geyserSession.bedrockUsername(), + geyserSession.xuid(), + clientData.getDeviceOs().ordinal(), + clientData.getLanguageCode(), + clientData.getUiProfile().ordinal(), + clientData.getCurrentInputMode().ordinal(), + bedrockAddress, + skinUploader.getId(), + skinUploader.getVerifyCode() + ).toString()); + } catch (Exception e) { + geyser.getLogger().error(GeyserLocale.getLocaleStringLog("geyser.auth.floodgate.encrypt_fail"), e); + geyserSession.disconnect(GeyserLocale.getPlayerLocaleString("geyser.auth.floodgate.encrypt_fail", locale)); + return; + } + + addressSuffix = '\0' + new String(encryptedData, StandardCharsets.UTF_8); + } else { + addressSuffix = ""; + } + + ClientIntentionPacket intentionPacket = event.getPacket(); + + String address; + if (geyser.getConfig().getRemote().isForwardHost()) { + address = clientData.getServerAddress().split(":")[0]; + } else { + address = intentionPacket.getHostname(); + } + + event.setPacket(intentionPacket.withHostname(address + addressSuffix)); + } + } + + @Override + public void connected(ConnectedEvent event) { + geyserSession.loggingIn = false; + geyserSession.loggedIn = true; + + if (geyserSession.getDownstream().getSession() instanceof LocalSession) { + // Connected directly to the server + geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.network.remote.connect_internal", + geyserSession.bedrockUsername(), geyserSession.getProtocol().getProfile().getName())); + } else { + // Connected to an IP address + geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.network.remote.connect", + geyserSession.bedrockUsername(), geyserSession.getProtocol().getProfile().getName(), geyserSession.remoteServer().address())); + } + + UUID uuid = geyserSession.getProtocol().getProfile().getId(); + if (uuid == null) { + // Set what our UUID *probably* is going to be + if (geyserSession.remoteServer().authType() == AuthType.FLOODGATE) { + uuid = new UUID(0, Long.parseLong(geyserSession.xuid())); + } else { + uuid = UUID.nameUUIDFromBytes(("OfflinePlayer:" + geyserSession.getProtocol().getProfile().getName()).getBytes(StandardCharsets.UTF_8)); + } + } + geyserSession.getPlayerEntity().setUuid(uuid); + geyserSession.getPlayerEntity().setUsername(geyserSession.getProtocol().getProfile().getName()); + + String locale = geyserSession.getClientData().getLanguageCode(); + + // Let the user know there locale may take some time to download + // as it has to be extracted from a JAR + if (locale.equalsIgnoreCase("en_us") && !MinecraftLocale.LOCALE_MAPPINGS.containsKey("en_us")) { + // This should probably be left hardcoded as it will only show for en_us clients + geyserSession.sendMessage("Loading your locale (en_us); if this isn't already downloaded, this may take some time"); + } + + // Download and load the language for the player + MinecraftLocale.downloadAndLoadLocale(locale); + } + + @Override + public void disconnected(DisconnectedEvent event) { + geyserSession.loggingIn = false; + + String disconnectMessage, customDisconnectMessage = null; + Throwable cause = event.getCause(); + if (cause instanceof UnexpectedEncryptionException) { + if (geyserSession.remoteServer().authType() != AuthType.FLOODGATE) { + // Server expects online mode + customDisconnectMessage = GeyserLocale.getPlayerLocaleString("geyser.network.remote.authentication_type_mismatch", locale); + // Explain that they may be looking for Floodgate. + geyser.getLogger().warning(GeyserLocale.getLocaleStringLog( + geyser.getPlatformType() == PlatformType.STANDALONE ? + "geyser.network.remote.floodgate_explanation_standalone" + : "geyser.network.remote.floodgate_explanation_plugin", + Constants.FLOODGATE_DOWNLOAD_LOCATION + )); + } else { + // Likely that Floodgate is not configured correctly. + customDisconnectMessage = GeyserLocale.getPlayerLocaleString("geyser.network.remote.floodgate_login_error", locale); + if (geyser.getPlatformType() == PlatformType.STANDALONE) { + geyser.getLogger().warning(GeyserLocale.getLocaleStringLog("geyser.network.remote.floodgate_login_error_standalone")); + } + } + } else if (cause instanceof ConnectException) { + // Server is offline, probably + customDisconnectMessage = GeyserLocale.getPlayerLocaleString("geyser.network.remote.server_offline", locale); + } + + // Use our helpful disconnect message whenever possible + disconnectMessage = customDisconnectMessage != null ? customDisconnectMessage : MessageTranslator.convertMessage(event.getReason());; + + if (geyserSession.getDownstream().getSession() instanceof LocalSession) { + geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.network.remote.disconnect_internal", geyserSession.bedrockUsername(), disconnectMessage)); + } else { + geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.network.remote.disconnect", geyserSession.bedrockUsername(), geyserSession.remoteServer().address(), disconnectMessage)); + } + if (cause != null) { + if (cause.getMessage() != null) { + GeyserImpl.getInstance().getLogger().error(cause.getMessage()); + } else { + GeyserImpl.getInstance().getLogger().error("An exception occurred: ", cause); + } + if (geyser.getConfig().isDebugMode()) { + cause.printStackTrace(); + } + } + if ((!geyserSession.isClosed() && geyserSession.loggedIn) || cause != null) { + // GeyserSession is disconnected via session.disconnect() called indirectly be the server + // This needs to be "initiated" here when there is an exception, but also when the Netty connection + // is closed without a disconnect packet - in this case, closed will still be false, but loggedIn + // will also be true as GeyserSession#disconnect will not have been called. + if (customDisconnectMessage != null) { + geyserSession.disconnect(customDisconnectMessage); + } else { + geyserSession.disconnect(event.getReason()); + } + } + + geyserSession.loggedIn = false; + } + + @Override + public void packetReceived(Session session, Packet packet) { + Registries.JAVA_PACKET_TRANSLATORS.translate(packet.getClass(), packet, geyserSession, true); + } + + @Override + public void packetError(PacketErrorEvent event) { + geyser.getLogger().warning(GeyserLocale.getLocaleStringLog("geyser.network.downstream_error", + (event.getPacketClass() != null ? "(" + event.getPacketClass().getSimpleName() + ")" : "") + + event.getCause().getMessage()) + ); + if (geyser.getConfig().isDebugMode()) + event.getCause().printStackTrace(); + event.setSuppress(true); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginDisconnectTranslator.java b/core/src/main/java/org/geysermc/geyser/session/SessionDisconnectListener.java similarity index 58% rename from core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginDisconnectTranslator.java rename to core/src/main/java/org/geysermc/geyser/session/SessionDisconnectListener.java index 0dd843dfa..da1ed75f4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginDisconnectTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/session/SessionDisconnectListener.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2025 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 @@ -23,59 +23,59 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.translator.protocol.java; +package org.geysermc.geyser.session; -import org.geysermc.mcprotocollib.protocol.packet.login.clientbound.ClientboundLoginDisconnectPacket; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.TranslatableComponent; import org.geysermc.geyser.api.util.PlatformType; +import org.geysermc.geyser.event.type.SessionDisconnectEventImpl; import org.geysermc.geyser.network.GameProtocol; -import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.GeyserLocale; -import org.geysermc.geyser.translator.protocol.PacketTranslator; -import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.translator.text.MessageTranslator; import java.util.List; -@Translator(packet = ClientboundLoginDisconnectPacket.class) -public class JavaLoginDisconnectTranslator extends PacketTranslator<ClientboundLoginDisconnectPacket> { +/** + * Geyser's internal listener to modify disconnection messages + * for user-friendly messages. + * By listening to the event instead of firing the event with the changed message, + * third-party-users are able to see the original disconnection message. + */ +public final class SessionDisconnectListener { - @Override - public void translate(GeyserSession session, ClientboundLoginDisconnectPacket packet) { - Component disconnectReason = packet.getReason(); + private SessionDisconnectListener() { + // no-op + } + + public static void onSessionDisconnect(SessionDisconnectEventImpl event) { + Component disconnectReason = event.getReasonComponent(); + GeyserSession session = (GeyserSession) event.connection(); String serverDisconnectMessage = MessageTranslator.convertMessage(disconnectReason, session.locale()); - String disconnectMessage; if (testForOutdatedServer(disconnectReason)) { String locale = session.locale(); PlatformType platform = session.getGeyser().getPlatformType(); String outdatedType = (platform == PlatformType.BUNGEECORD || platform == PlatformType.VELOCITY || platform == PlatformType.VIAPROXY) ? - "geyser.network.remote.outdated.proxy" : "geyser.network.remote.outdated.server"; - disconnectMessage = GeyserLocale.getPlayerLocaleString(outdatedType, locale, GameProtocol.getJavaVersions().get(0)) + '\n' - + GeyserLocale.getPlayerLocaleString("geyser.network.remote.original_disconnect_message", locale, serverDisconnectMessage); + "geyser.network.remote.outdated.proxy" : "geyser.network.remote.outdated.server"; + event.disconnectReason(GeyserLocale.getPlayerLocaleString(outdatedType, locale, GameProtocol.getJavaVersions().get(0)) + '\n' + + GeyserLocale.getPlayerLocaleString("geyser.network.remote.original_disconnect_message", locale, serverDisconnectMessage)); } else if (testForMissingProfilePublicKey(disconnectReason)) { - disconnectMessage = "Please set `enforce-secure-profile` to `false` in server.properties for Bedrock players to be able to connect." + '\n' - + GeyserLocale.getPlayerLocaleString("geyser.network.remote.original_disconnect_message", session.locale(), serverDisconnectMessage); - } else { - disconnectMessage = serverDisconnectMessage; + event.disconnectReason("Please set `enforce-secure-profile` to `false` in server.properties for Bedrock players to be able to connect." + '\n' + + GeyserLocale.getPlayerLocaleString("geyser.network.remote.original_disconnect_message", session.locale(), serverDisconnectMessage)); } - - // The client doesn't manually get disconnected so we have to do it ourselves - session.disconnect(disconnectMessage); } - private boolean testForOutdatedServer(Component disconnectReason) { + private static boolean testForOutdatedServer(Component disconnectReason) { if (disconnectReason instanceof TranslatableComponent component) { String key = component.key(); return "multiplayer.disconnect.incompatible".equals(key) || - // Seen with Velocity 1.18 rejecting a 1.19 client - "multiplayer.disconnect.outdated_client".equals(key) || - // Legacy string (starting from at least 1.15.2) - "multiplayer.disconnect.outdated_server".equals(key) - // Reproduced on 1.15.2 server with ViaVersion 4.0.0-21w20a with 1.18.2 Java client - || key.startsWith("Outdated server!"); + // Seen with Velocity 1.18 rejecting a 1.19 client + "multiplayer.disconnect.outdated_client".equals(key) || + // Legacy string (starting from at least 1.15.2) + "multiplayer.disconnect.outdated_server".equals(key) + // Reproduced on 1.15.2 server with ViaVersion 4.0.0-21w20a with 1.18.2 Java client + || key.startsWith("Outdated server!"); } else { if (disconnectReason instanceof TextComponent component) { if (component.content().startsWith("Outdated server!")) { @@ -95,7 +95,8 @@ public class JavaLoginDisconnectTranslator extends PacketTranslator<ClientboundL return false; } - private boolean testForMissingProfilePublicKey(Component disconnectReason) { + private static boolean testForMissingProfilePublicKey(Component disconnectReason) { return disconnectReason instanceof TranslatableComponent component && "multiplayer.disconnect.missing_public_key".equals(component.key()); } + } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginFinishedTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginFinishedTranslator.java index cebf71efd..36c1ef197 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginFinishedTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginFinishedTranslator.java @@ -34,6 +34,7 @@ import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.util.PluginMessageUtils; import org.geysermc.mcprotocollib.auth.GameProfile; +import org.geysermc.mcprotocollib.protocol.data.ProtocolState; import org.geysermc.mcprotocollib.protocol.packet.common.serverbound.ServerboundCustomPayloadPacket; import org.geysermc.mcprotocollib.protocol.packet.login.clientbound.ClientboundLoginFinishedPacket; @@ -73,7 +74,7 @@ public class JavaLoginFinishedTranslator extends PacketTranslator<ClientboundLog session.getClientData().setOriginalString(null); // configuration phase stuff that the vanilla client replies with after receiving the GameProfilePacket - session.sendDownstreamPacket(new ServerboundCustomPayloadPacket(Key.key("brand"), PluginMessageUtils.getGeyserBrandData())); + session.sendDownstreamPacket(new ServerboundCustomPayloadPacket(Key.key("brand"), PluginMessageUtils.getGeyserBrandData()), ProtocolState.CONFIGURATION); session.sendJavaClientSettings(); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaTransferPacketTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaTransferPacketTranslator.java index ad793f934..6f9085b2b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaTransferPacketTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaTransferPacketTranslator.java @@ -25,10 +25,10 @@ package org.geysermc.geyser.translator.protocol.java.entity.player; +import net.kyori.adventure.text.Component; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.event.java.ServerTransferEvent; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.text.MinecraftLocale; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.mcprotocollib.protocol.packet.common.clientbound.ClientboundTransferPacket; @@ -49,7 +49,7 @@ public class JavaTransferPacketTranslator extends PacketTranslator<ClientboundTr if (event.bedrockHost() != null && !event.bedrockHost().isBlank() && event.bedrockPort() != -1) { session.transfer(event.bedrockHost(), event.bedrockPort()); } else { - session.disconnect(MinecraftLocale.getLocaleString("disconnect.transfer", session.locale())); + session.disconnect(Component.translatable("disconnect.transfer")); } } } 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 ba11a20c7..b71caa1dc 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java @@ -138,9 +138,9 @@ public class InventoryUtils { ) { session.setClosingInventory(true); } + session.getBundleCache().onInventoryClose(inventory); } session.setInventoryTranslator(InventoryTranslator.PLAYER_INVENTORY_TRANSLATOR); - session.getBundleCache().onInventoryClose(inventory); session.setOpenInventory(null); } From 07629a42c9226b75501010a2959c5377dffcc1d5 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Wed, 15 Jan 2025 23:25:57 +0100 Subject: [PATCH 135/165] Only send the ServerboundClientTickEndPacket while in the GAME protocol state, make locale non-null Fixes https://github.com/GeyserMC/Geyser/issues/5278 --- .../main/java/org/geysermc/geyser/session/GeyserSession.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 111b966f7..f40dcfecc 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -1180,7 +1180,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { this.bundleCache.tick(); - if (spawned) { + if (spawned && protocol.getOutboundState() == ProtocolState.GAME) { // Could move this to the PlayerAuthInput translator, in the event the player lags // but this will work once we implement matching Java custom tick cycles sendDownstreamGamePacket(ServerboundClientTickEndPacket.INSTANCE); @@ -1400,7 +1400,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { @Override public String locale() { - return clientData.getLanguageCode(); + return clientData != null ? clientData.getLanguageCode() : GeyserLocale.getDefaultLocale(); } @Override From a7d475e7e45189d7448d4324b80e91cb2d39df40 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Fri, 17 Jan 2025 22:47:15 +0100 Subject: [PATCH 136/165] fix black particles around invisible area effect cloud entities --- core/src/main/java/org/geysermc/geyser/entity/type/Entity.java | 1 + .../geyser/entity/type/living/monster/CreakingEntity.java | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) 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 0d3214709..c986a8067 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 @@ -176,6 +176,7 @@ public class Entity implements GeyserEntity { setFlag(EntityFlag.HAS_COLLISION, true); setFlag(EntityFlag.CAN_SHOW_NAME, true); setFlag(EntityFlag.CAN_CLIMB, true); + setFlag(EntityFlag.HIDDEN_WHEN_INVISIBLE, true); // Let the Java server (or us) supply all sounds for an entity setClientSideSilent(); } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java index 1b9fdd8a4..166cdc053 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreakingEntity.java @@ -53,7 +53,6 @@ public class CreakingEntity extends MonsterEntity { @Override protected void initializeMetadata() { super.initializeMetadata(); - setFlag(EntityFlag.HIDDEN_WHEN_INVISIBLE, true); setFlag(EntityFlag.FIRE_IMMUNE, true); } From 613718a52d108871efc5569615cc68f93e96098c Mon Sep 17 00:00:00 2001 From: Alex <40795980+AlexProgrammerDE@users.noreply.github.com> Date: Sat, 18 Jan 2025 13:53:09 +0100 Subject: [PATCH 137/165] Implement session restructure mcpl PR, fix disconnect messages in configuration stage (#5196) * Implement session restructure mcpl PR * Bump mcpl * Update mcpl api usage * Update MCPL to release, fix https://github.com/GeyserMC/Geyser/issues/5281 (https://github.com/GeyserMC/MCProtocolLib/commit/1daf036f57096692b4a18778f8c6e0c12dc7b424) * Use correct mcpl dependency * apparently 1.21.4-1 doesn't exist? back to snapshots then --------- Co-authored-by: onebeastchris <github@onechris.mozmail.com> --- .../platform/spigot/GeyserSpigotInjector.java | 7 +- .../type/SessionDisconnectEventImpl.java | 2 +- .../updater/AnvilInventoryUpdater.java | 3 +- .../netty/LocalChannelWithRemoteAddress.java | 7 +- .../geyser/network/netty/LocalSession.java | 151 ++++-------------- .../geyser/session/DownstreamSession.java | 4 +- .../geyser/session/GeyserSession.java | 58 +++---- .../translator/item/CustomItemTranslator.java | 4 +- gradle/libs.versions.toml | 2 +- 9 files changed, 79 insertions(+), 159 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 9f7e21579..3098ef0e0 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 @@ -25,6 +25,7 @@ package org.geysermc.geyser.platform.spigot; +import org.geysermc.mcprotocollib.protocol.MinecraftConstants; import org.geysermc.mcprotocollib.protocol.MinecraftProtocol; import com.viaversion.viaversion.bukkit.handlers.BukkitChannelInitializer; import io.netty.bootstrap.ServerBootstrap; @@ -176,9 +177,9 @@ public class GeyserSpigotInjector extends GeyserInjector { */ private void workAroundWeirdBug(GeyserBootstrap bootstrap) { MinecraftProtocol protocol = new MinecraftProtocol(); - LocalSession session = new LocalSession(bootstrap.getGeyserConfig().getRemote().address(), - bootstrap.getGeyserConfig().getRemote().port(), this.serverSocketAddress, - InetAddress.getLoopbackAddress().getHostAddress(), protocol, Runnable::run); + LocalSession session = new LocalSession(this.serverSocketAddress, InetAddress.getLoopbackAddress().getHostAddress(), protocol, Runnable::run); + session.setFlag(MinecraftConstants.CLIENT_HOST, bootstrap.getGeyserConfig().getRemote().address()); + session.setFlag(MinecraftConstants.CLIENT_PORT, bootstrap.getGeyserConfig().getRemote().port()); session.connect(); } diff --git a/core/src/main/java/org/geysermc/geyser/event/type/SessionDisconnectEventImpl.java b/core/src/main/java/org/geysermc/geyser/event/type/SessionDisconnectEventImpl.java index b746979df..c845b2399 100644 --- a/core/src/main/java/org/geysermc/geyser/event/type/SessionDisconnectEventImpl.java +++ b/core/src/main/java/org/geysermc/geyser/event/type/SessionDisconnectEventImpl.java @@ -42,7 +42,7 @@ public class SessionDisconnectEventImpl extends SessionDisconnectEvent { private final Component reasonComponent; public SessionDisconnectEventImpl(@NonNull GeyserSession session, Component reason) { - super(session, MessageTranslator.convertToPlainText(reason, session.locale())); + super(session, MessageTranslator.convertMessageRaw(reason, session.locale())); this.reasonComponent = reason; } } 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 3ea78a942..aadaeb356 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 @@ -47,6 +47,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; import org.geysermc.mcprotocollib.protocol.data.game.item.component.ItemEnchantments; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.Unbreakable; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundRenameItemPacket; import java.util.List; @@ -424,7 +425,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater { private boolean hasDurability(GeyserItemStack itemStack) { if (itemStack.asItem().defaultMaxDamage() > 0) { - return itemStack.getComponentOrFallback(DataComponentType.UNBREAKABLE, false); + return itemStack.getComponent(DataComponentType.UNBREAKABLE) != null; } return false; } diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWithRemoteAddress.java b/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWithRemoteAddress.java index ac2b6898a..dacb4de69 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWithRemoteAddress.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWithRemoteAddress.java @@ -28,18 +28,19 @@ package org.geysermc.geyser.network.netty; import io.netty.channel.local.LocalChannel; import java.net.InetSocketAddress; +import java.net.SocketAddress; /** * Client -> server storing the spoofed remote address. */ public class LocalChannelWithRemoteAddress extends LocalChannel { - private InetSocketAddress spoofedAddress; + private SocketAddress spoofedAddress; - public InetSocketAddress spoofedRemoteAddress() { + public SocketAddress spoofedRemoteAddress() { return spoofedAddress; } - public void spoofedRemoteAddress(InetSocketAddress socketAddress) { + public void spoofedRemoteAddress(SocketAddress socketAddress) { this.spoofedAddress = socketAddress; } } 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 3b86a0bf9..e1847bdee 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 @@ -27,150 +27,65 @@ package org.geysermc.geyser.network.netty; import io.netty.bootstrap.Bootstrap; import io.netty.buffer.ByteBufAllocator; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundHandlerAdapter; -import io.netty.channel.ChannelInitializer; +import io.netty.channel.Channel; +import io.netty.channel.ChannelFactory; +import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelOption; -import io.netty.channel.ChannelPipeline; -import io.netty.channel.DefaultEventLoopGroup; +import io.netty.channel.ReflectiveChannelFactory; import io.netty.channel.unix.PreferredDirectByteBufAllocator; -import io.netty.handler.codec.haproxy.HAProxyCommand; -import io.netty.handler.codec.haproxy.HAProxyMessage; -import io.netty.handler.codec.haproxy.HAProxyMessageEncoder; -import io.netty.handler.codec.haproxy.HAProxyProtocolVersion; -import io.netty.handler.codec.haproxy.HAProxyProxiedProtocol; -import io.netty.handler.timeout.ReadTimeoutHandler; -import io.netty.handler.timeout.WriteTimeoutHandler; -import io.netty.util.concurrent.DefaultThreadFactory; import org.checkerframework.checker.nullness.qual.NonNull; -import org.geysermc.mcprotocollib.network.BuiltinFlags; -import org.geysermc.mcprotocollib.network.codec.PacketCodecHelper; +import org.geysermc.mcprotocollib.network.helper.NettyHelper; +import org.geysermc.mcprotocollib.network.netty.MinecraftChannelInitializer; import org.geysermc.mcprotocollib.network.packet.PacketProtocol; -import org.geysermc.mcprotocollib.network.tcp.FlushHandler; -import org.geysermc.mcprotocollib.network.tcp.TcpFlowControlHandler; -import org.geysermc.mcprotocollib.network.tcp.TcpPacketCodec; -import org.geysermc.mcprotocollib.network.tcp.TcpPacketCompression; -import org.geysermc.mcprotocollib.network.tcp.TcpPacketEncryptor; -import org.geysermc.mcprotocollib.network.tcp.TcpPacketSizer; -import org.geysermc.mcprotocollib.network.tcp.TcpSession; -import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodecHelper; +import org.geysermc.mcprotocollib.network.session.ClientNetworkSession; -import java.net.Inet4Address; import java.net.InetSocketAddress; import java.net.SocketAddress; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; -import java.util.concurrent.TimeUnit; /** * Manages a Minecraft Java session over our LocalChannel implementations. */ -public final class LocalSession extends TcpSession { - private static DefaultEventLoopGroup DEFAULT_EVENT_LOOP_GROUP; +public final class LocalSession extends ClientNetworkSession { private static PreferredDirectByteBufAllocator PREFERRED_DIRECT_BYTE_BUF_ALLOCATOR = null; - private final SocketAddress targetAddress; - private final String clientIp; - private final PacketCodecHelper codecHelper; + private final SocketAddress spoofedRemoteAddress; - public LocalSession(String host, int port, SocketAddress targetAddress, String clientIp, PacketProtocol protocol, Executor packetHandlerExecutor) { - super(host, port, protocol, packetHandlerExecutor); - this.targetAddress = targetAddress; - this.clientIp = clientIp; - this.codecHelper = protocol.createHelper(); + public LocalSession(SocketAddress targetAddress, String clientIp, PacketProtocol protocol, Executor packetHandlerExecutor) { + super(targetAddress, protocol, packetHandlerExecutor, null, null); + this.spoofedRemoteAddress = new InetSocketAddress(clientIp, 0); } @Override - public void connect(boolean wait, boolean transferring) { - if (this.disconnected) { - throw new IllegalStateException("Connection has already been disconnected."); - } - - if (DEFAULT_EVENT_LOOP_GROUP == null) { - DEFAULT_EVENT_LOOP_GROUP = new DefaultEventLoopGroup(new DefaultThreadFactory(this.getClass(), true)); - Runtime.getRuntime().addShutdownHook(new Thread( - () -> DEFAULT_EVENT_LOOP_GROUP.shutdownGracefully(100, 500, TimeUnit.MILLISECONDS))); - } - - final Bootstrap bootstrap = new Bootstrap(); - bootstrap.channel(LocalChannelWithRemoteAddress.class); - bootstrap.handler(new ChannelInitializer<LocalChannelWithRemoteAddress>() { - @Override - public void initChannel(@NonNull LocalChannelWithRemoteAddress channel) { - channel.spoofedRemoteAddress(new InetSocketAddress(clientIp, 0)); - PacketProtocol protocol = getPacketProtocol(); - protocol.newClientSession(LocalSession.this, transferring); - - ChannelPipeline pipeline = channel.pipeline(); - - addHAProxySupport(pipeline); - - pipeline.addLast("read-timeout", new ReadTimeoutHandler(getFlag(BuiltinFlags.READ_TIMEOUT, 30))); - pipeline.addLast("write-timeout", new WriteTimeoutHandler(getFlag(BuiltinFlags.WRITE_TIMEOUT, 0))); - - pipeline.addLast("encryption", new TcpPacketEncryptor()); - pipeline.addLast("sizer", new TcpPacketSizer(protocol.getPacketHeader(), getCodecHelper())); - pipeline.addLast("compression", new TcpPacketCompression(getCodecHelper())); - - pipeline.addLast("flow-control", new TcpFlowControlHandler()); - pipeline.addLast("codec", new TcpPacketCodec(LocalSession.this, true)); - pipeline.addLast("flush-handler", new FlushHandler()); - pipeline.addLast("manager", LocalSession.this); - } - }).group(DEFAULT_EVENT_LOOP_GROUP).option(ChannelOption.CONNECT_TIMEOUT_MILLIS, getFlag(BuiltinFlags.CLIENT_CONNECT_TIMEOUT, 30) * 1000); + protected ChannelFactory<? extends Channel> getChannelFactory() { + return new ReflectiveChannelFactory<>(LocalChannelWithRemoteAddress.class); + } + @Override + protected void setOptions(Bootstrap bootstrap) { if (PREFERRED_DIRECT_BYTE_BUF_ALLOCATOR != null) { bootstrap.option(ChannelOption.ALLOCATOR, PREFERRED_DIRECT_BYTE_BUF_ALLOCATOR); } - - bootstrap.remoteAddress(targetAddress); - - CompletableFuture<Void> handleFuture = new CompletableFuture<>(); - bootstrap.connect().addListener((futureListener) -> { - if (!futureListener.isSuccess()) { - exceptionCaught(null, futureListener.cause()); - } - - handleFuture.complete(null); - }); - - if (wait) { - handleFuture.join(); - } } @Override - public MinecraftCodecHelper getCodecHelper() { - return (MinecraftCodecHelper) this.codecHelper; - } + protected ChannelHandler getChannelHandler() { + return new MinecraftChannelInitializer<>(channel -> { + PacketProtocol protocol = getPacketProtocol(); + protocol.newClientSession(LocalSession.this); - // TODO duplicate code - private void addHAProxySupport(ChannelPipeline pipeline) { - InetSocketAddress clientAddress = getFlag(BuiltinFlags.CLIENT_PROXIED_ADDRESS); - if (clientAddress != null) { - pipeline.addFirst("proxy-protocol-packet-sender", new ChannelInboundHandlerAdapter() { - @Override - 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) { - remoteAddress = (InetSocketAddress) ctx.channel().remoteAddress(); - } else { - remoteAddress = new InetSocketAddress(host, port); - } - ctx.channel().writeAndFlush(new HAProxyMessage( - HAProxyProtocolVersion.V2, HAProxyCommand.PROXY, proxiedProtocol, - clientAddress.getAddress().getHostAddress(), remoteAddress.getAddress().getHostAddress(), - clientAddress.getPort(), remoteAddress.getPort() - )); - ctx.pipeline().remove(this); - ctx.pipeline().remove("proxy-protocol-encoder"); - super.channelActive(ctx); - } - }); - pipeline.addFirst("proxy-protocol-encoder", HAProxyMessageEncoder.INSTANCE); - } - } + return LocalSession.this; + }, true) { + @Override + public void initChannel(@NonNull Channel channel) throws Exception { + ((LocalChannelWithRemoteAddress) channel).spoofedRemoteAddress(spoofedRemoteAddress); + + NettyHelper.initializeHAProxySupport(LocalSession.this, channel); + + super.initChannel(channel); + } + }; + } /** * Should only be called when direct ByteBufs should be preferred. At this moment, this should only be called on BungeeCord. diff --git a/core/src/main/java/org/geysermc/geyser/session/DownstreamSession.java b/core/src/main/java/org/geysermc/geyser/session/DownstreamSession.java index c1db89484..22827ccfa 100644 --- a/core/src/main/java/org/geysermc/geyser/session/DownstreamSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/DownstreamSession.java @@ -29,14 +29,14 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; import net.kyori.adventure.text.Component; import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.mcprotocollib.network.ClientSession; import org.geysermc.mcprotocollib.network.packet.Packet; -import org.geysermc.mcprotocollib.network.tcp.TcpSession; import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodecHelper; @Getter @RequiredArgsConstructor public class DownstreamSession { - private final TcpSession session; + private final ClientSession session; public void sendPacket(@NonNull Packet packet) { this.session.send(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 f40dcfecc..1cb5d1fd4 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -181,9 +181,9 @@ import org.geysermc.geyser.util.MathUtils; import org.geysermc.geyser.util.MinecraftAuthLogger; import org.geysermc.mcprotocollib.auth.GameProfile; import org.geysermc.mcprotocollib.network.BuiltinFlags; +import org.geysermc.mcprotocollib.network.ClientSession; import org.geysermc.mcprotocollib.network.packet.Packet; -import org.geysermc.mcprotocollib.network.tcp.TcpClientSession; -import org.geysermc.mcprotocollib.network.tcp.TcpSession; +import org.geysermc.mcprotocollib.network.session.ClientNetworkSession; import org.geysermc.mcprotocollib.protocol.ClientListener; import org.geysermc.mcprotocollib.protocol.MinecraftConstants; import org.geysermc.mcprotocollib.protocol.MinecraftProtocol; @@ -199,6 +199,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.setting.ParticleStatus; import org.geysermc.mcprotocollib.protocol.data.game.setting.SkinPart; import org.geysermc.mcprotocollib.protocol.data.game.statistic.CustomStatistic; import org.geysermc.mcprotocollib.protocol.data.game.statistic.Statistic; +import org.geysermc.mcprotocollib.protocol.data.handshake.HandshakeIntent; import org.geysermc.mcprotocollib.protocol.packet.common.serverbound.ServerboundClientInformationPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundChatCommandSignedPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundChatPacket; @@ -770,7 +771,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { // Default move speed // Bedrock clients move very fast by default until they get an attribute packet correcting the speed attributesPacket.setAttributes(Collections.singletonList( - GeyserAttributeType.MOVEMENT_SPEED.getAttribute())); + GeyserAttributeType.MOVEMENT_SPEED.getAttribute())); upstream.sendPacket(attributesPacket); GameRulesChangedPacket gamerulePacket = new GameRulesChangedPacket(); @@ -826,8 +827,8 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { StepMCToken.MCToken mcToken = mcProfile.getMcToken(); protocol = new MinecraftProtocol( - new GameProfile(mcProfile.getId(), mcProfile.getName()), - mcToken.getAccessToken() + new GameProfile(mcProfile.getId(), mcProfile.getName()), + mcToken.getAccessToken() ); geyser.saveAuthChain(bedrockUsername(), GSON.toJson(step.toJson(response))); return Boolean.TRUE; @@ -872,7 +873,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { sendUpstreamPacket(packet); final PendingMicrosoftAuthentication.AuthenticationTask task = geyser.getPendingMicrosoftAuthentication().getOrCreateTask( - getAuthData().xuid() + getAuthData().xuid() ); if (task.getAuthentication() != null && task.getAuthentication().isDone()) { onMicrosoftLoginComplete(task); @@ -898,8 +899,8 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { if (ex != null) { geyser.getLogger().error("Failed to log in with Microsoft code!", ex); if (ex instanceof CompletionException ce - && ce.getCause() instanceof MinecraftRequestException mre - && mre.getResponse().getStatusCode() == 404) { + && ce.getCause() instanceof MinecraftRequestException mre + && mre.getResponse().getStatusCode() == 404) { // Player is trying to join with a Microsoft account that doesn't have Java Edition purchased disconnect(GeyserLocale.getPlayerLocaleString("geyser.network.remote.invalid_account", locale())); } else { @@ -912,8 +913,8 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { StepMCToken.MCToken mcToken = mcProfile.getMcToken(); this.protocol = new MinecraftProtocol( - new GameProfile(mcProfile.getId(), mcProfile.getName()), - mcToken.getAccessToken() + new GameProfile(mcProfile.getId(), mcProfile.getName()), + mcToken.getAccessToken() ); try { @@ -937,7 +938,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { GeyserImpl.getInstance().eventBus().fire(loginEvent); if (loginEvent.isCancelled()) { String disconnectReason = loginEvent.disconnectReason() == null ? - BedrockDisconnectReasons.DISCONNECTED : loginEvent.disconnectReason(); + BedrockDisconnectReasons.DISCONNECTED : loginEvent.disconnectReason(); disconnect(disconnectReason); return; } @@ -948,15 +949,17 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { // Start ticking tickThread = tickEventLoop.scheduleAtFixedRate(this::tick, nanosecondsPerTick, nanosecondsPerTick, TimeUnit.NANOSECONDS); - TcpSession downstream; + ClientSession downstream; if (geyser.getBootstrap().getSocketAddress() != null) { // We're going to connect through the JVM and not through TCP - downstream = new LocalSession(this.remoteServer.address(), this.remoteServer.port(), - geyser.getBootstrap().getSocketAddress(), upstream.getAddress().getAddress().getHostAddress(), - this.protocol, this.tickEventLoop); + downstream = new LocalSession(geyser.getBootstrap().getSocketAddress(), + upstream.getAddress().getAddress().getHostAddress(), + this.protocol, this.tickEventLoop); + downstream.setFlag(MinecraftConstants.CLIENT_HOST, this.remoteServer.address()); + downstream.setFlag(MinecraftConstants.CLIENT_PORT, this.remoteServer.port()); this.downstream = new DownstreamSession(downstream); } else { - downstream = new TcpClientSession(this.remoteServer.address(), this.remoteServer.port(), "0.0.0.0", 0, this.protocol, null, tickEventLoop); + downstream = new ClientNetworkSession(new InetSocketAddress(this.remoteServer.address(), this.remoteServer.port()), this.protocol, tickEventLoop, null, null); this.downstream = new DownstreamSession(downstream); boolean resolveSrv = false; @@ -986,11 +989,12 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { protocol.setUseDefaultListeners(false); // MCPL listener comes first to handle protocol state switching before Geyser translates packets - downstream.addListener(new ClientListener(ProtocolState.LOGIN, loginEvent.transferring())); + downstream.addListener(new ClientListener(HandshakeIntent.LOGIN)); // Geyser adapter second to ensure translating packets in the correct states downstream.addListener(new GeyserSessionAdapter(this)); - downstream.connect(false, loginEvent.transferring()); + downstream.setFlag(BuiltinFlags.CLIENT_TRANSFERRING, loginEvent.transferring()); + downstream.connect(false); if (!daylightCycle) { setDaylightCycle(true); @@ -1287,7 +1291,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { public void setClientData(BedrockClientData data) { this.clientData = data; this.inputCache.setInputMode( - org.cloudburstmc.protocol.bedrock.data.InputMode.values()[data.getCurrentInputMode().ordinal()]); + org.cloudburstmc.protocol.bedrock.data.InputMode.values()[data.getCurrentInputMode().ordinal()]); } /** @@ -1295,7 +1299,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { */ public void useItem(Hand hand) { sendDownstreamGamePacket(new ServerboundUseItemPacket( - hand, worldCache.nextPredictionSequence(), playerEntity.getYaw(), playerEntity.getPitch())); + hand, worldCache.nextPredictionSequence(), playerEntity.getYaw(), playerEntity.getPitch())); } public void releaseItem() { @@ -1351,7 +1355,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { private boolean disableBlocking() { if (playerEntity.getFlag(EntityFlag.BLOCKING)) { ServerboundPlayerActionPacket releaseItemPacket = new ServerboundPlayerActionPacket(PlayerAction.RELEASE_USE_ITEM, - Vector3i.ZERO, Direction.DOWN, 0); + Vector3i.ZERO, Direction.DOWN, 0); sendDownstreamGamePacket(releaseItemPacket); playerEntity.setFlag(EntityFlag.BLOCKING, false); return true; @@ -1361,7 +1365,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { public void requestOffhandSwap() { ServerboundPlayerActionPacket swapHandsPacket = new ServerboundPlayerActionPacket(PlayerAction.SWAP_HANDS, Vector3i.ZERO, - Direction.DOWN, 0); + Direction.DOWN, 0); sendDownstreamGamePacket(swapHandsPacket); } @@ -1585,7 +1589,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { unconfirmedTeleport.resetUnconfirmedFor(); geyser.getLogger().debug("Resending teleport " + unconfirmedTeleport.getTeleportConfirmId()); getPlayerEntity().moveAbsolute(Vector3f.from(unconfirmedTeleport.getX(), unconfirmedTeleport.getY(), unconfirmedTeleport.getZ()), - unconfirmedTeleport.getYaw(), unconfirmedTeleport.getPitch(), playerEntity.isOnGround(), true); + unconfirmedTeleport.getYaw(), unconfirmedTeleport.getPitch(), playerEntity.isOnGround(), true); } } @@ -1841,8 +1845,8 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { public void sendJavaClientSettings() { // Locale is lowercase on Java - (https://github.com/GeyserMC/Geyser/issues/5235) ServerboundClientInformationPacket clientSettingsPacket = new ServerboundClientInformationPacket(locale().toLowerCase(Locale.ROOT), - getRenderDistance(), ChatVisibility.FULL, true, SKIN_PARTS, - HandPreference.RIGHT_HAND, false, true, ParticleStatus.ALL); // TODO particle status + getRenderDistance(), ChatVisibility.FULL, true, SKIN_PARTS, + HandPreference.RIGHT_HAND, false, true, ParticleStatus.ALL); // TODO particle status sendDownstreamPacket(clientSettingsPacket); } @@ -1895,8 +1899,8 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { return switch (pose) { case SNEAKING -> 1.27f; case SWIMMING, - FALL_FLYING, // Elytra - SPIN_ATTACK -> 0.4f; // Trident spin attack + FALL_FLYING, // Elytra + SPIN_ATTACK -> 0.4f; // Trident spin attack case SLEEPING -> 0.2f; default -> EntityDefinitions.PLAYER.offset(); }; diff --git a/core/src/main/java/org/geysermc/geyser/translator/item/CustomItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/item/CustomItemTranslator.java index fdc90c215..c6318c461 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/item/CustomItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/item/CustomItemTranslator.java @@ -119,9 +119,7 @@ public final class CustomItemTranslator { private static boolean isDamagableItem(DataComponents components) { // mapping.getMaxDamage > 0 should also be checked (return false if not true) but we already check prior to this function - Boolean unbreakable = components.get(DataComponentType.UNBREAKABLE); - // Tag must either not be present or be set to false - return unbreakable == null || !unbreakable; + return components.get(DataComponentType.UNBREAKABLE) == null; } private CustomItemTranslator() { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 65cef50f8..598fb4779 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,7 @@ protocol-common = "3.0.0.Beta5-20241213.160944-20" protocol-codec = "3.0.0.Beta5-20241213.160944-20" raknet = "1.0.0.CR3-20240416.144209-1" minecraftauth = "4.1.1" -mcprotocollib = "1.21.4-20241222.190029-11" +mcprotocollib = "1.21.4-20250118.113140-16" adventure = "4.14.0" adventure-platform = "4.3.0" junit = "5.9.2" From dff7cf2136dfde6d513f28386444709e54968130 Mon Sep 17 00:00:00 2001 From: Alex <40795980+AlexProgrammerDE@users.noreply.github.com> Date: Sat, 18 Jan 2025 17:10:27 +0100 Subject: [PATCH 138/165] Use vanilla dns resolving (#5283) * Use vanilla dns resolving * Update gradle/libs.versions.toml Co-authored-by: chris <github@onechris.mozmail.com> * Update gradle/libs.versions.toml Co-authored-by: chris <github@onechris.mozmail.com> --------- Co-authored-by: chris <github@onechris.mozmail.com> --- 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 598fb4779..e5e8a3faa 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,7 @@ protocol-common = "3.0.0.Beta5-20241213.160944-20" protocol-codec = "3.0.0.Beta5-20241213.160944-20" raknet = "1.0.0.CR3-20240416.144209-1" minecraftauth = "4.1.1" -mcprotocollib = "1.21.4-20250118.113140-16" +mcprotocollib = "1.21.4-20250118.154631-17" adventure = "4.14.0" adventure-platform = "4.3.0" junit = "5.9.2" From 98f9bf6b6281a268e9ae1ac1eccb2c4a10dfebde Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Sun, 19 Jan 2025 14:29:58 +0100 Subject: [PATCH 139/165] Fix issues with Geyser-Spigot that occurring with older server versions --- .../geyser/entity/type/TextDisplayEntity.java | 2 +- .../geyser/network/netty/LocalSession.java | 16 ++++++++++++++++ .../geysermc/geyser/session/GeyserSession.java | 5 +++-- 3 files changed, 20 insertions(+), 3 deletions(-) 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 0cd207c52..ccd93d12a 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 @@ -67,7 +67,7 @@ public class TextDisplayEntity extends DisplayBaseEntity { } public void setText(EntityMetadata<Component, ?> entityMetadata) { - this.dirtyMetadata.put(EntityDataTypes.NAME, MessageTranslator.convertMessage(entityMetadata.getValue())); + this.dirtyMetadata.put(EntityDataTypes.NAME, MessageTranslator.convertMessage(entityMetadata.getValue(), session.locale())); calculateLineCount(entityMetadata.getValue()); } 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 e1847bdee..0f6e6b5bc 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 @@ -31,8 +31,11 @@ import io.netty.channel.Channel; import io.netty.channel.ChannelFactory; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelOption; +import io.netty.channel.DefaultEventLoopGroup; +import io.netty.channel.EventLoopGroup; import io.netty.channel.ReflectiveChannelFactory; import io.netty.channel.unix.PreferredDirectByteBufAllocator; +import io.netty.util.concurrent.DefaultThreadFactory; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.mcprotocollib.network.helper.NettyHelper; import org.geysermc.mcprotocollib.network.netty.MinecraftChannelInitializer; @@ -42,11 +45,13 @@ import org.geysermc.mcprotocollib.network.session.ClientNetworkSession; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.util.concurrent.Executor; +import java.util.concurrent.TimeUnit; /** * Manages a Minecraft Java session over our LocalChannel implementations. */ public final class LocalSession extends ClientNetworkSession { + private static DefaultEventLoopGroup DEFAULT_EVENT_LOOP_GROUP; private static PreferredDirectByteBufAllocator PREFERRED_DIRECT_BYTE_BUF_ALLOCATOR = null; private final SocketAddress spoofedRemoteAddress; @@ -68,6 +73,17 @@ public final class LocalSession extends ClientNetworkSession { } } + @Override + protected EventLoopGroup getEventLoopGroup() { + if (DEFAULT_EVENT_LOOP_GROUP == null) { + DEFAULT_EVENT_LOOP_GROUP = new DefaultEventLoopGroup(new DefaultThreadFactory(this.getClass(), true)); + Runtime.getRuntime().addShutdownHook(new Thread( + () -> DEFAULT_EVENT_LOOP_GROUP.shutdownGracefully(100, 500, TimeUnit.MILLISECONDS))); + } + + return DEFAULT_EVENT_LOOP_GROUP; + } + @Override protected ChannelHandler getChannelHandler() { return new MinecraftChannelInitializer<>(channel -> { 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 1cb5d1fd4..fc8f82dd0 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -173,6 +173,7 @@ import org.geysermc.geyser.session.cache.WorldBorder; import org.geysermc.geyser.session.cache.WorldCache; import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.translator.inventory.InventoryTranslator; +import org.geysermc.geyser.translator.text.MessageTranslator; import org.geysermc.geyser.util.ChunkUtils; import org.geysermc.geyser.util.EntityUtils; import org.geysermc.geyser.util.InventoryUtils; @@ -1025,7 +1026,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { // 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() : "<IP address withheld>"; - geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.network.disconnect", address, reason)); + geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.network.disconnect", address, MessageTranslator.convertMessage(reason))); } // Disconnect upstream if necessary @@ -1646,7 +1647,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { } if (protocol.getOutboundState() != intendedState) { - geyser.getLogger().warning("Tried to send " + packet.getClass().getSimpleName() + " packet while not in " + intendedState.name() + " outbound state. Current state: " + protocol.getOutboundState().name()); + geyser.getLogger().debug("Tried to send " + packet.getClass().getSimpleName() + " packet while not in " + intendedState.name() + " outbound state. Current state: " + protocol.getOutboundState().name()); return; } From 5836dabcdaa8945762d690f7e2784895959060dd Mon Sep 17 00:00:00 2001 From: Alex <40795980+AlexProgrammerDE@users.noreply.github.com> Date: Tue, 21 Jan 2025 16:11:09 +0100 Subject: [PATCH 140/165] Use mcpl staticify PR (#5284) * Use mcpl staticify PR * Fix missing generic arg * Update libs.versions.toml --- .../org/geysermc/geyser/level/WorldManager.java | 5 ++--- .../registry/loader/RecipeRegistryLoader.java | 16 ++++++++-------- .../DataComponentRegistryPopulator.java | 8 +++----- .../geyser/session/DownstreamSession.java | 10 ---------- .../level/JavaLevelChunkWithLightTranslator.java | 3 ++- .../scoreboard/network/ScoreboardIssueTests.java | 2 +- gradle/libs.versions.toml | 2 +- 7 files changed, 17 insertions(+), 29 deletions(-) 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 a85462108..c33fc7665 100644 --- a/core/src/main/java/org/geysermc/geyser/level/WorldManager.java +++ b/core/src/main/java/org/geysermc/geyser/level/WorldManager.java @@ -39,7 +39,6 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponent; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.ItemCodecHelper; import org.geysermc.mcprotocollib.protocol.data.game.setting.Difficulty; import java.util.HashMap; @@ -203,9 +202,9 @@ public abstract class WorldManager { try { Map<DataComponentType<?>, DataComponent<?, ?>> components = new HashMap<>(); Int2ObjectMaps.fastForEach(map, entry -> { - DataComponentType type = DataComponentType.from(entry.getIntKey()); + DataComponentType<?> type = DataComponentType.from(entry.getIntKey()); ByteBuf buf = Unpooled.wrappedBuffer(entry.getValue()); - DataComponent value = type.readDataComponent(ItemCodecHelper.INSTANCE, buf); + DataComponent<?, ?> value = type.readDataComponent(buf); components.put(type, value); }); return new DataComponents(components); diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/RecipeRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/RecipeRegistryLoader.java index 4cbd2ea47..74c36c00a 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/RecipeRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/RecipeRegistryLoader.java @@ -31,7 +31,7 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtType; import org.geysermc.geyser.inventory.recipe.GeyserRecipe; -import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodecHelper; +import org.geysermc.mcprotocollib.protocol.codec.MinecraftTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.recipe.Ingredient; @@ -81,10 +81,10 @@ public abstract class RecipeRegistryLoader implements RegistryLoader<String, Map // } // } - private static List<GeyserRecipe> getShapelessRecipes(List<NbtMap> recipes, MinecraftCodecHelper helper) { + private static List<GeyserRecipe> getShapelessRecipes(List<NbtMap> recipes) { List<GeyserRecipe> deserializedRecipes = new ObjectArrayList<>(recipes.size()); for (NbtMap recipe : recipes) { - ItemStack output = toItemStack(recipe.getCompound("output"), helper); + ItemStack output = toItemStack(recipe.getCompound("output")); List<NbtMap> rawInputs = recipe.getList("inputs", NbtType.COMPOUND); Ingredient[] javaInputs = new Ingredient[rawInputs.size()]; for (int i = 0; i < rawInputs.size(); i++) { @@ -95,16 +95,16 @@ public abstract class RecipeRegistryLoader implements RegistryLoader<String, Map return deserializedRecipes; } - private static List<GeyserRecipe> getShapedRecipes(List<NbtMap> recipes, MinecraftCodecHelper helper) { + private static List<GeyserRecipe> getShapedRecipes(List<NbtMap> recipes) { List<GeyserRecipe> deserializedRecipes = new ObjectArrayList<>(recipes.size()); for (NbtMap recipe : recipes) { - ItemStack output = toItemStack(recipe.getCompound("output"), helper); + ItemStack output = toItemStack(recipe.getCompound("output")); List<int[]> shape = recipe.getList("shape", NbtType.INT_ARRAY); // In the recipes mapping, each recipe is mapped by a number List<ItemStack> letterToRecipe = new ArrayList<>(); for (NbtMap rawInput : recipe.getList("inputs", NbtType.COMPOUND)) { - letterToRecipe.add(toItemStack(rawInput, helper)); + letterToRecipe.add(toItemStack(rawInput)); } Ingredient[] inputs = new Ingredient[shape.size() * shape.get(0).length]; @@ -126,14 +126,14 @@ public abstract class RecipeRegistryLoader implements RegistryLoader<String, Map * id is the Java item ID as an integer, components is an optional String of the data components serialized * as bytes in Base64 (so MCProtocolLib can parse the data). */ - private static ItemStack toItemStack(NbtMap nbt, MinecraftCodecHelper helper) { + private static ItemStack toItemStack(NbtMap nbt) { int id = nbt.getInt("id"); int count = nbt.getInt("count", 1); String componentsRaw = nbt.getString("components", null); if (componentsRaw != null) { byte[] bytes = Base64.getDecoder().decode(componentsRaw); ByteBuf buf = Unpooled.wrappedBuffer(bytes); - DataComponents components = helper.readDataComponentPatch(buf); + DataComponents components = MinecraftTypes.readDataComponentPatch(buf); return new ItemStack(id, count, components); } return new ItemStack(id, count); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java index d8547bbfc..742564a39 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java @@ -36,11 +36,10 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.registry.Registries; -import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodecHelper; +import org.geysermc.mcprotocollib.protocol.codec.MinecraftTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponent; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.ItemCodecHelper; import java.io.InputStream; import java.io.InputStreamReader; @@ -71,10 +70,9 @@ public final class DataComponentRegistryPopulator { String encodedValue = componentEntry.getValue().getAsString(); byte[] bytes = Base64.getDecoder().decode(encodedValue); ByteBuf buf = Unpooled.wrappedBuffer(bytes); - MinecraftCodecHelper helper = new MinecraftCodecHelper(); - int varInt = helper.readVarInt(buf); + int varInt = MinecraftTypes.readVarInt(buf); DataComponentType<?> dataComponentType = DataComponentType.from(varInt); - DataComponent<?, ?> dataComponent = dataComponentType.readDataComponent(ItemCodecHelper.INSTANCE, buf); + DataComponent<?, ?> dataComponent = dataComponentType.readDataComponent(buf); map.put(dataComponentType, dataComponent); } diff --git a/core/src/main/java/org/geysermc/geyser/session/DownstreamSession.java b/core/src/main/java/org/geysermc/geyser/session/DownstreamSession.java index 22827ccfa..a55f84ab2 100644 --- a/core/src/main/java/org/geysermc/geyser/session/DownstreamSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/DownstreamSession.java @@ -31,7 +31,6 @@ import net.kyori.adventure.text.Component; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.mcprotocollib.network.ClientSession; import org.geysermc.mcprotocollib.network.packet.Packet; -import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodecHelper; @Getter @RequiredArgsConstructor @@ -53,13 +52,4 @@ public class DownstreamSession { public boolean isClosed() { return !this.session.isConnected(); } - - /** - * Gets the codec helper for this session. - * - * @return the codec helper for this session - */ - public MinecraftCodecHelper getCodecHelper() { - return (MinecraftCodecHelper) this.session.getCodecHelper(); - } } 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 af3c8595e..f4b74be02 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 @@ -61,6 +61,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.mcprotocollib.protocol.codec.MinecraftTypes; import org.geysermc.mcprotocollib.protocol.data.game.chunk.BitStorage; import org.geysermc.mcprotocollib.protocol.data.game.chunk.ChunkSection; import org.geysermc.mcprotocollib.protocol.data.game.chunk.DataPalette; @@ -115,7 +116,7 @@ public class JavaLevelChunkWithLightTranslator extends PacketTranslator<Clientbo ByteBuf in = Unpooled.wrappedBuffer(packet.getChunkData()); boolean extendedCollisionNextSection = false; for (int sectionY = 0; sectionY < chunkSize; sectionY++) { - ChunkSection javaSection = session.getDownstream().getCodecHelper().readChunkSection(in); + ChunkSection javaSection = MinecraftTypes.readChunkSection(in); javaChunks[sectionY] = javaSection.getChunkData(); javaBiomes[sectionY] = javaSection.getBiomeData(); boolean extendedCollision = extendedCollisionNextSection; diff --git a/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java b/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java index 0b3d2c5e7..e01ea7cd3 100644 --- a/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java +++ b/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java @@ -212,7 +212,7 @@ public class ScoreboardIssueTests { }); // metadata set: invisible, custom name, custom name visible - context.translate(setEntityDataTranslator, new ClientboundSetEntityDataPacket(1298, new EntityMetadata[]{ + context.translate(setEntityDataTranslator, new ClientboundSetEntityDataPacket(1298, new EntityMetadata<?, ?>[]{ new ByteEntityMetadata(0, MetadataType.BYTE, (byte) 0x20), new ObjectEntityMetadata<>(2, MetadataType.OPTIONAL_CHAT, Optional.of(Component.text("tesss"))), new BooleanEntityMetadata(3, MetadataType.BOOLEAN, true) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e5e8a3faa..f74de4de0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,7 @@ protocol-common = "3.0.0.Beta5-20241213.160944-20" protocol-codec = "3.0.0.Beta5-20241213.160944-20" raknet = "1.0.0.CR3-20240416.144209-1" minecraftauth = "4.1.1" -mcprotocollib = "1.21.4-20250118.154631-17" +mcprotocollib = "1.21.4-20250121.131208-18" adventure = "4.14.0" adventure-platform = "4.3.0" junit = "5.9.2" From c666028eb695e616c7c75bd72a27e0eec3674b52 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Wed, 29 Jan 2025 00:42:44 +0100 Subject: [PATCH 141/165] Update Bedrock network library fixes https://github.com/GeyserMC/Geyser/issues/4971 --- 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 f74de4de0..2943521e0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,7 +13,7 @@ websocket = "1.5.1" protocol-connection = "3.0.0.Beta5-20241213.160944-20" protocol-common = "3.0.0.Beta5-20241213.160944-20" protocol-codec = "3.0.0.Beta5-20241213.160944-20" -raknet = "1.0.0.CR3-20240416.144209-1" +raknet = "1.0.0.CR3-20250128.101054-17" minecraftauth = "4.1.1" mcprotocollib = "1.21.4-20250121.131208-18" adventure = "4.14.0" From da6e2f678ba1d18f035061629254ba1c08b920ab Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Wed, 29 Jan 2025 18:18:14 +0100 Subject: [PATCH 142/165] Fix custom stone cutter recipes closes https://github.com/GeyserMC/Geyser/issues/5257, closes https://github.com/GeyserMC/Geyser/issues/5268 --- .../inventory/StonecutterContainer.java | 2 +- .../session/cache/tags/GeyserHolderSet.java | 20 ++++++++++++++----- .../java/JavaUpdateRecipesTranslator.java | 18 +++++++++-------- 3 files changed, 26 insertions(+), 14 deletions(-) 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 269a4fb7d..1eb115847 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/StonecutterContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/StonecutterContainer.java @@ -25,11 +25,11 @@ package org.geysermc.geyser.inventory; -import org.geysermc.mcprotocollib.protocol.data.game.inventory.ContainerType; import lombok.Getter; import lombok.Setter; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.mcprotocollib.protocol.data.game.inventory.ContainerType; public class StonecutterContainer extends Container { /** diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java b/core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java index c77f0a642..227436efc 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/tags/GeyserHolderSet.java @@ -33,6 +33,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.TagCache; import org.geysermc.geyser.session.cache.registry.JavaRegistryKey; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; import java.util.List; import java.util.Objects; @@ -54,15 +55,24 @@ public final class GeyserHolderSet<T> { private final int @Nullable [] holders; public GeyserHolderSet(JavaRegistryKey<T> registry, int @NonNull [] holders) { - this.registry = registry; - this.tag = null; - this.holders = holders; + this(registry, null, holders); } public GeyserHolderSet(JavaRegistryKey<T> registry, @NonNull Tag<T> tagId) { + this(registry, tagId, null); + } + + private GeyserHolderSet(JavaRegistryKey<T> registry, @Nullable Tag<T> tag, int @Nullable [] holders) { this.registry = registry; - this.tag = tagId; - this.holders = null; + this.tag = tag; + this.holders = holders; + } + + /** + * Constructs a {@link GeyserHolderSet} from a MCPL HolderSet. + */ + public static <T> GeyserHolderSet<T> fromHolderSet(JavaRegistryKey<T> registry, @NonNull HolderSet holderSet) { + return new GeyserHolderSet<>(registry, new Tag<>(registry, holderSet.getLocation()), holderSet.getHolders()); } /** 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 3872321af..db2d2d403 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 @@ -45,6 +45,8 @@ import org.geysermc.geyser.inventory.recipe.TrimRecipe; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.session.cache.registry.JavaRegistries; +import org.geysermc.geyser.session.cache.tags.GeyserHolderSet; import org.geysermc.geyser.translator.item.ItemTranslator; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; @@ -120,16 +122,16 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator<ClientboundUpd List<SelectableRecipe> stonecutterRecipes = packet.getStonecutterRecipes(); for (SelectableRecipe recipe : stonecutterRecipes) { // Hardcoding the heck out of this until we see different examples of how this works. - HolderSet ingredient = recipe.input().getValues(); - if (ingredient.getHolders() == null || ingredient.getHolders().length != 1) { - session.getGeyser().getLogger().debug("Ignoring stonecutter recipe for weird input: " + recipe); - continue; - } if (!(recipe.recipe() instanceof ItemStackSlotDisplay)) { - session.getGeyser().getLogger().debug("Ignoring stonecutter recipe for weird output: " + recipe); + session.getGeyser().getLogger().warning("Ignoring stonecutter recipe for weird output: " + recipe); continue; } - rawStonecutterData.computeIfAbsent(ingredient.getHolders()[0], $ -> new ArrayList<>()).add(recipe); + + int[] ingredients = GeyserHolderSet.fromHolderSet(JavaRegistries.ITEM, recipe.input().getValues()) + .resolveRaw(session.getTagCache()); + for (int ingredient : ingredients) { + rawStonecutterData.computeIfAbsent(ingredient, $ -> new ArrayList<>()).add(recipe); + } } Int2ObjectMap<GeyserStonecutterData> stonecutterRecipeMap = new Int2ObjectOpenHashMap<>(); @@ -142,7 +144,7 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator<ClientboundUpd for (SelectableRecipe recipe : data.getValue()) { // As of 1.16.4, all stonecutter recipes have one ingredient option HolderSet ingredient = recipe.input().getValues(); - int javaInput = ingredient.getHolders()[0]; + int javaInput = data.getIntKey(); ItemMapping mapping = session.getItemMappings().getMapping(javaInput); if (mapping.getJavaItem() == Items.AIR) { // Modded ? From f328e5bb6ba8e95349226b646b445cdd5fca1e49 Mon Sep 17 00:00:00 2001 From: rtm516 <rtm516@users.noreply.github.com> Date: Thu, 30 Jan 2025 01:34:07 +0000 Subject: [PATCH 143/165] Add new issue types to templates (#5312) * Add new issue types to templates * Update bug_report.yml * Update feature_request.yml --- .github/ISSUE_TEMPLATE/bug_report.yml | 3 ++- .github/ISSUE_TEMPLATE/feature_request.yml | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 036d838ef..ecdb8deed 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,11 +1,12 @@ name: Bug report description: Create a report to help us improve +type: Bug body: - type: markdown attributes: value: | Thanks for taking the time to fill out this bug report for Geyser! Fill out the following form to your best ability to help us fix the problem. - Only use this if you're absolutely sure that you found a bug and can reproduce it. For anything else, use: [our Discord server](https://discord.gg/geysermc), [the FAQ](https://github.com/GeyserMC/Geyser/wiki/FAQ) or the [Common Issues](https://github.com/GeyserMC/Geyser/wiki/Common-Issues). + Only use this if you're absolutely sure that you found a bug and can reproduce it. For anything else, use: [our Discord server](https://discord.gg/geysermc), [the FAQ](https://geysermc.org/wiki/geyser/faq) or the [Common Issues](https://geysermc.org/wiki/geyser/common-issues). - type: textarea attributes: label: Describe the bug diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index d0e42478b..872e30b8e 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,12 +1,13 @@ name: Feature request description: Suggest an idea for this project labels: "Feature Request" +type: Feature body: - type: markdown attributes: value: | Thanks for taking the time to fill out this feature request for Geyser! Please fill out the following form to your best ability to help us understand your feature request and significantly improve the chance of getting added. - For anything else than a feature request, use: [our Discord server](https://discord.gg/geysermc), [the FAQ](https://github.com/GeyserMC/Geyser/wiki/FAQ) or [the Common Issues](https://github.com/GeyserMC/Geyser/wiki/Common-Issues). + For anything else than a feature request, use: [our Discord server](https://discord.gg/geysermc), [the FAQ](https://geysermc.org/wiki/geyser/faq) or the [Common Issues](https://geysermc.org/wiki/geyser/common-issues). - type: textarea attributes: label: What feature do you want to see added? @@ -18,4 +19,4 @@ body: label: Are there any alternatives? description: List any alternatives you might have tried validations: - required: true \ No newline at end of file + required: true From ea13e588cd21a815cecf180b9e0bc3039b087e39 Mon Sep 17 00:00:00 2001 From: chris <github@onechris.mozmail.com> Date: Sun, 2 Feb 2025 15:16:34 +0100 Subject: [PATCH 144/165] Fix: non-vanilla custom blockstate registration (#5310) * Try fixing custom blockstate registration * another attempt; round two * register collisions * don't register block states twice --- .../custom/nonvanilla/JavaBlockItem.java | 7 -- .../custom/nonvanilla/JavaBlockState.java | 2 +- .../geyser/level/block/type/Block.java | 14 ++- .../geyser/registry/BlockRegistries.java | 2 +- .../populator/BlockRegistryPopulator.java | 70 +-------------- .../CustomBlockRegistryPopulator.java | 86 ++++++++++++++++++- 6 files changed, 101 insertions(+), 80 deletions(-) delete mode 100644 api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockItem.java diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockItem.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockItem.java deleted file mode 100644 index 5143246d9..000000000 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockItem.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.geysermc.geyser.api.block.custom.nonvanilla; - -import org.checkerframework.checker.index.qual.NonNegative; -import org.checkerframework.checker.nullness.qual.NonNull; - -public record JavaBlockItem(@NonNull String identifier, @NonNegative int javaId, @NonNegative int stackSize) { -} 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 0dd0d3b33..61b868cc3 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 @@ -70,7 +70,7 @@ public interface JavaBlockState { @Nullable String pistonBehavior(); /** - * Gets whether the block state has block entity + * Gets whether the block state has a block entity * * @return whether the block state has block entity * @deprecated Does not have an effect. If you were using this to diff --git a/core/src/main/java/org/geysermc/geyser/level/block/type/Block.java b/core/src/main/java/org/geysermc/geyser/level/block/type/Block.java index a005fc103..494946c4a 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/type/Block.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/type/Block.java @@ -240,7 +240,8 @@ public class Block { private Supplier<Item> pickItem; // We'll use this field after building - private Property<?>[] propertyKeys; + private Property<?>[] propertyKeys = null; + private @Nullable Integer javaId = null; /** * For states that we're just tracking for mirroring Java states. @@ -298,11 +299,18 @@ public class Block { return this; } + public Builder javaId(int javaId) { + this.javaId = javaId; + return this; + } + private List<BlockState> build(Block block) { if (states.isEmpty()) { - BlockState state = new BlockState(block, BlockRegistries.BLOCK_STATES.get().size()); + if (javaId == null) { + javaId = BlockRegistries.BLOCK_STATES.get().size(); + } + BlockState state = new BlockState(block, javaId); BlockRegistries.BLOCK_STATES.get().add(state); - propertyKeys = null; return List.of(state); } else if (states.size() == 1) { // We can optimize because we don't need to worry about combinations 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 521d67542..b7316605b 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -135,9 +135,9 @@ public class BlockRegistries { CustomSkullRegistryPopulator.populate(); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.PRE_INIT); CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.DEFINITION); - CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.NON_VANILLA_REGISTRATION); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.INIT_JAVA); COLLISIONS.load(); + CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.NON_VANILLA_REGISTRATION); CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.VANILLA_REGISTRATION); CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.CUSTOM_REGISTRATION); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.INIT_BEDROCK); 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 e86bfe7c4..cb002d6f0 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 @@ -32,8 +32,6 @@ import com.google.common.collect.Interner; import com.google.common.collect.Interners; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; -import it.unimi.dsi.fastutil.ints.IntOpenHashSet; -import it.unimi.dsi.fastutil.ints.IntSet; import it.unimi.dsi.fastutil.objects.Object2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; @@ -52,19 +50,14 @@ import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockState; import org.geysermc.geyser.api.block.custom.nonvanilla.JavaBlockState; -import org.geysermc.geyser.item.Items; import org.geysermc.geyser.level.block.Blocks; import org.geysermc.geyser.level.block.property.Properties; import org.geysermc.geyser.level.block.type.Block; import org.geysermc.geyser.level.block.type.BlockState; import org.geysermc.geyser.level.block.type.FlowerPotBlock; -import org.geysermc.geyser.level.physics.PistonBehavior; import org.geysermc.geyser.registry.BlockRegistries; -import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.type.BlockMappings; import org.geysermc.geyser.registry.type.GeyserBedrockBlock; -import org.geysermc.geyser.util.BlockUtils; -import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; import java.io.DataInputStream; import java.io.InputStream; @@ -72,7 +65,6 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.BitSet; -import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.Locale; @@ -114,8 +106,8 @@ public final class BlockRegistryPopulator { * Stores the raw blocks NBT until it is no longer needed. */ private static List<NbtMap> BLOCKS_NBT; - private static int MIN_CUSTOM_RUNTIME_ID = -1; - private static int JAVA_BLOCKS_SIZE = -1; + public static int MIN_CUSTOM_RUNTIME_ID = -1; + public static int JAVA_BLOCKS_SIZE = -1; private static void nullifyBlocksNbt() { BLOCKS_NBT = null; @@ -411,19 +403,6 @@ public final class BlockRegistryPopulator { throw new AssertionError("Unable to load Java block mappings", e); } - JAVA_BLOCKS_SIZE = BlockRegistries.BLOCK_STATES.get().size(); - - 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 < blocksNbt.size()) { - throw new RuntimeException("Non vanilla custom block state overrides runtime ID must start after the last vanilla block state (" + JAVA_BLOCKS_SIZE + ")"); - } - - JAVA_BLOCKS_SIZE = maxCustomRuntimeID + 1; // Runtime ids start at 0, so we need to add 1 - } - int javaRuntimeId = -1; for (BlockState javaBlockState : BlockRegistries.BLOCK_STATES.get()) { javaRuntimeId++; @@ -432,49 +411,8 @@ public final class BlockRegistryPopulator { BlockRegistries.JAVA_IDENTIFIER_TO_ID.register(javaId, javaRuntimeId); } - if (!BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().isEmpty()) { - IntSet usedNonVanillaRuntimeIDs = new IntOpenHashSet(); - - for (JavaBlockState javaBlockState : BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().keySet()) { - if (!usedNonVanillaRuntimeIDs.add(javaBlockState.javaId())) { - throw new RuntimeException("Duplicate runtime ID " + javaBlockState.javaId() + " for non vanilla Java block state " + javaBlockState.identifier()); - } - - String javaId = javaBlockState.identifier(); - int stateRuntimeId = javaBlockState.javaId(); - String pistonBehavior = javaBlockState.pistonBehavior(); - - Block.Builder builder = Block.builder() - .destroyTime(javaBlockState.blockHardness()) - .pushReaction(pistonBehavior == null ? PistonBehavior.NORMAL : PistonBehavior.getByName(pistonBehavior)); - if (!javaBlockState.canBreakWithHand()) { - builder.requiresCorrectToolForDrops(); - } - String cleanJavaIdentifier = BlockUtils.getCleanIdentifier(javaBlockState.identifier()); - String pickItem = javaBlockState.pickItem(); - Block block = new Block(cleanJavaIdentifier, builder) { - @Override - public ItemStack pickItem(BlockState state) { - if (this.item == null) { - this.item = Registries.JAVA_ITEM_IDENTIFIERS.get(pickItem); - if (this.item == null) { - GeyserImpl.getInstance().getLogger().warning("We could not find item " + pickItem - + " for getting the item for block " + javaBlockState.identifier()); - this.item = Items.AIR; - } - } - return new ItemStack(this.item.javaId()); - } - }; - block.setJavaId(javaBlockState.stateGroupId()); - - BlockRegistries.JAVA_BLOCKS.registerWithAnyIndex(javaBlockState.stateGroupId(), block, Blocks.AIR); - BlockRegistries.JAVA_IDENTIFIER_TO_ID.register(javaId, stateRuntimeId); - BlockRegistries.BLOCK_STATES.register(stateRuntimeId, new BlockState(block, stateRuntimeId)); - } - } - BLOCKS_NBT = blocksNbt; + JAVA_BLOCKS_SIZE = blocksNbt.size(); JsonNode blockInteractionsJson; try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResourceOrThrow("mappings/interactions.json")) { @@ -485,8 +423,6 @@ public final class BlockRegistryPopulator { BlockRegistries.INTERACTIVE.set(toBlockStateSet((ArrayNode) blockInteractionsJson.get("always_consumes"))); BlockRegistries.INTERACTIVE_MAY_BUILD.set(toBlockStateSet((ArrayNode) blockInteractionsJson.get("requires_may_build"))); - - BlockRegistries.BLOCK_STATES.freeze(); } private static BitSet toBlockStateSet(ArrayNode node) { 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 a43df3f52..46bfcb45e 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 @@ -27,6 +27,8 @@ package org.geysermc.geyser.registry.populator; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.ints.IntOpenHashSet; +import it.unimi.dsi.fastutil.ints.IntSet; import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.nbt.NbtMap; @@ -48,23 +50,38 @@ 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.item.Items; +import org.geysermc.geyser.level.block.Blocks; 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.GeyserGeometryComponent; import org.geysermc.geyser.level.block.GeyserMaterialInstance; +import org.geysermc.geyser.level.block.type.Block; +import org.geysermc.geyser.level.block.type.BlockState; +import org.geysermc.geyser.level.physics.BoundingBox; +import org.geysermc.geyser.level.physics.PistonBehavior; import org.geysermc.geyser.registry.BlockRegistries; +import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.mappings.MappingsConfigReader; import org.geysermc.geyser.registry.type.CustomSkull; +import org.geysermc.geyser.translator.collision.OtherCollision; +import org.geysermc.geyser.util.BlockUtils; import org.geysermc.geyser.util.MathUtils; +import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; import java.util.ArrayList; -import java.util.concurrent.atomic.AtomicInteger; +import java.util.Arrays; +import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; + +import static org.geysermc.geyser.registry.populator.BlockRegistryPopulator.JAVA_BLOCKS_SIZE; +import static org.geysermc.geyser.registry.populator.BlockRegistryPopulator.MIN_CUSTOM_RUNTIME_ID; public class CustomBlockRegistryPopulator { @@ -231,6 +248,73 @@ 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.isEmpty()) { + // Nothing left to register, freeze block state registry + BlockRegistries.BLOCK_STATES.freeze(); + return; + } + + 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 < BlockRegistries.BLOCK_STATES.get().size()) { + throw new RuntimeException("Non vanilla custom block state overrides runtime ID must start after the last vanilla block state (" + JAVA_BLOCKS_SIZE + ")"); + } + + JAVA_BLOCKS_SIZE = maxCustomRuntimeID + 1; // Runtime ids start at 0, so we need to add 1 + + // Now: Vanilla blocks are already loaded and registered; let's load non-vanilla properly too + IntSet usedNonVanillaRuntimeIDs = new IntOpenHashSet(); + + for (JavaBlockState javaBlockState : BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().keySet()) { + if (!usedNonVanillaRuntimeIDs.add(javaBlockState.javaId())) { + throw new RuntimeException("Duplicate runtime ID " + javaBlockState.javaId() + " for non vanilla Java block state " + javaBlockState.identifier()); + } + + String javaId = javaBlockState.identifier(); + int stateRuntimeId = javaBlockState.javaId(); + String pistonBehavior = javaBlockState.pistonBehavior(); + + Block.Builder builder = Block.builder() + .javaId(stateRuntimeId) + .destroyTime(javaBlockState.blockHardness()) + .pushReaction(pistonBehavior == null ? PistonBehavior.NORMAL : PistonBehavior.getByName(pistonBehavior)); + if (!javaBlockState.canBreakWithHand()) { + builder.requiresCorrectToolForDrops(); + } + String cleanJavaIdentifier = BlockUtils.getCleanIdentifier(javaBlockState.identifier()); + String pickItem = javaBlockState.pickItem(); + Block block = new Block(cleanJavaIdentifier, builder) { + @Override + public ItemStack pickItem(BlockState state) { + if (this.item == null) { + this.item = Registries.JAVA_ITEM_IDENTIFIERS.get(pickItem); + if (this.item == null) { + GeyserImpl.getInstance().getLogger().warning("We could not find item " + pickItem + + " for getting the item for block " + javaBlockState.identifier()); + this.item = Items.AIR; + } + } + return new ItemStack(this.item.javaId()); + } + }; + block.setJavaId(javaBlockState.stateGroupId()); + + BlockRegistries.JAVA_BLOCKS.registerWithAnyIndex(javaBlockState.stateGroupId(), block, Blocks.AIR); + BlockRegistries.JAVA_IDENTIFIER_TO_ID.register(javaId, stateRuntimeId); + + // TODO register different collision types? + BoundingBox[] geyserCollisions = Arrays.stream(javaBlockState.collision()) + .map(box -> new BoundingBox(box.middleX(), box.middleY(), box.middleZ(), + box.sizeX(), box.sizeY(), box.sizeZ())) + .toArray(BoundingBox[]::new); + OtherCollision collision = new OtherCollision(geyserCollisions); + BlockRegistries.COLLISIONS.registerWithAnyIndex(javaBlockState.javaId(), collision, collision); + } + + BlockRegistries.BLOCK_STATES.freeze(); + if (!NON_VANILLA_BLOCK_STATE_OVERRIDES.isEmpty()) { GeyserImpl.getInstance().getLogger().info("Registered " + NON_VANILLA_BLOCK_STATE_OVERRIDES.size() + " non-vanilla block overrides."); } From 0416b55959a16880d37f24545d0063e90fe51ce8 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Tue, 4 Feb 2025 16:57:37 +0100 Subject: [PATCH 145/165] Fix: Looms modifying default data components causing visual bugs Closes https://github.com/GeyserMC/Geyser/issues/5273 --- .../geyser/inventory/GeyserItemStack.java | 5 +++-- .../updater/AnvilInventoryUpdater.java | 5 ++--- .../inventory/BundleInventoryTranslator.java | 2 +- .../inventory/LoomInventoryTranslator.java | 19 ++++++++----------- 4 files changed, 14 insertions(+), 17 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 77ca7bfb5..c4a3542d1 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java @@ -50,6 +50,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.ItemSta import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; import java.util.HashMap; +import java.util.function.Supplier; @Data public class GeyserItemStack { @@ -169,9 +170,9 @@ public class GeyserItemStack { return value; } - public <T> T getComponentOrFallback(@NonNull DataComponentType<T> type, T def) { + public <T> T getComponentElseGet(@NonNull DataComponentType<T> type, Supplier<T> supplier) { T value = getComponent(type); - return value == null ? def : value; + return value == null ? supplier.get() : value; } public int getNetId() { 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 aadaeb356..8282607af 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 @@ -47,7 +47,6 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; import org.geysermc.mcprotocollib.protocol.data.game.item.component.ItemEnchantments; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.Unbreakable; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundRenameItemPacket; import java.util.List; @@ -420,7 +419,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater { } private int getRepairCost(GeyserItemStack itemStack) { - return itemStack.getComponentOrFallback(DataComponentType.REPAIR_COST, 0); + return itemStack.getComponentElseGet(DataComponentType.REPAIR_COST, () -> 0); } private boolean hasDurability(GeyserItemStack itemStack) { @@ -431,6 +430,6 @@ public class AnvilInventoryUpdater extends InventoryUpdater { } private int getDamage(GeyserItemStack itemStack) { - return itemStack.getComponentOrFallback(DataComponentType.DAMAGE, 0); + return itemStack.getComponentElseGet(DataComponentType.DAMAGE, () -> 0); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/BundleInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/BundleInventoryTranslator.java index 1b42e537f..bbe94ba95 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/BundleInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/BundleInventoryTranslator.java @@ -314,7 +314,7 @@ public final class BundleInventoryTranslator { return Fraction.ONE; } } - return Fraction.getFraction(1, itemStack.getComponentOrFallback(DataComponentType.MAX_STACK_SIZE, itemStack.asItem().defaultMaxStackSize())); + return Fraction.getFraction(1, itemStack.getComponentElseGet(DataComponentType.MAX_STACK_SIZE, () -> itemStack.asItem().defaultMaxStackSize())); } public static int capacityForItemStack(Fraction bundleWeight, GeyserItemStack itemStack) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java index 1fef4c4fd..998108154 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java @@ -93,10 +93,8 @@ public class LoomInventoryTranslator extends AbstractBlockInventoryTranslator { PATTERN_TO_INDEX.put("vhr", index++); PATTERN_TO_INDEX.put("hhb", index++); PATTERN_TO_INDEX.put("bo", index++); - index++; // Bordure indented, does not appear to exist in Bedrock? PATTERN_TO_INDEX.put("gra", index++); PATTERN_TO_INDEX.put("gru", index); - // Bricks do not appear to be a pattern on Bedrock, either } public LoomInventoryTranslator() { @@ -120,7 +118,7 @@ public class LoomInventoryTranslator extends AbstractBlockInventoryTranslator { @Override protected boolean shouldHandleRequestFirst(ItemStackRequestAction action, Inventory inventory) { - // If the LOOM_MATERIAL slot is not empty, we are crafting a pattern that does not come from an item + // If the LOOM_MATERIAL slot is empty, we are crafting a pattern that does not come from an item return action.getType() == ItemStackRequestActionType.CRAFT_LOOM && inventory.getItem(2).isEmpty(); } @@ -135,10 +133,6 @@ public class LoomInventoryTranslator extends AbstractBlockInventoryTranslator { return rejectRequest(request); } - // Get the patterns compound tag - List<NbtMap> newBlockEntityTag = craftData.getResultItems()[0].getTag().getList("Patterns", NbtType.COMPOUND); - // Get the pattern that the Bedrock client requests - the last pattern in the Patterns list - NbtMap pattern = newBlockEntityTag.get(newBlockEntityTag.size() - 1); String bedrockPattern = ((CraftLoomAction) headerData).getPatternId(); // Get the Java index of this pattern @@ -146,6 +140,12 @@ public class LoomInventoryTranslator extends AbstractBlockInventoryTranslator { if (index == -1) { return rejectRequest(request); } + + // Get the patterns compound tag + List<NbtMap> newBlockEntityTag = craftData.getResultItems()[0].getTag().getList("Patterns", NbtType.COMPOUND); + // Get the pattern that the Bedrock client requests - the last pattern in the Patterns list + NbtMap pattern = newBlockEntityTag.get(newBlockEntityTag.size() - 1); + // Java's formula: 4 * row + col // And the Java loom window has a fixed row/width of four // So... Number / 4 = row (so we don't have to bother there), and number % 4 is our column, which leads us back to our index. :) @@ -156,10 +156,7 @@ public class LoomInventoryTranslator extends AbstractBlockInventoryTranslator { inputCopy.setNetId(session.getNextItemNetId()); BannerPatternLayer bannerPatternLayer = BannerItem.getJavaBannerPattern(session, pattern); // TODO if (bannerPatternLayer != null) { - List<BannerPatternLayer> patternsList = inputCopy.getComponent(DataComponentType.BANNER_PATTERNS); - if (patternsList == null) { - patternsList = new ArrayList<>(); - } + List<BannerPatternLayer> patternsList = new ArrayList<>(inputCopy.getComponentElseGet(DataComponentType.BANNER_PATTERNS, ArrayList::new)); patternsList.add(bannerPatternLayer); inputCopy.getOrCreateComponents().put(DataComponentType.BANNER_PATTERNS, patternsList); } From b96f9157e9ebb7aca2409620ea3c75964cb09db1 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Thu, 6 Feb 2025 18:40:32 +0100 Subject: [PATCH 146/165] Fix: Use real barrels whenever possible instead of fak chest workaround Fixes https://github.com/GeyserMC/Geyser/issues/5292, fixes https://github.com/GeyserMC/Geyser/issues/5294 --- .../chest/SingleChestInventoryTranslator.java | 7 +++---- .../org/geysermc/geyser/util/InventoryUtils.java | 12 ++++++++++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/SingleChestInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/SingleChestInventoryTranslator.java index 264b2eb29..94bdeb281 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/SingleChestInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/SingleChestInventoryTranslator.java @@ -38,15 +38,14 @@ import org.geysermc.geyser.session.GeyserSession; public class SingleChestInventoryTranslator extends ChestInventoryTranslator { private final InventoryHolder holder; - // TODO add barrel??? public SingleChestInventoryTranslator(int size) { super(size, 27); this.holder = new BlockInventoryHolder(Blocks.CHEST.defaultBlockState().withValue(Properties.CHEST_TYPE, ChestType.SINGLE), ContainerType.CONTAINER, - Blocks.ENDER_CHEST, Blocks.TRAPPED_CHEST) { + Blocks.ENDER_CHEST, Blocks.TRAPPED_CHEST, Blocks.BARREL) { @Override protected boolean isValidBlock(BlockState blockState) { - if (blockState.is(Blocks.ENDER_CHEST)) { - // Can't have double ender chests + if (blockState.is(Blocks.ENDER_CHEST) || blockState.is(Blocks.BARREL)) { + // Can't have double ender chests or barrels return true; } 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 b71caa1dc..042f37a89 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java @@ -45,6 +45,7 @@ import org.geysermc.geyser.inventory.recipe.GeyserShapedRecipe; import org.geysermc.geyser.inventory.recipe.GeyserShapelessRecipe; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.level.BedrockDimension; +import org.geysermc.geyser.level.block.type.BlockState; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.session.GeyserSession; @@ -173,15 +174,22 @@ public class InventoryUtils { if (position.getY() < minY) { return null; } - if (position.getY() >= maxY) { + if (position.getY() >= maxY || !canUseWorldSpace(session, position)) { position = flatPlayerPosition.sub(0, 4, 0); - if (position.getY() >= maxY) { + if (position.getY() >= maxY || !canUseWorldSpace(session, position)) { return null; } } return position; } + @SuppressWarnings("BooleanMethodIsAlwaysInverted") + private static boolean canUseWorldSpace(GeyserSession session, Vector3i position) { + BlockState state = session.getGeyser().getWorldManager().blockAt(session, position); + // Block entities require more data to be restored; so let's avoid using these positions + return state.block().blockEntityType() == null; + } + public static void updateCursor(GeyserSession session) { InventorySlotPacket cursorPacket = new InventorySlotPacket(); cursorPacket.setContainerId(ContainerId.UI); From c98796aeb6fa121f33f598dfa46a09bb117c7531 Mon Sep 17 00:00:00 2001 From: Roch Blondiaux <68775690+RochBlondiaux@users.noreply.github.com> Date: Tue, 11 Feb 2025 18:03:31 +0100 Subject: [PATCH 147/165] Implemented a way to close forms from floodgate (#5247) * feat: send close form packet when receiving empty form data * use session#closeForm --------- Co-authored-by: Roch Blonndiaux <contact@roch-blondiaux.com> Co-authored-by: onebeastchris <github@onechris.mozmail.com> --- .../protocol/java/JavaCustomPayloadTranslator.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java index c3108167b..d5c3c246c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java @@ -67,6 +67,12 @@ public class JavaCustomPayloadTranslator extends PacketTranslator<ClientboundCus session.ensureInEventLoop(() -> { byte[] data = packet.getData(); + // If the data is empty, we just need to close the form + if (data.length == 0) { + session.closeForm(); + return; + } + // receive: first byte is form type, second and third are the id, remaining is the form data // respond: first and second byte id, remaining is form response data @@ -96,7 +102,6 @@ public class JavaCustomPayloadTranslator extends PacketTranslator<ClientboundCus }); session.sendForm(form); }); - } else if (channel.equals(PluginMessageChannels.TRANSFER)) { session.ensureInEventLoop(() -> { byte[] data = packet.getData(); From b8477aa40190172ce56031d15edbf17f69e74bb6 Mon Sep 17 00:00:00 2001 From: Roman Alexander <romanalexander@users.noreply.github.com> Date: Wed, 12 Feb 2025 03:38:24 +0900 Subject: [PATCH 148/165] 1.21.60 (#5325) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * initial changes * More work on 1.21.60's fun changes * I misread 😅 * Use 1.21.60 mappings for updated item components * Fix: Creative up/down flight --------- Co-authored-by: onebeastchris <github@onechris.mozmail.com> --- .../java/org/geysermc/geyser/Constants.java | 3 - .../java/org/geysermc/geyser/GeyserImpl.java | 51 - .../geyser/item/GeyserCustomMappingData.java | 3 +- .../geysermc/geyser/network/GameProtocol.java | 14 +- .../geyser/network/LoggingPacketHandler.java | 12 +- .../registry/PacketTranslatorRegistry.java | 2 + .../populator/BlockRegistryPopulator.java | 36 +- .../CreativeItemRegistryPopulator.java | 48 +- .../CustomItemRegistryPopulator.java | 17 +- .../populator/ItemRegistryPopulator.java | 141 +- .../registry/type/GeyserItemDefinition.java | 49 - .../geyser/registry/type/ItemMappings.java | 8 +- .../type/NonVanillaItemRegistration.java | 5 +- .../geyser/registry/type/PaletteItem.java | 4 +- .../geyser/session/GeyserSession.java | 11 +- .../inventory/PlayerInventoryTranslator.java | 10 +- .../resources/bedrock/biome_definitions.dat | Bin 37891 -> 39004 bytes .../bedrock/block_palette.1_21_60.nbt | Bin 0 -> 193020 bytes .../bedrock/creative_items.1_21_60.json | 8917 +++++++++++++ .../resources/bedrock/item_components.nbt | Bin 0 -> 12649 bytes .../resources/bedrock/item_tags.1_21_60.json | 829 ++ .../bedrock/runtime_item_states.1_21_60.json | 10730 ++++++++++++++++ core/src/main/resources/languages | 2 +- core/src/main/resources/mappings | 2 +- gradle/libs.versions.toml | 6 +- 25 files changed, 20694 insertions(+), 206 deletions(-) delete mode 100644 core/src/main/java/org/geysermc/geyser/registry/type/GeyserItemDefinition.java create mode 100644 core/src/main/resources/bedrock/block_palette.1_21_60.nbt create mode 100644 core/src/main/resources/bedrock/creative_items.1_21_60.json create mode 100644 core/src/main/resources/bedrock/item_components.nbt create mode 100644 core/src/main/resources/bedrock/item_tags.1_21_60.json create mode 100644 core/src/main/resources/bedrock/runtime_item_states.1_21_60.json diff --git a/core/src/main/java/org/geysermc/geyser/Constants.java b/core/src/main/java/org/geysermc/geyser/Constants.java index 7f00075d8..2b58e7e84 100644 --- a/core/src/main/java/org/geysermc/geyser/Constants.java +++ b/core/src/main/java/org/geysermc/geyser/Constants.java @@ -36,9 +36,6 @@ public final class Constants { public static final String FLOODGATE_DOWNLOAD_LOCATION = "https://geysermc.org/download#floodgate"; public static final String GEYSER_DOWNLOAD_LOCATION = "https://geysermc.org/download"; - - @Deprecated - static final String SAVED_REFRESH_TOKEN_FILE = "saved-refresh-tokens.json"; static final String SAVED_AUTH_CHAINS_FILE = "saved-auth-chains.json"; public static final String GEYSER_CUSTOM_NAMESPACE = "geyser_custom"; diff --git a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java index 5171c0633..e81d528aa 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java @@ -29,7 +29,6 @@ import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.gson.Gson; import io.netty.channel.epoll.Epoll; import io.netty.util.NettyRuntime; import io.netty.util.concurrent.DefaultThreadFactory; @@ -39,8 +38,6 @@ import lombok.Getter; import lombok.Setter; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; -import net.raphimc.minecraftauth.step.java.session.StepFullJavaSession; -import net.raphimc.minecraftauth.step.msa.StepMsaToken; import org.checkerframework.checker.nullness.qual.MonotonicNonNull; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -99,7 +96,6 @@ import org.geysermc.geyser.translator.text.MessageTranslator; import org.geysermc.geyser.util.AssetUtils; import org.geysermc.geyser.util.CooldownUtils; import org.geysermc.geyser.util.Metrics; -import org.geysermc.geyser.util.MinecraftAuthLogger; import org.geysermc.geyser.util.NewsHandler; import org.geysermc.geyser.util.VersionCheckUtils; import org.geysermc.geyser.util.WebUtils; @@ -566,53 +562,6 @@ public class GeyserImpl implements GeyserApi, EventRegistrar { // May be written/read to on multiple threads from each GeyserSession as well as writing the config savedAuthChains = new ConcurrentHashMap<>(); - // TODO Remove after a while - just a migration help - //noinspection deprecation - File refreshTokensFile = bootstrap.getSavedUserLoginsFolder().resolve(Constants.SAVED_REFRESH_TOKEN_FILE).toFile(); - if (refreshTokensFile.exists()) { - logger.info("Migrating refresh tokens to auth chains..."); - TypeReference<Map<String, String>> type = new TypeReference<>() { }; - Map<String, String> refreshTokens = null; - try { - refreshTokens = JSON_MAPPER.readValue(refreshTokensFile, type); - } catch (IOException e) { - // ignored - we'll just delete this file :)) - } - - if (refreshTokens != null) { - List<String> validUsers = config.getSavedUserLogins(); - final Gson gson = new Gson(); - for (Map.Entry<String, String> entry : refreshTokens.entrySet()) { - String user = entry.getKey(); - if (!validUsers.contains(user)) { - continue; - } - - // Migrate refresh tokens to auth chains - try { - StepFullJavaSession javaSession = PendingMicrosoftAuthentication.AUTH_FLOW.apply(false, 10); - StepFullJavaSession.FullJavaSession fullJavaSession = javaSession.getFromInput( - MinecraftAuthLogger.INSTANCE, - PendingMicrosoftAuthentication.AUTH_CLIENT, - new StepMsaToken.RefreshToken(entry.getValue()) - ); - - String authChain = gson.toJson(javaSession.toJson(fullJavaSession)); - savedAuthChains.put(user, authChain); - } catch (Exception e) { - GeyserImpl.getInstance().getLogger().warning("Could not migrate " + entry.getKey() + " to an auth chain! " + - "They will need to sign in the next time they join Geyser."); - } - - // Ensure the new additions are written to the file - scheduleAuthChainsWrite(); - } - } - - // Finally: Delete it. Goodbye! - refreshTokensFile.delete(); - } - File authChainsFile = bootstrap.getSavedUserLoginsFolder().resolve(Constants.SAVED_AUTH_CHAINS_FILE).toFile(); if (authChainsFile.exists()) { TypeReference<Map<String, String>> type = new TypeReference<>() { }; 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 d71f2e548..22c457179 100644 --- a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomMappingData.java +++ b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomMappingData.java @@ -26,7 +26,6 @@ package org.geysermc.geyser.item; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; -import org.cloudburstmc.protocol.bedrock.data.inventory.ComponentItemData; -public record GeyserCustomMappingData(ComponentItemData componentItemData, ItemDefinition itemDefinition, String stringId, int integerId) { +public record GeyserCustomMappingData(ItemDefinition itemDefinition, String stringId, int integerId) { } 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 7aaeef87d..8625dfac5 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 org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748; import org.cloudburstmc.protocol.bedrock.codec.v766.Bedrock_v766; +import org.cloudburstmc.protocol.bedrock.codec.v776.Bedrock_v776; import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodec; @@ -47,8 +48,8 @@ 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 = CodecProcessor.processCodec(Bedrock_v766.CODEC.toBuilder() - .minecraftVersion("1.21.51") + public static final BedrockCodec DEFAULT_BEDROCK_CODEC = CodecProcessor.processCodec(Bedrock_v776.CODEC.toBuilder() + .minecraftVersion("1.21.60") .build()); /** @@ -66,9 +67,10 @@ public final class GameProtocol { SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v748.CODEC.toBuilder() .minecraftVersion("1.21.40 - 1.21.44") .build())); - SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC.toBuilder() + SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v766.CODEC.toBuilder() .minecraftVersion("1.21.50 - 1.21.51") - .build()); + .build())); + SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC); } /** @@ -91,6 +93,10 @@ public final class GameProtocol { return session.getUpstream().getProtocolVersion() == Bedrock_v748.CODEC.getProtocolVersion(); } + public static boolean isPreCreativeInventoryRewrite(int protocolVersion) { + return protocolVersion < 776; + } + /** * 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 910f76ffb..2d8db9517 100644 --- a/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java @@ -896,4 +896,14 @@ public class LoggingPacketHandler implements BedrockPacketHandler { public PacketSignal handle(TrimDataPacket packet) { return defaultHandler(packet); } -} \ No newline at end of file + + @Override + public PacketSignal handle(MovementPredictionSyncPacket packet) { + return defaultHandler(packet); + } + + @Override + public PacketSignal handle(ServerboundDiagnosticsPacket packet) { + return defaultHandler(packet); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/PacketTranslatorRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/PacketTranslatorRegistry.java index e81935edf..3fd79b8a6 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/PacketTranslatorRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/PacketTranslatorRegistry.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.registry; +import org.cloudburstmc.protocol.bedrock.packet.ServerboundDiagnosticsPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundDelimiterPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundTabListPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.level.ClientboundChunkBatchStartPacket; @@ -49,6 +50,7 @@ public class PacketTranslatorRegistry<T> extends AbstractMappedRegistry<Class<? IGNORED_PACKETS.add(ClientboundDelimiterPacket.class); // Not implemented, spams logs IGNORED_PACKETS.add(ClientboundLightUpdatePacket.class); // Light is handled on Bedrock for us IGNORED_PACKETS.add(ClientboundTabListPacket.class); // Cant be implemented in Bedrock + IGNORED_PACKETS.add(ServerboundDiagnosticsPacket.class); // spammy } protected PacketTranslatorRegistry() { 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 cb002d6f0..29591ce9e 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 @@ -44,6 +44,7 @@ import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.nbt.NbtUtils; import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748; import org.cloudburstmc.protocol.bedrock.codec.v766.Bedrock_v766; +import org.cloudburstmc.protocol.bedrock.codec.v776.Bedrock_v776; import org.cloudburstmc.protocol.bedrock.data.BlockPropertyData; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.geysermc.geyser.GeyserImpl; @@ -116,7 +117,40 @@ public final class BlockRegistryPopulator { private static void registerBedrockBlocks() { var blockMappers = ImmutableMap.<ObjectIntPair<String>, Remapper>builder() .put(ObjectIntPair.of("1_21_40", Bedrock_v748.CODEC.getProtocolVersion()), Conversion766_748::remapBlock) - .put(ObjectIntPair.of("1_21_50", Bedrock_v766.CODEC.getProtocolVersion()), tag -> tag) + .put(ObjectIntPair.of("1_21_50", Bedrock_v766.CODEC.getProtocolVersion()), tag -> tag) // TODO: Finish me + .put(ObjectIntPair.of("1_21_60", Bedrock_v776.CODEC.getProtocolVersion()), tag -> { + final String name = tag.getString("name"); + if (name.equals("minecraft:creaking_heart") && tag.getCompound("states").containsKey("active")) { + NbtMapBuilder builder = tag.getCompound("states").toBuilder(); + builder.remove("active"); + builder.putString("creaking_heart_state", "awake"); + NbtMap states = builder.build(); + return tag.toBuilder().putCompound("states", states).build(); + } + if ((name.endsWith("_door") || name.endsWith("fence_gate")) && tag.getCompound("states").containsKey("direction")) { + NbtMapBuilder builder = tag.getCompound("states").toBuilder(); + Integer directionCardinality = (Integer) builder.remove("direction"); + switch (directionCardinality) { + case 0: + builder.putString("minecraft:cardinal_direction", "south"); + break; + case 1: + builder.putString("minecraft:cardinal_direction", "west"); + break; + case 2: + builder.putString( "minecraft:cardinal_direction" , "north"); + break; + case 3: + builder.putString("minecraft:cardinal_direction", "east"); + break; + default: + throw new AssertionError("Invalid direction: " + directionCardinality); + } + NbtMap states = builder.build(); + return tag.toBuilder().putCompound("states", states).build(); + } + return 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/CreativeItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CreativeItemRegistryPopulator.java index 01dcd38a6..633957f8e 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 @@ -31,6 +31,9 @@ import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtUtils; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; +import org.cloudburstmc.protocol.bedrock.data.inventory.CreativeItemCategory; +import org.cloudburstmc.protocol.bedrock.data.inventory.CreativeItemData; +import org.cloudburstmc.protocol.bedrock.data.inventory.CreativeItemGroup; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; @@ -42,11 +45,13 @@ import org.geysermc.geyser.registry.type.GeyserMappingItem; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; +import java.util.ArrayList; import java.util.Base64; import java.util.List; +import java.util.Locale; import java.util.Map; +import java.util.function.BiConsumer; import java.util.function.BiPredicate; -import java.util.function.Consumer; public class CreativeItemRegistryPopulator { private static final List<BiPredicate<String, Integer>> JAVA_ONLY_ITEM_FILTER = List.of( @@ -54,7 +59,42 @@ public class CreativeItemRegistryPopulator { (identifier, data) -> identifier.equals("minecraft:empty_map") && data == 2 ); - static void populate(ItemRegistryPopulator.PaletteVersion palette, Map<String, ItemDefinition> definitions, Map<String, GeyserMappingItem> items, Consumer<ItemData.Builder> itemConsumer) { + static List<CreativeItemGroup> readCreativeItemGroups(ItemRegistryPopulator.PaletteVersion palette, List<CreativeItemData> creativeItemData) { + GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); + + JsonNode creativeItemEntries; + try (InputStream stream = bootstrap.getResourceOrThrow(String.format("bedrock/creative_items.%s.json", palette.version()))) { + creativeItemEntries = GeyserImpl.JSON_MAPPER.readTree(stream).get("groups"); + } catch (Exception e) { + throw new AssertionError("Unable to load creative item groups", e); + } + + List<CreativeItemGroup> creativeItemGroups = new ArrayList<>(); + for (JsonNode creativeItemEntry : creativeItemEntries) { + CreativeItemCategory category = CreativeItemCategory.valueOf(creativeItemEntry.get("category").asText().toUpperCase(Locale.ROOT)); + String name = creativeItemEntry.get("name").asText(); + + JsonNode icon = creativeItemEntry.get("icon"); + String identifier = icon.get("id").asText(); + + ItemData itemData; + if (identifier.equals("minecraft:air")) { + itemData = ItemData.AIR; + } else { + itemData = creativeItemData.stream() + .map(CreativeItemData::getItem) + .filter(item -> item.getDefinition().getIdentifier().equals(identifier)) + .findFirst() + .orElseThrow(); + } + + creativeItemGroups.add(new CreativeItemGroup(category, name, itemData)); + } + + return creativeItemGroups; + } + + static void populate(ItemRegistryPopulator.PaletteVersion palette, Map<String, ItemDefinition> definitions, Map<String, GeyserMappingItem> items, BiConsumer<ItemData.Builder, Integer> itemConsumer) { GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); // Load creative items @@ -72,7 +112,9 @@ public class CreativeItemRegistryPopulator { continue; } - itemConsumer.accept(itemBuilder); + int groupId = itemNode.get("groupId") != null ? itemNode.get("groupId").asInt() : 0; + + itemConsumer.accept(itemBuilder, groupId); } } 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 ec1e16e79..cd19ab147 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 @@ -33,7 +33,6 @@ import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.SimpleItemDefinition; -import org.cloudburstmc.protocol.bedrock.data.inventory.ComponentItemData; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.api.item.custom.CustomRenderOffsets; @@ -106,12 +105,10 @@ public class CustomItemRegistryPopulator { } 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, protocolVersion); - ComponentItemData componentItemData = new ComponentItemData(customItemName, builder.build()); + ItemDefinition itemDefinition = new SimpleItemDefinition(customItemName, bedrockId, 1, true, builder.build()); - return new GeyserCustomMappingData(componentItemData, itemDefinition, customItemName, bedrockId); + return new GeyserCustomMappingData(itemDefinition, customItemName, bedrockId); } static boolean initialCheck(String identifier, CustomItemData item, Map<String, GeyserMappingItem> mappings) { @@ -142,9 +139,11 @@ public class CustomItemRegistryPopulator { Item item = new Item(customIdentifier, Item.builder().components(components)); Items.register(item, customItemData.javaId()); + NbtMapBuilder builder = createComponentNbt(customItemData, customItemData.identifier(), customItemId, + customItemData.isHat(), customItemData.displayHandheld(), protocolVersion); ItemMapping customItemMapping = ItemMapping.builder() .bedrockIdentifier(customIdentifier) - .bedrockDefinition(new SimpleItemDefinition(customIdentifier, customItemId, true)) + .bedrockDefinition(new SimpleItemDefinition(customIdentifier, customItemId, 1, true, builder.build())) .bedrockData(0) .bedrockBlockDefinition(null) .toolType(customItemData.toolType()) @@ -153,11 +152,7 @@ public class CustomItemRegistryPopulator { .javaItem(item) .build(); - NbtMapBuilder builder = createComponentNbt(customItemData, customItemData.identifier(), customItemId, - customItemData.isHat(), customItemData.displayHandheld(), protocolVersion); - ComponentItemData componentItemData = new ComponentItemData(customIdentifier, builder.build()); - - return new NonVanillaItemRegistration(componentItemData, item, customItemMapping); + return new NonVanillaItemRegistration(item, customItemMapping); } private static NbtMapBuilder createComponentNbt(CustomItemData customItemData, Item javaItem, GeyserMappingItem mapping, 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 f7b45ba1d..6e269b5a3 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 @@ -47,10 +47,12 @@ import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.nbt.NbtUtils; import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748; import org.cloudburstmc.protocol.bedrock.codec.v766.Bedrock_v766; +import org.cloudburstmc.protocol.bedrock.codec.v776.Bedrock_v776; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.SimpleItemDefinition; -import org.cloudburstmc.protocol.bedrock.data.inventory.ComponentItemData; +import org.cloudburstmc.protocol.bedrock.data.inventory.CreativeItemData; +import org.cloudburstmc.protocol.bedrock.data.inventory.CreativeItemGroup; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.Constants; import org.geysermc.geyser.GeyserBootstrap; @@ -68,6 +70,7 @@ import org.geysermc.geyser.item.components.Rarity; import org.geysermc.geyser.item.type.BlockItem; import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.level.block.property.Properties; +import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.type.BlockMappings; @@ -147,6 +150,7 @@ public class ItemRegistryPopulator { List<PaletteVersion> paletteVersions = new ArrayList<>(2); paletteVersions.add(new PaletteVersion("1_21_40", Bedrock_v748.CODEC.getProtocolVersion(), itemFallbacks, (item, mapping) -> mapping)); paletteVersions.add(new PaletteVersion("1_21_50", Bedrock_v766.CODEC.getProtocolVersion())); + paletteVersions.add(new PaletteVersion("1_21_60", Bedrock_v776.CODEC.getProtocolVersion())); GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); @@ -161,7 +165,8 @@ public class ItemRegistryPopulator { } NbtMap vanillaComponents; - try (InputStream stream = bootstrap.getResourceOrThrow("mappings/item_components.nbt")) { + // TODO e.g. breeze rod icon does not load with our modified item components + try (InputStream stream = bootstrap.getResourceOrThrow("bedrock/item_components.nbt")) { vanillaComponents = (NbtMap) NbtUtils.createGZIPReader(stream, true, true).readTag(); } catch (Exception e) { throw new AssertionError("Unable to load Bedrock item components", e); @@ -195,7 +200,8 @@ public class ItemRegistryPopulator { // Used for custom items int nextFreeBedrockId = 0; - List<ComponentItemData> componentItemData = new ObjectArrayList<>(); + // TODO yeet + List<ItemDefinition> componentItemData = new ObjectArrayList<>(); Int2ObjectMap<ItemDefinition> registry = new Int2ObjectOpenHashMap<>(); Map<String, ItemDefinition> definitions = new Object2ObjectLinkedOpenHashMap<>(); @@ -206,7 +212,15 @@ public class ItemRegistryPopulator { nextFreeBedrockId = id + 1; } - ItemDefinition definition = new SimpleItemDefinition(entry.getName().intern(), id, false); + NbtMap components = null; + if (entry.isComponentBased()) { + components = vanillaComponents.getCompound(entry.getName()); + if (components == null) { + throw new RuntimeException("Could not find vanilla components for vanilla component based item! " + entry.getName()); + } + } + + ItemDefinition definition = new SimpleItemDefinition(entry.getName().intern(), id, entry.getVersion(), entry.isComponentBased(), components); definitions.put(entry.getName(), definition); registry.put(definition.getRuntimeId(), definition); } @@ -222,7 +236,7 @@ public class ItemRegistryPopulator { // Temporary mapping to create stored items Map<Item, ItemMapping> javaItemToMapping = new Object2ObjectOpenHashMap<>(); - List<ItemData> creativeItems = new ArrayList<>(); + List<CreativeItemData> creativeItems = new ArrayList<>(); Set<String> noBlockDefinitions = new ObjectOpenHashSet<>(); // Fix: Usage of structure blocks/voids in recipes @@ -231,9 +245,9 @@ public class ItemRegistryPopulator { noBlockDefinitions.add("minecraft:structure_void"); AtomicInteger creativeNetId = new AtomicInteger(); - CreativeItemRegistryPopulator.populate(palette, definitions, items, itemBuilder -> { + CreativeItemRegistryPopulator.populate(palette, definitions, items, (itemBuilder, groupId) -> { ItemData item = itemBuilder.netId(creativeNetId.incrementAndGet()).build(); - creativeItems.add(item); + creativeItems.add(new CreativeItemData(item, item.getNetId(), groupId)); if (item.getBlockDefinition() != null) { String identifier = item.getDefinition().getIdentifier(); @@ -255,6 +269,13 @@ public class ItemRegistryPopulator { } }); + List<CreativeItemGroup> creativeItemGroups; + if (GameProtocol.isPreCreativeInventoryRewrite(palette.protocolVersion)) { + creativeItemGroups = new ArrayList<>(); + } else { + creativeItemGroups = CreativeItemRegistryPopulator.readCreativeItemGroups(palette, creativeItems); + } + BlockMappings blockMappings = BlockRegistries.BLOCKS.forVersion(palette.protocolVersion()); Set<Item> javaOnlyItems = new ObjectOpenHashSet<>(); @@ -410,13 +431,13 @@ public class ItemRegistryPopulator { } for (int j = 0; j < creativeItems.size(); j++) { - ItemData itemData = creativeItems.get(j); - if (itemData.getDefinition().equals(definition)) { - if (itemData.getDamage() != 0) { + CreativeItemData itemData = creativeItems.get(j); + if (itemData.getItem().getDefinition().equals(definition)) { + if (itemData.getItem().getDamage() != 0) { break; } - NbtMap states = ((GeyserBedrockBlock) itemData.getBlockDefinition()).getState().getCompound("states"); + NbtMap states = ((GeyserBedrockBlock) itemData.getItem().getBlockDefinition()).getState().getCompound("states"); boolean valid = true; for (Map.Entry<String, Object> nbtEntry : requiredBlockStates.entrySet()) { @@ -432,19 +453,25 @@ public class ItemRegistryPopulator { int customProtocolId = nextFreeBedrockId++; mappingItem = mappingItem.withBedrockData(customProtocolId); bedrockIdentifier = customBlockData.identifier(); - definition = new SimpleItemDefinition(bedrockIdentifier, customProtocolId, true); + definition = new SimpleItemDefinition(bedrockIdentifier, customProtocolId, 1, false, null); registry.put(customProtocolId, definition); customBlockItemDefinitions.put(customBlockData, definition); customIdMappings.put(customProtocolId, bedrockIdentifier); - - creativeItems.set(j, itemData.toBuilder() + + CreativeItemData newData = new CreativeItemData(itemData.getItem().toBuilder() .definition(definition) .blockDefinition(bedrockBlock) .netId(itemData.getNetId()) .count(1) - .build()); + .build(), itemData.getNetId(), 0); + + creativeItems.set(j, newData); } else { - creativeItems.set(j, itemData.toBuilder().blockDefinition(bedrockBlock).build()); + CreativeItemData creativeItemData = new CreativeItemData(itemData.getItem().toBuilder() + .blockDefinition(bedrockBlock) + .build(), itemData.getNetId(), 0); + + creativeItems.set(j, creativeItemData); } break; } @@ -494,16 +521,17 @@ public class ItemRegistryPopulator { ); if (customItem.creativeCategory().isPresent()) { - creativeItems.add(ItemData.builder() + CreativeItemData creativeItemData = new CreativeItemData(ItemData.builder() .netId(creativeNetId.incrementAndGet()) .definition(customMapping.itemDefinition()) .blockDefinition(null) .count(1) - .build()); + .build(), creativeNetId.get(), customItem.creativeCategory().getAsInt()); + creativeItems.add(creativeItemData); } // ComponentItemData - used to register some custom properties - componentItemData.add(customMapping.componentItemData()); + componentItemData.add(customMapping.itemDefinition()); customItemOptions.add(Pair.of(customItem.customItemOptions(), customMapping.itemDefinition())); registry.put(customMapping.integerId(), customMapping.itemDefinition()); @@ -564,9 +592,11 @@ public class ItemRegistryPopulator { if (customItemsAllowed) { // Add furnace minecart - ItemDefinition definition = new SimpleItemDefinition("geysermc:furnace_minecart", nextFreeBedrockId, true); + int furnaceMinecartId = nextFreeBedrockId++; + ItemDefinition definition = new SimpleItemDefinition("geysermc:furnace_minecart", furnaceMinecartId, 1, true, registerFurnaceMinecart(furnaceMinecartId)); definitions.put("geysermc:furnace_minecart", definition); registry.put(definition.getRuntimeId(), definition); + componentItemData.add(definition); mappings.set(Items.FURNACE_MINECART.javaId(), ItemMapping.builder() .javaItem(Items.FURNACE_MINECART) @@ -577,13 +607,12 @@ public class ItemRegistryPopulator { .customItemOptions(Collections.emptyList()) // TODO check for custom items with furnace minecart .build()); - creativeItems.add(ItemData.builder() - .netId(creativeNetId.incrementAndGet()) - .definition(definition) - .count(1) - .build()); - - registerFurnaceMinecart(nextFreeBedrockId++, componentItemData, palette.protocolVersion); + creativeItems.add(new CreativeItemData(ItemData.builder() + .usingNetId(true) + .netId(creativeNetId.incrementAndGet()) + .definition(definition) + .count(1) + .build(), creativeNetId.get(), 99)); // todo do not hardcode! // Register any completely custom items given to us IntSet registeredJavaIds = new IntOpenHashSet(); // Used to check for duplicate item java ids @@ -598,7 +627,7 @@ public class ItemRegistryPopulator { int customItemId = nextFreeBedrockId++; NonVanillaItemRegistration registration = CustomItemRegistryPopulator.registerCustomItem(customItem, customItemId, palette.protocolVersion); - componentItemData.add(registration.componentItemData()); + componentItemData.add(registration.mapping().getBedrockDefinition()); ItemMapping mapping = registration.mapping(); Item javaItem = registration.javaItem(); while (javaItem.javaId() >= mappings.size()) { @@ -609,34 +638,17 @@ public class ItemRegistryPopulator { registry.put(customItemId, mapping.getBedrockDefinition()); if (customItem.creativeCategory().isPresent()) { - creativeItems.add(ItemData.builder() - .definition(registration.mapping().getBedrockDefinition()) - .netId(creativeNetId.incrementAndGet()) - .count(1) - .build()); + CreativeItemData creativeItemData = new CreativeItemData(ItemData.builder() + .definition(registration.mapping().getBedrockDefinition()) + .netId(creativeNetId.incrementAndGet()) + .count(1) + .build(), creativeNetId.get(), customItem.creativeCategory().getAsInt()); + + creativeItems.add(creativeItemData); } } } - for (Map.Entry<String, Object> entry : vanillaComponents.entrySet()) { - String id = entry.getKey(); - ItemDefinition definition = definitions.get(id); - if (definition == null) { - // Newer item most likely - GeyserImpl.getInstance().getLogger().debug( - "Skipping vanilla component " + id + " for protocol " + palette.protocolVersion() - ); - continue; - } - - NbtMapBuilder root = NbtMap.builder() - .putString("name", id) - .putInt("id", definition.getRuntimeId()) - .putCompound("components", (NbtMap) entry.getValue()); - - componentItemData.add(new ComponentItemData(id, root.build())); - } - // Register the item forms of custom blocks if (BlockRegistries.CUSTOM_BLOCKS.get().length != 0) { for (CustomBlockData customBlock : BlockRegistries.CUSTOM_BLOCKS.get()) { @@ -654,7 +666,8 @@ public class ItemRegistryPopulator { int customProtocolId = nextFreeBedrockId++; String identifier = customBlock.identifier(); - final ItemDefinition definition = new SimpleItemDefinition(identifier, customProtocolId, true); + // TODO verify + final ItemDefinition definition = new SimpleItemDefinition(identifier, customProtocolId, 1, false, null); registry.put(customProtocolId, definition); customBlockItemDefinitions.put(customBlock, definition); customIdMappings.put(customProtocolId, identifier); @@ -662,24 +675,26 @@ public class ItemRegistryPopulator { GeyserBedrockBlock bedrockBlock = blockMappings.getCustomBlockStateDefinitions().getOrDefault(customBlock.defaultBlockState(), null); if (bedrockBlock != null && customBlock.includedInCreativeInventory()) { - creativeItems.add(ItemData.builder() - .definition(definition) - .blockDefinition(bedrockBlock) - .netId(creativeNetId.incrementAndGet()) - .count(1) - .build()); + CreativeItemData creativeItemData = new CreativeItemData(ItemData.builder() + .definition(definition) + .blockDefinition(bedrockBlock) + .netId(creativeNetId.incrementAndGet()) + .count(1) + .build(), creativeNetId.get(), customBlock.creativeCategory().id()); + creativeItems.add(creativeItemData); } } } ItemMappings itemMappings = ItemMappings.builder() .items(mappings.toArray(new ItemMapping[0])) - .creativeItems(creativeItems.toArray(new ItemData[0])) + .creativeItems(creativeItems) + .creativeItemGroups(creativeItemGroups) .itemDefinitions(registry) + .componentItemData(componentItemData) .storedItems(new StoredItemMappings(javaItemToMapping)) .javaOnlyItems(javaOnlyItems) .buckets(buckets) - .componentItemData(componentItemData) .lightBlocks(lightBlocks) .lodestoneCompass(lodestoneEntry) .customIdMappings(customIdMappings) @@ -692,7 +707,7 @@ public class ItemRegistryPopulator { } } - private static void registerFurnaceMinecart(int nextFreeBedrockId, List<ComponentItemData> componentItemData, int protocolVersion) { + private static NbtMap registerFurnaceMinecart(int nextFreeBedrockId) { NbtMapBuilder builder = NbtMap.builder(); builder.putString("name", "geysermc:furnace_minecart") .putInt("id", nextFreeBedrockId); @@ -727,6 +742,6 @@ public class ItemRegistryPopulator { componentBuilder.putCompound("item_properties", itemProperties.build()); builder.putCompound("components", componentBuilder.build()); - componentItemData.add(new ComponentItemData("geysermc:furnace_minecart", builder.build())); + return builder.build(); } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/GeyserItemDefinition.java b/core/src/main/java/org/geysermc/geyser/registry/type/GeyserItemDefinition.java deleted file mode 100644 index fa1cb9985..000000000 --- a/core/src/main/java/org/geysermc/geyser/registry/type/GeyserItemDefinition.java +++ /dev/null @@ -1,49 +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.registry.type; - -import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; -import org.geysermc.geyser.item.type.Item; - -/** - * Implements ItemDefinition while also providing a reference to our item mappings. - */ -public record GeyserItemDefinition(Item javaItem, String identifier, boolean componentBased, int runtimeId) implements ItemDefinition { - @Override - public String getIdentifier() { - return identifier; - } - - @Override - public boolean isComponentBased() { - return componentBased; - } - - @Override - public int getRuntimeId() { - return runtimeId; - } -} 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 8aae05fdc..4ebe11bae 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 @@ -32,7 +32,8 @@ import lombok.Value; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; -import org.cloudburstmc.protocol.bedrock.data.inventory.ComponentItemData; +import org.cloudburstmc.protocol.bedrock.data.inventory.CreativeItemData; +import org.cloudburstmc.protocol.bedrock.data.inventory.CreativeItemGroup; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.common.DefinitionRegistry; import org.geysermc.geyser.GeyserImpl; @@ -61,7 +62,8 @@ public class ItemMappings implements DefinitionRegistry<ItemDefinition> { ItemMapping lodestoneCompass; Int2ObjectMap<ItemMapping> lightBlocks; - ItemData[] creativeItems; + List<CreativeItemGroup> creativeItemGroups; + List<CreativeItemData> creativeItems; Int2ObjectMap<ItemDefinition> itemDefinitions; StoredItemMappings storedItems; @@ -70,7 +72,7 @@ public class ItemMappings implements DefinitionRegistry<ItemDefinition> { List<ItemDefinition> buckets; List<ItemDefinition> boats; - List<ComponentItemData> componentItemData; + List<ItemDefinition> componentItemData; // TODO get rid of? Int2ObjectMap<String> customIdMappings; Object2ObjectMap<CustomBlockData, ItemDefinition> customBlockItemDefinitions; diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/NonVanillaItemRegistration.java b/core/src/main/java/org/geysermc/geyser/registry/type/NonVanillaItemRegistration.java index 16ac51749..3868845ac 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/NonVanillaItemRegistration.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/NonVanillaItemRegistration.java @@ -25,11 +25,10 @@ package org.geysermc.geyser.registry.type; -import org.cloudburstmc.protocol.bedrock.data.inventory.ComponentItemData; import org.geysermc.geyser.item.type.Item; /** * The return data of a successful registration of a custom item. */ -public record NonVanillaItemRegistration(ComponentItemData componentItemData, Item javaItem, ItemMapping mapping) { -} \ No newline at end of file +public record NonVanillaItemRegistration(Item javaItem, ItemMapping mapping) { +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/PaletteItem.java b/core/src/main/java/org/geysermc/geyser/registry/type/PaletteItem.java index bf202ddb3..9b51d672b 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/PaletteItem.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/PaletteItem.java @@ -31,4 +31,6 @@ import lombok.Data; public class PaletteItem { String name; int id; -} \ No newline at end of file + int version; + boolean componentBased; +} 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 fc8f82dd0..14a7f42a9 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -147,6 +147,7 @@ import org.geysermc.geyser.item.type.BlockItem; import org.geysermc.geyser.level.BedrockDimension; import org.geysermc.geyser.level.JavaDimension; 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; @@ -739,10 +740,14 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { sentSpawnPacket = true; syncEntityProperties(); - if (GeyserImpl.getInstance().getConfig().isAddNonBedrockItems()) { + if (GameProtocol.isPreCreativeInventoryRewrite(this.protocolVersion())) { ItemComponentPacket componentPacket = new ItemComponentPacket(); componentPacket.getItems().addAll(itemMappings.getComponentItemData()); upstream.sendPacket(componentPacket); + } else { + ItemComponentPacket componentPacket = new ItemComponentPacket(); + componentPacket.getItems().addAll(itemMappings.getItemDefinitions().values()); + upstream.sendPacket(componentPacket); } ChunkUtils.sendEmptyChunks(this, playerEntity.getPosition().toInt(), 0, false); @@ -760,7 +765,8 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { upstream.sendPacket(cameraPresetsPacket); CreativeContentPacket creativePacket = new CreativeContentPacket(); - creativePacket.setContents(this.itemMappings.getCreativeItems()); + creativePacket.getContents().addAll(this.itemMappings.getCreativeItems()); + creativePacket.getGroups().addAll(this.itemMappings.getCreativeItemGroups()); upstream.sendPacket(creativePacket); PlayStatusPacket playStatusPacket = new PlayStatusPacket(); @@ -1820,6 +1826,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { abilityLayer.setFlySpeed(flySpeed); // https://github.com/GeyserMC/Geyser/issues/3139 as of 1.19.10 abilityLayer.setWalkSpeed(walkSpeed == 0f ? 0.01f : walkSpeed); + abilityLayer.setVerticalFlySpeed(1.0f); Collections.addAll(abilityLayer.getAbilitiesSet(), USED_ABILITIES); updateAbilitiesPacket.getAbilityLayers().add(abilityLayer); diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java index 371d61714..c69293717 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java @@ -30,6 +30,7 @@ import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntSet; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; +import org.cloudburstmc.protocol.bedrock.data.inventory.CreativeItemData; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequest; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequestSlotData; @@ -63,6 +64,7 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.S import java.util.Arrays; import java.util.Collections; +import java.util.List; import java.util.function.IntFunction; public class PlayerInventoryTranslator extends InventoryTranslator { @@ -437,13 +439,13 @@ public class PlayerInventoryTranslator extends InventoryTranslator { craftState = CraftState.RECIPE_ID; int creativeId = creativeAction.getCreativeItemNetworkId() - 1; - ItemData[] creativeItems = session.getItemMappings().getCreativeItems(); - if (creativeId < 0 || creativeId >= creativeItems.length) { + List<CreativeItemData> creativeItems = session.getItemMappings().getCreativeItems(); + if (creativeId < 0 || creativeId >= creativeItems.size()) { return rejectRequest(request); } // Reference the creative items list we send to the client to know what it's asking of us - ItemData creativeItem = creativeItems[creativeId]; - javaCreativeItem = ItemTranslator.translateToJava(session, creativeItem); + CreativeItemData creativeItem = creativeItems.get(creativeId); + javaCreativeItem = ItemTranslator.translateToJava(session, creativeItem.getItem()); break; } case CRAFT_RESULTS_DEPRECATED: { diff --git a/core/src/main/resources/bedrock/biome_definitions.dat b/core/src/main/resources/bedrock/biome_definitions.dat index e59a99ce2a5c5ffc11489ea1a9d42285e77f137a..07a3c2abbfdaee113ff8c5eba53bb06319034833 100644 GIT binary patch delta 1825 zcmb7^O-K}B7{{3%+#Oe4cWg7z_CpjCzeY1y3akzmx@zJfB+JIpoJDqa+;(;SKwU{F zB0r)(86HFnf)Xp?rBeiX42gn*kOB`zT}p&5b%|zYbM4T!?;Z!<-~68U`9JS7`M~gT z)v(&nVm88Ilyw!jLIG(|4T*zN&@YCiV6UY1i*ocsQhWW95(489$U1wO#V<35I#V$v zGH<HM!q*NC?`+3iyO!=g<<h?_gx_Dq=%*WUOOu|4b{ZQZ50X3gM`43|ppXXilI;T* z_91hM!?TK994t1+?~|yw5co-f+%01ny#*`fm2?QwE0*;>tAYicWgLEV<xrBZ1UG4@ zw8w<1P(_VB)k{<bdulQ`t9{W@$&Kn`HvJdX8F~0}$`Kd;cRsMrx{2>}AU0MHn{DVc z?e#SwN*K>lY^=5#Y<S*mr?Sc9<e8e7snO)5LIm=%Rf!>wo6G4C%$wZg_1PRIn=>js zUa5Q7C<psSdQ`k|xlnGmpea~S#I`)vYP9$z)f?;!_lTiE$sfS&b51l(@z{*ilb`M1 z4NMNcb$H_5#Dg|{-hst%Jr*v0&;~mj*Th0<iYFUlkpXRr<(6zNF~*+n?!!x%0V0Zk zx~@fiP<LdSenyFC;DPQd2F8LGUr{PH8Dnygv0_KANC_j8-gQ>vT70D`aoF??X;tpX zho~_UQRX-;vth9yx>o2D!1aM;J?nh5gbycOM`R-WBu!gIR-72!+YE`LY8`#6#Z*`l zlERXzN;KIzh%)A2G%D)I!2R*;_-zt<)*=o#Jv_F?SM*(QCsLZ6B5RRPX=rS>;!#@@ zR);c4*3}m#ou3d*@Q-j9uQ6kL+Lg2~m<U&)c4kR~)A4zxhz>Y9d+#rscHe<~I<R(z N$NM8Zk#8=rzX534&l&&# delta 786 zcmYjPT}V@580PG>?YMcIXF9hO=UQ0coJXZt45^?%Lukc8Y#_8_I-BL0ZDv|)>Jp;z zCw#OZ`k|Ys=tBAkx{>NK5}kCZ5kWVB(9ew!Qhn#!vTmQB?|IJip0#<ymB)tp0Ulp{ z0#dvOtJNY>ikGbO=Xhi<7a(e`&VylM7d8uV&?=zJu^*FG5kXfNtB$t}dsbEhze|Rv zQ$oObE3Yd>wn0FAr~=lsNP?~xB@m|tZ1{3fOMWluspUBuB_QFi!`*<0CI2Gr<HpN6 zJBy|wEEY(_Cm+fQH+)4HulMG~jD%0#1%E@DJ*4w*8g~3|W_+yi3}+#0jX~Oq=DC~q zA+E?+=L6(JbAN7xwpRDw5wH*nke{tVeFy<<t)(~?s-)jxLt62Wg-~zKAuCn7gQS$H z9AIy+)m21mk8zxdd^~ZRFWy$vr)oWk_+a<R<OQ{_A1l>PJS~urI)8-x?)YKAebqJ- zX`-{*W;#7&B4X#*gpbr3@?BL7oC&h#q(L%B*8_I1NL&wQ{hvoO1|05k;m&ChV_Fn@ zV+pPhk@#*b$4oF^6)~lS$*JCVJcVVgCJ(J}7AB$=;^?mzXbUgCICtvT!Y?%pX*j7j z1BMT<i-+LFL?l4M7h8<<lI4OqsSc`|rsDI+d)CTwvly@IEdPk(+ug)7=H?jtWTXV) zj1AW^t8CR*qZJs9n-R$f6m!!#T1e%1+6e1h5x&hG#iXYYO=qi!_xeLKbvUuS$AWB` z2|-8sR-=2f64n9|HisOzF%x4i%ZdrcTDxe9#uMGi0poxg>rtW2%II)O=$n=Rj8bLQ L*57$)_7ndH#W5~s diff --git a/core/src/main/resources/bedrock/block_palette.1_21_60.nbt b/core/src/main/resources/bedrock/block_palette.1_21_60.nbt new file mode 100644 index 0000000000000000000000000000000000000000..57336ca95895f32c13f9c363e7714aba351c772b GIT binary patch literal 193020 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%0A%kIFe|~5Casa> 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 PXYildUunut`0o7=`Y)TP literal 0 HcmV?d00001 diff --git a/core/src/main/resources/bedrock/creative_items.1_21_60.json b/core/src/main/resources/bedrock/creative_items.1_21_60.json new file mode 100644 index 000000000..52eda075b --- /dev/null +++ b/core/src/main/resources/bedrock/creative_items.1_21_60.json @@ -0,0 +1,8917 @@ +{ + "groups": [ + { + "name": "itemGroup.name.planks", + "category": "construction", + "icon": { + "id": "minecraft:oak_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19wbGFua3MECQBuYW1lX2hhc2ilMDLR92rQ4wMKAG5ldHdvcmtfaWS2GotyCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + } + }, + { + "name": "itemGroup.name.walls", + "category": "construction", + "icon": { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWSLY2XwCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbiE8FQEA" + } + }, + { + "name": "itemGroup.name.fence", + "category": "construction", + "icon": { + "id": "minecraft:oak_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAAAACAQAbmFtZRMAbWluZWNyYWZ0Om9ha19mZW5jZQQJAG5hbWVfaGFzaGEmid7AaCWRAwoAbmV0d29ya19pZDvPEXcKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + } + }, + { + "name": "itemGroup.name.fenceGate", + "category": "construction", + "icon": { + "id": "minecraft:fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAAAACAQAbmFtZRQAbWluZWNyYWZ0OmZlbmNlX2dhdGUECQBuYW1lX2hhc2hTxpjEDmRzAwMKAG5ldHdvcmtfaWRAoluQCgYAc3RhdGVzAQsAaW5fd2FsbF9iaXQACBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgBCABvcGVuX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + } + }, + { + "name": "itemGroup.name.stairs", + "category": "construction", + "icon": { + "id": "minecraft:stone_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAAAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX3N0YWlycwQJAG5hbWVfaGFzaNRjqVC5GRVDAwoAbmV0d29ya19pZDcCv+MKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + } + }, + { + "name": "itemGroup.name.door", + "category": "construction", + "icon": { + "id": "minecraft:wooden_door" + } + }, + { + "name": "itemGroup.name.trapdoor", + "category": "construction", + "icon": { + "id": "minecraft:trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRgAAAACAQAbmFtZRIAbWluZWNyYWZ0OnRyYXBkb29yBAkAbmFtZV9oYXNotYiAJGtN0xADCgBuZXR3b3JrX2lkyTAWkAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + } + }, + { + "name": "", + "category": "construction", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.glass", + "category": "construction", + "icon": { + "id": "minecraft:glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmdsYXNzBAkAbmFtZV9oYXNowGJByfWff6gDCgBuZXR3b3JrX2lk0hdLNwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + } + }, + { + "name": "itemGroup.name.glassPane", + "category": "construction", + "icon": { + "id": "minecraft:glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdsYXNzX3BhbmUECQBuYW1lX2hhc2gRSBHwNMQ4gQMKAG5ldHdvcmtfaWRGwixuCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + } + }, + { + "name": "", + "category": "construction", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.slab", + "category": "construction", + "icon": { + "id": "minecraft:smooth_stone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAAAACAQAbmFtZRsAbWluZWNyYWZ0OnNtb290aF9zdG9uZV9zbGFiBAkAbmFtZV9oYXNon5I1yVw74uMDCgBuZXR3b3JrX2lkqvjcBQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbiE8FQEA" + } + }, + { + "name": "itemGroup.name.stoneBrick", + "category": "construction", + "icon": { + "id": "minecraft:stone_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAAAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX2JyaWNrcwQJAG5hbWVfaGFzaGAiQu8VWVJRAwoAbmV0d29ya19pZH2DjXUKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + } + }, + { + "name": "", + "category": "construction", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.sandstone", + "category": "construction", + "icon": { + "id": "minecraft:sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZPsXMaQKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + } + }, + { + "name": "", + "category": "construction", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.copper", + "category": "construction", + "icon": { + "id": "minecraft:copper_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRTAgAACAQAbmFtZRYAbWluZWNyYWZ0OmNvcHBlcl9ibG9jawQJAG5hbWVfaGFzaDVxnehsGaZ1AwoAbmV0d29ya19pZIiUodwKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + } + }, + { + "name": "", + "category": "construction", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.wool", + "category": "construction", + "icon": { + "id": "minecraft:white_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAAAACAQAbmFtZRQAbWluZWNyYWZ0OndoaXRlX3dvb2wECQBuYW1lX2hhc2jRWB7vaIEDiQMKAG5ldHdvcmtfaWSO8paQCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + } + }, + { + "name": "itemGroup.name.woolCarpet", + "category": "construction", + "icon": { + "id": "minecraft:white_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAAAACAQAbmFtZRYAbWluZWNyYWZ0OndoaXRlX2NhcnBldAQJAG5hbWVfaGFzaNeMHTI1fWPXAwoAbmV0d29ya19pZEahDFcKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + } + }, + { + "name": "itemGroup.name.concretePowder", + "category": "construction", + "icon": { + "id": "minecraft:white_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTtAAAACAQAbmFtZR8AbWluZWNyYWZ0OndoaXRlX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaFUk9iXVjwV8AwoAbmV0d29ya19pZJPZY8AKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + } + }, + { + "name": "itemGroup.name.concrete", + "category": "construction", + "icon": { + "id": "minecraft:white_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTsAAAACAQAbmFtZRgAbWluZWNyYWZ0OndoaXRlX2NvbmNyZXRlBAkAbmFtZV9oYXNo6zAp7lsLlvkDCgBuZXR3b3JrX2lk3MAYQAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + } + }, + { + "name": "itemGroup.name.stainedClay", + "category": "construction", + "icon": { + "id": "minecraft:hardened_clay", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAAAACAQAbmFtZRcAbWluZWNyYWZ0OmhhcmRlbmVkX2NsYXkECQBuYW1lX2hhc2jrnRwCJ0krJAMKAG5ldHdvcmtfaWRBCOrrCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + } + }, + { + "name": "itemGroup.name.glazedTerracotta", + "category": "construction", + "icon": { + "id": "minecraft:white_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAAAACAQAbmFtZSEAbWluZWNyYWZ0OndoaXRlX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoiVzCdoHAJo0DCgBuZXR3b3JrX2lkIlj9AAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + } + }, + { + "name": "", + "category": "construction", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "", + "category": "nature", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.ore", + "category": "nature", + "icon": { + "id": "minecraft:iron_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAAAACAQAbmFtZRIAbWluZWNyYWZ0Omlyb25fb3JlBAkAbmFtZV9oYXNoS7BYtLnfx3gDCgBuZXR3b3JrX2lk3loneQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + } + }, + { + "name": "itemGroup.name.stone", + "category": "nature", + "icon": { + "id": "minecraft:stone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lkIQ4xgAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + } + }, + { + "name": "", + "category": "nature", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.log", + "category": "nature", + "icon": { + "id": "minecraft:oak_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAAAACAQAbmFtZREAbWluZWNyYWZ0Om9ha19sb2cECQBuYW1lX2hhc2ho6TS+K7PZFQMKAG5ldHdvcmtfaWQjfjoxCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + } + }, + { + "name": "itemGroup.name.wood", + "category": "nature", + "icon": { + "id": "minecraft:oak_wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAQAACAQAbmFtZRIAbWluZWNyYWZ0Om9ha193b29kBAkAbmFtZV9oYXNoqQIkuVPyJX0DCgBuZXR3b3JrX2lku2G1YAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24hPBUBAA==" + } + }, + { + "name": "itemGroup.name.leaves", + "category": "nature", + "icon": { + "id": "minecraft:oak_leaves", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQSAAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19sZWF2ZXMECQBuYW1lX2hhc2h6O4xGqA2oKgMKAG5ldHdvcmtfaWT98c59CgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + } + }, + { + "name": "itemGroup.name.sapling", + "category": "nature", + "icon": { + "id": "minecraft:oak_sapling", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAAAACAQAbmFtZRUAbWluZWNyYWZ0Om9ha19zYXBsaW5nBAkAbmFtZV9oYXNoogXcT9QfjiUDCgBuZXR3b3JrX2lkG22C+AoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + } + }, + { + "name": "", + "category": "nature", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.seed", + "category": "nature", + "icon": { + "id": "minecraft:wheat_seeds" + } + }, + { + "name": "itemGroup.name.crop", + "category": "nature", + "icon": { + "id": "minecraft:wheat" + } + }, + { + "name": "", + "category": "nature", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.grass", + "category": "nature", + "icon": { + "id": "minecraft:fern", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRPBAAACAQAbmFtZQ4AbWluZWNyYWZ0OmZlcm4ECQBuYW1lX2hhc2iHbj3yXFn4owMKAG5ldHdvcmtfaWQKC6u7CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + } + }, + { + "name": "itemGroup.name.coral_decorations", + "category": "nature", + "icon": { + "id": "minecraft:fire_coral", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAwAACAQAbmFtZRQAbWluZWNyYWZ0OmZpcmVfY29yYWwECQBuYW1lX2hhc2hOHyyECVQVJwMKAG5ldHdvcmtfaWS9vF0UCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + } + }, + { + "name": "itemGroup.name.flower", + "category": "nature", + "icon": { + "id": "minecraft:dandelion", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQlAAAACAQAbmFtZRMAbWluZWNyYWZ0OmRhbmRlbGlvbgQJAG5hbWVfaGFzaBJ3bEUi+Nn/AwoAbmV0d29ya19pZBjjC44KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + } + }, + { + "name": "itemGroup.name.dye", + "category": "nature", + "icon": { + "id": "minecraft:yellow_dye" + } + }, + { + "name": "", + "category": "nature", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.rawFood", + "category": "nature", + "icon": { + "id": "minecraft:chicken" + } + }, + { + "name": "itemGroup.name.mushroom", + "category": "nature", + "icon": { + "id": "minecraft:brown_mushroom", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQnAAAACAQAbmFtZRgAbWluZWNyYWZ0OmJyb3duX211c2hyb29tBAkAbmFtZV9oYXNonYw/FO78WDoDCgBuZXR3b3JrX2lkLh1OXAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + } + }, + { + "name": "", + "category": "nature", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.monsterStoneEgg", + "category": "nature", + "icon": { + "id": "minecraft:infested_stone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRgAbWluZWNyYWZ0OmluZmVzdGVkX3N0b25lBAkAbmFtZV9oYXNoxnRcHDu4zqQDCgBuZXR3b3JrX2lkpfcnsgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + } + }, + { + "name": "", + "category": "nature", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.mobEgg", + "category": "nature", + "icon": { + "id": "minecraft:chicken_spawn_egg" + } + }, + { + "name": "", + "category": "nature", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.coral", + "category": "nature", + "icon": { + "id": "minecraft:tube_coral_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRoAbWluZWNyYWZ0OnR1YmVfY29yYWxfYmxvY2sECQBuYW1lX2hhc2iGkaiR7Eot4wMKAG5ldHdvcmtfaWQPNJ6sCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + } + }, + { + "name": "itemGroup.name.sculk", + "category": "nature", + "icon": { + "id": "minecraft:sculk", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAgAACAQAbmFtZQ8AbWluZWNyYWZ0OnNjdWxrBAkAbmFtZV9oYXNo2Lq7T5yQF8kDCgBuZXR3b3JrX2lkyqUPPgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + } + }, + { + "name": "", + "category": "nature", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.helmet", + "category": "equipment", + "icon": { + "id": "minecraft:leather_helmet" + } + }, + { + "name": "itemGroup.name.chestplate", + "category": "equipment", + "icon": { + "id": "minecraft:leather_chestplate" + } + }, + { + "name": "itemGroup.name.leggings", + "category": "equipment", + "icon": { + "id": "minecraft:leather_leggings" + } + }, + { + "name": "itemGroup.name.boots", + "category": "equipment", + "icon": { + "id": "minecraft:leather_boots" + } + }, + { + "name": "itemGroup.name.sword", + "category": "equipment", + "icon": { + "id": "minecraft:wooden_sword" + } + }, + { + "name": "itemGroup.name.axe", + "category": "equipment", + "icon": { + "id": "minecraft:wooden_axe" + } + }, + { + "name": "itemGroup.name.pickaxe", + "category": "equipment", + "icon": { + "id": "minecraft:wooden_pickaxe" + } + }, + { + "name": "itemGroup.name.shovel", + "category": "equipment", + "icon": { + "id": "minecraft:wooden_shovel" + } + }, + { + "name": "itemGroup.name.hoe", + "category": "equipment", + "icon": { + "id": "minecraft:wooden_hoe" + } + }, + { + "name": "", + "category": "equipment", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.arrow", + "category": "equipment", + "icon": { + "id": "minecraft:arrow" + } + }, + { + "name": "", + "category": "equipment", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.cookedFood", + "category": "equipment", + "icon": { + "id": "minecraft:cooked_chicken" + } + }, + { + "name": "itemGroup.name.miscFood", + "category": "equipment", + "icon": { + "id": "minecraft:bread" + } + }, + { + "name": "", + "category": "equipment", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.goatHorn", + "category": "equipment", + "icon": { + "id": "minecraft:goat_horn" + } + }, + { + "name": "", + "category": "equipment", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.bundles", + "category": "equipment", + "icon": { + "id": "minecraft:bundle" + } + }, + { + "name": "itemGroup.name.horseArmor", + "category": "equipment", + "icon": { + "id": "minecraft:leather_horse_armor" + } + }, + { + "name": "", + "category": "equipment", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.potion", + "category": "equipment", + "icon": { + "id": "minecraft:potion" + } + }, + { + "name": "itemGroup.name.splashPotion", + "category": "equipment", + "icon": { + "id": "minecraft:splash_potion" + } + }, + { + "name": "itemGroup.name.lingeringPotion", + "category": "equipment", + "icon": { + "id": "minecraft:lingering_potion" + } + }, + { + "name": "itemGroup.name.ominousBottle", + "category": "equipment", + "icon": { + "id": "minecraft:ominous_bottle" + } + }, + { + "name": "", + "category": "equipment", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "", + "category": "items", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.bed", + "category": "items", + "icon": { + "id": "minecraft:bed" + } + }, + { + "name": "", + "category": "items", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.candles", + "category": "items", + "icon": { + "id": "minecraft:candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAgAACAQAbmFtZRAAbWluZWNyYWZ0OmNhbmRsZQQJAG5hbWVfaGFzaHPd+MsNdWTfAwoAbmV0d29ya19pZHsBMA0KBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbiE8FQEA" + } + }, + { + "name": "", + "category": "items", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.anvil", + "category": "items", + "icon": { + "id": "minecraft:anvil", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lkqXzNjwoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24hPBUBAA==" + } + }, + { + "name": "", + "category": "items", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.chest", + "category": "items", + "icon": { + "id": "minecraft:chest", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2AAAACAQAbmFtZQ8AbWluZWNyYWZ0OmNoZXN0BAkAbmFtZV9oYXNog9ozMxlcA88DCgBuZXR3b3JrX2lkDkOFvAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24hPBUBAA==" + } + }, + { + "name": "", + "category": "items", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.shulkerBox", + "category": "items", + "icon": { + "id": "minecraft:undyed_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAAAACAQAbmFtZRwAbWluZWNyYWZ0OnVuZHllZF9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaOC9mypm/MlBAwoAbmV0d29ya19pZJ8rxp0KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + } + }, + { + "name": "", + "category": "items", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.record", + "category": "items", + "icon": { + "id": "minecraft:music_disc_13" + } + }, + { + "name": "", + "category": "items", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.sign", + "category": "items", + "icon": { + "id": "minecraft:oak_sign" + } + }, + { + "name": "itemGroup.name.hanging_sign", + "category": "items", + "icon": { + "id": "minecraft:oak_hanging_sign" + } + }, + { + "name": "", + "category": "items", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.skull", + "category": "items", + "icon": { + "id": "minecraft:creeper_head", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTHBAAACAQAbmFtZRYAbWluZWNyYWZ0OmNyZWVwZXJfaGVhZAQJAG5hbWVfaGFzaCvAGFMS/RqVAwoAbmV0d29ya19pZEfskXYKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + } + }, + { + "name": "", + "category": "items", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.enchantedBook", + "category": "items", + "icon": { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAEAAAA=" + } + }, + { + "name": "itemGroup.name.boat", + "category": "items", + "icon": { + "id": "minecraft:oak_boat" + } + }, + { + "name": "itemGroup.name.chestboat", + "category": "items", + "icon": { + "id": "minecraft:oak_chest_boat" + } + }, + { + "name": "itemGroup.name.rail", + "category": "items", + "icon": { + "id": "minecraft:rail", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRCAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnJhaWwECQBuYW1lX2hhc2hUzmhUXYJDUQMKAG5ldHdvcmtfaWR+Sp6YCgYAc3RhdGVzAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + } + }, + { + "name": "itemGroup.name.minecart", + "category": "items", + "icon": { + "id": "minecraft:minecart" + } + }, + { + "name": "", + "category": "items", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.buttons", + "category": "items", + "icon": { + "id": "minecraft:wooden_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAAAACAQAbmFtZRcAbWluZWNyYWZ0Ondvb2Rlbl9idXR0b24ECQBuYW1lX2hhc2hR7PgSTQt0sQMKAG5ldHdvcmtfaWSU07kYCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + } + }, + { + "name": "", + "category": "items", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.pressurePlate", + "category": "items", + "icon": { + "id": "minecraft:wooden_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAAAACAQAbmFtZR8AbWluZWNyYWZ0Ondvb2Rlbl9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaGkGs5kCuA74AwoAbmV0d29ya19pZDRzPNwKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24hPBUBAA==" + } + }, + { + "name": "", + "category": "items", + "icon": { + "id": "minecraft:air" + } + }, + { + "name": "itemGroup.name.banner", + "category": "items", + "icon": { + "id": "minecraft:banner" + } + }, + { + "name": "itemGroup.name.banner_pattern", + "category": "items", + "icon": { + "id": "minecraft:creeper_banner_pattern" + } + }, + { + "name": "itemGroup.name.potterySherds", + "category": "items", + "icon": { + "id": "minecraft:archer_pottery_sherd" + } + }, + { + "name": "itemGroup.name.smithing_templates", + "category": "items", + "icon": { + "id": "minecraft:netherite_upgrade_smithing_template" + } + }, + { + "name": "itemGroup.name.firework", + "category": "items", + "icon": { + "id": "minecraft:firework_rocket" + } + }, + { + "name": "itemGroup.name.fireworkStars", + "category": "items", + "icon": { + "id": "minecraft:firework_star" + } + }, + { + "name": "", + "category": "items", + "icon": { + "id": "minecraft:air" + } + } + ], + "items": [ + { + "id": "minecraft:oak_planks", + "groupId": 0, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19wbGFua3MECQBuYW1lX2hhc2ilMDLR92rQ4wMKAG5ldHdvcmtfaWS2GotyCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:spruce_planks", + "groupId": 0, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAwAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9wbGFua3MECQBuYW1lX2hhc2iumBkmFGFE8gMKAG5ldHdvcmtfaWSo8TFgCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:birch_planks", + "groupId": 0, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX3BsYW5rcwQJAG5hbWVfaGFzaLrrAKJqV2WFAwoAbmV0d29ya19pZL+e3ZAKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:jungle_planks", + "groupId": 0, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAwAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9wbGFua3MECQBuYW1lX2hhc2iBM3k4T3FAugMKAG5ldHdvcmtfaWSXUmBCCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:acacia_planks", + "groupId": 0, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAwAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9wbGFua3MECQBuYW1lX2hhc2g60edJxO5/aAMKAG5ldHdvcmtfaWTUXozECgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:dark_oak_planks", + "groupId": 0, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX3BsYW5rcwQJAG5hbWVfaGFzaAr64wkQ9cA7AwoAbmV0d29ya19pZFbMeR0KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:mangrove_planks", + "groupId": 0, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX3BsYW5rcwQJAG5hbWVfaGFzaPvLtcEA0F8xAwoAbmV0d29ya19pZEvnlCYKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:cherry_planks", + "groupId": 0, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9wbGFua3MECQBuYW1lX2hhc2hNIvVh/lVW7gMKAG5ldHdvcmtfaWQTXpRoCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:pale_oak_planks", + "groupId": 0, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTjBAAACAQAbmFtZRkAbWluZWNyYWZ0OnBhbGVfb2FrX3BsYW5rcwQJAG5hbWVfaGFzaDbrgXmqzgxDAwoAbmV0d29ya19pZFpM6OoKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:bamboo_planks", + "groupId": 0, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT9AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19wbGFua3MECQBuYW1lX2hhc2gYnjNz7SCCjgMKAG5ldHdvcmtfaWTi8ySSCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:bamboo_mosaic", + "groupId": 0, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT8AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19tb3NhaWMECQBuYW1lX2hhc2izSEgiMKOp/AMKAG5ldHdvcmtfaWQZ/p8xCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:crimson_planks", + "groupId": 0, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fcGxhbmtzBAkAbmFtZV9oYXNoJc5IKqNXJnwDCgBuZXR3b3JrX2lkwtJDdQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:warped_planks", + "groupId": 0, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTyAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9wbGFua3MECQBuYW1lX2hhc2g3yGXEWhe6LgMKAG5ldHdvcmtfaWStTABvCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:cobblestone_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWSLY2XwCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:mossy_cobblestone_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTKBAAACAQAbmFtZSAAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2gHUQMwwFQeNQMKAG5ldHdvcmtfaWRzPhG8CgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:granite_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTLBAAACAQAbmFtZRYAbWluZWNyYWZ0OmdyYW5pdGVfd2FsbAQJAG5hbWVfaGFzaE1GmM5AU0qUAwoAbmV0d29ya19pZE/UoPUKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:diorite_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTMBAAACAQAbmFtZRYAbWluZWNyYWZ0OmRpb3JpdGVfd2FsbAQJAG5hbWVfaGFzaF27l0QvdM8xAwoAbmV0d29ya19pZJe7jOwKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:andesite_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTNBAAACAQAbmFtZRcAbWluZWNyYWZ0OmFuZGVzaXRlX3dhbGwECQBuYW1lX2hhc2gAL1Vay0kZjQMKAG5ldHdvcmtfaWRJGxdvCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:sandstone_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTOBAAACAQAbmFtZRgAbWluZWNyYWZ0OnNhbmRzdG9uZV93YWxsBAkAbmFtZV9oYXNoYL2gu8a6HfgDCgBuZXR3b3JrX2lkHrhRjgoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:red_sandstone_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTVBAAACAQAbmFtZRwAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmVfd2FsbAQJAG5hbWVfaGFzaLAUUdOlo24MAwoAbmV0d29ya19pZI66BqAKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:stone_brick_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTQBAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2JyaWNrX3dhbGwECQBuYW1lX2hhc2hQegufuP6vjAMKAG5ldHdvcmtfaWS4AsOKCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:mossy_stone_brick_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTRBAAACAQAbmFtZSAAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrX3dhbGwECQBuYW1lX2hhc2i680zzUekp+wMKAG5ldHdvcmtfaWTQTaHPCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:brick_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTPBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJyaWNrX3dhbGwECQBuYW1lX2hhc2gGJFLNjfgSCAMKAG5ldHdvcmtfaWSc5iUZCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:nether_brick_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTSBAAACAQAbmFtZRsAbWluZWNyYWZ0Om5ldGhlcl9icmlja193YWxsBAkAbmFtZV9oYXNoAxb5f2yQ5MYDCgBuZXR3b3JrX2lkAECPDAoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:red_nether_brick_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTWBAAACAQAbmFtZR8AbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2tfd2FsbAQJAG5hbWVfaGFzaBOtwkokUt3cAwoAbmV0d29ya19pZJykmZUKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:end_stone_brick_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTBAAACAQAbmFtZR4AbWluZWNyYWZ0OmVuZF9zdG9uZV9icmlja193YWxsBAkAbmFtZV9oYXNoOsr1L9kJIAMDCgBuZXR3b3JrX2lkjuYlYgoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:prismarine_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTUBAAACAQAbmFtZRkAbWluZWNyYWZ0OnByaXNtYXJpbmVfd2FsbAQJAG5hbWVfaGFzaDO5IGrYZu1/AwoAbmV0d29ya19pZB4nLYYKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:blackstone_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsYWNrc3RvbmVfd2FsbAQJAG5hbWVfaGFzaMP8XppUSU1RAwoAbmV0d29ya19pZMbeBBsKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:polished_blackstone_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfd2FsbAQJAG5hbWVfaGFzaP6SwV08YwzAAwoAbmV0d29ya19pZAJLsz8KBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:polished_blackstone_brick_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQVAgAACAQAbmFtZSgAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfd2FsbAQJAG5hbWVfaGFzaBBIDZbHxiEzAwoAbmV0d29ya19pZEbLV8cKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:cobbled_deepslate_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AgAACAQAbmFtZSAAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3dhbGwECQBuYW1lX2hhc2iECY5oKxeT+gMKAG5ldHdvcmtfaWRCnPrFCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:deepslate_tile_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3dhbGwECQBuYW1lX2hhc2jz7N+PeuEXgQMKAG5ldHdvcmtfaWTqw4s4CgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:polished_deepslate_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV93YWxsBAkAbmFtZV9oYXNoHxjTdj9pevMDCgBuZXR3b3JrX2lkIvBYYwoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:deepslate_brick_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSJAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja193YWxsBAkAbmFtZV9oYXNoEs3EQrjroyEDCgBuZXR3b3JrX2lkwlrCGwoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:tuff_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAwAACAQAbmFtZRMAbWluZWNyYWZ0OnR1ZmZfd2FsbAQJAG5hbWVfaGFzaMyeeu1IRf03AwoAbmV0d29ya19pZDkIrosKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:tuff_brick_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT1AwAACAQAbmFtZRkAbWluZWNyYWZ0OnR1ZmZfYnJpY2tfd2FsbAQJAG5hbWVfaGFzaIL0IyNCOsonAwoAbmV0d29ya19pZJW4T5UKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:polished_tuff_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTvAwAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmZfd2FsbAQJAG5hbWVfaGFzaJVZj6QYWXUrAwoAbmV0d29ya19pZLU7dooKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:mud_brick_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAgAACAQAbmFtZRgAbWluZWNyYWZ0Om11ZF9icmlja193YWxsBAkAbmFtZV9oYXNov9b98ATpUSwDCgBuZXR3b3JrX2lkH/1WZQoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:resin_brick_wall", + "groupId": 1, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT4BAAACAQAbmFtZRoAbWluZWNyYWZ0OnJlc2luX2JyaWNrX3dhbGwECQBuYW1lX2hhc2iUkvfZlSl8+gMKAG5ldHdvcmtfaWSYW394CgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:oak_fence", + "groupId": 2, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAAAACAQAbmFtZRMAbWluZWNyYWZ0Om9ha19mZW5jZQQJAG5hbWVfaGFzaGEmid7AaCWRAwoAbmV0d29ya19pZDvPEXcKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:spruce_fence", + "groupId": 2, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRCAwAACAQAbmFtZRYAbWluZWNyYWZ0OnNwcnVjZV9mZW5jZQQJAG5hbWVfaGFzaPQCm+aX1ZQeAwoAbmV0d29ya19pZD1QUEoKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:birch_fence", + "groupId": 2, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ/AwAACAQAbmFtZRUAbWluZWNyYWZ0OmJpcmNoX2ZlbmNlBAkAbmFtZV9oYXNo6CJ2ATpANfgDCgBuZXR3b3JrX2lkmCUV2QoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:jungle_fence", + "groupId": 2, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRBAwAACAQAbmFtZRYAbWluZWNyYWZ0Omp1bmdsZV9mZW5jZQQJAG5hbWVfaGFzaOX4cD9uAmsdAwoAbmV0d29ya19pZHz1VxkKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:acacia_fence", + "groupId": 2, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ+AwAACAQAbmFtZRYAbWluZWNyYWZ0OmFjYWNpYV9mZW5jZQQJAG5hbWVfaGFzaGjn+RlKVDH6AwoAbmV0d29ya19pZNVGubwKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:dark_oak_fence", + "groupId": 2, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRAAwAACAQAbmFtZRgAbWluZWNyYWZ0OmRhcmtfb2FrX2ZlbmNlBAkAbmFtZV9oYXNoGPj0gCgM0c0DCgBuZXR3b3JrX2lk2w+gEwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:mangrove_fence", + "groupId": 2, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hbmdyb3ZlX2ZlbmNlBAkAbmFtZV9oYXNowwAd7tPu9bsDCgBuZXR3b3JrX2lkKEcd0goGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:cherry_fence", + "groupId": 2, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAwAACAQAbmFtZRYAbWluZWNyYWZ0OmNoZXJyeV9mZW5jZQQJAG5hbWVfaGFzaFmtUfHfTxcxAwoAbmV0d29ya19pZPCBxAIKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:pale_oak_fence", + "groupId": 2, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTeBAAACAQAbmFtZRgAbWluZWNyYWZ0OnBhbGVfb2FrX2ZlbmNlBAkAbmFtZV9oYXNobM05DVVUSxsDCgBuZXR3b3JrX2lkS7udAwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:bamboo_fence", + "groupId": 2, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJhbWJvb19mZW5jZQQJAG5hbWVfaGFzaCKRbxfXsfkiAwoAbmV0d29ya19pZJNXKFcKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:nether_brick_fence", + "groupId": 2, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRxAAAACAQAbmFtZRwAbWluZWNyYWZ0Om5ldGhlcl9icmlja19mZW5jZQQJAG5hbWVfaGFzaA6030ngawxcAwoAbmV0d29ya19pZLnjLF4KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:crimson_fence", + "groupId": 2, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT/AQAACAQAbmFtZRcAbWluZWNyYWZ0OmNyaW1zb25fZmVuY2UECQBuYW1lX2hhc2jhUhKv1HGj9AMKAG5ldHdvcmtfaWR3OH3OCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:warped_fence", + "groupId": 2, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQAAgAACAQAbmFtZRYAbWluZWNyYWZ0OndhcnBlZF9mZW5jZQQJAG5hbWVfaGFzaJfb3/YuKmOWAwoAbmV0d29ya19pZCpaGC8KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:fence_gate", + "groupId": 3, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAAAACAQAbmFtZRQAbWluZWNyYWZ0OmZlbmNlX2dhdGUECQBuYW1lX2hhc2hTxpjEDmRzAwMKAG5ldHdvcmtfaWRAoluQCgYAc3RhdGVzAQsAaW5fd2FsbF9iaXQACBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgBCABvcGVuX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:spruce_fence_gate", + "groupId": 3, + "block_state_b64": "CgAAAwgAYmxvY2tfaWS3AAAACAQAbmFtZRsAbWluZWNyYWZ0OnNwcnVjZV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoanTVB84HRbkDCgBuZXR3b3JrX2lkJL+vZAoGAHN0YXRlcwELAGluX3dhbGxfYml0AAgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAQgAb3Blbl9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:birch_fence_gate", + "groupId": 3, + "block_state_b64": "CgAAAwgAYmxvY2tfaWS4AAAACAQAbmFtZRoAbWluZWNyYWZ0OmJpcmNoX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2jmfPklI8azSwMKAG5ldHdvcmtfaWSlk1JPCgYAc3RhdGVzAQsAaW5fd2FsbF9iaXQACBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgBCABvcGVuX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:jungle_fence_gate", + "groupId": 3, + "block_state_b64": "CgAAAwgAYmxvY2tfaWS5AAAACAQAbmFtZRsAbWluZWNyYWZ0Omp1bmdsZV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNobYVQkfBomIcDCgBuZXR3b3JrX2lkjQubHgoGAHN0YXRlcwELAGluX3dhbGxfYml0AAgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAQgAb3Blbl9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:acacia_fence_gate", + "groupId": 3, + "block_state_b64": "CgAAAwgAYmxvY2tfaWS7AAAACAQAbmFtZRsAbWluZWNyYWZ0OmFjYWNpYV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoZnrLUx/XSekDCgBuZXR3b3JrX2lkoGH3cQoGAHN0YXRlcwELAGluX3dhbGxfYml0AAgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAQgAb3Blbl9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:dark_oak_fence_gate", + "groupId": 3, + "block_state_b64": "CgAAAwgAYmxvY2tfaWS6AAAACAQAbmFtZR0AbWluZWNyYWZ0OmRhcmtfb2FrX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2j2PTvdJJHcVQMKAG5ldHdvcmtfaWRS6WN3CgYAc3RhdGVzAQsAaW5fd2FsbF9iaXQACBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgBCABvcGVuX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:mangrove_fence_gate", + "groupId": 3, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAgAACAQAbmFtZR0AbWluZWNyYWZ0Om1hbmdyb3ZlX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2i/kOhBKiI/dAMKAG5ldHdvcmtfaWQ5AL3/CgYAc3RhdGVzAQsAaW5fd2FsbF9iaXQACBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgBCABvcGVuX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:cherry_fence_gate", + "groupId": 3, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAwAACAQAbmFtZRsAbWluZWNyYWZ0OmNoZXJyeV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoKWLgCk0z+PsDCgBuZXR3b3JrX2lkWfIkRAoGAHN0YXRlcwELAGluX3dhbGxfYml0AAgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAQgAb3Blbl9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:pale_oak_fence_gate", + "groupId": 3, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTfBAAACAQAbmFtZR0AbWluZWNyYWZ0OnBhbGVfb2FrX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2hCrHUtEPI3BgMKAG5ldHdvcmtfaWSO5QLnCgYAc3RhdGVzAQsAaW5fd2FsbF9iaXQACBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgBCABvcGVuX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:bamboo_fence_gate", + "groupId": 3, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJhbWJvb19mZW5jZV9nYXRlBAkAbmFtZV9oYXNopH1JrUgwdIADCgBuZXR3b3JrX2lkriggcAoGAHN0YXRlcwELAGluX3dhbGxfYml0AAgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAQgAb3Blbl9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:crimson_fence_gate", + "groupId": 3, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAgAACAQAbmFtZRwAbWluZWNyYWZ0OmNyaW1zb25fZmVuY2VfZ2F0ZQQJAG5hbWVfaGFzaHE3Gfd0Z2d2AwoAbmV0d29ya19pZGaT7SQKBgBzdGF0ZXMBCwBpbl93YWxsX2JpdAAIHABtaW5lY3JhZnQ6Y2FyZGluYWxfZGlyZWN0aW9uBQBzb3V0aAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:warped_fence_gate", + "groupId": 3, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAgAACAQAbmFtZRsAbWluZWNyYWZ0OndhcnBlZF9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoy0oIBjDIG4kDCgBuZXR3b3JrX2lkO8ur6woGAHN0YXRlcwELAGluX3dhbGxfYml0AAgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAQgAb3Blbl9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:normal_stone_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAQAACAQAbmFtZR0AbWluZWNyYWZ0Om5vcm1hbF9zdG9uZV9zdGFpcnMECQBuYW1lX2hhc2hAEktZZOkGIwMKAG5ldHdvcmtfaWQeH1ALCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:stone_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAAAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX3N0YWlycwQJAG5hbWVfaGFzaNRjqVC5GRVDAwoAbmV0d29ya19pZDcCv+MKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:mossy_cobblestone_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSyAQAACAQAbmFtZSIAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lX3N0YWlycwQJAG5hbWVfaGFzaMVSTq5z9n1RAwoAbmV0d29ya19pZFIfrhkKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:oak_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ1AAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19zdGFpcnMECQBuYW1lX2hhc2jk/HFzdXy0FQMKAG5ldHdvcmtfaWQJjyzBCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:spruce_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAAAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9zdGFpcnMECQBuYW1lX2hhc2iznygw7uBPBQMKAG5ldHdvcmtfaWTv+is3CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:birch_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAAAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX3N0YWlycwQJAG5hbWVfaGFzaPfhbL619a3GAwoAbmV0d29ya19pZFyPlHAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:jungle_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAAAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9zdGFpcnMECQBuYW1lX2hhc2jodJsHUbOVxQMKAG5ldHdvcmtfaWR0z5d4CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:acacia_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAAAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9zdGFpcnMECQBuYW1lX2hhc2h3x1NmD43IqQMKAG5ldHdvcmtfaWS7Jwz6CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:dark_oak_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAAAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX3N0YWlycwQJAG5hbWVfaGFzaMfwkbYPbNmAAwoAbmV0d29ya19pZCmBYKAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:mangrove_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX3N0YWlycwQJAG5hbWVfaGFzaNpUDY+uGMpyAwoAbmV0d29ya19pZChzUAsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:cherry_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQcAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9zdGFpcnMECQBuYW1lX2hhc2jMtr0v9JY4zwMKAG5ldHdvcmtfaWRQwq31CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:pale_oak_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTnBAAACAQAbmFtZRkAbWluZWNyYWZ0OnBhbGVfb2FrX3N0YWlycwQJAG5hbWVfaGFzaJsYBq7wfPXaAwoAbmV0d29ya19pZE1U5UIKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:bamboo_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT/AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19zdGFpcnMECQBuYW1lX2hhc2jFOzWL8PalKwMKAG5ldHdvcmtfaWTVPh42CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:bamboo_mosaic_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQKAwAACAQAbmFtZR4AbWluZWNyYWZ0OmJhbWJvb19tb3NhaWNfc3RhaXJzBAkAbmFtZV9oYXNoNLPiveSHPaoDCgBuZXR3b3JrX2lk44PHjgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:stone_brick_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAAAACAQAbmFtZRwAbWluZWNyYWZ0OnN0b25lX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaN6tQViRo5cwAwoAbmV0d29ya19pZDMyMgIKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:mossy_stone_brick_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAQAACAQAbmFtZSIAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaIB/Zv5YBPuYAwoAbmV0d29ya19pZANTOsMKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:sandstone_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAAAACAQAbmFtZRoAbWluZWNyYWZ0OnNhbmRzdG9uZV9zdGFpcnMECQBuYW1lX2hhc2hOyA0BoYUOPQMKAG5ldHdvcmtfaWSV/834CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:smooth_sandstone_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSwAQAACAQAbmFtZSEAbWluZWNyYWZ0OnNtb290aF9zYW5kc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNoB+CuCd8Ruz8DCgBuZXR3b3JrX2lksR+m8QoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:red_sandstone_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWS0AAAACAQAbmFtZR4AbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNoPs0LpHPL24YDCgBuZXR3b3JrX2lkLYVt3woGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:smooth_red_sandstone_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAQAACAQAbmFtZSUAbWluZWNyYWZ0OnNtb290aF9yZWRfc2FuZHN0b25lX3N0YWlycwQJAG5hbWVfaGFzaBvjtQv5pf+MAwoAbmV0d29ya19pZMHNND8KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:granite_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAQAACAQAbmFtZRgAbWluZWNyYWZ0OmdyYW5pdGVfc3RhaXJzBAkAbmFtZV9oYXNoGzpvtoqKQjgDCgBuZXR3b3JrX2lkPkcB1goGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:polished_granite_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAQAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGVfc3RhaXJzBAkAbmFtZV9oYXNo3PvbSfEQklIDCgBuZXR3b3JrX2lkMmEm3AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:diorite_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAQAACAQAbmFtZRgAbWluZWNyYWZ0OmRpb3JpdGVfc3RhaXJzBAkAbmFtZV9oYXNoi73T8VQuZmcDCgBuZXR3b3JrX2lk6i6nBQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:polished_diorite_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAQAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGVfc3RhaXJzBAkAbmFtZV9oYXNoFKRJd5Wk5L0DCgBuZXR3b3JrX2lkbt2ioAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:andesite_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAQAACAQAbmFtZRkAbWluZWNyYWZ0OmFuZGVzaXRlX3N0YWlycwQJAG5hbWVfaGFzaO5w2FKBw76EAwoAbmV0d29ya19pZKhXEgUKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:polished_andesite_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWStAQAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlX3N0YWlycwQJAG5hbWVfaGFzaNcZZ/zmLInIAwoAbmV0d29ya19pZJTHrlEKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:brick_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAAAACAQAbmFtZRYAbWluZWNyYWZ0OmJyaWNrX3N0YWlycwQJAG5hbWVfaGFzaMyt+cRDk5O2AwoAbmV0d29ya19pZNeMh58KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:nether_brick_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRyAAAACAQAbmFtZR0AbWluZWNyYWZ0Om5ldGhlcl9icmlja19zdGFpcnMECQBuYW1lX2hhc2jRqIoOXgifBAMKAG5ldHdvcmtfaWQDiw5yCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:red_nether_brick_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWS3AQAACAQAbmFtZSEAbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNogQvosSbcj7kDCgBuZXR3b3JrX2lkx2IMtAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:end_brick_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSxAQAACAQAbmFtZRoAbWluZWNyYWZ0OmVuZF9icmlja19zdGFpcnMECQBuYW1lX2hhc2hmlAk+QhsUsQMKAG5ldHdvcmtfaWTN7KFaCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:quartz_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWScAAAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9zdGFpcnMECQBuYW1lX2hhc2hmvpvOqGi6egMKAG5ldHdvcmtfaWRmUTh7CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:smooth_quartz_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWS4AQAACAQAbmFtZR4AbWluZWNyYWZ0OnNtb290aF9xdWFydHpfc3RhaXJzBAkAbmFtZV9oYXNoNZZ9rX0qZOsDCgBuZXR3b3JrX2lkzsgQyQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:purpur_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAAAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnB1cl9zdGFpcnMECQBuYW1lX2hhc2ifwDxeezXD7gMKAG5ldHdvcmtfaWTT+rxiCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:prismarine_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAQAACAQAbmFtZRsAbWluZWNyYWZ0OnByaXNtYXJpbmVfc3RhaXJzBAkAbmFtZV9oYXNooTHSZ+IrYtcDCgBuZXR3b3JrX2lkxTJfeAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:dark_prismarine_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAQAACAQAbmFtZSAAbWluZWNyYWZ0OmRhcmtfcHJpc21hcmluZV9zdGFpcnMECQBuYW1lX2hhc2hIciLmam4o4AMKAG5ldHdvcmtfaWTVu7TCCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:prismarine_bricks_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAQAACAQAbmFtZSIAbWluZWNyYWZ0OnByaXNtYXJpbmVfYnJpY2tzX3N0YWlycwQJAG5hbWVfaGFzaNIjq1oBlZMMAwoAbmV0d29ya19pZGEFwLYKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:crimson_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT9AQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fc3RhaXJzBAkAbmFtZV9oYXNoZJqIzCBpCq4DCgBuZXR3b3JrX2lktXE00AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:warped_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT+AQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9zdGFpcnMECQBuYW1lX2hhc2hOkY27jLD4RQMKAG5ldHdvcmtfaWQ+E5VrCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:blackstone_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAgAACAQAbmFtZRsAbWluZWNyYWZ0OmJsYWNrc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNokdoUb76p9McDCgBuZXR3b3JrX2lk5fWI5goGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:polished_blackstone_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNolCFtFIE8MmADCgBuZXR3b3JrX2lkGTf7sgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:polished_blackstone_brick_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQSAgAACAQAbmFtZSoAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNonks6UlfpOmkDCgBuZXR3b3JrX2lkgYeOdAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:cobbled_deepslate_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR8AgAACAQAbmFtZSIAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3N0YWlycwQJAG5hbWVfaGFzaPIfa+TpyJcIAwoAbmV0d29ya19pZJUvOYIKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:deepslate_tile_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3N0YWlycwQJAG5hbWVfaGFzaGFRFzB72mN2AwoAbmV0d29ya19pZJEOgIsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:polished_deepslate_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAgAACAQAbmFtZSMAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV9zdGFpcnMECQBuYW1lX2hhc2iNCYxVik9sGAMKAG5ldHdvcmtfaWSRVPnYCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:deepslate_brick_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAgAACAQAbmFtZSAAbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja19zdGFpcnMECQBuYW1lX2hhc2hIasOahEf83wMKAG5ldHdvcmtfaWQ1qEDCCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:tuff_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAwAACAQAbmFtZRUAbWluZWNyYWZ0OnR1ZmZfc3RhaXJzBAkAbmFtZV9oYXNoKjyNUBjcfZsDCgBuZXR3b3JrX2lk+LsycgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:polished_tuff_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTuAwAACAQAbmFtZR4AbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmZfc3RhaXJzBAkAbmFtZV9oYXNo8yuah8QI1dcDCgBuZXR3b3JrX2lkjLoU4AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:tuff_brick_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT0AwAACAQAbmFtZRsAbWluZWNyYWZ0OnR1ZmZfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNoWJpkAurUfKwDCgBuZXR3b3JrX2lkUMcjiwoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:mud_brick_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAgAACAQAbmFtZRoAbWluZWNyYWZ0Om11ZF9icmlja19zdGFpcnMECQBuYW1lX2hhc2gt3qxK1NWajAMKAG5ldHdvcmtfaWSm9N3MCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:cut_copper_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAgAACAQAbmFtZRsAbWluZWNyYWZ0OmN1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoHfoAXYq5G3MDCgBuZXR3b3JrX2lkeetf7woGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:exposed_cut_copper_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAgAACAQAbmFtZSMAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcl9zdGFpcnMECQBuYW1lX2hhc2howneQGtZ9cgMKAG5ldHdvcmtfaWSg73zdCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:weathered_cut_copper_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAgAACAQAbmFtZSUAbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyX3N0YWlycwQJAG5hbWVfaGFzaP+R5loXxrVgAwoAbmV0d29ya19pZOnbRf4KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:oxidized_cut_copper_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAgAACAQAbmFtZSQAbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNo6Jeoq5rsPxsDCgBuZXR3b3JrX2lkmRjDnQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:waxed_cut_copper_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAgAACAQAbmFtZSEAbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoh07CQj0/SR8DCgBuZXR3b3JrX2lkmYqoqAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:waxed_exposed_cut_copper_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcl9zdGFpcnMECQBuYW1lX2hhc2guVct1ilmxTwMKAG5ldHdvcmtfaWQgCPROCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:waxed_weathered_cut_copper_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRnAgAACAQAbmFtZSsAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyX3N0YWlycwQJAG5hbWVfaGFzaPXC8Sz/phCpAwoAbmV0d29ya19pZHlwHVsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:waxed_oxidized_cut_copper_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWS/AgAACAQAbmFtZSoAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoaqGdkuhxVZUDCgBuZXR3b3JrX2lkYQXzzgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:resin_brick_stairs", + "groupId": 4, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT3BAAACAQAbmFtZRwAbWluZWNyYWZ0OnJlc2luX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaGJwsbVlApWmAwoAbmV0d29ya19pZCPz+A0KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:wooden_door", + "groupId": 5 + }, + { + "id": "minecraft:spruce_door", + "groupId": 5 + }, + { + "id": "minecraft:birch_door", + "groupId": 5 + }, + { + "id": "minecraft:jungle_door", + "groupId": 5 + }, + { + "id": "minecraft:acacia_door", + "groupId": 5 + }, + { + "id": "minecraft:dark_oak_door", + "groupId": 5 + }, + { + "id": "minecraft:mangrove_door", + "groupId": 5 + }, + { + "id": "minecraft:cherry_door", + "groupId": 5 + }, + { + "id": "minecraft:pale_oak_door", + "groupId": 5 + }, + { + "id": "minecraft:bamboo_door", + "groupId": 5 + }, + { + "id": "minecraft:iron_door", + "groupId": 5 + }, + { + "id": "minecraft:crimson_door", + "groupId": 5 + }, + { + "id": "minecraft:warped_door", + "groupId": 5 + }, + { + "id": "minecraft:copper_door", + "groupId": 5 + }, + { + "id": "minecraft:exposed_copper_door", + "groupId": 5 + }, + { + "id": "minecraft:weathered_copper_door", + "groupId": 5 + }, + { + "id": "minecraft:oxidized_copper_door", + "groupId": 5 + }, + { + "id": "minecraft:waxed_copper_door", + "groupId": 5 + }, + { + "id": "minecraft:waxed_exposed_copper_door", + "groupId": 5 + }, + { + "id": "minecraft:waxed_weathered_copper_door", + "groupId": 5 + }, + { + "id": "minecraft:waxed_oxidized_copper_door", + "groupId": 5 + }, + { + "id": "minecraft:trapdoor", + "groupId": 6, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRgAAAACAQAbmFtZRIAbWluZWNyYWZ0OnRyYXBkb29yBAkAbmFtZV9oYXNotYiAJGtN0xADCgBuZXR3b3JrX2lkyTAWkAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:spruce_trapdoor", + "groupId": 6, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAQAACAQAbmFtZRkAbWluZWNyYWZ0OnNwcnVjZV90cmFwZG9vcgQJAG5hbWVfaGFzaOwlfbgBkUW4AwoAbmV0d29ya19pZPHy1K0KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:birch_trapdoor", + "groupId": 6, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAQAACAQAbmFtZRgAbWluZWNyYWZ0OmJpcmNoX3RyYXBkb29yBAkAbmFtZV9oYXNoSLtLweOLJ7wDCgBuZXR3b3JrX2lkeJWDfgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:jungle_trapdoor", + "groupId": 6, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSTAQAACAQAbmFtZRkAbWluZWNyYWZ0Omp1bmdsZV90cmFwZG9vcgQJAG5hbWVfaGFzaDP/TnM9wyCIAwoAbmV0d29ya19pZEy2fJoKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:acacia_trapdoor", + "groupId": 6, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAQAACAQAbmFtZRkAbWluZWNyYWZ0OmFjYWNpYV90cmFwZG9vcgQJAG5hbWVfaGFzaMj8xi3vmEKOAwoAbmV0d29ya19pZOHj8E8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:dark_oak_trapdoor", + "groupId": 6, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAQAACAQAbmFtZRsAbWluZWNyYWZ0OmRhcmtfb2FrX3RyYXBkb29yBAkAbmFtZV9oYXNomB2GGJQ2aOMDCgBuZXR3b3JrX2lko5ZHTwoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:mangrove_trapdoor", + "groupId": 6, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTvAgAACAQAbmFtZRsAbWluZWNyYWZ0Om1hbmdyb3ZlX3RyYXBkb29yBAkAbmFtZV9oYXNooV3kQsQUUmkDCgBuZXR3b3JrX2lkkF/mxAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:cherry_trapdoor", + "groupId": 6, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAwAACAQAbmFtZRkAbWluZWNyYWZ0OmNoZXJyeV90cmFwZG9vcgQJAG5hbWVfaGFzaH/PefpfdHgtAwoAbmV0d29ya19pZOA7eNgKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:pale_oak_trapdoor", + "groupId": 6, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTpBAAACAQAbmFtZRsAbWluZWNyYWZ0OnBhbGVfb2FrX3RyYXBkb29yBAkAbmFtZV9oYXNo5L0cQtjJA9oDCgBuZXR3b3JrX2lkVwhZTgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:bamboo_trapdoor", + "groupId": 6, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAwAACAQAbmFtZRkAbWluZWNyYWZ0OmJhbWJvb190cmFwZG9vcgQJAG5hbWVfaGFzaJrEOpsTwtKCAwoAbmV0d29ya19pZLvbPz8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:iron_trapdoor", + "groupId": 6, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAAAACAQAbmFtZRcAbWluZWNyYWZ0Omlyb25fdHJhcGRvb3IECQBuYW1lX2hhc2gwA+IumsEiGQMKAG5ldHdvcmtfaWTvSVl/CgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:crimson_trapdoor", + "groupId": 6, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT1AQAACAQAbmFtZRoAbWluZWNyYWZ0OmNyaW1zb25fdHJhcGRvb3IECQBuYW1lX2hhc2jHXufTnwUkYgMKAG5ldHdvcmtfaWQLjMYVCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:warped_trapdoor", + "groupId": 6, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT2AQAACAQAbmFtZRkAbWluZWNyYWZ0OndhcnBlZF90cmFwZG9vcgQJAG5hbWVfaGFzaA20wG/+vkd6AwoAbmV0d29ya19pZHKR/hYKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:copper_trapdoor", + "groupId": 6, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQXBAAACAQAbmFtZRkAbWluZWNyYWZ0OmNvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaO9fXio+svKVAwoAbmV0d29ya19pZMCoRjEKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:exposed_copper_trapdoor", + "groupId": 6, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQYBAAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyX3RyYXBkb29yBAkAbmFtZV9oYXNoYhDFUysN7qUDCgBuZXR3b3JrX2lkMzwGJgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:weathered_copper_trapdoor", + "groupId": 6, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQZBAAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXJfdHJhcGRvb3IECQBuYW1lX2hhc2hFnEC282a1tgMKAG5ldHdvcmtfaWTk70oiCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:oxidized_copper_trapdoor", + "groupId": 6, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQaBAAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaOJpG/XFexVwAwoAbmV0d29ya19pZPhi0J4KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:waxed_copper_trapdoor", + "groupId": 6, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQbBAAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2NvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaO0JUKUHqNU6AwoAbmV0d29ya19pZJC3ZuMKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:waxed_exposed_copper_trapdoor", + "groupId": 6, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQcBAAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyX3RyYXBkb29yBAkAbmFtZV9oYXNoBHHxCpkUzpgDCgBuZXR3b3JrX2lkw2XBGQoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:waxed_weathered_copper_trapdoor", + "groupId": 6, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQdBAAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXJfdHJhcGRvb3IECQBuYW1lX2hhc2gH9Fi3JCF4egMKAG5ldHdvcmtfaWRkGU6TCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:waxed_oxidized_copper_trapdoor", + "groupId": 6, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQeBAAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaNA/q9qAy6Z9AwoAbmV0d29ya19pZDgExS8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:iron_bars", + "groupId": 7, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAAAACAQAbmFtZRMAbWluZWNyYWZ0Omlyb25fYmFycwQJAG5hbWVfaGFzaPuefWSNAe56AwoAbmV0d29ya19pZN2LB5IKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:glass", + "groupId": 8, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmdsYXNzBAkAbmFtZV9oYXNowGJByfWff6gDCgBuZXR3b3JrX2lk0hdLNwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:white_stained_glass", + "groupId": 8, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAAAACAQAbmFtZR0AbWluZWNyYWZ0OndoaXRlX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2iHubqoMbu9fAMKAG5ldHdvcmtfaWRndBrUCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:light_gray_stained_glass", + "groupId": 8, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAwAACAQAbmFtZSIAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaKKa+LrRsHQhAwoAbmV0d29ya19pZEv2giYKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:gray_stained_glass", + "groupId": 8, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSmAwAACAQAbmFtZRwAbWluZWNyYWZ0OmdyYXlfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaIETy7Y/HZREAwoAbmV0d29ya19pZDomVrUKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:black_stained_glass", + "groupId": 8, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAwAACAQAbmFtZR0AbWluZWNyYWZ0OmJsYWNrX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2iV6BCwpfDMmwMKAG5ldHdvcmtfaWSV7doJCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:brown_stained_glass", + "groupId": 8, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAwAACAQAbmFtZR0AbWluZWNyYWZ0OmJyb3duX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2igsEiq5np8JgMKAG5ldHdvcmtfaWRMzE/lCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:red_stained_glass", + "groupId": 8, + "block_state_b64": "CgAAAwgAYmxvY2tfaWStAwAACAQAbmFtZRsAbWluZWNyYWZ0OnJlZF9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNoCa2J12/lQoIDCgBuZXR3b3JrX2lk283lWAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:orange_stained_glass", + "groupId": 8, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAwAACAQAbmFtZR4AbWluZWNyYWZ0Om9yYW5nZV9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNozgjAuvzhxGsDCgBuZXR3b3JrX2lkW5CkhQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:yellow_stained_glass", + "groupId": 8, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAwAACAQAbmFtZR4AbWluZWNyYWZ0OnllbGxvd19zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNo7EbHMd5WVugDCgBuZXR3b3JrX2lkkdDyXQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:lime_stained_glass", + "groupId": 8, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAwAACAQAbmFtZRwAbWluZWNyYWZ0OmxpbWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaBtZA1nZtwcFAwoAbmV0d29ya19pZDxX85UKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:green_stained_glass", + "groupId": 8, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAwAACAQAbmFtZR0AbWluZWNyYWZ0OmdyZWVuX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2h91ptDgbehWwMKAG5ldHdvcmtfaWTlDhnECgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:cyan_stained_glass", + "groupId": 8, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAwAACAQAbmFtZRwAbWluZWNyYWZ0OmN5YW5fc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaBkIYQ8nQLqbAwoAbmV0d29ya19pZOL1lHsKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:light_blue_stained_glass", + "groupId": 8, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAwAACAQAbmFtZSIAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaLt05n1G0fiSAwoAbmV0d29ya19pZNbwulIKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:blue_stained_glass", + "groupId": 8, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAwAACAQAbmFtZRwAbWluZWNyYWZ0OmJsdWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaPhLocSfzduRAwoAbmV0d29ya19pZENsjFwKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:purple_stained_glass", + "groupId": 8, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAwAACAQAbmFtZR4AbWluZWNyYWZ0OnB1cnBsZV9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNoJk0DhRO0szUDCgBuZXR3b3JrX2lkD98ZxgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:magenta_stained_glass", + "groupId": 8, + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAwAACAQAbmFtZR8AbWluZWNyYWZ0Om1hZ2VudGFfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaFEDeFiJj3zSAwoAbmV0d29ya19pZG+iFRoKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:pink_stained_glass", + "groupId": 8, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAwAACAQAbmFtZRwAbWluZWNyYWZ0OnBpbmtfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaDijTX87ywxhAwoAbmV0d29ya19pZKdEricKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:tinted_glass", + "groupId": 8, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAgAACAQAbmFtZRYAbWluZWNyYWZ0OnRpbnRlZF9nbGFzcwQJAG5hbWVfaGFzaAFZWSamk6KdAwoAbmV0d29ya19pZGSvWX8KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:glass_pane", + "groupId": 9, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdsYXNzX3BhbmUECQBuYW1lX2hhc2gRSBHwNMQ4gQMKAG5ldHdvcmtfaWRGwixuCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:white_stained_glass_pane", + "groupId": 9, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAAAACAQAbmFtZSIAbWluZWNyYWZ0OndoaXRlX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaHgxQmgJVtRrAwoAbmV0d29ya19pZBEr/DYKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:light_gray_stained_glass_pane", + "groupId": 9, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSJAwAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNon0aQw9lNkSEDCgBuZXR3b3JrX2lk9dp5VgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:gray_stained_glass_pane", + "groupId": 9, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAwAACAQAbmFtZSEAbWluZWNyYWZ0OmdyYXlfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNors74IIw+2MMDCgBuZXR3b3JrX2lkmrGO5woGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:black_stained_glass_pane", + "groupId": 9, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAwAACAQAbmFtZSIAbWluZWNyYWZ0OmJsYWNrX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaOK/5ZRRd+M1AwoAbmV0d29ya19pZDv++oQKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:brown_stained_glass_pane", + "groupId": 9, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSNAwAACAQAbmFtZSIAbWluZWNyYWZ0OmJyb3duX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLHeGJyRFTIWAwoAbmV0d29ya19pZMz9L0wKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:red_stained_glass_pane", + "groupId": 9, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAwAACAQAbmFtZSAAbWluZWNyYWZ0OnJlZF9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2gGr4x6JheAywMKAG5ldHdvcmtfaWQBjCTmCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:orange_stained_glass_pane", + "groupId": 9, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAwAACAQAbmFtZSMAbWluZWNyYWZ0Om9yYW5nZV9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2hbHxPD2gEbEAMKAG5ldHdvcmtfaWSt/7a5CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:yellow_stained_glass_pane", + "groupId": 9, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAwAACAQAbmFtZSMAbWluZWNyYWZ0OnllbGxvd19zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2g9tl4aOCyZBwMKAG5ldHdvcmtfaWTXRAS7CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:lime_stained_glass_pane", + "groupId": 9, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAwAACAQAbmFtZSEAbWluZWNyYWZ0OmxpbWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNo3CtUyLwoGegDCgBuZXR3b3JrX2lkYJDnggoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:green_stained_glass_pane", + "groupId": 9, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSOAwAACAQAbmFtZSIAbWluZWNyYWZ0OmdyZWVuX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaJo6YP7IMy9SAwoAbmV0d29ya19pZHOnixoKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:cyan_stained_glass_pane", + "groupId": 9, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAwAACAQAbmFtZSEAbWluZWNyYWZ0OmN5YW5fc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoti97c6QrbLQDCgBuZXR3b3JrX2lkUqFUeQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:light_blue_stained_glass_pane", + "groupId": 9, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAwAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNovDg/gQle104DCgBuZXR3b3JrX2lkFuy4MQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:blue_stained_glass_pane", + "groupId": 9, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSMAwAACAQAbmFtZSEAbWluZWNyYWZ0OmJsdWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoGc57tiexbQMDCgBuZXR3b3JrX2lk1eBLUAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:purple_stained_glass_pane", + "groupId": 9, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAwAACAQAbmFtZSMAbWluZWNyYWZ0OnB1cnBsZV9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2hDJHYdd0FdfQMKAG5ldHdvcmtfaWSNsdK5CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:magenta_stained_glass_pane", + "groupId": 9, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAwAACAQAbmFtZSQAbWluZWNyYWZ0Om1hZ2VudGFfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNo3pcOw5bs5XoDCgBuZXR3b3JrX2lkVbOR7AoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:pink_stained_glass_pane", + "groupId": 9, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAwAACAQAbmFtZSEAbWluZWNyYWZ0OnBpbmtfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoWRhSACMWgswDCgBuZXR3b3JrX2lkIR92xwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:ladder", + "groupId": 10, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRBAAAACAQAbmFtZRAAbWluZWNyYWZ0OmxhZGRlcgQJAG5hbWVfaGFzaKBhqheJVOz+AwoAbmV0d29ya19pZCgvzlsKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:scaffolding", + "groupId": 10, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAQAACAQAbmFtZRUAbWluZWNyYWZ0OnNjYWZmb2xkaW5nBAkAbmFtZV9oYXNoYrkevrqcljwDCgBuZXR3b3JrX2lkD13mlAoGAHN0YXRlcwMJAHN0YWJpbGl0eQAAAAABDwBzdGFiaWxpdHlfY2hlY2sAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:brick_block", + "groupId": 10, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAAAACAQAbmFtZRUAbWluZWNyYWZ0OmJyaWNrX2Jsb2NrBAkAbmFtZV9oYXNo5Qc2E005S3oDCgBuZXR3b3JrX2lkqeGWRgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:smooth_stone_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAAAACAQAbmFtZRsAbWluZWNyYWZ0OnNtb290aF9zdG9uZV9zbGFiBAkAbmFtZV9oYXNon5I1yVw74uMDCgBuZXR3b3JrX2lkqvjcBQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:normal_stone_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSCBAAACAQAbmFtZRsAbWluZWNyYWZ0Om5vcm1hbF9zdG9uZV9zbGFiBAkAbmFtZV9oYXNoIvsjJLQdolcDCgBuZXR3b3JrX2lkC1zqRQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:cobblestone_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRoBAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3NsYWIECQBuYW1lX2hhc2h5CXtW7vlQVgMKAG5ldHdvcmtfaWRDGyj2CgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:mossy_cobblestone_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR3BAAACAQAbmFtZSAAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lX3NsYWIECQBuYW1lX2hhc2ijm1BCwB82VgMKAG5ldHdvcmtfaWR7ByMGCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:oak_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAAAACAQAbmFtZRIAbWluZWNyYWZ0Om9ha19zbGFiBAkAbmFtZV9oYXNoJp1Cp1M4jlwDCgBuZXR3b3JrX2lkZH6+owoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:spruce_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQjBAAACAQAbmFtZRUAbWluZWNyYWZ0OnNwcnVjZV9zbGFiBAkAbmFtZV9oYXNodQi70jB238cDCgBuZXR3b3JrX2lkrriOYQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:birch_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQkBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJpcmNoX3NsYWIECQBuYW1lX2hhc2gZPpfMxoOsTAMKAG5ldHdvcmtfaWThR9jyCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:jungle_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQlBAAACAQAbmFtZRUAbWluZWNyYWZ0Omp1bmdsZV9zbGFiBAkAbmFtZV9oYXNo6gLs79NXak4DCgBuZXR3b3JrX2lk5ZiKgwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:acacia_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmBAAACAQAbmFtZRUAbWluZWNyYWZ0OmFjYWNpYV9zbGFiBAkAbmFtZV9oYXNomSdFmDnv4OUDCgBuZXR3b3JrX2lkHttaXAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:dark_oak_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQnBAAACAQAbmFtZRcAbWluZWNyYWZ0OmRhcmtfb2FrX3NsYWIECQBuYW1lX2hhc2hJjTohRFyhIQMKAG5ldHdvcmtfaWRMzDTyCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:mangrove_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWToAgAACAQAbmFtZRcAbWluZWNyYWZ0Om1hbmdyb3ZlX3NsYWIECQBuYW1lX2hhc2jYCcmhJPeNMwMKAG5ldHdvcmtfaWQx6U1yCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:cherry_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQaAwAACAQAbmFtZRUAbWluZWNyYWZ0OmNoZXJyeV9zbGFiBAkAbmFtZV9oYXNoTt0MmVn/mqoDCgBuZXR3b3JrX2lk2VVsZQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:pale_oak_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTlBAAACAQAbmFtZRcAbWluZWNyYWZ0OnBhbGVfb2FrX3NsYWIECQBuYW1lX2hhc2g9QqTGUjo2XgMKAG5ldHdvcmtfaWQoWvcmCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:bamboo_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQAAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJhbWJvb19zbGFiBAkAbmFtZV9oYXNoo1xuFqINeLYDCgBuZXR3b3JrX2lkVC+0twoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:bamboo_mosaic_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQLAwAACAQAbmFtZRwAbWluZWNyYWZ0OmJhbWJvb19tb3NhaWNfc2xhYgQJAG5hbWVfaGFzaNbVRBZ/ChI3AwoAbmV0d29ya19pZOLZHFMKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:stone_brick_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRqBAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2JyaWNrX3NsYWIECQBuYW1lX2hhc2js6EexuKuzrQMKAG5ldHdvcmtfaWRSsMxaCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:mossy_stone_brick_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAQAACAQAbmFtZSAAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrX3NsYWIECQBuYW1lX2hhc2hiA4kFUl4tHAMKAG5ldHdvcmtfaWS6joSOCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:sandstone_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRnBAAACAQAbmFtZRgAbWluZWNyYWZ0OnNhbmRzdG9uZV9zbGFiBAkAbmFtZV9oYXNo/GMI0MZnrhsDCgBuZXR3b3JrX2lkFP8WmwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:cut_sandstone_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDBAAACAQAbmFtZRwAbWluZWNyYWZ0OmN1dF9zYW5kc3RvbmVfc2xhYgQJAG5hbWVfaGFzaE+zxVQweViJAwoAbmV0d29ya19pZHsu74YKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:smooth_sandstone_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR4BAAACAQAbmFtZR8AbWluZWNyYWZ0OnNtb290aF9zYW5kc3RvbmVfc2xhYgQJAG5hbWVfaGFzaIkmsO1gw3gnAwoAbmV0d29ya19pZFSiwP0KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:red_sandstone_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRwAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmVfc2xhYgQJAG5hbWVfaGFzaEyDjeWlUHItAwoAbmV0d29ya19pZIT4rmwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:cut_red_sandstone_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSEBAAACAQAbmFtZSAAbWluZWNyYWZ0OmN1dF9yZWRfc2FuZHN0b25lX3NsYWIECQBuYW1lX2hhc2hTVRS++snU3wMKAG5ldHdvcmtfaWSvIAviCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:smooth_red_sandstone_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR6BAAACAQAbmFtZSMAbWluZWNyYWZ0OnNtb290aF9yZWRfc2FuZHN0b25lX3NsYWIECQBuYW1lX2hhc2i9iN2UK272tgMKAG5ldHdvcmtfaWRUZrwJCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:granite_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR/BAAACAQAbmFtZRYAbWluZWNyYWZ0OmdyYW5pdGVfc2xhYgQJAG5hbWVfaGFzaL0HprlAhhZwAwoAbmV0d29ya19pZIcIdc8KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:polished_granite_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSABAAACAQAbmFtZR8AbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGVfc2xhYgQJAG5hbWVfaGFzaP6bXk5w2dGrAwoAbmV0d29ya19pZCsRy1cKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:diorite_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR9BAAACAQAbmFtZRYAbWluZWNyYWZ0OmRpb3JpdGVfc2xhYgQJAG5hbWVfaGFzaM3ppS8v55sNAwoAbmV0d29ya19pZB+Pv9oKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:polished_diorite_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR+BAAACAQAbmFtZR8AbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGVfc2xhYgQJAG5hbWVfaGFzaLZlyJLkMPhyAwoAbmV0d29ya19pZFM0HYwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:andesite_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR8BAAACAQAbmFtZRcAbWluZWNyYWZ0OmFuZGVzaXRlX3NsYWIECQBuYW1lX2hhc2icIrtuy/aosAMKAG5ldHdvcmtfaWTtXTtYCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:polished_andesite_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR7BAAACAQAbmFtZSAAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlX3NsYWIECQBuYW1lX2hhc2j56zJOfCF+3wMKAG5ldHdvcmtfaWRBs69FCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:brick_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRpBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJyaWNrX3NsYWIECQBuYW1lX2hhc2hO/Da4jU2v4wMKAG5ldHdvcmtfaWRG/qphCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:nether_brick_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRsBAAACAQAbmFtZRsAbWluZWNyYWZ0Om5ldGhlcl9icmlja19zbGFiBAkAbmFtZV9oYXNonymoa2zbbqMDCgBuZXR3b3JrX2lkquvR1QoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:red_nether_brick_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR5BAAACAQAbmFtZR8AbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaG89ujUk3Y64AwoAbmV0d29ya19pZEZIunAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:end_stone_brick_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZR4AbWluZWNyYWZ0OmVuZF9zdG9uZV9icmlja19zbGFiBAkAbmFtZV9oYXNo4tkxQtl+IyQDCgBuZXR3b3JrX2lkhByH/woGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:quartz_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRrBAAACAQAbmFtZRUAbWluZWNyYWZ0OnF1YXJ0el9zbGFiBAkAbmFtZV9oYXNo9JMj3upfsbwDCgBuZXR3b3JrX2lkn2g2VAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:smooth_quartz_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSBBAAACAQAbmFtZRwAbWluZWNyYWZ0OnNtb290aF9xdWFydHpfc2xhYgQJAG5hbWVfaGFzaHOSJv8ve0nmAwoAbmV0d29ya19pZFMk/JsKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:purpur_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRzBAAACAQAbmFtZRUAbWluZWNyYWZ0OnB1cnB1cl9zbGFiBAkAbmFtZV9oYXNo4XeWbKpx2ScDCgBuZXR3b3JrX2lkRkga5goGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:prismarine_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR0BAAACAQAbmFtZRkAbWluZWNyYWZ0OnByaXNtYXJpbmVfc2xhYgQJAG5hbWVfaGFzaI9x+1fY8QRfAwoAbmV0d29ya19pZBTUZhwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:dark_prismarine_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR1BAAACAQAbmFtZR4AbWluZWNyYWZ0OmRhcmtfcHJpc21hcmluZV9zbGFiBAkAbmFtZV9oYXNoSsZGDkEL5ZUDCgBuZXR3b3JrX2lkNLQ8VwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:prismarine_brick_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR2BAAACAQAbmFtZR8AbWluZWNyYWZ0OnByaXNtYXJpbmVfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaB1FSbVi97xJAwoAbmV0d29ya19pZEBwwFMKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:crimson_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAgAACAQAbmFtZRYAbWluZWNyYWZ0OmNyaW1zb25fc2xhYgQJAG5hbWVfaGFzaKZ+EfP0ZYOZAwoAbmV0d29ya19pZAxRUWAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:warped_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQIAgAACAQAbmFtZRUAbWluZWNyYWZ0OndhcnBlZF9zbGFiBAkAbmFtZV9oYXNo/AT0e/Z9W7UDCgBuZXR3b3JrX2lk1yq11AoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:blackstone_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsYWNrc3RvbmVfc2xhYgQJAG5hbWVfaGFzaF/DD4ZUlNgtAwoAbmV0d29ya19pZGy1DjwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:polished_blackstone_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQkAgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfc2xhYgQJAG5hbWVfaGFzaDYnuUs86EWfAwoAbmV0d29ya19pZJj2bXIKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:polished_blackstone_brick_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQbAgAACAQAbmFtZSgAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaKySLqvHc4xXAwoAbmV0d29ya19pZOyWX94KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:cobbled_deepslate_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AgAACAQAbmFtZSAAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3NsYWIECQBuYW1lX2hhc2gwJIVWK1TM2QMKAG5ldHdvcmtfaWTYAoX5CgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:polished_deepslate_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR/AgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV9zbGFiBAkAbmFtZV9oYXNoC/Adiz8k6RYDCgBuZXR3b3JrX2lkuFYMAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:deepslate_tile_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3NsYWIECQBuYW1lX2hhc2hPydV6emzIXAMKAG5ldHdvcmtfaWQwlbFCCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:deepslate_brick_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja19zbGFiBAkAbmFtZV9oYXNoSv62V7iw10UDCgBuZXR3b3JrX2lkWMoragoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:tuff_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAwAACAQAbmFtZRMAbWluZWNyYWZ0OnR1ZmZfc2xhYgQJAG5hbWVfaGFzaIhCGdlIsnMUAwoAbmV0d29ya19pZN1dUL4KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:polished_tuff_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTsAwAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmZfc2xhYgQJAG5hbWVfaGFzaLXdb48YvAsHAwoAbmV0d29ya19pZAnJ7W0KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:tuff_brick_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTyAwAACAQAbmFtZRkAbWluZWNyYWZ0OnR1ZmZfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaLqPMjVCv5dIAwoAbmV0d29ya19pZOmeRhcKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:mud_brick_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAgAACAQAbmFtZRgAbWluZWNyYWZ0Om11ZF9icmlja19zbGFiBAkAbmFtZV9oYXNoq/tGBQWkv08DCgBuZXR3b3JrX2lkl4nnMwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:cut_copper_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRoAgAACAQAbmFtZRkAbWluZWNyYWZ0OmN1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaDsNpb2qs4iBAwoAbmV0d29ya19pZOTm2nsKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:exposed_cut_copper_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRpAgAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcl9zbGFiBAkAbmFtZV9oYXNoahQ5OwIQb7kDCgBuZXR3b3JrX2lkrUlZLwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:weathered_cut_copper_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRqAgAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyX3NsYWIECQBuYW1lX2hhc2hBIuGIOVVXogMKAG5ldHdvcmtfaWQgnaDiCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:oxidized_cut_copper_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAgAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaOptj9ycfpaDAwoAbmV0d29ya19pZMzFSRgKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:waxed_cut_copper_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaAlx6DZOCTHzAwoAbmV0d29ya19pZFRBvDAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:waxed_exposed_cut_copper_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAgAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcl9zbGFiBAkAbmFtZV9oYXNo3KqS5OnhtRIDCgBuZXR3b3JrX2lkHTGcTgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:waxed_weathered_cut_copper_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyX3NsYWIECQBuYW1lX2hhc2gzZ1oX0HCFtwMKAG5ldHdvcmtfaWSgJR+XCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:waxed_oxidized_cut_copper_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTAAgAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaMjjTnLu1KcqAwoAbmV0d29ya19pZIxsnFYKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:resin_brick_slab", + "groupId": 11, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT1BAAACAQAbmFtZRoAbWluZWNyYWZ0OnJlc2luX2JyaWNrX3NsYWIECQBuYW1lX2hhc2hAGu/Hlaa12QMKAG5ldHdvcmtfaWSyDq8CCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:stone_bricks", + "groupId": 12, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAAAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX2JyaWNrcwQJAG5hbWVfaGFzaGAiQu8VWVJRAwoAbmV0d29ya19pZH2DjXUKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:mossy_stone_bricks", + "groupId": 12, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRjBAAACAQAbmFtZRwAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaIZBO00MONRIAwoAbmV0d29ya19pZL2WDrAKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:cracked_stone_bricks", + "groupId": 12, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRkBAAACAQAbmFtZR4AbWluZWNyYWZ0OmNyYWNrZWRfc3RvbmVfYnJpY2tzBAkAbmFtZV9oYXNocIkAp6riMz4DCgBuZXR3b3JrX2lkTWGeCwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:chiseled_stone_bricks", + "groupId": 12, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRlBAAACAQAbmFtZR8AbWluZWNyYWZ0OmNoaXNlbGVkX3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaMB2FPLLADkEAwoAbmV0d29ya19pZOIPn0IKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:smooth_stone", + "groupId": 12, + "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AQAACAQAbmFtZRYAbWluZWNyYWZ0OnNtb290aF9zdG9uZQQJAG5hbWVfaGFzaMwf87/JaTNvAwoAbmV0d29ya19pZLkZICEKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:end_bricks", + "groupId": 12, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTOAAAACAQAbmFtZRQAbWluZWNyYWZ0OmVuZF9icmlja3MECQBuYW1lX2hhc2hIUFfxNLZaFgMKAG5ldHdvcmtfaWQ/vDihCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:polished_blackstone_bricks", + "groupId": 12, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tzBAkAbmFtZV9oYXNoIHgsgIdzKXcDCgBuZXR3b3JrX2lkUw9b3woGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:cracked_polished_blackstone_bricks", + "groupId": 12, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAgAACAQAbmFtZSwAbWluZWNyYWZ0OmNyYWNrZWRfcG9saXNoZWRfYmxhY2tzdG9uZV9icmlja3MECQBuYW1lX2hhc2jQIO1GQDk80AMKAG5ldHdvcmtfaWQ3UlRYCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:gilded_blackstone", + "groupId": 12, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAgAACAQAbmFtZRsAbWluZWNyYWZ0OmdpbGRlZF9ibGFja3N0b25lBAkAbmFtZV9oYXNoNoWt1ocG0HEDCgBuZXR3b3JrX2lktL8gUwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:chiseled_polished_blackstone", + "groupId": 12, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAgAACAQAbmFtZSYAbWluZWNyYWZ0OmNoaXNlbGVkX3BvbGlzaGVkX2JsYWNrc3RvbmUECQBuYW1lX2hhc2gzFa+kEjCJgAMKAG5ldHdvcmtfaWR2NJX2CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:deepslate_tiles", + "groupId": 12, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAgAACAQAbmFtZRkAbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlcwQJAG5hbWVfaGFzaGcLLx3NXAFvAwoAbmV0d29ya19pZI/G/xYKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:cracked_deepslate_tiles", + "groupId": 12, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSYAgAACAQAbmFtZSEAbWluZWNyYWZ0OmNyYWNrZWRfZGVlcHNsYXRlX3RpbGVzBAkAbmFtZV9oYXNo9zWgkFuMM1QDCgBuZXR3b3JrX2lkGwY6OgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:deepslate_bricks", + "groupId": 12, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAgAACAQAbmFtZRoAbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja3MECQBuYW1lX2hhc2gucvFmPdZxigMKAG5ldHdvcmtfaWSH4HDPCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:tuff_bricks", + "groupId": 12, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAwAACAQAbmFtZRUAbWluZWNyYWZ0OnR1ZmZfYnJpY2tzBAkAbmFtZV9oYXNo/hbQ+mXSK7wDCgBuZXR3b3JrX2lk6gmIwQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:cracked_deepslate_bricks", + "groupId": 12, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAgAACAQAbmFtZSIAbWluZWNyYWZ0OmNyYWNrZWRfZGVlcHNsYXRlX2JyaWNrcwQJAG5hbWVfaGFzaN40aqhh9WqHAwoAbmV0d29ya19pZO9GPBQKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:chiseled_deepslate", + "groupId": 12, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAgAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaEU7/uRG8HSBAwoAbmV0d29ya19pZEqmI0EKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:chiseled_tuff", + "groupId": 12, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoaXNlbGVkX3R1ZmYECQBuYW1lX2hhc2iVliOT8OTQ9AMKAG5ldHdvcmtfaWTLNKOiCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:chiseled_tuff_bricks", + "groupId": 12, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT2AwAACAQAbmFtZR4AbWluZWNyYWZ0OmNoaXNlbGVkX3R1ZmZfYnJpY2tzBAkAbmFtZV9oYXNo3oQw6gmxYuADCgBuZXR3b3JrX2lkm3D8AgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:cobblestone", + "groupId": 13, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAAAACAQAbmFtZRUAbWluZWNyYWZ0OmNvYmJsZXN0b25lBAkAbmFtZV9oYXNoPoK7mGlSUz4DCgBuZXR3b3JrX2lkLm7RZwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:mossy_cobblestone", + "groupId": 13, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQwAAAACAQAbmFtZRsAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lBAkAbmFtZV9oYXNoGJ67FCbkChMDCgBuZXR3b3JrX2lk/pYs1AoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:cobbled_deepslate", + "groupId": 13, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AgAACAQAbmFtZRsAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlBAkAbmFtZV9oYXNoLUz9Y/ywmLwDCgBuZXR3b3JrX2lkNwzZ+AoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:sandstone", + "groupId": 14, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZPsXMaQKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:chiseled_sandstone", + "groupId": 14, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSvBAAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX3NhbmRzdG9uZQQJAG5hbWVfaGFzaPEkxMvZmemgAwoAbmV0d29ya19pZGI5NB4KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:cut_sandstone", + "groupId": 14, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSwBAAACAQAbmFtZRcAbWluZWNyYWZ0OmN1dF9zYW5kc3RvbmUECQBuYW1lX2hhc2ichLQc71njnQMKAG5ldHdvcmtfaWSmBLkRCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:smooth_sandstone", + "groupId": 14, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSxBAAACAQAbmFtZRoAbWluZWNyYWZ0OnNtb290aF9zYW5kc3RvbmUECQBuYW1lX2hhc2huR7XTwISyCAMKAG5ldHdvcmtfaWSzWj3UCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:red_sandstone", + "groupId": 14, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWRXRYxZCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:chiseled_red_sandstone", + "groupId": 14, + "block_state_b64": "CgAAAwgAYmxvY2tfaWS7BAAACAQAbmFtZSAAbWluZWNyYWZ0OmNoaXNlbGVkX3JlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2gh5sX+ON054wMKAG5ldHdvcmtfaWT6Pw1PCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:cut_red_sandstone", + "groupId": 14, + "block_state_b64": "CgAAAwgAYmxvY2tfaWS8BAAACAQAbmFtZRsAbWluZWNyYWZ0OmN1dF9yZWRfc2FuZHN0b25lBAkAbmFtZV9oYXNoaOtka4NrQ1EDCgBuZXR3b3JrX2lk3r/JPAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:smooth_red_sandstone", + "groupId": 14, + "block_state_b64": "CgAAAwgAYmxvY2tfaWS9BAAACAQAbmFtZR4AbWluZWNyYWZ0OnNtb290aF9yZWRfc2FuZHN0b25lBAkAbmFtZV9oYXNoqsNl8x36ju4DCgBuZXR3b3JrX2lk7x5DTwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:coal_block", + "groupId": 15, + "block_state_b64": "CgAAAwgAYmxvY2tfaWStAAAACAQAbmFtZRQAbWluZWNyYWZ0OmNvYWxfYmxvY2sECQBuYW1lX2hhc2jH8QQP3t5PiAMKAG5ldHdvcmtfaWRo+sR+CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:dried_kelp_block", + "groupId": 15, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAQAACAQAbmFtZRoAbWluZWNyYWZ0OmRyaWVkX2tlbHBfYmxvY2sECQBuYW1lX2hhc2iRoucexkrl8wMKAG5ldHdvcmtfaWQQCCrvCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:copper_block", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRTAgAACAQAbmFtZRYAbWluZWNyYWZ0OmNvcHBlcl9ibG9jawQJAG5hbWVfaGFzaDVxnehsGaZ1AwoAbmV0d29ya19pZIiUodwKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:weathered_copper", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAgAACAQAbmFtZRoAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2hJCQXbvobv+gMKAG5ldHdvcmtfaWQwM0lJCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:exposed_copper", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAgAACAQAbmFtZRgAbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoQH3Fukmu3CEDCgBuZXR3b3JrX2lk72jFIwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:oxidized_copper", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAgAACAQAbmFtZRkAbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMDtJqR0G5Y7AwoAbmV0d29ya19pZGjN8bUKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:waxed_copper", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAgAACAQAbmFtZRYAbWluZWNyYWZ0OndheGVkX2NvcHBlcgQJAG5hbWVfaGFzaPF+FG6Eh5fsAwoAbmV0d29ya19pZIjtz/0KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:waxed_exposed_copper", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAgAACAQAbmFtZR4AbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoig8IOc+SCikDCgBuZXR3b3JrX2lklz8yWQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:waxed_weathered_copper", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRZAgAACAQAbmFtZSAAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2gjtPq8MOdvKgMKAG5ldHdvcmtfaWSQ9Ln9CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:waxed_oxidized_copper", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWS9AgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMaORhsO+LzjAwoAbmV0d29ya19pZJhGfLEKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:copper_grate", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT/AwAACAQAbmFtZRYAbWluZWNyYWZ0OmNvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaC/JEFOWnmEcAwoAbmV0d29ya19pZC6YiiMKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:exposed_copper_grate", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQABAAACAQAbmFtZR4AbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyX2dyYXRlBAkAbmFtZV9oYXNolFIBYLYU0IcDCgBuZXR3b3JrX2lk4UqptAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:weathered_copper_grate", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQBBAAACAQAbmFtZSAAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXJfZ3JhdGUECQBuYW1lX2hhc2jB3o8enlv1RgMKAG5ldHdvcmtfaWRih2pOCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:oxidized_copper_grate", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQCBAAACAQAbmFtZR8AbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaBRfNhyndve7AwoAbmV0d29ya19pZKY2cnEKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:waxed_copper_grate", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQDBAAACAQAbmFtZRwAbWluZWNyYWZ0OndheGVkX2NvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaDmC92M2RO+HAwoAbmV0d29ya19pZH4og2AKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:waxed_exposed_copper_grate", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQEBAAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyX2dyYXRlBAkAbmFtZV9oYXNoWmd6B+hWwiEDCgBuZXR3b3JrX2lk8d4ZQwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:waxed_weathered_copper_grate", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQFBAAACAQAbmFtZSYAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXJfZ3JhdGUECQBuYW1lX2hhc2hXfilVFDAiYQMKAG5ldHdvcmtfaWQqTGC1CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:waxed_oxidized_copper_grate", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQGBAAACAQAbmFtZSUAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaEbeMT605GP4AwoAbmV0d29ya19pZOZjpkkKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:cut_copper", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRaAgAACAQAbmFtZRQAbWluZWNyYWZ0OmN1dF9jb3BwZXIECQBuYW1lX2hhc2hAfN3NGax3eAMKAG5ldHdvcmtfaWTnFBtYCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:exposed_cut_copper", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAgAACAQAbmFtZRwAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcgQJAG5hbWVfaGFzaA85G3yv/w6pAwoAbmV0d29ya19pZMQhr0QKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:weathered_cut_copper", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRcAgAACAQAbmFtZR4AbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyBAkAbmFtZV9oYXNoVgRV0fBaz88DCgBuZXR3b3JrX2lk/0cYugoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:oxidized_cut_copper", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRdAgAACAQAbmFtZR0AbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2iP8WmFWOkriwMKAG5ldHdvcmtfaWQPdce7CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:waxed_cut_copper", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWReAgAACAQAbmFtZRoAbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2jumiwOZIqv2AMKAG5ldHdvcmtfaWQvuxx9CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:waxed_exposed_cut_copper", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRfAgAACAQAbmFtZSIAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcgQJAG5hbWVfaGFzaPE/OfK6IoVMAwoAbmV0d29ya19pZHy5HkcKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:waxed_weathered_cut_copper", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRgAgAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyBAkAbmFtZV9oYXNoCA1xDp11bnwDCgBuZXR3b3JrX2lkDyEDVQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:waxed_oxidized_cut_copper", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWS+AgAACAQAbmFtZSMAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2i1pZAsZYHLDAMKAG5ldHdvcmtfaWQ/wSkCCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:chiseled_copper", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT3AwAACAQAbmFtZRkAbWluZWNyYWZ0OmNoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaIsW5pmpJEuQAwoAbmV0d29ya19pZHetwrkKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:exposed_chiseled_copper", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT4AwAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY2hpc2VsZWRfY29wcGVyBAkAbmFtZV9oYXNoOvrLJ0UowbgDCgBuZXR3b3JrX2lkZj7cPwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:weathered_chiseled_copper", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT5AwAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jaGlzZWxlZF9jb3BwZXIECQBuYW1lX2hhc2hh+42XlsWvGAMKAG5ldHdvcmtfaWS7Cy59CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:oxidized_chiseled_copper", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT6AwAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2NoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaLpTIsnfluiCAwoAbmV0d29ya19pZB9/jS8KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:waxed_chiseled_copper", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT7AwAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2NoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaFnXvXY5OinzAwoAbmV0d29ya19pZAcKtHsKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:waxed_exposed_chiseled_copper", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT8AwAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY2hpc2VsZWRfY29wcGVyBAkAbmFtZV9oYXNoHJdq+Pph6hMDCgBuZXR3b3JrX2lkdge7IAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:waxed_oxidized_chiseled_copper", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT9AwAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaMj49OvlTpgCAwoAbmV0d29ya19pZN/r+roKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:waxed_weathered_chiseled_copper", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT+AwAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jaGlzZWxlZF9jb3BwZXIECQBuYW1lX2hhc2hzuO+Sg9LYQwMKAG5ldHdvcmtfaWQ7AN7iCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:copper_bulb", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQHBAAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcHBlcl9idWxiBAkAbmFtZV9oYXNo41TimHOsMWcDCgBuZXR3b3JrX2lkJnZvAgoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:exposed_copper_bulb", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQIBAAACAQAbmFtZR0AbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyX2J1bGIECQBuYW1lX2hhc2g++f1wYLLCrAMKAG5ldHdvcmtfaWRLdMmGCgYAc3RhdGVzAQMAbGl0AAELAHBvd2VyZWRfYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:weathered_copper_bulb", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQJBAAACAQAbmFtZR8AbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXJfYnVsYgQJAG5hbWVfaGFzaMEtsYfwRTXlAwoAbmV0d29ya19pZAp51LQKBgBzdGF0ZXMBAwBsaXQAAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:oxidized_copper_bulb", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQKBAAACAQAbmFtZR4AbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcl9idWxiBAkAbmFtZV9oYXNovnrBQZs8nDIDCgBuZXR3b3JrX2lkPsj0AAoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:waxed_copper_bulb", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQLBAAACAQAbmFtZRsAbWluZWNyYWZ0OndheGVkX2NvcHBlcl9idWxiBAkAbmFtZV9oYXNoGTg6TYllMiIDCgBuZXR3b3JrX2lk9m0WhgoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:waxed_exposed_copper_bulb", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQMBAAACAQAbmFtZSMAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyX2J1bGIECQBuYW1lX2hhc2gI6xkPcvBDVwMKAG5ldHdvcmtfaWR7BRcACgYAc3RhdGVzAQMAbGl0AAELAHBvd2VyZWRfYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:waxed_weathered_copper_bulb", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQNBAAACAQAbmFtZSUAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXJfYnVsYgQJAG5hbWVfaGFzaMsUnmp3/VqVAwoAbmV0d29ya19pZEoworoKBgBzdGF0ZXMBAwBsaXQAAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:waxed_oxidized_copper_bulb", + "groupId": 16, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQOBAAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcl9idWxiBAkAbmFtZV9oYXNoBFKxY3fjVq4DCgBuZXR3b3JrX2lkzrJ6aAoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:iron_block", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAAAACAQAbmFtZRQAbWluZWNyYWZ0Omlyb25fYmxvY2sECQBuYW1lX2hhc2jYINmJQbvV/gMKAG5ldHdvcmtfaWRf7AbICgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:gold_block", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdvbGRfYmxvY2sECQBuYW1lX2hhc2iYLshvjtXzFwMKAG5ldHdvcmtfaWTDJGBcCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:emerald_block", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAAAACAQAbmFtZRcAbWluZWNyYWZ0OmVtZXJhbGRfYmxvY2sECQBuYW1lX2hhc2hK6QunqJznNAMKAG5ldHdvcmtfaWRk5+otCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:diamond_block", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5AAAACAQAbmFtZRcAbWluZWNyYWZ0OmRpYW1vbmRfYmxvY2sECQBuYW1lX2hhc2iGKrxuvkytFQMKAG5ldHdvcmtfaWQQeQZXCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:lapis_block", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAAAACAQAbmFtZRUAbWluZWNyYWZ0OmxhcGlzX2Jsb2NrBAkAbmFtZV9oYXNoDZ44xdb2zVoDCgBuZXR3b3JrX2lktVy0BAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:raw_copper_block", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTDAgAACAQAbmFtZRoAbWluZWNyYWZ0OnJhd19jb3BwZXJfYmxvY2sECQBuYW1lX2hhc2hw1KG0TNUGgwMKAG5ldHdvcmtfaWS1vGo/CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:raw_iron_block", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTCAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJhd19pcm9uX2Jsb2NrBAkAbmFtZV9oYXNo9XyzNIQXxvwDCgBuZXR3b3JrX2lknms1QAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:raw_gold_block", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJhd19nb2xkX2Jsb2NrBAkAbmFtZV9oYXNo6YuwuLwfOBwDCgBuZXR3b3JrX2lkLiQ5gQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:quartz_block", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAAAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZE2axGsKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:quartz_bricks", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAgAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9icmlja3MECQBuYW1lX2hhc2jSZO590dd8sAMKAG5ldHdvcmtfaWSc5xCLCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:quartz_pillar", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWS5BAAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9waWxsYXIECQBuYW1lX2hhc2igp62HI+PuSwMKAG5ldHdvcmtfaWS9SGXLCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:chiseled_quartz_block", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWS4BAAACAQAbmFtZR8AbWluZWNyYWZ0OmNoaXNlbGVkX3F1YXJ0el9ibG9jawQJAG5hbWVfaGFzaAftJM9mCAvaAwoAbmV0d29ya19pZFwy0s0KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:smooth_quartz", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWS6BAAACAQAbmFtZRcAbWluZWNyYWZ0OnNtb290aF9xdWFydHoECQBuYW1lX2hhc2hIVzzgiItGagMKAG5ldHdvcmtfaWTVWgU2CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:prismarine", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAAAACAQAbmFtZRQAbWluZWNyYWZ0OnByaXNtYXJpbmUECQBuYW1lX2hhc2jcnQCHi9CspQMKAG5ldHdvcmtfaWQnuuW1CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:prismarine_bricks", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSzBAAACAQAbmFtZRsAbWluZWNyYWZ0OnByaXNtYXJpbmVfYnJpY2tzBAkAbmFtZV9oYXNozeGe3/7s5fcDCgBuZXR3b3JrX2lkj/iBnAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:dark_prismarine", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSyBAAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfcHJpc21hcmluZQQJAG5hbWVfaGFzaK+rhxsgkzplAwoAbmV0d29ya19pZIdA0I0KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:slime", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnNsaW1lBAkAbmFtZV9oYXNoHJiEEJx+JlkDCgBuZXR3b3JrX2lkfgfVzAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:honey_block", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAQAACAQAbmFtZRUAbWluZWNyYWZ0OmhvbmV5X2Jsb2NrBAkAbmFtZV9oYXNo9zLYSUlelywDCgBuZXR3b3JrX2lko+dyWgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:honeycomb_block", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAQAACAQAbmFtZRkAbWluZWNyYWZ0OmhvbmV5Y29tYl9ibG9jawQJAG5hbWVfaGFzaASIPuOCYd1oAwoAbmV0d29ya19pZKys4n4KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:resin_block", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT8BAAACAQAbmFtZRUAbWluZWNyYWZ0OnJlc2luX2Jsb2NrBAkAbmFtZV9oYXNo6SHuLxdB67QDCgBuZXR3b3JrX2lkcWO4EwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:hay_block", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAAAACAQAbmFtZRMAbWluZWNyYWZ0OmhheV9ibG9jawQJAG5hbWVfaGFzaIB2VxKxX8EpAwoAbmV0d29ya19pZKuQSloKBgBzdGF0ZXMDCgBkZXByZWNhdGVkAAAAAAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:bone_block", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAAAACAQAbmFtZRQAbWluZWNyYWZ0OmJvbmVfYmxvY2sECQBuYW1lX2hhc2i4ZX576W9AWgMKAG5ldHdvcmtfaWTWGacQCgYAc3RhdGVzAwoAZGVwcmVjYXRlZAAAAAAICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:resin_bricks", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT0BAAACAQAbmFtZRYAbWluZWNyYWZ0OnJlc2luX2JyaWNrcwQJAG5hbWVfaGFzaPQfo5PcOZSaAwoAbmV0d29ya19pZB24YHwKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:chiseled_resin_bricks", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT7BAAACAQAbmFtZR8AbWluZWNyYWZ0OmNoaXNlbGVkX3Jlc2luX2JyaWNrcwQJAG5hbWVfaGFzaNSCIvsamt6qAwoAbmV0d29ya19pZBY+3hYKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:nether_brick", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRwAAAACAQAbmFtZRYAbWluZWNyYWZ0Om5ldGhlcl9icmljawQJAG5hbWVfaGFzaMxcRiheU+nXAwoAbmV0d29ya19pZMkmzloKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:red_nether_brick", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAAAACAQAbmFtZRoAbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2sECQBuYW1lX2hhc2j8pRO4LfoECAMKAG5ldHdvcmtfaWRpdF0YCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:chiseled_nether_bricks", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAgAACAQAbmFtZSAAbWluZWNyYWZ0OmNoaXNlbGVkX25ldGhlcl9icmlja3MECQBuYW1lX2hhc2g31SBPTcUK1QMKAG5ldHdvcmtfaWS8TJ+TCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:cracked_nether_bricks", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAgAACAQAbmFtZR8AbWluZWNyYWZ0OmNyYWNrZWRfbmV0aGVyX2JyaWNrcwQJAG5hbWVfaGFzaAdC6eKzXT5tAwoAbmV0d29ya19pZIUSejwKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:netherite_block", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAgAACAQAbmFtZRkAbWluZWNyYWZ0Om5ldGhlcml0ZV9ibG9jawQJAG5hbWVfaGFzaMghh6Zib/ZKAwoAbmV0d29ya19pZIz0mq0KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:lodestone", + "groupId": 17, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAQAACAQAbmFtZRMAbWluZWNyYWZ0OmxvZGVzdG9uZQQJAG5hbWVfaGFzaJ2gmHOTlXv8AwoAbmV0d29ya19pZEfgB4wKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:white_wool", + "groupId": 18, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAAAACAQAbmFtZRQAbWluZWNyYWZ0OndoaXRlX3dvb2wECQBuYW1lX2hhc2jRWB7vaIEDiQMKAG5ldHdvcmtfaWSO8paQCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:light_gray_wool", + "groupId": 18, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQnAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfd29vbAQJAG5hbWVfaGFzaOpdQ1a2v4b3AwoAbmV0d29ya19pZIqZCYEKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:gray_wool", + "groupId": 18, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAwAACAQAbmFtZRMAbWluZWNyYWZ0OmdyYXlfd29vbAQJAG5hbWVfaGFzaLsc1Lp1xdIOAwoAbmV0d29ya19pZFUs+HgKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:black_wool", + "groupId": 18, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAwAACAQAbmFtZRQAbWluZWNyYWZ0OmJsYWNrX3dvb2wECQBuYW1lX2hhc2hP2HC6o0X4HAMKAG5ldHdvcmtfaWRUbORcCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:brown_wool", + "groupId": 18, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAwAACAQAbmFtZRQAbWluZWNyYWZ0OmJyb3duX3dvb2wECQBuYW1lX2hhc2ig5IW89PrREwMKAG5ldHdvcmtfaWRjT9j8CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:red_wool", + "groupId": 18, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQrAwAACAQAbmFtZRIAbWluZWNyYWZ0OnJlZF93b29sBAkAbmFtZV9oYXNoY4TBDq+mFgUDCgBuZXR3b3JrX2lktn9lcAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:orange_wool", + "groupId": 18, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAwAACAQAbmFtZRUAbWluZWNyYWZ0Om9yYW5nZV93b29sBAkAbmFtZV9oYXNoFstfrTZfSCgDCgBuZXR3b3JrX2lk+rqywwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:yellow_wool", + "groupId": 18, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAwAACAQAbmFtZRUAbWluZWNyYWZ0OnllbGxvd193b29sBAkAbmFtZV9oYXNoTFyus2RHegcDCgBuZXR3b3JrX2lkkKBhXAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:lime_wool", + "groupId": 18, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAwAACAQAbmFtZRMAbWluZWNyYWZ0OmxpbWVfd29vbAQJAG5hbWVfaGFzaNVnnzKiMxmeAwoAbmV0d29ya19pZG9b32kKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:green_wool", + "groupId": 18, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAwAACAQAbmFtZRQAbWluZWNyYWZ0OmdyZWVuX3dvb2wECQBuYW1lX2hhc2i3mElRYHIcSQMKAG5ldHdvcmtfaWSssprwCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:cyan_wool", + "groupId": 18, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQwAwAACAQAbmFtZRMAbWluZWNyYWZ0OmN5YW5fd29vbAQJAG5hbWVfaGFzaBNDfvHn8dqFAwoAbmV0d29ya19pZK0hAbgKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:light_blue_wool", + "groupId": 18, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQxAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfd29vbAQJAG5hbWVfaGFzaLWFAUfyxFPNAwoAbmV0d29ya19pZL2oEugKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:blue_wool", + "groupId": 18, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQyAwAACAQAbmFtZRMAbWluZWNyYWZ0OmJsdWVfd29vbAQJAG5hbWVfaGFzaLjHyxxbTWCLAwoAbmV0d29ya19pZPaLdFQKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:purple_wool", + "groupId": 18, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQzAwAACAQAbmFtZRUAbWluZWNyYWZ0OnB1cnBsZV93b29sBAkAbmFtZV9oYXNojvFtqzjAf/4DCgBuZXR3b3JrX2lklqASNQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:magenta_wool", + "groupId": 18, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ0AwAACAQAbmFtZRYAbWluZWNyYWZ0Om1hZ2VudGFfd29vbAQJAG5hbWVfaGFzaGuOHvf+Pd4yAwoAbmV0d29ya19pZI4UoDQKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:pink_wool", + "groupId": 18, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ1AwAACAQAbmFtZRMAbWluZWNyYWZ0OnBpbmtfd29vbAQJAG5hbWVfaGFzaPiVA2pFeoFLAwoAbmV0d29ya19pZOZRO6oKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:white_carpet", + "groupId": 19, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAAAACAQAbmFtZRYAbWluZWNyYWZ0OndoaXRlX2NhcnBldAQJAG5hbWVfaGFzaNeMHTI1fWPXAwoAbmV0d29ya19pZEahDFcKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:light_gray_carpet", + "groupId": 19, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAwAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FycGV0BAkAbmFtZV9oYXNoHPw6ArBAsP0DCgBuZXR3b3JrX2lkQoAeUAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:gray_carpet", + "groupId": 19, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRaAwAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXlfY2FycGV0BAkAbmFtZV9oYXNoZVR0OI+1VRADCgBuZXR3b3JrX2lkETF4WwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:black_carpet", + "groupId": 19, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJsYWNrX2NhcnBldAQJAG5hbWVfaGFzaOk7LP9NptyhAwoAbmV0d29ya19pZFjmXtIKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:brown_carpet", + "groupId": 19, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRfAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJyb3duX2NhcnBldAQJAG5hbWVfaGFzaNaXFyOsAvIvAwoAbmV0d29ya19pZHPjFuoKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:red_carpet", + "groupId": 19, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAwAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9jYXJwZXQECQBuYW1lX2hhc2i9eSKBf6SO3wMKAG5ldHdvcmtfaWQuhI/KCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:orange_carpet", + "groupId": 19, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAwAACAQAbmFtZRcAbWluZWNyYWZ0Om9yYW5nZV9jYXJwZXQECQBuYW1lX2hhc2hIUkO4HlAdygMKAG5ldHdvcmtfaWSyKV9OCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:yellow_carpet", + "groupId": 19, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAwAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19jYXJwZXQECQBuYW1lX2hhc2hSDKX3scCamwMKAG5ldHdvcmtfaWT8nq+ECgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:lime_carpet", + "groupId": 19, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAwAACAQAbmFtZRUAbWluZWNyYWZ0OmxpbWVfY2FycGV0BAkAbmFtZV9oYXNo+6KFOpzsib4DCgBuZXR3b3JrX2lkT+DS4woGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:green_carpet", + "groupId": 19, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRgAwAACAQAbmFtZRYAbWluZWNyYWZ0OmdyZWVuX2NhcnBldAQJAG5hbWVfaGFzaCHPMP9ltqFJAwoAbmV0d29ya19pZBgwAvAKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:cyan_carpet", + "groupId": 19, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRcAwAACAQAbmFtZRUAbWluZWNyYWZ0OmN5YW5fY2FycGV0BAkAbmFtZV9oYXNobXf62dQBJj8DCgBuZXR3b3JrX2lkKVppLgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:light_blue_carpet", + "groupId": 19, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAwAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FycGV0BAkAbmFtZV9oYXNo20l4oktdZ3sDCgBuZXR3b3JrX2lkjdeMiwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:blue_carpet", + "groupId": 19, + "block_state_b64": "CgAAAwgAYmxvY2tfaWReAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfY2FycGV0BAkAbmFtZV9oYXNo3p3lsW0eQwsDCgBuZXR3b3JrX2lkAovdPQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:purple_carpet", + "groupId": 19, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRdAwAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnBsZV9jYXJwZXQECQBuYW1lX2hhc2jwIA9pW/qp7QMKAG5ldHdvcmtfaWTqJqhjCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:magenta_carpet", + "groupId": 19, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAwAACAQAbmFtZRgAbWluZWNyYWZ0Om1hZ2VudGFfY2FycGV0BAkAbmFtZV9oYXNoFXT36YNNZhMDCgBuZXR3b3JrX2lk+tqsGAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:pink_carpet", + "groupId": 19, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRZAwAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfY2FycGV0BAkAbmFtZV9oYXNoHll72oqk+OoDCgBuZXR3b3JrX2lkrnBYDwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:white_concrete_powder", + "groupId": 20, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTtAAAACAQAbmFtZR8AbWluZWNyYWZ0OndoaXRlX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaFUk9iXVjwV8AwoAbmV0d29ya19pZJPZY8AKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:light_gray_concrete_powder", + "groupId": 20, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAwAACAQAbmFtZSQAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNo7EUk30hmUtYDCgBuZXR3b3JrX2lkh8jVIwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:gray_concrete_powder", + "groupId": 20, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAwAACAQAbmFtZR4AbWluZWNyYWZ0OmdyYXlfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoW77af6WihdwDCgBuZXR3b3JrX2lkSsqC1woGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:black_concrete_powder", + "groupId": 20, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTSAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJsYWNrX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaAfWYp0xtgcfAwoAbmV0d29ya19pZMWTC8EKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:brown_concrete_powder", + "groupId": 20, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTPAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJyb3duX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaB74EeiLO46XAwoAbmV0d29ya19pZEDHKqwKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:red_concrete_powder", + "groupId": 20, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTRAwAACAQAbmFtZR0AbWluZWNyYWZ0OnJlZF9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2gjFut6Z/VH1gMKAG5ldHdvcmtfaWSvcmwYCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:orange_concrete_powder", + "groupId": 20, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAwAACAQAbmFtZSAAbWluZWNyYWZ0Om9yYW5nZV9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2gADDj2IJiw+gMKAG5ldHdvcmtfaWTHph0FCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:yellow_concrete_powder", + "groupId": 20, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTHAwAACAQAbmFtZSAAbWluZWNyYWZ0OnllbGxvd19jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2iy6qKNn3ob5wMKAG5ldHdvcmtfaWQZAI39CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:lime_concrete_powder", + "groupId": 20, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAwAACAQAbmFtZR4AbWluZWNyYWZ0OmxpbWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNo4dYIPslbXPUDCgBuZXR3b3JrX2lk2O8X0AoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:green_concrete_powder", + "groupId": 20, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTQAwAACAQAbmFtZR8AbWluZWNyYWZ0OmdyZWVuX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaM/c9x2aJh3HAwoAbmV0d29ya19pZA0VfBMKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:cyan_concrete_powder", + "groupId": 20, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTMAwAACAQAbmFtZR4AbWluZWNyYWZ0OmN5YW5fY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNok+xKAe7XXjoDCgBuZXR3b3JrX2lkmkn6uwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:light_blue_concrete_powder", + "groupId": 20, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTGAwAACAQAbmFtZSQAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNogScpIQceyAEDCgBuZXR3b3JrX2lkOmVSbgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:blue_concrete_powder", + "groupId": 20, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTOAwAACAQAbmFtZR4AbWluZWNyYWZ0OmJsdWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoFp7mmeL86r0DCgBuZXR3b3JrX2lkS3b3RQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:purple_concrete_powder", + "groupId": 20, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAwAACAQAbmFtZSAAbWluZWNyYWZ0OnB1cnBsZV9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2iYcVU04hoStwMKAG5ldHdvcmtfaWQXimEjCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:magenta_concrete_powder", + "groupId": 20, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAwAACAQAbmFtZSEAbWluZWNyYWZ0Om1hZ2VudGFfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoy/70q6VPsWgDCgBuZXR3b3JrX2lkf9mxQwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:pink_concrete_powder", + "groupId": 20, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAwAACAQAbmFtZR4AbWluZWNyYWZ0OnBpbmtfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoVikSAf8DwV0DCgBuZXR3b3JrX2lku2MivwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:white_concrete", + "groupId": 21, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTsAAAACAQAbmFtZRgAbWluZWNyYWZ0OndoaXRlX2NvbmNyZXRlBAkAbmFtZV9oYXNo6zAp7lsLlvkDCgBuZXR3b3JrX2lk3MAYQAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:light_gray_concrete", + "groupId": 21, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AwAACAQAbmFtZR0AbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY29uY3JldGUECQBuYW1lX2hhc2hEtet5wuDIKAMKAG5ldHdvcmtfaWQISs02CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:gray_concrete", + "groupId": 21, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AwAACAQAbmFtZRcAbWluZWNyYWZ0OmdyYXlfY29uY3JldGUECQBuYW1lX2hhc2j92INnb0a83AMKAG5ldHdvcmtfaWQj8RHwCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:black_concrete", + "groupId": 21, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAwAACAQAbmFtZRgAbWluZWNyYWZ0OmJsYWNrX2NvbmNyZXRlBAkAbmFtZV9oYXNo2X7NDIQmZ70DCgBuZXR3b3JrX2lk2uiVDQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:brown_concrete", + "groupId": 21, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AwAACAQAbmFtZRgAbWluZWNyYWZ0OmJyb3duX2NvbmNyZXRlBAkAbmFtZV9oYXNoeka02BwXf6oDCgBuZXR3b3JrX2lkYf+xDQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:red_concrete", + "groupId": 21, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAwAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZF9jb25jcmV0ZQQJAG5hbWVfaGFzaPWmNowLGubqAwoAbmV0d29ya19pZKwyx58KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:orange_concrete", + "groupId": 21, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRzAwAACAQAbmFtZRkAbWluZWNyYWZ0Om9yYW5nZV9jb25jcmV0ZQQJAG5hbWVfaGFzaAgE8XmaAi6+AwoAbmV0d29ya19pZMDQNz8KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:yellow_concrete", + "groupId": 21, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR2AwAACAQAbmFtZRkAbWluZWNyYWZ0OnllbGxvd19jb25jcmV0ZQQJAG5hbWVfaGFzaE6ONfJPBd0+AwoAbmV0d29ya19pZMarutwKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:lime_concrete", + "groupId": 21, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR3AwAACAQAbmFtZRcAbWluZWNyYWZ0OmxpbWVfY29uY3JldGUECQBuYW1lX2hhc2gnd8JW6wmJcAMKAG5ldHdvcmtfaWTd47aoCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:green_concrete", + "groupId": 21, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR/AwAACAQAbmFtZRgAbWluZWNyYWZ0OmdyZWVuX2NvbmNyZXRlBAkAbmFtZV9oYXNokbFxRKchQZkDCgBuZXR3b3JrX2lkmhZWUgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:cyan_concrete", + "groupId": 21, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AwAACAQAbmFtZRcAbWluZWNyYWZ0OmN5YW5fY29uY3JldGUECQBuYW1lX2hhc2hFRrWJ33qj1wMKAG5ldHdvcmtfaWQbi5b8CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:light_blue_concrete", + "groupId": 21, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR1AwAACAQAbmFtZR0AbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY29uY3JldGUECQBuYW1lX2hhc2gHAe0kl0SE4AMKAG5ldHdvcmtfaWRL/GbSCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:blue_concrete", + "groupId": 21, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AwAACAQAbmFtZRcAbWluZWNyYWZ0OmJsdWVfY29uY3JldGUECQBuYW1lX2hhc2hiay301nnj1wMKAG5ldHdvcmtfaWRMvFXNCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:purple_concrete", + "groupId": 21, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR8AwAACAQAbmFtZRkAbWluZWNyYWZ0OnB1cnBsZV9jb25jcmV0ZQQJAG5hbWVfaGFzaHBHflsPIwdXAwoAbmV0d29ya19pZCyKA5gKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:magenta_concrete", + "groupId": 21, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR0AwAACAQAbmFtZRoAbWluZWNyYWZ0Om1hZ2VudGFfY29uY3JldGUECQBuYW1lX2hhc2gN7LuB/OvdZAMKAG5ldHdvcmtfaWTc6ZOdCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:pink_concrete", + "groupId": 21, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AwAACAQAbmFtZRcAbWluZWNyYWZ0OnBpbmtfY29uY3JldGUECQBuYW1lX2hhc2ii2G5F0u3SOAMKAG5ldHdvcmtfaWSszGgrCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:hardened_clay", + "groupId": 22, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAAAACAQAbmFtZRcAbWluZWNyYWZ0OmhhcmRlbmVkX2NsYXkECQBuYW1lX2hhc2jrnRwCJ0krJAMKAG5ldHdvcmtfaWRBCOrrCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:white_terracotta", + "groupId": 22, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSfAAAACAQAbmFtZRoAbWluZWNyYWZ0OndoaXRlX3RlcnJhY290dGEECQBuYW1lX2hhc2j3RSdgmnAIewMKAG5ldHdvcmtfaWSimKw+CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:light_gray_terracotta", + "groupId": 22, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAwAACAQAbmFtZR8AbWluZWNyYWZ0OmxpZ2h0X2dyYXlfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAz1Ri3wIxomAwoAbmV0d29ya19pZH5qgOcKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:gray_terracotta", + "groupId": 22, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAwAACAQAbmFtZRkAbWluZWNyYWZ0OmdyYXlfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAXdSLAaNZ9vAwoAbmV0d29ya19pZM1QDV0KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:black_terracotta", + "groupId": 22, + "block_state_b64": "CgAAAwgAYmxvY2tfaWThAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJsYWNrX3RlcnJhY290dGEECQBuYW1lX2hhc2jxssdv5vlbpgMKAG5ldHdvcmtfaWRE3Ru/CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:brown_terracotta", + "groupId": 22, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJyb3duX3RlcnJhY290dGEECQBuYW1lX2hhc2gG4kPenmOF9gMKAG5ldHdvcmtfaWQ/i0iNCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:red_terracotta", + "groupId": 22, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAwAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNo7fX56HXFejEDCgBuZXR3b3JrX2lk8tTF8QoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:orange_terracotta", + "groupId": 22, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAwAACAQAbmFtZRsAbWluZWNyYWZ0Om9yYW5nZV90ZXJyYWNvdHRhBAkAbmFtZV9oYXNo0Hjmql3sruMDCgBuZXR3b3JrX2lklmqmkAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:yellow_terracotta", + "groupId": 22, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAwAACAQAbmFtZRsAbWluZWNyYWZ0OnllbGxvd190ZXJyYWNvdHRhBAkAbmFtZV9oYXNoqkyKKrmA3VcDCgBuZXR3b3JrX2lkaM/orAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:lime_terracotta", + "groupId": 22, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpbWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaANjADFOF9v7AwoAbmV0d29ya19pZJt0XsgKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:green_terracotta", + "groupId": 22, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAwAACAQAbmFtZRoAbWluZWNyYWZ0OmdyZWVuX3RlcnJhY290dGEECQBuYW1lX2hhc2j5Ybq36yYwRQMKAG5ldHdvcmtfaWQ8kGdHCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:cyan_terracotta", + "groupId": 22, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAwAACAQAbmFtZRkAbWluZWNyYWZ0OmN5YW5fdGVycmFjb3R0YQQJAG5hbWVfaGFzaN09COzMuHwAAwoAbmV0d29ya19pZIWPCzoKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:light_blue_terracotta", + "groupId": 22, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAwAACAQAbmFtZR8AbWluZWNyYWZ0OmxpZ2h0X2JsdWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaOMytez7cOZiAwoAbmV0d29ya19pZFHK1UsKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:blue_terracotta", + "groupId": 22, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAwAACAQAbmFtZRkAbWluZWNyYWZ0OmJsdWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaF6inyTK5RpAAwoAbmV0d29ya19pZF5mVZIKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:purple_terracotta", + "groupId": 22, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAwAACAQAbmFtZRsAbWluZWNyYWZ0OnB1cnBsZV90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoKF7YG61yTbEDCgBuZXR3b3JrX2lkhtRDlwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:magenta_terracotta", + "groupId": 22, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAwAACAQAbmFtZRwAbWluZWNyYWZ0Om1hZ2VudGFfdGVycmFjb3R0YQQJAG5hbWVfaGFzaLWvtpAVtztyAwoAbmV0d29ya19pZN5SoakKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:pink_terracotta", + "groupId": 22, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAwAACAQAbmFtZRkAbWluZWNyYWZ0OnBpbmtfdGVycmFjb3R0YQQJAG5hbWVfaGFzaJ7mzvyzSQZTAwoAbmV0d29ya19pZDJWe4YKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:white_glazed_terracotta", + "groupId": 23, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAAAACAQAbmFtZSEAbWluZWNyYWZ0OndoaXRlX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoiVzCdoHAJo0DCgBuZXR3b3JrX2lkIlj9AAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:silver_glazed_terracotta", + "groupId": 23, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAAAACAQAbmFtZSIAbWluZWNyYWZ0OnNpbHZlcl9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAVsA0CnhzA4AwoAbmV0d29ya19pZPnxtJEKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:gray_glazed_terracotta", + "groupId": 23, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAAAACAQAbmFtZSAAbWluZWNyYWZ0OmdyYXlfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2jvLZt9u/lF/AMKAG5ldHdvcmtfaWQVU8eFCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:black_glazed_terracotta", + "groupId": 23, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAAAACAQAbmFtZSEAbWluZWNyYWZ0OmJsYWNrX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoe8I4xAXbO5UDCgBuZXR3b3JrX2lk2Icb9AoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:brown_glazed_terracotta", + "groupId": 23, + "block_state_b64": "CgAAAwgAYmxvY2tfaWToAAAACAQAbmFtZSEAbWluZWNyYWZ0OmJyb3duX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoSiNZOobbpjoDCgBuZXR3b3JrX2lkJy0jwgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:red_glazed_terracotta", + "groupId": 23, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAAAACAQAbmFtZR8AbWluZWNyYWZ0OnJlZF9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaBdWFGLmCLFVAwoAbmV0d29ya19pZMYBJSEKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:orange_glazed_terracotta", + "groupId": 23, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAAAACAQAbmFtZSIAbWluZWNyYWZ0Om9yYW5nZV9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaMyJMrnPr7szAwoAbmV0d29ya19pZN6+7TUKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:yellow_glazed_terracotta", + "groupId": 23, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAAAACAQAbmFtZSIAbWluZWNyYWZ0OnllbGxvd19nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaN6NaIhf6m0uAwoAbmV0d29ya19pZKRHXeoKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:lime_glazed_terracotta", + "groupId": 23, + "block_state_b64": "CgAAAwgAYmxvY2tfaWThAAAACAQAbmFtZSAAbWluZWNyYWZ0OmxpbWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2iF3E68/rB2EAMKAG5ldHdvcmtfaWSP7qQWCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:green_glazed_terracotta", + "groupId": 23, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAAAACAQAbmFtZSEAbWluZWNyYWZ0OmdyZWVuX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNow5mo8aQDFboDCgBuZXR3b3JrX2lkoF11kgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:cyan_glazed_terracotta", + "groupId": 23, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAAAACAQAbmFtZSAAbWluZWNyYWZ0OmN5YW5fZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2gnNB+cCFRJhwMKAG5ldHdvcmtfaWT9buMtCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:light_blue_glazed_terracotta", + "groupId": 23, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAAAACAQAbmFtZSYAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2gladnCDBKCigMKAG5ldHdvcmtfaWS5CszFCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:blue_glazed_terracotta", + "groupId": 23, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAAAACAQAbmFtZSAAbWluZWNyYWZ0OmJsdWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2giOZK+2nB1igMKAG5ldHdvcmtfaWR+e22CCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:purple_glazed_terracotta", + "groupId": 23, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAAAACAQAbmFtZSIAbWluZWNyYWZ0OnB1cnBsZV9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaIQU03txeAfHAwoAbmV0d29ya19pZLKbSE4KBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:magenta_glazed_terracotta", + "groupId": 23, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAAAACAQAbmFtZSMAbWluZWNyYWZ0Om1hZ2VudGFfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2i/SNqDJbfjMgMKAG5ldHdvcmtfaWQKf9UvCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:pink_glazed_terracotta", + "groupId": 23, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAAAACAQAbmFtZSAAbWluZWNyYWZ0OnBpbmtfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2hik8DVt4g+twMKAG5ldHdvcmtfaWTKzav2CgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:purpur_block", + "groupId": 24, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAAAACAQAbmFtZRYAbWluZWNyYWZ0OnB1cnB1cl9ibG9jawQJAG5hbWVfaGFzaAgLwnUZGlzsAwoAbmV0d29ya19pZGCZ+4UKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:purpur_pillar", + "groupId": 24, + "block_state_b64": "CgAAAwgAYmxvY2tfaWS2BAAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnB1cl9waWxsYXIECQBuYW1lX2hhc2iFcSsdykO+jgMKAG5ldHdvcmtfaWQe0+geCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:packed_mud", + "groupId": 24, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAgAACAQAbmFtZRQAbWluZWNyYWZ0OnBhY2tlZF9tdWQECQBuYW1lX2hhc2gHOMa121h4FgMKAG5ldHdvcmtfaWTUb6LyCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:mud_bricks", + "groupId": 24, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAgAACAQAbmFtZRQAbWluZWNyYWZ0Om11ZF9icmlja3MECQBuYW1lX2hhc2iDL/SVl/PewQMKAG5ldHdvcmtfaWSkBjaDCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:nether_wart_block", + "groupId": 25, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAAAACAQAbmFtZRsAbWluZWNyYWZ0Om5ldGhlcl93YXJ0X2Jsb2NrBAkAbmFtZV9oYXNo9XGS4GNnlV4DCgBuZXR3b3JrX2lkh3apIgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:warped_wart_block", + "groupId": 25, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAQAACAQAbmFtZRsAbWluZWNyYWZ0OndhcnBlZF93YXJ0X2Jsb2NrBAkAbmFtZV9oYXNo9IqDS9yUPJoDCgBuZXR3b3JrX2lkMpKAbAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:shroomlight", + "groupId": 25, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAQAACAQAbmFtZRUAbWluZWNyYWZ0OnNocm9vbWxpZ2h0BAkAbmFtZV9oYXNoZHCHcHX/HYADCgBuZXR3b3JrX2lkLG2JiwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:crimson_nylium", + "groupId": 25, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fbnlsaXVtBAkAbmFtZV9oYXNoOr6DJYW2bFYDCgBuZXR3b3JrX2lkuWpRDgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:warped_nylium", + "groupId": 25, + "block_state_b64": "CgAAAwgAYmxvY2tfaWToAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9ueWxpdW0ECQBuYW1lX2hhc2g0Zf89cfr3rwMKAG5ldHdvcmtfaWSu/kekCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:netherrack", + "groupId": 25, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAAAACAQAbmFtZRQAbWluZWNyYWZ0Om5ldGhlcnJhY2sECQBuYW1lX2hhc2i/r5ZyRsvPyQMKAG5ldHdvcmtfaWTAiTOACgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:soul_soil", + "groupId": 25, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAQAACAQAbmFtZRMAbWluZWNyYWZ0OnNvdWxfc29pbAQJAG5hbWVfaGFzaC1/87ccutuTAwoAbmV0d29ya19pZKc63SMKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:grass_block", + "groupId": 25, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAAAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXNzX2Jsb2NrBAkAbmFtZV9oYXNojPyGp3/CSZwDCgBuZXR3b3JrX2lktCgx3goGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:podzol", + "groupId": 25, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTzAAAACAQAbmFtZRAAbWluZWNyYWZ0OnBvZHpvbAQJAG5hbWVfaGFzaBzqokRjH4Z1AwoAbmV0d29ya19pZPPS/GUKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:mycelium", + "groupId": 25, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAAAACAQAbmFtZRIAbWluZWNyYWZ0Om15Y2VsaXVtBAkAbmFtZV9oYXNojTN09cKickIDCgBuZXR3b3JrX2lkLNPxXQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:grass_path", + "groupId": 25, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTGAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdyYXNzX3BhdGgECQBuYW1lX2hhc2i0/KZV8Qsy+gMKAG5ldHdvcmtfaWT7CcdzCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:dirt", + "groupId": 25, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAAAACAQAbmFtZQ4AbWluZWNyYWZ0OmRpcnQECQBuYW1lX2hhc2hXp6jnXAe+kQMKAG5ldHdvcmtfaWSG706CCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:coarse_dirt", + "groupId": 25, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTBBAAACAQAbmFtZRUAbWluZWNyYWZ0OmNvYXJzZV9kaXJ0BAkAbmFtZV9oYXNosd+cah7WSmoDCgBuZXR3b3JrX2lkgS5RcAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:dirt_with_roots", + "groupId": 25, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ9AgAACAQAbmFtZRkAbWluZWNyYWZ0OmRpcnRfd2l0aF9yb290cwQJAG5hbWVfaGFzaLCNDYPviDCIAwoAbmV0d29ya19pZNCkwzoKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:farmland", + "groupId": 25, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AAAACAQAbmFtZRIAbWluZWNyYWZ0OmZhcm1sYW5kBAkAbmFtZV9oYXNoxyQ5ag7LolADCgBuZXR3b3JrX2lkX618FQoGAHN0YXRlcwMSAG1vaXN0dXJpemVkX2Ftb3VudAAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:mud", + "groupId": 25, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAgAACAQAbmFtZQ0AbWluZWNyYWZ0Om11ZAQJAG5hbWVfaGFzaPb/3P+uLy+9AwoAbmV0d29ya19pZPIUlUkKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:clay", + "groupId": 25, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRSAAAACAQAbmFtZQ4AbWluZWNyYWZ0OmNsYXkECQBuYW1lX2hhc2j/S6sKXRcpzwMKAG5ldHdvcmtfaWRmsb8nCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:iron_ore", + "groupId": 26, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAAAACAQAbmFtZRIAbWluZWNyYWZ0Omlyb25fb3JlBAkAbmFtZV9oYXNoS7BYtLnfx3gDCgBuZXR3b3JrX2lk3loneQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:gold_ore", + "groupId": 26, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAAAACAQAbmFtZRIAbWluZWNyYWZ0OmdvbGRfb3JlBAkAbmFtZV9oYXNoC5Y+DUGXLC4DCgBuZXR3b3JrX2lkNhvMfwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:diamond_ore", + "groupId": 26, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4AAAACAQAbmFtZRUAbWluZWNyYWZ0OmRpYW1vbmRfb3JlBAkAbmFtZV9oYXNokUOJ2wZZrGQDCgBuZXR3b3JrX2lk/dChVAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:lapis_ore", + "groupId": 26, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQVAAAACAQAbmFtZRMAbWluZWNyYWZ0OmxhcGlzX29yZQQJAG5hbWVfaGFzaMrmrUrSzb7qAwoAbmV0d29ya19pZMg+qK4KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:redstone_ore", + "groupId": 26, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAAAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZHN0b25lX29yZQQJAG5hbWVfaGFzaFHVnp8Wc4JbAwoAbmV0d29ya19pZKDYvQoKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:coal_ore", + "groupId": 26, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAAAACAQAbmFtZRIAbWluZWNyYWZ0OmNvYWxfb3JlBAkAbmFtZV9oYXNo1OjA+Iuy51oDCgBuZXR3b3JrX2lk+R/aKAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:copper_ore", + "groupId": 26, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2AgAACAQAbmFtZRQAbWluZWNyYWZ0OmNvcHBlcl9vcmUECQBuYW1lX2hhc2iSZduSntOzOwMKAG5ldHdvcmtfaWQtIuCnCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:emerald_ore", + "groupId": 26, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAAAACAQAbmFtZRUAbWluZWNyYWZ0OmVtZXJhbGRfb3JlBAkAbmFtZV9oYXNoJTovr+VgINsDCgBuZXR3b3JrX2lknbkqCgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:quartz_ore", + "groupId": 26, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAAAACAQAbmFtZRQAbWluZWNyYWZ0OnF1YXJ0el9vcmUECQBuYW1lX2hhc2g0yNHLMK9TaQMKAG5ldHdvcmtfaWSzN7nzCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:nether_gold_ore", + "groupId": 26, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQfAgAACAQAbmFtZRkAbWluZWNyYWZ0Om5ldGhlcl9nb2xkX29yZQQJAG5hbWVfaGFzaEJZ7segIBgBAwoAbmV0d29ya19pZNI9pDgKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:ancient_debris", + "groupId": 26, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAgAACAQAbmFtZRgAbWluZWNyYWZ0OmFuY2llbnRfZGVicmlzBAkAbmFtZV9oYXNoNrbxMc9AwKcDCgBuZXR3b3JrX2lkrSNjEAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:deepslate_iron_ore", + "groupId": 26, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9pcm9uX29yZQQJAG5hbWVfaGFzaB/fDL9pgvXXAwoAbmV0d29ya19pZFA0bz4KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:deepslate_gold_ore", + "groupId": 26, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9nb2xkX29yZQQJAG5hbWVfaGFzaF9G7WYhKFinAwoAbmV0d29ya19pZHQTfBUKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:deepslate_diamond_ore", + "groupId": 26, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV9kaWFtb25kX29yZQQJAG5hbWVfaGFzaEUH5USh+iD3AwoAbmV0d29ya19pZHP6VzAKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:deepslate_lapis_ore", + "groupId": 26, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV9sYXBpc19vcmUECQBuYW1lX2hhc2j+yFxU/KZs1gMKAG5ldHdvcmtfaWRKINzICgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:deepslate_redstone_ore", + "groupId": 26, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAgAACAQAbmFtZSAAbWluZWNyYWZ0OmRlZXBzbGF0ZV9yZWRzdG9uZV9vcmUECQBuYW1lX2hhc2iVgM3wWWD6ugMKAG5ldHdvcmtfaWReBdYRCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:deepslate_emerald_ore", + "groupId": 26, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSWAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV9lbWVyYWxkX29yZQQJAG5hbWVfaGFzaNlfo5HTwS6wAwoAbmV0d29ya19pZNeie6sKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:deepslate_coal_ore", + "groupId": 26, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSVAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9jb2FsX29yZQQJAG5hbWVfaGFzaIjikmcbRrPPAwoAbmV0d29ya19pZD9TiygKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:deepslate_copper_ore", + "groupId": 26, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9jb3BwZXJfb3JlBAkAbmFtZV9oYXNottjV4Ev5LAQDCgBuZXR3b3JrX2lkP23rgQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:stone", + "groupId": 27, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lkIQ4xgAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:granite", + "groupId": 27, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAwAACAQAbmFtZREAbWluZWNyYWZ0OmdyYW5pdGUECQBuYW1lX2hhc2iq+Dur2pw4AwMKAG5ldHdvcmtfaWT2NMfJCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:diorite", + "groupId": 27, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAwAACAQAbmFtZREAbWluZWNyYWZ0OmRpb3JpdGUECQBuYW1lX2hhc2iaFsq2iinZBQMKAG5ldHdvcmtfaWQqGE6XCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:andesite", + "groupId": 27, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAwAACAQAbmFtZRIAbWluZWNyYWZ0OmFuZGVzaXRlBAkAbmFtZV9oYXNosaLIEnQQoSYDCgBuZXR3b3JrX2lkEApRZAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:blackstone", + "groupId": 27, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAgAACAQAbmFtZRQAbWluZWNyYWZ0OmJsYWNrc3RvbmUECQBuYW1lX2hhc2iMFYziD80D6QMKAG5ldHdvcmtfaWSrUryHCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:deepslate", + "groupId": 27, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AgAACAQAbmFtZRMAbWluZWNyYWZ0OmRlZXBzbGF0ZQQJAG5hbWVfaGFzaKX5pAblxz8TAwoAbmV0d29ya19pZOJoQjsKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:tuff", + "groupId": 27, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAgAACAQAbmFtZQ4AbWluZWNyYWZ0OnR1ZmYECQBuYW1lX2hhc2h1Rwc1XYsBGwMKAG5ldHdvcmtfaWRwQGn0CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:basalt", + "groupId": 27, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhc2FsdAQJAG5hbWVfaGFzaH+UQO2yWodiAwoAbmV0d29ya19pZBPNSV4KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:polished_granite", + "groupId": 27, + "block_state_b64": "CgAAAwgAYmxvY2tfaWROAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGUECQBuYW1lX2hhc2iLiEfys8pFIAMKAG5ldHdvcmtfaWTCxxcHCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:polished_diorite", + "groupId": 27, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGUECQBuYW1lX2hhc2hTxY4fKmNmlAMKAG5ldHdvcmtfaWTmtjdRCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:polished_andesite", + "groupId": 27, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRSAwAACAQAbmFtZRsAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlBAkAbmFtZV9oYXNovl28uFk4HuQDCgBuZXR3b3JrX2lklFjuCwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:polished_blackstone", + "groupId": 27, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQiAgAACAQAbmFtZR0AbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmUECQBuYW1lX2hhc2jT9fHCl6vWQQMKAG5ldHdvcmtfaWR/Ho6oCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:polished_deepslate", + "groupId": 27, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AgAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaHC1edoaWF3uAwoAbmV0d29ya19pZCPeQsEKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:polished_tuff", + "groupId": 27, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAwAACAQAbmFtZRcAbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmYECQBuYW1lX2hhc2hyaLe/KEVZ0gMKAG5ldHdvcmtfaWTcX3NrCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:polished_basalt", + "groupId": 27, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAQAACAQAbmFtZRkAbWluZWNyYWZ0OnBvbGlzaGVkX2Jhc2FsdAQJAG5hbWVfaGFzaMS+L0gMnRcBAwoAbmV0d29ya19pZF+/mHwKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:smooth_basalt", + "groupId": 27, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AgAACAQAbmFtZRcAbWluZWNyYWZ0OnNtb290aF9iYXNhbHQECQBuYW1lX2hhc2jKPUdz89kuNAMKAG5ldHdvcmtfaWTkb/oVCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:gravel", + "groupId": 28, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAAAACAQAbmFtZRAAbWluZWNyYWZ0OmdyYXZlbAQJAG5hbWVfaGFzaOFxz8XJd2r/AwoAbmV0d29ya19pZBpfI1sKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:sand", + "groupId": 28, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQMAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnNhbmQECQBuYW1lX2hhc2i6lthXXbAyWAMKAG5ldHdvcmtfaWRjeUMICgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:red_sand", + "groupId": 28, + "block_state_b64": "CgAAAwgAYmxvY2tfaWS0BAAACAQAbmFtZRIAbWluZWNyYWZ0OnJlZF9zYW5kBAkAbmFtZV9oYXNoCiarI69JQCkDCgBuZXR3b3JrX2lkU8UD/AoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:cactus", + "groupId": 28, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAAAACAQAbmFtZRAAbWluZWNyYWZ0OmNhY3R1cwQJAG5hbWVfaGFzaCG9zL0N4wvGAwoAbmV0d29ya19pZDeCERAKBgBzdGF0ZXMDAwBhZ2UAAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:oak_log", + "groupId": 29, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAAAACAQAbmFtZREAbWluZWNyYWZ0Om9ha19sb2cECQBuYW1lX2hhc2ho6TS+K7PZFQMKAG5ldHdvcmtfaWQjfjoxCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:stripped_oak_log", + "groupId": 29, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQJAQAACAQAbmFtZRoAbWluZWNyYWZ0OnN0cmlwcGVkX29ha19sb2cECQBuYW1lX2hhc2h8dqh+OOHU4wMKAG5ldHdvcmtfaWSYKjdrCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:spruce_log", + "groupId": 29, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4AwAACAQAbmFtZRQAbWluZWNyYWZ0OnNwcnVjZV9sb2cECQBuYW1lX2hhc2hZ03qaLoF3WgMKAG5ldHdvcmtfaWRlFD8eCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:stripped_spruce_log", + "groupId": 29, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX3NwcnVjZV9sb2cECQBuYW1lX2hhc2iNrhKjS5IyrgMKAG5ldHdvcmtfaWRQcEC3CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:birch_log", + "groupId": 29, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5AwAACAQAbmFtZRMAbWluZWNyYWZ0OmJpcmNoX2xvZwQJAG5hbWVfaGFzaBUzT3NxsZAnAwoAbmV0d29ya19pZBKN3VQKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:stripped_birch_log", + "groupId": 29, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAQAACAQAbmFtZRwAbWluZWNyYWZ0OnN0cmlwcGVkX2JpcmNoX2xvZwQJAG5hbWVfaGFzaCFKS4AeuSidAwoAbmV0d29ya19pZN0IONIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:jungle_log", + "groupId": 29, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6AwAACAQAbmFtZRQAbWluZWNyYWZ0Omp1bmdsZV9sb2cECQBuYW1lX2hhc2gkwW0KNulqDgMKAG5ldHdvcmtfaWQaziU/CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:stripped_jungle_log", + "groupId": 29, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2p1bmdsZV9sb2cECQBuYW1lX2hhc2hAwMsgOk02JAMKAG5ldHdvcmtfaWQvls0eCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:acacia_log", + "groupId": 29, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAAAACAQAbmFtZRQAbWluZWNyYWZ0OmFjYWNpYV9sb2cECQBuYW1lX2hhc2iV48VpYhjoYQMKAG5ldHdvcmtfaWRxEqe0CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:stripped_acacia_log", + "groupId": 29, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2FjYWNpYV9sb2cECQBuYW1lX2hhc2hJb0lQqnEqlgMKAG5ldHdvcmtfaWRg3IdRCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:dark_oak_log", + "groupId": 29, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ7AwAACAQAbmFtZRYAbWluZWNyYWZ0OmRhcmtfb2FrX2xvZwQJAG5hbWVfaGFzaIWfVRd0XUo3AwoAbmV0d29ya19pZPMM7LYKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:stripped_dark_oak_log", + "groupId": 29, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQIAQAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2Rhcmtfb2FrX2xvZwQJAG5hbWVfaGFzaPFTdxRdPwkOAwoAbmV0d29ya19pZDIzenIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:mangrove_log", + "groupId": 29, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAgAACAQAbmFtZRYAbWluZWNyYWZ0Om1hbmdyb3ZlX2xvZwQJAG5hbWVfaGFzaHZe6DzPZBobAwoAbmV0d29ya19pZG6DuYkKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:stripped_mangrove_log", + "groupId": 29, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX21hbmdyb3ZlX2xvZwQJAG5hbWVfaGFzaLqIBo4hwA//AwoAbmV0d29ya19pZPtRn7UKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:cherry_log", + "groupId": 29, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAwAACAQAbmFtZRQAbWluZWNyYWZ0OmNoZXJyeV9sb2cECQBuYW1lX2hhc2hwFlaioppB1wMKAG5ldHdvcmtfaWS2sdXECgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:stripped_cherry_log", + "groupId": 29, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAwAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2NoZXJyeV9sb2cECQBuYW1lX2hhc2i85H6G+WhXaAMKAG5ldHdvcmtfaWRjzoglCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:pale_oak_log", + "groupId": 29, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTiBAAACAQAbmFtZRYAbWluZWNyYWZ0OnBhbGVfb2FrX2xvZwQJAG5hbWVfaGFzaIEcMMTin/ihAwoAbmV0d29ya19pZMtoEVwKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:stripped_pale_oak_log", + "groupId": 29, + "block_state_b64": "CgAAAwgAYmxvY2tfaWThBAAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX3BhbGVfb2FrX2xvZwQJAG5hbWVfaGFzaBVKFLV2TrFcAwoAbmV0d29ya19pZBY8/GAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:crimson_stem", + "groupId": 29, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAQAACAQAbmFtZRYAbWluZWNyYWZ0OmNyaW1zb25fc3RlbQQJAG5hbWVfaGFzaM0FzfL0UTKZAwoAbmV0d29ya19pZKvzID0KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:stripped_crimson_stem", + "groupId": 29, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTvAQAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2NyaW1zb25fc3RlbQQJAG5hbWVfaGFzaDlA6nood57EAwoAbmV0d29ya19pZHrIqjIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:warped_stem", + "groupId": 29, + "block_state_b64": "CgAAAwgAYmxvY2tfaWThAQAACAQAbmFtZRUAbWluZWNyYWZ0OndhcnBlZF9zdGVtBAkAbmFtZV9oYXNon7cKfPZxdrUDCgBuZXR3b3JrX2lkerWyMwoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:stripped_warped_stem", + "groupId": 29, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAQAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX3dhcnBlZF9zdGVtBAkAbmFtZV9oYXNoEw+y0dDPSd8DCgBuZXR3b3JrX2lkIQ9vBAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:oak_wood", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAQAACAQAbmFtZRIAbWluZWNyYWZ0Om9ha193b29kBAkAbmFtZV9oYXNoqQIkuVPyJX0DCgBuZXR3b3JrX2lku2G1YAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:stripped_oak_wood", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQyBAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0cmlwcGVkX29ha193b29kBAkAbmFtZV9oYXNovW6KCv+VZnsDCgBuZXR3b3JrX2lkkhWGegoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:spruce_wood", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQtBAAACAQAbmFtZRUAbWluZWNyYWZ0OnNwcnVjZV93b29kBAkAbmFtZV9oYXNoTrIJ5TAQ+OgDCgBuZXR3b3JrX2lkaXLxCwoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:stripped_spruce_wood", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQzBAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX3NwcnVjZV93b29kBAkAbmFtZV9oYXNoMnuUk4Xo6icDCgBuZXR3b3JrX2lkes2ydAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:birch_wood", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQuBAAACAQAbmFtZRQAbWluZWNyYWZ0OmJpcmNoX3dvb2QECQBuYW1lX2hhc2iqVjG4xt0cKQMKAG5ldHdvcmtfaWS06c5VCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:stripped_birch_wood", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ0BAAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2JpcmNoX3dvb2QECQBuYW1lX2hhc2hm88R604TKbAMKAG5ldHdvcmtfaWRleEMJCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:jungle_wood", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQvBAAACAQAbmFtZRUAbWluZWNyYWZ0Omp1bmdsZV93b29kBAkAbmFtZV9oYXNo9bYW29ORWCoDCgBuZXR3b3JrX2lkyFyKLQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:stripped_jungle_wood", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ1BAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2p1bmdsZV93b29kBAkAbmFtZV9oYXNoUVs6KsZQRBoDCgBuZXR3b3JrX2lk92k8HQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:acacia_wood", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQwBAAACAQAbmFtZRUAbWluZWNyYWZ0OmFjYWNpYV93b29kBAkAbmFtZV9oYXNoKkDfgzlJUcIDCgBuZXR3b3JrX2lkuTWlcgoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:stripped_acacia_wood", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2BAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2FjYWNpYV93b29kBAkAbmFtZV9oYXNo/kOPN2bCJhUDCgBuZXR3b3JrX2lktl6LwQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:dark_oak_wood", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQxBAAACAQAbmFtZRcAbWluZWNyYWZ0OmRhcmtfb2FrX3dvb2QECQBuYW1lX2hhc2jaKv4ORLadAAMKAG5ldHdvcmtfaWSDrNQ8CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:stripped_dark_oak_wood", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ3BAAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX2Rhcmtfb2FrX3dvb2QECQBuYW1lX2hhc2h2jFDfKVFgfAMKAG5ldHdvcmtfaWTgZQ5VCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:mangrove_wood", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAgAACAQAbmFtZRcAbWluZWNyYWZ0Om1hbmdyb3ZlX3dvb2QECQBuYW1lX2hhc2iXVxG0JG2fVAMKAG5ldHdvcmtfaWSkqJ4cCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:stripped_mangrove_wood", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAgAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX21hbmdyb3ZlX3dvb2QECQBuYW1lX2hhc2h7CkbaBF7/WAMKAG5ldHdvcmtfaWQLAX88CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:cherry_wood", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQhAwAACAQAbmFtZRUAbWluZWNyYWZ0OmNoZXJyeV93b29kBAkAbmFtZV9oYXNoAW8srlmpBM8DCgBuZXR3b3JrX2lkLPsAwgoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:stripped_cherry_wood", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAwAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2NoZXJyeV93b29kBAkAbmFtZV9oYXNo/e7KXv+CB38DCgBuZXR3b3JrX2lkg5aVtQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:pale_oak_wood", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTsBAAACAQAbmFtZRcAbWluZWNyYWZ0OnBhbGVfb2FrX3dvb2QECQBuYW1lX2hhc2hGlXnbUgRIggMKAG5ldHdvcmtfaWRPLx7LCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:stripped_pale_oak_wood", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTrBAAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX3BhbGVfb2FrX3dvb2QECQBuYW1lX2hhc2iqaxd6ta2eNAMKAG5ldHdvcmtfaWQI+pz3CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:crimson_hyphae", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25faHlwaGFlBAkAbmFtZV9oYXNouRmKmfSqEWADCgBuZXR3b3JrX2lk+Tm5rQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:stripped_crimson_hyphae", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQrAgAACAQAbmFtZSEAbWluZWNyYWZ0OnN0cmlwcGVkX2NyaW1zb25faHlwaGFlBAkAbmFtZV9oYXNoFffwmABq4LUDCgBuZXR3b3JrX2lkZAlUbgoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:warped_hyphae", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9oeXBoYWUECQBuYW1lX2hhc2hn8plQUr6pmQMKAG5ldHdvcmtfaWRU2AIBCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:stripped_warped_hyphae", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAgAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX3dhcnBlZF9oeXBoYWUECQBuYW1lX2hhc2irKq+HYPSgjQMKAG5ldHdvcmtfaWSbrOPDCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:bamboo_block", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJhbWJvb19ibG9jawQJAG5hbWVfaGFzaAbDeur6stIBAwoAbmV0d29ya19pZCJAwn0KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:stripped_bamboo_block", + "groupId": 30, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAwAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2JhbWJvb19ibG9jawQJAG5hbWVfaGFzaJpwytpZOZM9AwoAbmV0d29ya19pZKuRbNEKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:oak_leaves", + "groupId": 31, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQSAAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19sZWF2ZXMECQBuYW1lX2hhc2h6O4xGqA2oKgMKAG5ldHdvcmtfaWT98c59CgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:spruce_leaves", + "groupId": 31, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQfBAAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9sZWF2ZXMECQBuYW1lX2hhc2i9x1CtNAuqZwMKAG5ldHdvcmtfaWSzF7pTCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:birch_leaves", + "groupId": 31, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQgBAAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX2xlYXZlcwQJAG5hbWVfaGFzaBlAGHaoaLZSAwoAbmV0d29ya19pZOjtvWcKBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:jungle_leaves", + "groupId": 31, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQhBAAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9sZWF2ZXMECQBuYW1lX2hhc2iW1uAH07zGhgMKAG5ldHdvcmtfaWSA5KX0CgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:acacia_leaves", + "groupId": 31, + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAAAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9sZWF2ZXMECQBuYW1lX2hhc2iZJf8dAgDRNQMKAG5ldHdvcmtfaWQ/G7VuCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:dark_oak_leaves", + "groupId": 31, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQiBAAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX2xlYXZlcwQJAG5hbWVfaGFzaCk7rDipWFSjAwoAbmV0d29ya19pZJ2AkbYKBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:mangrove_leaves", + "groupId": 31, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX2xlYXZlcwQJAG5hbWVfaGFzaKyI/dWvhEG8AwoAbmV0d29ya19pZPQxCZ8KBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:cherry_leaves", + "groupId": 31, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9sZWF2ZXMECQBuYW1lX2hhc2giTs9ChhYBlQMKAG5ldHdvcmtfaWR8bPpwCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:pale_oak_leaves", + "groupId": 31, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTuBAAACAQAbmFtZRkAbWluZWNyYWZ0OnBhbGVfb2FrX2xlYXZlcwQJAG5hbWVfaGFzaKVccFYyf0wbAwoAbmV0d29ya19pZNFNvgcKBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:azalea_leaves", + "groupId": 31, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAgAACAQAbmFtZRcAbWluZWNyYWZ0OmF6YWxlYV9sZWF2ZXMECQBuYW1lX2hhc2iXFhD57wFS7AMKAG5ldHdvcmtfaWTNB/9ECgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:azalea_leaves_flowered", + "groupId": 31, + "block_state_b64": "CgAAAwgAYmxvY2tfaWREAgAACAQAbmFtZSAAbWluZWNyYWZ0OmF6YWxlYV9sZWF2ZXNfZmxvd2VyZWQECQBuYW1lX2hhc2gs8jxlS/pMrwMKAG5ldHdvcmtfaWQ7W4PyCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:oak_sapling", + "groupId": 32, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAAAACAQAbmFtZRUAbWluZWNyYWZ0Om9ha19zYXBsaW5nBAkAbmFtZV9oYXNoogXcT9QfjiUDCgBuZXR3b3JrX2lkG22C+AoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:spruce_sapling", + "groupId": 32, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4BAAACAQAbmFtZRgAbWluZWNyYWZ0OnNwcnVjZV9zYXBsaW5nBAkAbmFtZV9oYXNoe8hz4uYP0FcDCgBuZXR3b3JrX2lkUQmhaQoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:birch_sapling", + "groupId": 32, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5BAAACAQAbmFtZRcAbWluZWNyYWZ0OmJpcmNoX3NhcGxpbmcECQBuYW1lX2hhc2h348iJQ/tK4wMKAG5ldHdvcmtfaWQ2Uh53CgYAc3RhdGVzAQcAYWdlX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:jungle_sapling", + "groupId": 32, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6BAAACAQAbmFtZRgAbWluZWNyYWZ0Omp1bmdsZV9zYXBsaW5nBAkAbmFtZV9oYXNo7tyTOdSrxaADCgBuZXR3b3JrX2lkXmBAdAoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:acacia_sapling", + "groupId": 32, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ7BAAACAQAbmFtZRgAbWluZWNyYWZ0OmFjYWNpYV9zYXBsaW5nBAkAbmFtZV9oYXNo99sg15uoX7ADCgBuZXR3b3JrX2lkPXX1KgoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:dark_oak_sapling", + "groupId": 32, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8BAAACAQAbmFtZRoAbWluZWNyYWZ0OmRhcmtfb2FrX3NhcGxpbmcECQBuYW1lX2hhc2jnVzFplW7cHgMKAG5ldHdvcmtfaWTD4giHCgYAc3RhdGVzAQcAYWdlX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:mangrove_propagule", + "groupId": 32, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAgAACAQAbmFtZRwAbWluZWNyYWZ0Om1hbmdyb3ZlX3Byb3BhZ3VsZQQJAG5hbWVfaGFzaJGeox6hkfLFAwoAbmV0d29ya19pZAIpvpYKBgBzdGF0ZXMBBwBoYW5naW5nAAMPAHByb3BhZ3VsZV9zdGFnZQAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:cherry_sapling", + "groupId": 32, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQiAwAACAQAbmFtZRgAbWluZWNyYWZ0OmNoZXJyeV9zYXBsaW5nBAkAbmFtZV9oYXNoGrPpNMf1LtcDCgBuZXR3b3JrX2lkypakXQoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:pale_oak_sapling", + "groupId": 32, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTtBAAACAQAbmFtZRoAbWluZWNyYWZ0OnBhbGVfb2FrX3NhcGxpbmcECQBuYW1lX2hhc2gzvl+QbSfPHwMKAG5ldHdvcmtfaWSzav9sCgYAc3RhdGVzAQcAYWdlX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:bee_nest", + "groupId": 33, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAQAACAQAbmFtZRIAbWluZWNyYWZ0OmJlZV9uZXN0BAkAbmFtZV9oYXNo2R2WBxUHEZIDCgBuZXR3b3JrX2lkiXWLEAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAADCwBob25leV9sZXZlbAAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:wheat_seeds", + "groupId": 34 + }, + { + "id": "minecraft:pumpkin_seeds", + "groupId": 34 + }, + { + "id": "minecraft:melon_seeds", + "groupId": 34 + }, + { + "id": "minecraft:beetroot_seeds", + "groupId": 34 + }, + { + "id": "minecraft:torchflower_seeds", + "groupId": 34 + }, + { + "id": "minecraft:pitcher_pod", + "groupId": 34 + }, + { + "id": "minecraft:wheat", + "groupId": 35 + }, + { + "id": "minecraft:beetroot", + "groupId": 35 + }, + { + "id": "minecraft:potato", + "groupId": 35 + }, + { + "id": "minecraft:poisonous_potato", + "groupId": 35 + }, + { + "id": "minecraft:carrot", + "groupId": 35 + }, + { + "id": "minecraft:golden_carrot", + "groupId": 35 + }, + { + "id": "minecraft:apple", + "groupId": 35 + }, + { + "id": "minecraft:golden_apple", + "groupId": 35 + }, + { + "id": "minecraft:enchanted_golden_apple", + "groupId": 35 + }, + { + "id": "minecraft:melon_block", + "groupId": 35, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRnAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1lbG9uX2Jsb2NrBAkAbmFtZV9oYXNoXxSm0iYpAx8DCgBuZXR3b3JrX2lkC9rqygoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:melon_slice", + "groupId": 35 + }, + { + "id": "minecraft:glistering_melon_slice", + "groupId": 35 + }, + { + "id": "minecraft:sweet_berries", + "groupId": 35 + }, + { + "id": "minecraft:glow_berries", + "groupId": 35 + }, + { + "id": "minecraft:pumpkin", + "groupId": 35, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAAAACAQAbmFtZREAbWluZWNyYWZ0OnB1bXBraW4ECQBuYW1lX2hhc2gc8A3jaSzWbgMKAG5ldHdvcmtfaWRFGA+xCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:carved_pumpkin", + "groupId": 36, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSaAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNhcnZlZF9wdW1wa2luBAkAbmFtZV9oYXNoPu1T0MJuG90DCgBuZXR3b3JrX2lkXNNn5QoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:lit_pumpkin", + "groupId": 36, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAAAACAQAbmFtZRUAbWluZWNyYWZ0OmxpdF9wdW1wa2luBAkAbmFtZV9oYXNo7gWtEm2uPL0DCgBuZXR3b3JrX2lki8sU4AoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:honeycomb", + "groupId": 36 + }, + { + "id": "minecraft:resin_clump", + "groupId": 36, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT9BAAACAQAbmFtZRUAbWluZWNyYWZ0OnJlc2luX2NsdW1wBAkAbmFtZV9oYXNok5dcTB5ZyioDCgBuZXR3b3JrX2lkFbHrwwoGAHN0YXRlcwMZAG11bHRpX2ZhY2VfZGlyZWN0aW9uX2JpdHMAAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:fern", + "groupId": 37, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRPBAAACAQAbmFtZQ4AbWluZWNyYWZ0OmZlcm4ECQBuYW1lX2hhc2iHbj3yXFn4owMKAG5ldHdvcmtfaWQKC6u7CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:large_fern", + "groupId": 37, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRgBAAACAQAbmFtZRQAbWluZWNyYWZ0OmxhcmdlX2Zlcm4ECQBuYW1lX2hhc2gnE9sd0LzHtQMKAG5ldHdvcmtfaWTS9hG4CgYAc3RhdGVzAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:short_grass", + "groupId": 37, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQfAAAACAQAbmFtZRUAbWluZWNyYWZ0OnNob3J0X2dyYXNzBAkAbmFtZV9oYXNobWQghLH0bLcDCgBuZXR3b3JrX2lkJWOOqAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:tall_grass", + "groupId": 37, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRfBAAACAQAbmFtZRQAbWluZWNyYWZ0OnRhbGxfZ3Jhc3MECQBuYW1lX2hhc2ii5MyZJpv4sgMKAG5ldHdvcmtfaWRRfeH4CgYAc3RhdGVzAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:nether_sprouts", + "groupId": 37 + }, + { + "id": "minecraft:fire_coral", + "groupId": 38, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAwAACAQAbmFtZRQAbWluZWNyYWZ0OmZpcmVfY29yYWwECQBuYW1lX2hhc2hOHyyECVQVJwMKAG5ldHdvcmtfaWS9vF0UCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:brain_coral", + "groupId": 38, + "block_state_b64": "CgAAAwgAYmxvY2tfaWREAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJyYWluX2NvcmFsBAkAbmFtZV9oYXNoRiWlLCwA2ycDCgBuZXR3b3JrX2lkrjAuhgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:bubble_coral", + "groupId": 38, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbAQJAG5hbWVfaGFzaJz6rWnl+v2qAwoAbmV0d29ya19pZImIWy0KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:tube_coral", + "groupId": 38, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAQAACAQAbmFtZRQAbWluZWNyYWZ0OnR1YmVfY29yYWwECQBuYW1lX2hhc2iYa8oO/tgk7wMKAG5ldHdvcmtfaWRTfND5CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:horn_coral", + "groupId": 38, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRHAwAACAQAbmFtZRQAbWluZWNyYWZ0Omhvcm5fY29yYWwECQBuYW1lX2hhc2iZnRHjZbnLPgMKAG5ldHdvcmtfaWR+GGp8CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:dead_fire_coral", + "groupId": 38, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRLAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbAQJAG5hbWVfaGFzaEPU6tFy/latAwoAbmV0d29ya19pZNMa7V4KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:dead_brain_coral", + "groupId": 38, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAwAACAQAbmFtZRoAbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWwECQBuYW1lX2hhc2j5L6QJCISvzwMKAG5ldHdvcmtfaWQkKzeiCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:dead_bubble_coral", + "groupId": 38, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRKAwAACAQAbmFtZRsAbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsBAkAbmFtZV9oYXNoSTOZ/8wpeNYDCgBuZXR3b3JrX2lka6w9DAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:dead_tube_coral", + "groupId": 38, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbAQJAG5hbWVfaGFzaJGjNWhlaIJeAwoAbmV0d29ya19pZO3Z0ygKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:dead_horn_coral", + "groupId": 38, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbAQJAG5hbWVfaGFzaJBkz3qt+g2cAwoAbmV0d29ya19pZBAN+eYKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:fire_coral_fan", + "groupId": 38, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRJBAAACAQAbmFtZRgAbWluZWNyYWZ0OmZpcmVfY29yYWxfZmFuBAkAbmFtZV9oYXNosOTxYYxsDLgDCgBuZXR3b3JrX2lkFKxbEgoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:brain_coral_fan", + "groupId": 38, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRHBAAACAQAbmFtZRkAbWluZWNyYWZ0OmJyYWluX2NvcmFsX2ZhbgQJAG5hbWVfaGFzaAi5uHizSNcqAwoAbmV0d29ya19pZFtLjNwKBgBzdGF0ZXMDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:bubble_coral_fan", + "groupId": 38, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRIBAAACAQAbmFtZRoAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbF9mYW4ECQBuYW1lX2hhc2hy/rX2on17DgMKAG5ldHdvcmtfaWQof60VCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:tube_coral_fan", + "groupId": 38, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAQAACAQAbmFtZRgAbWluZWNyYWZ0OnR1YmVfY29yYWxfZmFuBAkAbmFtZV9oYXNo9pbJbo+PphIDCgBuZXR3b3JrX2lkenDTYgoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:horn_coral_fan", + "groupId": 38, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRKBAAACAQAbmFtZRgAbWluZWNyYWZ0Omhvcm5fY29yYWxfZmFuBAkAbmFtZV9oYXNoA+ri6NPDkbUDCgBuZXR3b3JrX2lkezoHNwoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:dead_fire_coral_fan", + "groupId": 38, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRNBAAACAQAbmFtZR0AbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbF9mYW4ECQBuYW1lX2hhc2hpQO02NDxPvwMKAG5ldHdvcmtfaWTaOJgLCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:dead_brain_coral_fan", + "groupId": 38, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRLBAAACAQAbmFtZR4AbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWxfZmFuBAkAbmFtZV9oYXNoI9/+Z4YqMhIDCgBuZXR3b3JrX2lkqYXxYgoGAHN0YXRlcwMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:dead_bubble_coral_fan", + "groupId": 38, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRMBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsX2ZhbgQJAG5hbWVfaGFzaBNECtIM6VIOAwoAbmV0d29ya19pZLrNtBEKBgBzdGF0ZXMDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:dead_tube_coral_fan", + "groupId": 38, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAQAACAQAbmFtZR0AbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbF9mYW4ECQBuYW1lX2hhc2hbBBM9jFKWvQMKAG5ldHdvcmtfaWSkJKUWCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:dead_horn_coral_fan", + "groupId": 38, + "block_state_b64": "CgAAAwgAYmxvY2tfaWROBAAACAQAbmFtZR0AbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbF9mYW4ECQBuYW1lX2hhc2hObElFrHfPygMKAG5ldHdvcmtfaWQ1ZxvmCgYAc3RhdGVzAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:crimson_roots", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAQAACAQAbmFtZRcAbWluZWNyYWZ0OmNyaW1zb25fcm9vdHMECQBuYW1lX2hhc2j1fWgQLViv5QMKAG5ldHdvcmtfaWRLh5DXCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:warped_roots", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAQAACAQAbmFtZRYAbWluZWNyYWZ0OndhcnBlZF9yb290cwQJAG5hbWVfaGFzaBc3WvbJOLlkAwoAbmV0d29ya19pZNLgDnAKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:dandelion", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQlAAAACAQAbmFtZRMAbWluZWNyYWZ0OmRhbmRlbGlvbgQJAG5hbWVfaGFzaBJ3bEUi+Nn/AwoAbmV0d29ya19pZBjjC44KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:poppy", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnBvcHB5BAkAbmFtZV9oYXNocMF8pITMbkcDCgBuZXR3b3JrX2lk8im6ywoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:blue_orchid", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ9BAAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfb3JjaGlkBAkAbmFtZV9oYXNoBjz2MsgB21EDCgBuZXR3b3JrX2lk/iLsSwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:allium", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ+BAAACAQAbmFtZRAAbWluZWNyYWZ0OmFsbGl1bQQJAG5hbWVfaGFzaDCGQBHNDTkcAwoAbmV0d29ya19pZD9Dgr0KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:azure_bluet", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ/BAAACAQAbmFtZRUAbWluZWNyYWZ0OmF6dXJlX2JsdWV0BAkAbmFtZV9oYXNo9N5egqMT2QcDCgBuZXR3b3JrX2lkwIgDnwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:red_tulip", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRABAAACAQAbmFtZRMAbWluZWNyYWZ0OnJlZF90dWxpcAQJAG5hbWVfaGFzaAjMi9Rd+6rhAwoAbmV0d29ya19pZAZCnt8KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:orange_tulip", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRBBAAACAQAbmFtZRYAbWluZWNyYWZ0Om9yYW5nZV90dWxpcAQJAG5hbWVfaGFzaP+NjxMBZ8vAAwoAbmV0d29ya19pZPYatsMKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:white_tulip", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRCBAAACAQAbmFtZRUAbWluZWNyYWZ0OndoaXRlX3R1bGlwBAkAbmFtZV9oYXNo5vbU4VRPh3ADCgBuZXR3b3JrX2lkok+4rQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:pink_tulip", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRDBAAACAQAbmFtZRQAbWluZWNyYWZ0OnBpbmtfdHVsaXAECQBuYW1lX2hhc2hxDHZa6OaNXAMKAG5ldHdvcmtfaWTiOT+VCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:oxeye_daisy", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWREBAAACAQAbmFtZRUAbWluZWNyYWZ0Om94ZXllX2RhaXN5BAkAbmFtZV9oYXNoXwxsqNQTN9gDCgBuZXR3b3JrX2lkw7R7dwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:cornflower", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRFBAAACAQAbmFtZRQAbWluZWNyYWZ0OmNvcm5mbG93ZXIECQBuYW1lX2hhc2gnhyC3EeqHgAMKAG5ldHdvcmtfaWR4VrvACgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:lily_of_the_valley", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRGBAAACAQAbmFtZRwAbWluZWNyYWZ0OmxpbHlfb2ZfdGhlX3ZhbGxleQQJAG5hbWVfaGFzaI64TJSf9mgQAwoAbmV0d29ya19pZFE9+nwKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:sunflower", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAAAACAQAbmFtZRMAbWluZWNyYWZ0OnN1bmZsb3dlcgQJAG5hbWVfaGFzaAMxYQLoqlZ0AwoAbmV0d29ya19pZA10iSoKBgBzdGF0ZXMBDwB1cHBlcl9ibG9ja19iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:lilac", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWReBAAACAQAbmFtZQ8AbWluZWNyYWZ0OmxpbGFjBAkAbmFtZV9oYXNoD3nrQJuo7NkDCgBuZXR3b3JrX2lk5W+uFAoGAHN0YXRlcwEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:rose_bush", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRhBAAACAQAbmFtZRMAbWluZWNyYWZ0OnJvc2VfYnVzaAQJAG5hbWVfaGFzaLoiFk8LVpGKAwoAbmV0d29ya19pZMZPv48KBgBzdGF0ZXMBDwB1cHBlcl9ibG9ja19iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:peony", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRiBAAACAQAbmFtZQ8AbWluZWNyYWZ0OnBlb255BAkAbmFtZV9oYXNoR4dYc4QquPADCgBuZXR3b3JrX2lkrTe7RwoGAHN0YXRlcwEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:pitcher_plant", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAwAACAQAbmFtZRcAbWluZWNyYWZ0OnBpdGNoZXJfcGxhbnQECQBuYW1lX2hhc2hRJHzsbDH+SQMKAG5ldHdvcmtfaWRnY76VCgYAc3RhdGVzAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:pink_petals", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQkAwAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfcGV0YWxzBAkAbmFtZV9oYXNo6DQwN9SwV3QDCgBuZXR3b3JrX2lkNWneGgoGAHN0YXRlcwMGAGdyb3d0aAAAAAAIHABtaW5lY3JhZnQ6Y2FyZGluYWxfZGlyZWN0aW9uBQBzb3V0aAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:wither_rose", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAQAACAQAbmFtZRUAbWluZWNyYWZ0OndpdGhlcl9yb3NlBAkAbmFtZV9oYXNoaSKxl3I516gDCgBuZXR3b3JrX2lkATXLPwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:torchflower", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ3AwAACAQAbmFtZRUAbWluZWNyYWZ0OnRvcmNoZmxvd2VyBAkAbmFtZV9oYXNoL+mHtElwbqQDCgBuZXR3b3JrX2lkI34O+AoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:closed_eyeblossom", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT6BAAACAQAbmFtZRsAbWluZWNyYWZ0OmNsb3NlZF9leWVibG9zc29tBAkAbmFtZV9oYXNoYbeklHBkRL8DCgBuZXR3b3JrX2lku6xJeAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:open_eyeblossom", + "groupId": 39, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT5BAAACAQAbmFtZRkAbWluZWNyYWZ0Om9wZW5fZXllYmxvc3NvbQQJAG5hbWVfaGFzaHH2HXQ24l8fAwoAbmV0d29ya19pZP1bL4YKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:white_dye", + "groupId": 40 + }, + { + "id": "minecraft:light_gray_dye", + "groupId": 40 + }, + { + "id": "minecraft:gray_dye", + "groupId": 40 + }, + { + "id": "minecraft:black_dye", + "groupId": 40 + }, + { + "id": "minecraft:brown_dye", + "groupId": 40 + }, + { + "id": "minecraft:red_dye", + "groupId": 40 + }, + { + "id": "minecraft:orange_dye", + "groupId": 40 + }, + { + "id": "minecraft:yellow_dye", + "groupId": 40 + }, + { + "id": "minecraft:lime_dye", + "groupId": 40 + }, + { + "id": "minecraft:green_dye", + "groupId": 40 + }, + { + "id": "minecraft:cyan_dye", + "groupId": 40 + }, + { + "id": "minecraft:light_blue_dye", + "groupId": 40 + }, + { + "id": "minecraft:blue_dye", + "groupId": 40 + }, + { + "id": "minecraft:purple_dye", + "groupId": 40 + }, + { + "id": "minecraft:magenta_dye", + "groupId": 40 + }, + { + "id": "minecraft:pink_dye", + "groupId": 40 + }, + { + "id": "minecraft:ink_sac", + "groupId": 41 + }, + { + "id": "minecraft:glow_ink_sac", + "groupId": 41 + }, + { + "id": "minecraft:cocoa_beans", + "groupId": 41 + }, + { + "id": "minecraft:lapis_lazuli", + "groupId": 41 + }, + { + "id": "minecraft:bone_meal", + "groupId": 41 + }, + { + "id": "minecraft:vine", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRqAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnZpbmUECQBuYW1lX2hhc2j0Sj8/XeXOLAMKAG5ldHdvcmtfaWSUkDtbCgYAc3RhdGVzAxMAdmluZV9kaXJlY3Rpb25fYml0cwAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:weeping_vines", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAQAACAQAbmFtZRcAbWluZWNyYWZ0OndlZXBpbmdfdmluZXMECQBuYW1lX2hhc2jrLgLHkQygiwMKAG5ldHdvcmtfaWQ8NHSJCgYAc3RhdGVzAxEAd2VlcGluZ192aW5lc19hZ2UAAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:twisting_vines", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAgAACAQAbmFtZRgAbWluZWNyYWZ0OnR3aXN0aW5nX3ZpbmVzBAkAbmFtZV9oYXNoDYR5QgVUQJADCgBuZXR3b3JrX2lk5kYVIQoGAHN0YXRlcwMSAHR3aXN0aW5nX3ZpbmVzX2FnZQAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:waterlily", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRvAAAACAQAbmFtZRMAbWluZWNyYWZ0OndhdGVybGlseQQJAG5hbWVfaGFzaEHgC4c1SXg0AwoAbmV0d29ya19pZOOerp8KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:seagrass", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAQAACAQAbmFtZRIAbWluZWNyYWZ0OnNlYWdyYXNzBAkAbmFtZV9oYXNoHSBFtoHdWxIDCgBuZXR3b3JrX2lkd3lhEAoGAHN0YXRlcwgOAHNlYV9ncmFzc190eXBlBwBkZWZhdWx0AAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:kelp", + "groupId": 41 + }, + { + "id": "minecraft:deadbush", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAAAACAQAbmFtZRIAbWluZWNyYWZ0OmRlYWRidXNoBAkAbmFtZV9oYXNoPFODe4IScnYDCgBuZXR3b3JrX2lkVfnl+goGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:bamboo", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhbWJvbwQJAG5hbWVfaGFzaBgpGmyzhedCAwoAbmV0d29ya19pZIZv1nYKBgBzdGF0ZXMBBwBhZ2VfYml0AAgQAGJhbWJvb19sZWFmX3NpemUJAG5vX2xlYXZlcwgWAGJhbWJvb19zdGFsa190aGlja25lc3MEAHRoaW4AAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:snow", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnNub3cECQBuYW1lX2hhc2gVHr5XXdETWAMKAG5ldHdvcmtfaWQ0zCeHCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:ice", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAAAACAQAbmFtZQ0AbWluZWNyYWZ0OmljZQQJAG5hbWVfaGFzaNF26f+uUT29AwoAbmV0d29ya19pZOUMaQYKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:packed_ice", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAAAACAQAbmFtZRQAbWluZWNyYWZ0OnBhY2tlZF9pY2UECQBuYW1lX2hhc2hk4bu123ZrFgMKAG5ldHdvcmtfaWTr/ooaCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:blue_ice", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQKAQAACAQAbmFtZRIAbWluZWNyYWZ0OmJsdWVfaWNlBAkAbmFtZV9oYXNo+EKxYgFhKcgDCgBuZXR3b3JrX2lkxfsA8goGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:snow_layer", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWROAAAACAQAbmFtZRQAbWluZWNyYWZ0OnNub3dfbGF5ZXIECQBuYW1lX2hhc2hXka6atMYUCQMKAG5ldHdvcmtfaWRCrIPcCgYAc3RhdGVzAQsAY292ZXJlZF9iaXQAAwYAaGVpZ2h0AAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:pointed_dripstone", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQzAgAACAQAbmFtZRsAbWluZWNyYWZ0OnBvaW50ZWRfZHJpcHN0b25lBAkAbmFtZV9oYXNoJMISzmHQgt8DCgBuZXR3b3JrX2lkbWrtYgoGAHN0YXRlcwgTAGRyaXBzdG9uZV90aGlja25lc3MDAHRpcAEHAGhhbmdpbmcBAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:dripstone_block", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AgAACAQAbmFtZRkAbWluZWNyYWZ0OmRyaXBzdG9uZV9ibG9jawQJAG5hbWVfaGFzaIIXnEqY77YsAwoAbmV0d29ya19pZMZi2kwKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:moss_carpet", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWROAgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vc3NfY2FycGV0BAkAbmFtZV9oYXNo/NEDxRPTshYDCgBuZXR3b3JrX2lkaGG3QwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:moss_block", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ/AgAACAQAbmFtZRQAbWluZWNyYWZ0Om1vc3NfYmxvY2sECQBuYW1lX2hhc2iovcsPUYX2tgMKAG5ldHdvcmtfaWT3JSbfCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:pale_moss_carpet", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTxBAAACAQAbmFtZRoAbWluZWNyYWZ0OnBhbGVfbW9zc19jYXJwZXQECQBuYW1lX2hhc2g5SFufsjDdpAMKAG5ldHdvcmtfaWSwu2O/CgYAc3RhdGVzCBoAcGFsZV9tb3NzX2NhcnBldF9zaWRlX2Vhc3QEAG5vbmUIGwBwYWxlX21vc3NfY2FycGV0X3NpZGVfbm9ydGgEAG5vbmUIGwBwYWxlX21vc3NfY2FycGV0X3NpZGVfc291dGgEAG5vbmUIGgBwYWxlX21vc3NfY2FycGV0X3NpZGVfd2VzdAQAbm9uZQEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:pale_moss_block", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTwBAAACAQAbmFtZRkAbWluZWNyYWZ0OnBhbGVfbW9zc19ibG9jawQJAG5hbWVfaGFzaAv55craFDiRAwoAbmV0d29ya19pZNMKFzcKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:pale_hanging_moss", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTyBAAACAQAbmFtZRsAbWluZWNyYWZ0OnBhbGVfaGFuZ2luZ19tb3NzBAkAbmFtZV9oYXNoNjhSFL+E2aQDCgBuZXR3b3JrX2lkC5iPTgoGAHN0YXRlcwEDAHRpcAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:hanging_roots", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ+AgAACAQAbmFtZRcAbWluZWNyYWZ0Omhhbmdpbmdfcm9vdHMECQBuYW1lX2hhc2jaXn+Y5UZpDAMKAG5ldHdvcmtfaWRU4c2vCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:mangrove_roots", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWThAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hbmdyb3ZlX3Jvb3RzBAkAbmFtZV9oYXNoa786PzQGZ6kDCgBuZXR3b3JrX2lklA0AHgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:muddy_mangrove_roots", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAgAACAQAbmFtZR4AbWluZWNyYWZ0Om11ZGR5X21hbmdyb3ZlX3Jvb3RzBAkAbmFtZV9oYXNo9YApdHpo1RkDCgBuZXR3b3JrX2lkH0Oc4woGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:big_dripleaf", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRCAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJpZ19kcmlwbGVhZgQJAG5hbWVfaGFzaGBEhXjo6qSdAwoAbmV0d29ya19pZMETsb8KBgBzdGF0ZXMBEQBiaWdfZHJpcGxlYWZfaGVhZAEIEQBiaWdfZHJpcGxlYWZfdGlsdAQAbm9uZQgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:small_dripleaf_block", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAgAACAQAbmFtZR4AbWluZWNyYWZ0OnNtYWxsX2RyaXBsZWFmX2Jsb2NrBAkAbmFtZV9oYXNojxRAgXP9uWADCgBuZXR3b3JrX2lkozbVPwoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24EAGVhc3QBDwB1cHBlcl9ibG9ja19iaXQBAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:spore_blossom", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRAAgAACAQAbmFtZRcAbWluZWNyYWZ0OnNwb3JlX2Jsb3Nzb20ECQBuYW1lX2hhc2il3U72Gbco2gMKAG5ldHdvcmtfaWSbbbgcCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:azalea", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAgAACAQAbmFtZRAAbWluZWNyYWZ0OmF6YWxlYQQJAG5hbWVfaGFzaNyUl+BW9JrBAwoAbmV0d29ya19pZO/XZtQKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:flowering_azalea", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAgAACAQAbmFtZRoAbWluZWNyYWZ0OmZsb3dlcmluZ19hemFsZWEECQBuYW1lX2hhc2ie9r33wz8kiwMKAG5ldHdvcmtfaWQ3ij0VCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:glow_lichen", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSaAgAACAQAbmFtZRUAbWluZWNyYWZ0Omdsb3dfbGljaGVuBAkAbmFtZV9oYXNobyPUrIYlo44DCgBuZXR3b3JrX2lkvcbWHwoGAHN0YXRlcwMZAG11bHRpX2ZhY2VfZGlyZWN0aW9uX2JpdHMAAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:amethyst_block", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAgAACAQAbmFtZRgAbWluZWNyYWZ0OmFtZXRoeXN0X2Jsb2NrBAkAbmFtZV9oYXNob+JK1iiAthcDCgBuZXR3b3JrX2lk8HtpzgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:budding_amethyst", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRHAgAACAQAbmFtZRoAbWluZWNyYWZ0OmJ1ZGRpbmdfYW1ldGh5c3QECQBuYW1lX2hhc2gJvAwfI14fxgMKAG5ldHdvcmtfaWTQYqfACgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:amethyst_cluster", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAgAACAQAbmFtZRoAbWluZWNyYWZ0OmFtZXRoeXN0X2NsdXN0ZXIECQBuYW1lX2hhc2jK82S88Jgm8wMKAG5ldHdvcmtfaWSCPMPGCgYAc3RhdGVzCBQAbWluZWNyYWZ0OmJsb2NrX2ZhY2UCAHVwAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:large_amethyst_bud", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAgAACAQAbmFtZRwAbWluZWNyYWZ0OmxhcmdlX2FtZXRoeXN0X2J1ZAQJAG5hbWVfaGFzaAHhdpWD+sd5AwoAbmV0d29ya19pZKkQxOcKBgBzdGF0ZXMIFABtaW5lY3JhZnQ6YmxvY2tfZmFjZQIAdXAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:medium_amethyst_bud", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRKAgAACAQAbmFtZR0AbWluZWNyYWZ0Om1lZGl1bV9hbWV0aHlzdF9idWQECQBuYW1lX2hhc2g5lBGtC0DzZQMKAG5ldHdvcmtfaWSYiP4gCgYAc3RhdGVzCBQAbWluZWNyYWZ0OmJsb2NrX2ZhY2UCAHVwAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:small_amethyst_bud", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRLAgAACAQAbmFtZRwAbWluZWNyYWZ0OnNtYWxsX2FtZXRoeXN0X2J1ZAQJAG5hbWVfaGFzaEnb4+q9PO4YAwoAbmV0d29ya19pZGWzxrQKBgBzdGF0ZXMIFABtaW5lY3JhZnQ6YmxvY2tfZmFjZQIAdXAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:calcite", + "groupId": 41, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAgAACAQAbmFtZREAbWluZWNyYWZ0OmNhbGNpdGUECQBuYW1lX2hhc2ixKLu8ZIdzDQMKAG5ldHdvcmtfaWQlSbJDCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:chicken", + "groupId": 42 + }, + { + "id": "minecraft:porkchop", + "groupId": 42 + }, + { + "id": "minecraft:beef", + "groupId": 42 + }, + { + "id": "minecraft:mutton", + "groupId": 42 + }, + { + "id": "minecraft:rabbit", + "groupId": 42 + }, + { + "id": "minecraft:cod", + "groupId": 42 + }, + { + "id": "minecraft:salmon", + "groupId": 42 + }, + { + "id": "minecraft:tropical_fish", + "groupId": 42 + }, + { + "id": "minecraft:pufferfish", + "groupId": 42 + }, + { + "id": "minecraft:brown_mushroom", + "groupId": 43, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQnAAAACAQAbmFtZRgAbWluZWNyYWZ0OmJyb3duX211c2hyb29tBAkAbmFtZV9oYXNonYw/FO78WDoDCgBuZXR3b3JrX2lkLh1OXAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:red_mushroom", + "groupId": 43, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAAAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZF9tdXNocm9vbQQJAG5hbWVfaGFzaPpzJua7669xAwoAbmV0d29ya19pZCvWPYkKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:crimson_fungus", + "groupId": 43, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fZnVuZ3VzBAkAbmFtZV9oYXNolIcCUuFM2u0DCgBuZXR3b3JrX2lkD2NN0QoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:warped_fungus", + "groupId": 43, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9mdW5ndXMECQBuYW1lX2hhc2gq8bSnRVTAFgMKAG5ldHdvcmtfaWTkwS+rCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:brown_mushroom_block", + "groupId": 43, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAAAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkdOMhDAoGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cw4AAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:red_mushroom_block", + "groupId": 43, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAAAACAQAbmFtZRwAbWluZWNyYWZ0OnJlZF9tdXNocm9vbV9ibG9jawQJAG5hbWVfaGFzaJTTyJbth9M9AwoAbmV0d29ya19pZM+AyboKBgBzdGF0ZXMDEgBodWdlX211c2hyb29tX2JpdHMOAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:mushroom_stem", + "groupId": 43, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTvBAAACAQAbmFtZRcAbWluZWNyYWZ0Om11c2hyb29tX3N0ZW0ECQBuYW1lX2hhc2i2SozhK9NLpgMKAG5ldHdvcmtfaWTTVND+CgYAc3RhdGVzAxIAaHVnZV9tdXNocm9vbV9iaXRzDwAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:egg", + "groupId": 44 + }, + { + "id": "minecraft:sugar_cane", + "groupId": 44 + }, + { + "id": "minecraft:sugar", + "groupId": 44 + }, + { + "id": "minecraft:rotten_flesh", + "groupId": 44 + }, + { + "id": "minecraft:bone", + "groupId": 44 + }, + { + "id": "minecraft:web", + "groupId": 44, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAAAACAQAbmFtZQ0AbWluZWNyYWZ0OndlYgQJAG5hbWVfaGFzaA4GKQCvG4i9AwoAbmV0d29ya19pZApt+jgKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:spider_eye", + "groupId": 44 + }, + { + "id": "minecraft:mob_spawner", + "groupId": 44, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ0AAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vYl9zcGF3bmVyBAkAbmFtZV9oYXNoNwGrCV/Fkh8DCgBuZXR3b3JrX2lkM1wTmgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:trial_spawner", + "groupId": 44, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6AgAACAQAbmFtZRcAbWluZWNyYWZ0OnRyaWFsX3NwYXduZXIECQBuYW1lX2hhc2iNLRPB4ACz+QMKAG5ldHdvcmtfaWTWFYHGCgYAc3RhdGVzAQcAb21pbm91cwADEwB0cmlhbF9zcGF3bmVyX3N0YXRlAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:vault", + "groupId": 44, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5AgAACAQAbmFtZQ8AbWluZWNyYWZ0OnZhdWx0BAkAbmFtZV9oYXNoCAp9n3IAyqcDCgBuZXR3b3JrX2lk6/P+vwoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAQcAb21pbm91cwAICwB2YXVsdF9zdGF0ZQgAaW5hY3RpdmUAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:creaking_heart", + "groupId": 44, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTzBAAACAQAbmFtZRgAbWluZWNyYWZ0OmNyZWFraW5nX2hlYXJ0BAkAbmFtZV9oYXNoQcOV0pmSMeADCgBuZXR3b3JrX2lk0dPBzwoGAHN0YXRlcwgUAGNyZWFraW5nX2hlYXJ0X3N0YXRlCAB1cHJvb3RlZAEHAG5hdHVyYWwACAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:end_portal_frame", + "groupId": 44, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AAAACAQAbmFtZRoAbWluZWNyYWZ0OmVuZF9wb3J0YWxfZnJhbWUECQBuYW1lX2hhc2gqofyUIjGOpQMKAG5ldHdvcmtfaWRbGHf8CgYAc3RhdGVzARIAZW5kX3BvcnRhbF9leWVfYml0AAgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:infested_stone", + "groupId": 45, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRgAbWluZWNyYWZ0OmluZmVzdGVkX3N0b25lBAkAbmFtZV9oYXNoxnRcHDu4zqQDCgBuZXR3b3JrX2lkpfcnsgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:infested_cobblestone", + "groupId": 45, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRZBAAACAQAbmFtZR4AbWluZWNyYWZ0OmluZmVzdGVkX2NvYmJsZXN0b25lBAkAbmFtZV9oYXNoy+LVCKG2kVMDCgBuZXR3b3JrX2lkpn+icAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:infested_stone_bricks", + "groupId": 45, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRaBAAACAQAbmFtZR8AbWluZWNyYWZ0OmluZmVzdGVkX3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaBMnals7a32CAwoAbmV0d29ya19pZNHi2UYKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:infested_mossy_stone_bricks", + "groupId": 45, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRbBAAACAQAbmFtZSUAbWluZWNyYWZ0OmluZmVzdGVkX21vc3N5X3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaAmJk+HmVq0rAwoAbmV0d29ya19pZAVH8/sKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:infested_cracked_stone_bricks", + "groupId": 45, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRcBAAACAQAbmFtZScAbWluZWNyYWZ0OmluZmVzdGVkX2NyYWNrZWRfc3RvbmVfYnJpY2tzBAkAbmFtZV9oYXNoMyc60XcfcyoDCgBuZXR3b3JrX2lkaW+kbQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:infested_chiseled_stone_bricks", + "groupId": 45, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRdBAAACAQAbmFtZSgAbWluZWNyYWZ0OmluZmVzdGVkX2NoaXNlbGVkX3N0b25lX2JyaWNrcwQJAG5hbWVfaGFzaNUvNIIg9dZbAwoAbmV0d29ya19pZCajGicKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:infested_deepslate", + "groupId": 45, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAgAACAQAbmFtZRwAbWluZWNyYWZ0OmluZmVzdGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaICF2VYccxF1AwoAbmV0d29ya19pZDa/624KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:dragon_egg", + "groupId": 46, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AAAACAQAbmFtZRQAbWluZWNyYWZ0OmRyYWdvbl9lZ2cECQBuYW1lX2hhc2inMzXrV+/e1wMKAG5ldHdvcmtfaWTgO1yRCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:turtle_egg", + "groupId": 46, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAQAACAQAbmFtZRQAbWluZWNyYWZ0OnR1cnRsZV9lZ2cECQBuYW1lX2hhc2iwSRcxOJIJ9gMKAG5ldHdvcmtfaWSIRNUhCgYAc3RhdGVzCA0AY3JhY2tlZF9zdGF0ZQkAbm9fY3JhY2tzCBAAdHVydGxlX2VnZ19jb3VudAcAb25lX2VnZwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:sniffer_egg", + "groupId": 46, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRTAwAACAQAbmFtZRUAbWluZWNyYWZ0OnNuaWZmZXJfZWdnBAkAbmFtZV9oYXNoY1lozc8lPcYDCgBuZXR3b3JrX2lk7yb/2QoGAHN0YXRlcwgNAGNyYWNrZWRfc3RhdGUJAG5vX2NyYWNrcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:frog_spawn", + "groupId": 46, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAgAACAQAbmFtZRQAbWluZWNyYWZ0OmZyb2dfc3Bhd24ECQBuYW1lX2hhc2iWmd7idp3ZZwMKAG5ldHdvcmtfaWRFzJudCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:pearlescent_froglight", + "groupId": 46, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAgAACAQAbmFtZR8AbWluZWNyYWZ0OnBlYXJsZXNjZW50X2Zyb2dsaWdodAQJAG5hbWVfaGFzaKkcFRyycYGyAwoAbmV0d29ya19pZJqYakAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:verdant_froglight", + "groupId": 46, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAgAACAQAbmFtZRsAbWluZWNyYWZ0OnZlcmRhbnRfZnJvZ2xpZ2h0BAkAbmFtZV9oYXNoA+eXuTBohrQDCgBuZXR3b3JrX2lkDIVnsQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:ochre_froglight", + "groupId": 46, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAgAACAQAbmFtZRkAbWluZWNyYWZ0Om9jaHJlX2Zyb2dsaWdodAQJAG5hbWVfaGFzaMY59kjPe+c3AwoAbmV0d29ya19pZO2TD50KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:chicken_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:bee_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:cow_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:pig_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:sheep_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:wolf_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:polar_bear_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:ocelot_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:cat_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:mooshroom_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:bat_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:parrot_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:rabbit_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:llama_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:horse_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:donkey_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:mule_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:skeleton_horse_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:zombie_horse_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:tropical_fish_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:cod_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:pufferfish_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:salmon_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:dolphin_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:turtle_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:panda_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:fox_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:creeper_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:enderman_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:silverfish_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:skeleton_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:wither_skeleton_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:stray_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:slime_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:spider_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:zombie_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:zombie_pigman_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:husk_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:drowned_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:squid_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:glow_squid_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:cave_spider_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:witch_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:guardian_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:elder_guardian_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:endermite_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:magma_cube_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:strider_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:hoglin_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:piglin_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:zoglin_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:piglin_brute_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:goat_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:axolotl_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:warden_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:allay_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:frog_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:tadpole_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:trader_llama_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:camel_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:ghast_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:blaze_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:shulker_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:vindicator_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:evoker_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:vex_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:villager_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:wandering_trader_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:zombie_villager_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:phantom_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:pillager_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:ravager_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:iron_golem_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:snow_golem_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:sniffer_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:breeze_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:armadillo_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:bogged_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:creaking_spawn_egg", + "groupId": 47 + }, + { + "id": "minecraft:obsidian", + "groupId": 48, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQxAAAACAQAbmFtZRIAbWluZWNyYWZ0Om9ic2lkaWFuBAkAbmFtZV9oYXNoiz4qrb8QjyEDCgBuZXR3b3JrX2lkuqnPpQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:crying_obsidian", + "groupId": 48, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAgAACAQAbmFtZRkAbWluZWNyYWZ0OmNyeWluZ19vYnNpZGlhbgQJAG5hbWVfaGFzaKT0JlA7Z1K+AwoAbmV0d29ya19pZCjbPV4KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:bedrock", + "groupId": 48, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAAAACAQAbmFtZREAbWluZWNyYWZ0OmJlZHJvY2sECQBuYW1lX2hhc2hWfFrh4LVtxwMKAG5ldHdvcmtfaWT7fKz1CgYAc3RhdGVzAQ4AaW5maW5pYnVybl9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:soul_sand", + "groupId": 48, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNvdWxfc2FuZAQJAG5hbWVfaGFzaMaf+bccu+KTAwoAbmV0d29ya19pZBQSHrMKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:magma", + "groupId": 48, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAAAACAQAbmFtZQ8AbWluZWNyYWZ0Om1hZ21hBAkAbmFtZV9oYXNoqyTjKaIsWfYDCgBuZXR3b3JrX2lkyfWAZgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:nether_wart", + "groupId": 48 + }, + { + "id": "minecraft:end_stone", + "groupId": 48, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AAAACAQAbmFtZRMAbWluZWNyYWZ0OmVuZF9zdG9uZQQJAG5hbWVfaGFzaH1J9jA39GJNAwoAbmV0d29ya19pZFeFQ7UKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:chorus_flower", + "groupId": 48, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAAAACAQAbmFtZRcAbWluZWNyYWZ0OmNob3J1c19mbG93ZXIECQBuYW1lX2hhc2iMpSodli5uawMKAG5ldHdvcmtfaWRnd1ZWCgYAc3RhdGVzAwMAYWdlAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:chorus_plant", + "groupId": 48, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAAAACAQAbmFtZRYAbWluZWNyYWZ0OmNob3J1c19wbGFudAQJAG5hbWVfaGFzaJhSrmNGKwaMAwoAbmV0d29ya19pZA3uVqMKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:chorus_fruit", + "groupId": 48 + }, + { + "id": "minecraft:popped_chorus_fruit", + "groupId": 48 + }, + { + "id": "minecraft:sponge", + "groupId": 48, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAAAACAQAbmFtZRAAbWluZWNyYWZ0OnNwb25nZQQJAG5hbWVfaGFzaLrd2ScYRDMiAwoAbmV0d29ya19pZNmQW/oKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:wet_sponge", + "groupId": 48, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTXBAAACAQAbmFtZRQAbWluZWNyYWZ0OndldF9zcG9uZ2UECQBuYW1lX2hhc2htp6nKpSHcAgMKAG5ldHdvcmtfaWQaW+fCCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:tube_coral_block", + "groupId": 49, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRoAbWluZWNyYWZ0OnR1YmVfY29yYWxfYmxvY2sECQBuYW1lX2hhc2iGkaiR7Eot4wMKAG5ldHdvcmtfaWQPNJ6sCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:brain_coral_block", + "groupId": 49, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRQBAAACAQAbmFtZRsAbWluZWNyYWZ0OmJyYWluX2NvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoeDNAK18yUo4DCgBuZXR3b3JrX2lkloN1vgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:bubble_coral_block", + "groupId": 49, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRRBAAACAQAbmFtZRwAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaAI2mwMlvcNbAwoAbmV0d29ya19pZBlkxKIKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:fire_coral_block", + "groupId": 49, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRSBAAACAQAbmFtZRoAbWluZWNyYWZ0OmZpcmVfY29yYWxfYmxvY2sECQBuYW1lX2hhc2gg1gLeXLmKaAMKAG5ldHdvcmtfaWSp3W57CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:horn_coral_block", + "groupId": 49, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRTBAAACAQAbmFtZRoAbWluZWNyYWZ0Omhvcm5fY29yYWxfYmxvY2sECQBuYW1lX2hhc2hnZSLRWUwGhAMKAG5ldHdvcmtfaWRSK6ccCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:dead_tube_coral_block", + "groupId": 49, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRUBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaB9+lY3hAkNNAwoAbmV0d29ya19pZF0hKKYKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:dead_brain_coral_block", + "groupId": 49, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRVBAAACAQAbmFtZSAAbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWxfYmxvY2sECQBuYW1lX2hhc2iHyDn52AO8uwMKAG5ldHdvcmtfaWQw7yCaCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:dead_bubble_coral_block", + "groupId": 49, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRWBAAACAQAbmFtZSEAbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsX2Jsb2NrBAkAbmFtZV9oYXNotwkk/ITrsjADCgBuZXR3b3JrX2lk56mXUgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:dead_fire_coral_block", + "groupId": 49, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRXBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaG0qHxbIrBEyAwoAbmV0d29ya19pZFvnH88KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:dead_horn_coral_block", + "groupId": 49, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRYBAAACAQAbmFtZR8AbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbF9ibG9jawQJAG5hbWVfaGFzaL7D8bu4Fm+0AwoAbmV0d29ya19pZEALRLoKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:sculk", + "groupId": 50, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAgAACAQAbmFtZQ8AbWluZWNyYWZ0OnNjdWxrBAkAbmFtZV9oYXNo2Lq7T5yQF8kDCgBuZXR3b3JrX2lkyqUPPgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:sculk_vein", + "groupId": 50, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAgAACAQAbmFtZRQAbWluZWNyYWZ0OnNjdWxrX3ZlaW4ECQBuYW1lX2hhc2gJUdhVooV4zwMKAG5ldHdvcmtfaWSUfn1XCgYAc3RhdGVzAxkAbXVsdGlfZmFjZV9kaXJlY3Rpb25fYml0cwAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:sculk_catalyst", + "groupId": 50, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAgAACAQAbmFtZRgAbWluZWNyYWZ0OnNjdWxrX2NhdGFseXN0BAkAbmFtZV9oYXNo+gCpbrCHST4DCgBuZXR3b3JrX2lkMJ2n/woGAHN0YXRlcwEFAGJsb29tAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:sculk_shrieker", + "groupId": 50, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTMAgAACAQAbmFtZRgAbWluZWNyYWZ0OnNjdWxrX3Nocmlla2VyBAkAbmFtZV9oYXNo5OXtyObniQ4DCgBuZXR3b3JrX2lkxapoNAoGAHN0YXRlcwEGAGFjdGl2ZQABCgBjYW5fc3VtbW9uAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:sculk_sensor", + "groupId": 50, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQyAgAACAQAbmFtZRYAbWluZWNyYWZ0OnNjdWxrX3NlbnNvcgQJAG5hbWVfaGFzaCkmHreeTgNnAwoAbmV0d29ya19pZLj2WPcKBgBzdGF0ZXMDEgBzY3Vsa19zZW5zb3JfcGhhc2UAAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:calibrated_sculk_sensor", + "groupId": 50, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAwAACAQAbmFtZSEAbWluZWNyYWZ0OmNhbGlicmF0ZWRfc2N1bGtfc2Vuc29yBAkAbmFtZV9oYXNoffAcXXN/iJUDCgBuZXR3b3JrX2lkwOx3QQoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAxIAc2N1bGtfc2Vuc29yX3BoYXNlAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:reinforced_deepslate", + "groupId": 51, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTRAgAACAQAbmFtZR4AbWluZWNyYWZ0OnJlaW5mb3JjZWRfZGVlcHNsYXRlBAkAbmFtZV9oYXNoldDmj91EapQDCgBuZXR3b3JrX2lkHIt+aQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:leather_helmet", + "groupId": 52 + }, + { + "id": "minecraft:chainmail_helmet", + "groupId": 52 + }, + { + "id": "minecraft:iron_helmet", + "groupId": 52 + }, + { + "id": "minecraft:golden_helmet", + "groupId": 52 + }, + { + "id": "minecraft:diamond_helmet", + "groupId": 52 + }, + { + "id": "minecraft:netherite_helmet", + "groupId": 52 + }, + { + "id": "minecraft:leather_chestplate", + "groupId": 53 + }, + { + "id": "minecraft:chainmail_chestplate", + "groupId": 53 + }, + { + "id": "minecraft:iron_chestplate", + "groupId": 53 + }, + { + "id": "minecraft:golden_chestplate", + "groupId": 53 + }, + { + "id": "minecraft:diamond_chestplate", + "groupId": 53 + }, + { + "id": "minecraft:netherite_chestplate", + "groupId": 53 + }, + { + "id": "minecraft:leather_leggings", + "groupId": 54 + }, + { + "id": "minecraft:chainmail_leggings", + "groupId": 54 + }, + { + "id": "minecraft:iron_leggings", + "groupId": 54 + }, + { + "id": "minecraft:golden_leggings", + "groupId": 54 + }, + { + "id": "minecraft:diamond_leggings", + "groupId": 54 + }, + { + "id": "minecraft:netherite_leggings", + "groupId": 54 + }, + { + "id": "minecraft:leather_boots", + "groupId": 55 + }, + { + "id": "minecraft:chainmail_boots", + "groupId": 55 + }, + { + "id": "minecraft:iron_boots", + "groupId": 55 + }, + { + "id": "minecraft:golden_boots", + "groupId": 55 + }, + { + "id": "minecraft:diamond_boots", + "groupId": 55 + }, + { + "id": "minecraft:netherite_boots", + "groupId": 55 + }, + { + "id": "minecraft:wooden_sword", + "groupId": 56 + }, + { + "id": "minecraft:stone_sword", + "groupId": 56 + }, + { + "id": "minecraft:iron_sword", + "groupId": 56 + }, + { + "id": "minecraft:golden_sword", + "groupId": 56 + }, + { + "id": "minecraft:diamond_sword", + "groupId": 56 + }, + { + "id": "minecraft:netherite_sword", + "groupId": 56 + }, + { + "id": "minecraft:wooden_axe", + "groupId": 57 + }, + { + "id": "minecraft:stone_axe", + "groupId": 57 + }, + { + "id": "minecraft:iron_axe", + "groupId": 57 + }, + { + "id": "minecraft:golden_axe", + "groupId": 57 + }, + { + "id": "minecraft:diamond_axe", + "groupId": 57 + }, + { + "id": "minecraft:netherite_axe", + "groupId": 57 + }, + { + "id": "minecraft:wooden_pickaxe", + "groupId": 58 + }, + { + "id": "minecraft:stone_pickaxe", + "groupId": 58 + }, + { + "id": "minecraft:iron_pickaxe", + "groupId": 58 + }, + { + "id": "minecraft:golden_pickaxe", + "groupId": 58 + }, + { + "id": "minecraft:diamond_pickaxe", + "groupId": 58 + }, + { + "id": "minecraft:netherite_pickaxe", + "groupId": 58 + }, + { + "id": "minecraft:wooden_shovel", + "groupId": 59 + }, + { + "id": "minecraft:stone_shovel", + "groupId": 59 + }, + { + "id": "minecraft:iron_shovel", + "groupId": 59 + }, + { + "id": "minecraft:golden_shovel", + "groupId": 59 + }, + { + "id": "minecraft:diamond_shovel", + "groupId": 59 + }, + { + "id": "minecraft:netherite_shovel", + "groupId": 59 + }, + { + "id": "minecraft:wooden_hoe", + "groupId": 60 + }, + { + "id": "minecraft:stone_hoe", + "groupId": 60 + }, + { + "id": "minecraft:iron_hoe", + "groupId": 60 + }, + { + "id": "minecraft:golden_hoe", + "groupId": 60 + }, + { + "id": "minecraft:diamond_hoe", + "groupId": 60 + }, + { + "id": "minecraft:netherite_hoe", + "groupId": 60 + }, + { + "id": "minecraft:bow", + "groupId": 61 + }, + { + "id": "minecraft:crossbow", + "groupId": 61 + }, + { + "id": "minecraft:mace", + "groupId": 61 + }, + { + "id": "minecraft:arrow", + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 6, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 7, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 8, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 9, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 10, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 11, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 12, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 13, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 14, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 15, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 16, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 17, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 18, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 19, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 20, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 21, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 22, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 23, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 24, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 25, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 26, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 27, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 28, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 29, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 30, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 31, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 32, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 33, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 34, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 35, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 36, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 37, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 38, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 39, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 40, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 41, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 42, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 43, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 44, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 45, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 46, + "groupId": 62 + }, + { + "id": "minecraft:arrow", + "damage": 47, + "groupId": 62 + }, + { + "id": "minecraft:shield", + "groupId": 63 + }, + { + "id": "minecraft:cooked_chicken", + "groupId": 64 + }, + { + "id": "minecraft:cooked_porkchop", + "groupId": 64 + }, + { + "id": "minecraft:cooked_beef", + "groupId": 64 + }, + { + "id": "minecraft:cooked_mutton", + "groupId": 64 + }, + { + "id": "minecraft:cooked_rabbit", + "groupId": 64 + }, + { + "id": "minecraft:cooked_cod", + "groupId": 64 + }, + { + "id": "minecraft:cooked_salmon", + "groupId": 64 + }, + { + "id": "minecraft:bread", + "groupId": 65 + }, + { + "id": "minecraft:mushroom_stew", + "groupId": 65 + }, + { + "id": "minecraft:beetroot_soup", + "groupId": 65 + }, + { + "id": "minecraft:rabbit_stew", + "groupId": 65 + }, + { + "id": "minecraft:baked_potato", + "groupId": 65 + }, + { + "id": "minecraft:cookie", + "groupId": 65 + }, + { + "id": "minecraft:pumpkin_pie", + "groupId": 65 + }, + { + "id": "minecraft:cake", + "groupId": 65 + }, + { + "id": "minecraft:dried_kelp", + "groupId": 65 + }, + { + "id": "minecraft:fishing_rod", + "groupId": 66 + }, + { + "id": "minecraft:carrot_on_a_stick", + "groupId": 66 + }, + { + "id": "minecraft:warped_fungus_on_a_stick", + "groupId": 66 + }, + { + "id": "minecraft:snowball", + "groupId": 66 + }, + { + "id": "minecraft:wind_charge", + "groupId": 66 + }, + { + "id": "minecraft:shears", + "groupId": 66 + }, + { + "id": "minecraft:flint_and_steel", + "groupId": 66 + }, + { + "id": "minecraft:lead", + "groupId": 66 + }, + { + "id": "minecraft:clock", + "groupId": 66 + }, + { + "id": "minecraft:compass", + "groupId": 66 + }, + { + "id": "minecraft:recovery_compass", + "groupId": 66 + }, + { + "id": "minecraft:goat_horn", + "groupId": 67 + }, + { + "id": "minecraft:goat_horn", + "damage": 1, + "groupId": 67 + }, + { + "id": "minecraft:goat_horn", + "damage": 2, + "groupId": 67 + }, + { + "id": "minecraft:goat_horn", + "damage": 3, + "groupId": 67 + }, + { + "id": "minecraft:goat_horn", + "damage": 4, + "groupId": 67 + }, + { + "id": "minecraft:goat_horn", + "damage": 5, + "groupId": 67 + }, + { + "id": "minecraft:goat_horn", + "damage": 6, + "groupId": 67 + }, + { + "id": "minecraft:goat_horn", + "damage": 7, + "groupId": 67 + }, + { + "id": "minecraft:empty_map", + "groupId": 68 + }, + { + "id": "minecraft:empty_map", + "damage": 2, + "groupId": 68 + }, + { + "id": "minecraft:saddle", + "groupId": 68 + }, + { + "id": "minecraft:bundle", + "groupId": 69 + }, + { + "id": "minecraft:white_bundle", + "groupId": 69 + }, + { + "id": "minecraft:light_gray_bundle", + "groupId": 69 + }, + { + "id": "minecraft:gray_bundle", + "groupId": 69 + }, + { + "id": "minecraft:black_bundle", + "groupId": 69 + }, + { + "id": "minecraft:brown_bundle", + "groupId": 69 + }, + { + "id": "minecraft:red_bundle", + "groupId": 69 + }, + { + "id": "minecraft:orange_bundle", + "groupId": 69 + }, + { + "id": "minecraft:yellow_bundle", + "groupId": 69 + }, + { + "id": "minecraft:lime_bundle", + "groupId": 69 + }, + { + "id": "minecraft:green_bundle", + "groupId": 69 + }, + { + "id": "minecraft:cyan_bundle", + "groupId": 69 + }, + { + "id": "minecraft:light_blue_bundle", + "groupId": 69 + }, + { + "id": "minecraft:blue_bundle", + "groupId": 69 + }, + { + "id": "minecraft:purple_bundle", + "groupId": 69 + }, + { + "id": "minecraft:magenta_bundle", + "groupId": 69 + }, + { + "id": "minecraft:pink_bundle", + "groupId": 69 + }, + { + "id": "minecraft:leather_horse_armor", + "groupId": 70 + }, + { + "id": "minecraft:iron_horse_armor", + "groupId": 70 + }, + { + "id": "minecraft:golden_horse_armor", + "groupId": 70 + }, + { + "id": "minecraft:diamond_horse_armor", + "groupId": 70 + }, + { + "id": "minecraft:wolf_armor", + "groupId": 71 + }, + { + "id": "minecraft:trident", + "groupId": 71 + }, + { + "id": "minecraft:turtle_helmet", + "groupId": 71 + }, + { + "id": "minecraft:elytra", + "groupId": 71 + }, + { + "id": "minecraft:totem_of_undying", + "groupId": 71 + }, + { + "id": "minecraft:glass_bottle", + "groupId": 71 + }, + { + "id": "minecraft:experience_bottle", + "groupId": 71 + }, + { + "id": "minecraft:potion", + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 1, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 2, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 3, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 4, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 5, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 6, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 7, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 8, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 9, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 10, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 11, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 12, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 13, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 14, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 15, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 16, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 17, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 18, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 19, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 20, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 21, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 22, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 23, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 24, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 25, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 26, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 27, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 28, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 29, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 30, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 31, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 32, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 33, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 34, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 35, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 36, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 37, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 38, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 39, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 40, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 41, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 42, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 43, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 44, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 45, + "groupId": 72 + }, + { + "id": "minecraft:potion", + "damage": 46, + "groupId": 72 + }, + { + "id": "minecraft:splash_potion", + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 1, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 2, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 3, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 4, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 5, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 6, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 7, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 8, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 9, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 10, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 11, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 12, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 13, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 14, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 15, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 16, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 17, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 18, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 19, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 20, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 21, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 22, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 23, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 24, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 25, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 26, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 27, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 28, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 29, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 30, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 31, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 32, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 33, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 34, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 35, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 36, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 37, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 38, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 39, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 40, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 41, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 42, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 43, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 44, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 45, + "groupId": 73 + }, + { + "id": "minecraft:splash_potion", + "damage": 46, + "groupId": 73 + }, + { + "id": "minecraft:lingering_potion", + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 1, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 2, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 3, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 4, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 5, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 6, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 7, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 8, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 9, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 10, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 11, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 12, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 13, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 14, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 15, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 16, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 17, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 18, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 19, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 20, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 21, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 22, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 23, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 24, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 25, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 26, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 27, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 28, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 29, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 30, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 31, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 32, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 33, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 34, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 35, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 36, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 37, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 38, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 39, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 40, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 41, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 42, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 43, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 44, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 45, + "groupId": 74 + }, + { + "id": "minecraft:lingering_potion", + "damage": 46, + "groupId": 74 + }, + { + "id": "minecraft:ominous_bottle", + "groupId": 75 + }, + { + "id": "minecraft:ominous_bottle", + "damage": 1, + "groupId": 75 + }, + { + "id": "minecraft:ominous_bottle", + "damage": 2, + "groupId": 75 + }, + { + "id": "minecraft:ominous_bottle", + "damage": 3, + "groupId": 75 + }, + { + "id": "minecraft:ominous_bottle", + "damage": 4, + "groupId": 75 + }, + { + "id": "minecraft:spyglass", + "groupId": 76 + }, + { + "id": "minecraft:brush", + "groupId": 76 + }, + { + "id": "minecraft:stick", + "groupId": 77 + }, + { + "id": "minecraft:bed", + "groupId": 78 + }, + { + "id": "minecraft:bed", + "damage": 8, + "groupId": 78 + }, + { + "id": "minecraft:bed", + "damage": 7, + "groupId": 78 + }, + { + "id": "minecraft:bed", + "damage": 15, + "groupId": 78 + }, + { + "id": "minecraft:bed", + "damage": 12, + "groupId": 78 + }, + { + "id": "minecraft:bed", + "damage": 14, + "groupId": 78 + }, + { + "id": "minecraft:bed", + "damage": 1, + "groupId": 78 + }, + { + "id": "minecraft:bed", + "damage": 4, + "groupId": 78 + }, + { + "id": "minecraft:bed", + "damage": 5, + "groupId": 78 + }, + { + "id": "minecraft:bed", + "damage": 13, + "groupId": 78 + }, + { + "id": "minecraft:bed", + "damage": 9, + "groupId": 78 + }, + { + "id": "minecraft:bed", + "damage": 3, + "groupId": 78 + }, + { + "id": "minecraft:bed", + "damage": 11, + "groupId": 78 + }, + { + "id": "minecraft:bed", + "damage": 10, + "groupId": 78 + }, + { + "id": "minecraft:bed", + "damage": 2, + "groupId": 78 + }, + { + "id": "minecraft:bed", + "damage": 6, + "groupId": 78 + }, + { + "id": "minecraft:torch", + "groupId": 79, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQyAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnRvcmNoBAkAbmFtZV9oYXNoagn7rmDBzisDCgBuZXR3b3JrX2lk+BwwuQoGAHN0YXRlcwgWAHRvcmNoX2ZhY2luZ19kaXJlY3Rpb24HAHVua25vd24AAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:soul_torch", + "groupId": 79, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQLAgAACAQAbmFtZRQAbWluZWNyYWZ0OnNvdWxfdG9yY2gECQBuYW1lX2hhc2huixOT04BRdQMKAG5ldHdvcmtfaWShbFILCgYAc3RhdGVzCBYAdG9yY2hfZmFjaW5nX2RpcmVjdGlvbgcAdW5rbm93bgADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:sea_pickle", + "groupId": 79, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAQAACAQAbmFtZRQAbWluZWNyYWZ0OnNlYV9waWNrbGUECQBuYW1lX2hhc2iONEfZJB+glgMKAG5ldHdvcmtfaWSINWQyCgYAc3RhdGVzAw0AY2x1c3Rlcl9jb3VudAAAAAABCABkZWFkX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:lantern", + "groupId": 79, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTPAQAACAQAbmFtZREAbWluZWNyYWZ0OmxhbnRlcm4ECQBuYW1lX2hhc2hMw44VI2HWygMKAG5ldHdvcmtfaWRkjQvzCgYAc3RhdGVzAQcAaGFuZ2luZwAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:soul_lantern", + "groupId": 79, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQMAgAACAQAbmFtZRYAbWluZWNyYWZ0OnNvdWxfbGFudGVybgQJAG5hbWVfaGFzaGjIpjxk9z+RAwoAbmV0d29ya19pZGfoP8cKBgBzdGF0ZXMBBwBoYW5naW5nAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:candle", + "groupId": 80, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAgAACAQAbmFtZRAAbWluZWNyYWZ0OmNhbmRsZQQJAG5hbWVfaGFzaHPd+MsNdWTfAwoAbmV0d29ya19pZHsBMA0KBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:white_candle", + "groupId": 80, + "block_state_b64": "CgAAAwgAYmxvY2tfaWScAgAACAQAbmFtZRYAbWluZWNyYWZ0OndoaXRlX2NhbmRsZQQJAG5hbWVfaGFzaN1EG5Q1mHiEAwoAbmV0d29ya19pZKN1mmgKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:orange_candle", + "groupId": 80, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSdAgAACAQAbmFtZRcAbWluZWNyYWZ0Om9yYW5nZV9jYW5kbGUECQBuYW1lX2hhc2jySEVWHgUIHQMKAG5ldHdvcmtfaWSfVz82CgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:magenta_candle", + "groupId": 80, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hZ2VudGFfY2FuZGxlBAkAbmFtZV9oYXNoG0u6YIOoBSEDCgBuZXR3b3JrX2lk9xGNkQoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:light_blue_candle", + "groupId": 80, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSfAgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FuZGxlBAkAbmFtZV9oYXNocXGeK0zgrG0DCgBuZXR3b3JrX2lk2m1y8goGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:yellow_candle", + "groupId": 80, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAgAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19jYW5kbGUECQBuYW1lX2hhc2i00dtusU3CqQMKAG5ldHdvcmtfaWR9LTmpCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:lime_candle", + "groupId": 80, + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAgAACAQAbmFtZRUAbWluZWNyYWZ0OmxpbWVfY2FuZGxlBAkAbmFtZV9oYXNokcmrw5xvz7ADCgBuZXR3b3JrX2lkIAUu6QoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:pink_candle", + "groupId": 80, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAgAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfY2FuZGxlBAkAbmFtZV9oYXNoQJdEY4sZ0dwDCgBuZXR3b3JrX2lk23Rn5AoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:gray_candle", + "groupId": 80, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAgAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXlfY2FuZGxlBAkAbmFtZV9oYXNoS5poSo9wBDEDCgBuZXR3b3JrX2lk3trRCAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:light_gray_candle", + "groupId": 80, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FuZGxlBAkAbmFtZV9oYXNo9ruTZLBNMasDCgBuZXR3b3JrX2lkb6DOegoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:cyan_candle", + "groupId": 80, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAgAACAQAbmFtZRUAbWluZWNyYWZ0OmN5YW5fY2FuZGxlBAkAbmFtZV9oYXNoc/M8PNVcjOwDCgBuZXR3b3JrX2lkZoIQOQoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:purple_candle", + "groupId": 80, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSmAgAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnBsZV9jYW5kbGUECQBuYW1lX2hhc2jaI3xUW0/myQMKAG5ldHdvcmtfaWSnLI2BCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:blue_candle", + "groupId": 80, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAgAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfY2FuZGxlBAkAbmFtZV9oYXNoAASSPW6TgQADCgBuZXR3b3JrX2lkrxrjQAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:brown_candle", + "groupId": 80, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJyb3duX2NhbmRsZQQJAG5hbWVfaGFzaDia0l6s1+WYAwoAbmV0d29ya19pZKSkBXYKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:green_candle", + "groupId": 80, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAgAACAQAbmFtZRYAbWluZWNyYWZ0OmdyZWVuX2NhbmRsZQQJAG5hbWVfaGFzaLeFPO1l+fIoAwoAbmV0d29ya19pZBkznDsKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:red_candle", + "groupId": 80, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9jYW5kbGUECQBuYW1lX2hhc2jjAQpGf59ZdwMKAG5ldHdvcmtfaWRbb88GCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:black_candle", + "groupId": 80, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJsYWNrX2NhbmRsZQQJAG5hbWVfaGFzaB+wRDpOqREKAwoAbmV0d29ya19pZNnOnuEKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:crafting_table", + "groupId": 81, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6AAAACAQAbmFtZRgAbWluZWNyYWZ0OmNyYWZ0aW5nX3RhYmxlBAkAbmFtZV9oYXNoe76VAmjvbpYDCgBuZXR3b3JrX2lkwCxwaAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:cartography_table", + "groupId": 81, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTHAQAACAQAbmFtZRsAbWluZWNyYWZ0OmNhcnRvZ3JhcGh5X3RhYmxlBAkAbmFtZV9oYXNomaWiiD/znP8DCgBuZXR3b3JrX2lkI6FzMwoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:fletching_table", + "groupId": 81, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAQAACAQAbmFtZRkAbWluZWNyYWZ0OmZsZXRjaGluZ190YWJsZQQJAG5hbWVfaGFzaPFibh8unKyUAwoAbmV0d29ya19pZJ2mW0oKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:smithing_table", + "groupId": 81, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAQAACAQAbmFtZRgAbWluZWNyYWZ0OnNtaXRoaW5nX3RhYmxlBAkAbmFtZV9oYXNo4tFES2xOXEYDCgBuZXR3b3JrX2lkXWMBzQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:beehive", + "groupId": 81, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAQAACAQAbmFtZREAbWluZWNyYWZ0OmJlZWhpdmUECQBuYW1lX2hhc2hCcqn12UbNpwMKAG5ldHdvcmtfaWR/idcaCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAMLAGhvbmV5X2xldmVsAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:suspicious_sand", + "groupId": 81, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAwAACAQAbmFtZRkAbWluZWNyYWZ0OnN1c3BpY2lvdXNfc2FuZAQJAG5hbWVfaGFzaL67QsuvLP00AwoAbmV0d29ya19pZKnkaIAKBgBzdGF0ZXMDEABicnVzaGVkX3Byb2dyZXNzAAAAAAEHAGhhbmdpbmcBAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:suspicious_gravel", + "groupId": 81, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AwAACAQAbmFtZRsAbWluZWNyYWZ0OnN1c3BpY2lvdXNfZ3JhdmVsBAkAbmFtZV9oYXNoJSVbGNk7C3oDCgBuZXR3b3JrX2lkvIEJAAoGAHN0YXRlcwMQAGJydXNoZWRfcHJvZ3Jlc3MAAAAAAQcAaGFuZ2luZwEAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:campfire", + "groupId": 81 + }, + { + "id": "minecraft:soul_campfire", + "groupId": 81 + }, + { + "id": "minecraft:furnace", + "groupId": 81, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ9AAAACAQAbmFtZREAbWluZWNyYWZ0OmZ1cm5hY2UECQBuYW1lX2hhc2ioOQrludYY8wMKAG5ldHdvcmtfaWRZxnDOCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:blast_furnace", + "groupId": 81, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTDAQAACAQAbmFtZRcAbWluZWNyYWZ0OmJsYXN0X2Z1cm5hY2UECQBuYW1lX2hhc2ivDbnjkpGm5QMKAG5ldHdvcmtfaWTcEbV/CgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:smoker", + "groupId": 81, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAQAACAQAbmFtZRAAbWluZWNyYWZ0OnNtb2tlcgQJAG5hbWVfaGFzaJd1rDMkRWomAwoAbmV0d29ya19pZGWswMwKBgBzdGF0ZXMIHABtaW5lY3JhZnQ6Y2FyZGluYWxfZGlyZWN0aW9uBQBzb3V0aAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:respawn_anchor", + "groupId": 81, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJlc3Bhd25fYW5jaG9yBAkAbmFtZV9oYXNoZOdcjW05qigDCgBuZXR3b3JrX2lkmhMcaQoGAHN0YXRlcwMVAHJlc3Bhd25fYW5jaG9yX2NoYXJnZQAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:brewing_stand", + "groupId": 81 + }, + { + "id": "minecraft:anvil", + "groupId": 82, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lkqXzNjwoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:chipped_anvil", + "groupId": 82, + "block_state_b64": "CgAAAwgAYmxvY2tfaWS+BAAACAQAbmFtZRcAbWluZWNyYWZ0OmNoaXBwZWRfYW52aWwECQBuYW1lX2hhc2ge+QY3vlS/eQMKAG5ldHdvcmtfaWRJ15iUCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:damaged_anvil", + "groupId": 82, + "block_state_b64": "CgAAAwgAYmxvY2tfaWS/BAAACAQAbmFtZRcAbWluZWNyYWZ0OmRhbWFnZWRfYW52aWwECQBuYW1lX2hhc2imJ12Be2V8+AMKAG5ldHdvcmtfaWRh5SHkCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:grindstone", + "groupId": 83, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTCAQAACAQAbmFtZRQAbWluZWNyYWZ0OmdyaW5kc3RvbmUECQBuYW1lX2hhc2id56zc0nk99wMKAG5ldHdvcmtfaWS4Es07CgYAc3RhdGVzCAoAYXR0YWNobWVudAgAc3RhbmRpbmcDCQBkaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:enchanting_table", + "groupId": 83, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR0AAAACAQAbmFtZRoAbWluZWNyYWZ0OmVuY2hhbnRpbmdfdGFibGUECQBuYW1lX2hhc2jgIx24VLvMvwMKAG5ldHdvcmtfaWRliFFJCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:bookshelf", + "groupId": 83, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAAAACAQAbmFtZRMAbWluZWNyYWZ0OmJvb2tzaGVsZgQJAG5hbWVfaGFzaDU04DrgJCS9AwoAbmV0d29ya19pZBcWwIwKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:chiseled_bookshelf", + "groupId": 83, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAwAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX2Jvb2tzaGVsZgQJAG5hbWVfaGFzaNXDBnsIsywYAwoAbmV0d29ya19pZIprt5IKBgBzdGF0ZXMDDABib29rc19zdG9yZWQAAAAAAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:lectern", + "groupId": 83, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTBAQAACAQAbmFtZREAbWluZWNyYWZ0OmxlY3Rlcm4ECQBuYW1lX2hhc2j5Z4Mmi/1QxAMKAG5ldHdvcmtfaWR4JfDHCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgBCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:cauldron", + "groupId": 83 + }, + { + "id": "minecraft:composter", + "groupId": 83, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAQAACAQAbmFtZRMAbWluZWNyYWZ0OmNvbXBvc3RlcgQJAG5hbWVfaGFzaPAADHptzeWJAwoAbmV0d29ya19pZHIL6i4KBgBzdGF0ZXMDFABjb21wb3N0ZXJfZmlsbF9sZXZlbAAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:chest", + "groupId": 84, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2AAAACAQAbmFtZQ8AbWluZWNyYWZ0OmNoZXN0BAkAbmFtZV9oYXNog9ozMxlcA88DCgBuZXR3b3JrX2lkDkOFvAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:trapped_chest", + "groupId": 84, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAAAACAQAbmFtZRcAbWluZWNyYWZ0OnRyYXBwZWRfY2hlc3QECQBuYW1lX2hhc2g2qpF9stsEjgMKAG5ldHdvcmtfaWTjJWYxCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAbm9ydGgAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:ender_chest", + "groupId": 84, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAAAACAQAbmFtZRUAbWluZWNyYWZ0OmVuZGVyX2NoZXN0BAkAbmFtZV9oYXNohEZzOFdg0WUDCgBuZXR3b3JrX2lkx4jiSQoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:barrel", + "groupId": 85, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhcnJlbAQJAG5hbWVfaGFzaHDkRPGymiRqAwoAbmV0d29ya19pZPnxzgsKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:undyed_shulker_box", + "groupId": 86, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAAAACAQAbmFtZRwAbWluZWNyYWZ0OnVuZHllZF9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaOC9mypm/MlBAwoAbmV0d29ya19pZJ8rxp0KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:white_shulker_box", + "groupId": 86, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAAAACAQAbmFtZRsAbWluZWNyYWZ0OndoaXRlX3NodWxrZXJfYm94BAkAbmFtZV9oYXNosK79m1rPUBwDCgBuZXR3b3JrX2lkjrET6goGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:light_gray_shulker_box", + "groupId": 86, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAwAACAQAbmFtZSAAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2iBe5zq7PxHmgMKAG5ldHdvcmtfaWSCVJv0CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:gray_shulker_box", + "groupId": 86, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRqAwAACAQAbmFtZRoAbWluZWNyYWZ0OmdyYXlfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2ga2s8ctjHUhgMKAG5ldHdvcmtfaWS3WMsWCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:black_shulker_box", + "groupId": 86, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRyAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJsYWNrX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoPm03OZphrp8DCgBuZXR3b3JrX2lkXHztNAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:brown_shulker_box", + "groupId": 86, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRvAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJyb3duX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoT3DD6qAL9cADCgBuZXR3b3JrX2lkaXxpYQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:red_shulker_box", + "groupId": 86, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRxAwAACAQAbmFtZRkAbWluZWNyYWZ0OnJlZF9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaMIlKSCzqSZoAwoAbmV0d29ya19pZNrf+icKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:orange_shulker_box", + "groupId": 86, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAwAACAQAbmFtZRwAbWluZWNyYWZ0Om9yYW5nZV9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaG2MAXU67wGrAwoAbmV0d29ya19pZGoO05gKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:yellow_shulker_box", + "groupId": 86, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRnAwAACAQAbmFtZRwAbWluZWNyYWZ0OnllbGxvd19zaHVsa2VyX2JveAQJAG5hbWVfaGFzaIsLwQHYjcIEAwoAbmV0d29ya19pZBCBSiYKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:lime_shulker_box", + "groupId": 86, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRoAwAACAQAbmFtZRoAbWluZWNyYWZ0OmxpbWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2hUwBkg+faUGAMKAG5ldHdvcmtfaWRJeKqqCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:green_shulker_box", + "groupId": 86, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRwAwAACAQAbmFtZRsAbWluZWNyYWZ0OmdyZWVuX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoZgUeT3LupLUDCgBuZXR3b3JrX2lkzJiohQoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:cyan_shulker_box", + "groupId": 86, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAwAACAQAbmFtZRoAbWluZWNyYWZ0OmN5YW5fc2h1bGtlcl9ib3gECQBuYW1lX2hhc2gSfbjteXg5yAMKAG5ldHdvcmtfaWTHeliECgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:light_blue_shulker_box", + "groupId": 86, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAwAACAQAbmFtZSAAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2h0VFCX0qsRxQMKAG5ldHdvcmtfaWQXD8U0CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:blue_shulker_box", + "groupId": 86, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJsdWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2hn9gS0XIe6rAMKAG5ldHdvcmtfaWTO4PJaCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:purple_shulker_box", + "groupId": 86, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAwAACAQAbmFtZRwAbWluZWNyYWZ0OnB1cnBsZV9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaEV/lkNPxRDdAwoAbmV0d29ya19pZFK25GAKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:magenta_shulker_box", + "groupId": 86, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAwAACAQAbmFtZR0AbWluZWNyYWZ0Om1hZ2VudGFfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2iqWM7IJHxcFgMKAG5ldHdvcmtfaWTyyudTCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:pink_shulker_box", + "groupId": 86, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRpAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBpbmtfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2in1tkJ1GNcZgMKAG5ldHdvcmtfaWQOEGXjCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:armor_stand", + "groupId": 87 + }, + { + "id": "minecraft:noteblock", + "groupId": 87, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAAAACAQAbmFtZRMAbWluZWNyYWZ0Om5vdGVibG9jawQJAG5hbWVfaGFzaHPA8dBBH0UaAwoAbmV0d29ya19pZH1U5QkKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:jukebox", + "groupId": 87, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAAAACAQAbmFtZREAbWluZWNyYWZ0Omp1a2Vib3gECQBuYW1lX2hhc2ieAIPExf/ZfgMKAG5ldHdvcmtfaWSmR7JfCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:music_disc_13", + "groupId": 88 + }, + { + "id": "minecraft:music_disc_cat", + "groupId": 88 + }, + { + "id": "minecraft:music_disc_blocks", + "groupId": 88 + }, + { + "id": "minecraft:music_disc_chirp", + "groupId": 88 + }, + { + "id": "minecraft:music_disc_far", + "groupId": 88 + }, + { + "id": "minecraft:music_disc_mall", + "groupId": 88 + }, + { + "id": "minecraft:music_disc_mellohi", + "groupId": 88 + }, + { + "id": "minecraft:music_disc_stal", + "groupId": 88 + }, + { + "id": "minecraft:music_disc_strad", + "groupId": 88 + }, + { + "id": "minecraft:music_disc_ward", + "groupId": 88 + }, + { + "id": "minecraft:music_disc_11", + "groupId": 88 + }, + { + "id": "minecraft:music_disc_wait", + "groupId": 88 + }, + { + "id": "minecraft:music_disc_otherside", + "groupId": 88 + }, + { + "id": "minecraft:music_disc_5", + "groupId": 88 + }, + { + "id": "minecraft:music_disc_pigstep", + "groupId": 88 + }, + { + "id": "minecraft:music_disc_relic", + "groupId": 88 + }, + { + "id": "minecraft:music_disc_creator", + "groupId": 88 + }, + { + "id": "minecraft:music_disc_creator_music_box", + "groupId": 88 + }, + { + "id": "minecraft:music_disc_precipice", + "groupId": 88 + }, + { + "id": "minecraft:disc_fragment_5", + "groupId": 89 + }, + { + "id": "minecraft:glowstone_dust", + "groupId": 89 + }, + { + "id": "minecraft:glowstone", + "groupId": 89, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRZAAAACAQAbmFtZRMAbWluZWNyYWZ0Omdsb3dzdG9uZQQJAG5hbWVfaGFzaFYqXNkefIlPAwoAbmV0d29ya19pZGT7WYYKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:redstone_lamp", + "groupId": 89, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZHN0b25lX2xhbXAECQBuYW1lX2hhc2hJ9V80caPvEgMKAG5ldHdvcmtfaWRvNPwnCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:sea_lantern", + "groupId": 89, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAAAACAQAbmFtZRUAbWluZWNyYWZ0OnNlYV9sYW50ZXJuBAkAbmFtZV9oYXNoLPsv1TX9M+QDCgBuZXR3b3JrX2lk1PPVyAoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:oak_sign", + "groupId": 90 + }, + { + "id": "minecraft:spruce_sign", + "groupId": 90 + }, + { + "id": "minecraft:birch_sign", + "groupId": 90 + }, + { + "id": "minecraft:jungle_sign", + "groupId": 90 + }, + { + "id": "minecraft:acacia_sign", + "groupId": 90 + }, + { + "id": "minecraft:dark_oak_sign", + "groupId": 90 + }, + { + "id": "minecraft:mangrove_sign", + "groupId": 90 + }, + { + "id": "minecraft:cherry_sign", + "groupId": 90 + }, + { + "id": "minecraft:pale_oak_sign", + "groupId": 90 + }, + { + "id": "minecraft:bamboo_sign", + "groupId": 90 + }, + { + "id": "minecraft:crimson_sign", + "groupId": 90 + }, + { + "id": "minecraft:warped_sign", + "groupId": 90 + }, + { + "id": "minecraft:oak_hanging_sign", + "groupId": 91 + }, + { + "id": "minecraft:spruce_hanging_sign", + "groupId": 91 + }, + { + "id": "minecraft:birch_hanging_sign", + "groupId": 91 + }, + { + "id": "minecraft:jungle_hanging_sign", + "groupId": 91 + }, + { + "id": "minecraft:acacia_hanging_sign", + "groupId": 91 + }, + { + "id": "minecraft:dark_oak_hanging_sign", + "groupId": 91 + }, + { + "id": "minecraft:mangrove_hanging_sign", + "groupId": 91 + }, + { + "id": "minecraft:cherry_hanging_sign", + "groupId": 91 + }, + { + "id": "minecraft:pale_oak_hanging_sign", + "groupId": 91 + }, + { + "id": "minecraft:bamboo_hanging_sign", + "groupId": 91 + }, + { + "id": "minecraft:crimson_hanging_sign", + "groupId": 91 + }, + { + "id": "minecraft:warped_hanging_sign", + "groupId": 91 + }, + { + "id": "minecraft:painting", + "groupId": 92 + }, + { + "id": "minecraft:frame", + "groupId": 92 + }, + { + "id": "minecraft:glow_frame", + "groupId": 92 + }, + { + "id": "minecraft:honey_bottle", + "groupId": 92 + }, + { + "id": "minecraft:flower_pot", + "groupId": 92 + }, + { + "id": "minecraft:bowl", + "groupId": 92 + }, + { + "id": "minecraft:bucket", + "groupId": 92 + }, + { + "id": "minecraft:milk_bucket", + "groupId": 92 + }, + { + "id": "minecraft:water_bucket", + "groupId": 92 + }, + { + "id": "minecraft:lava_bucket", + "groupId": 92 + }, + { + "id": "minecraft:cod_bucket", + "groupId": 92 + }, + { + "id": "minecraft:salmon_bucket", + "groupId": 92 + }, + { + "id": "minecraft:tropical_fish_bucket", + "groupId": 92 + }, + { + "id": "minecraft:pufferfish_bucket", + "groupId": 92 + }, + { + "id": "minecraft:powder_snow_bucket", + "groupId": 92 + }, + { + "id": "minecraft:axolotl_bucket", + "groupId": 92 + }, + { + "id": "minecraft:tadpole_bucket", + "groupId": 92 + }, + { + "id": "minecraft:player_head", + "groupId": 93, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTGBAAACAQAbmFtZRUAbWluZWNyYWZ0OnBsYXllcl9oZWFkBAkAbmFtZV9oYXNonFwZb7CL8EYDCgBuZXR3b3JrX2lkZeAXqAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:zombie_head", + "groupId": 93, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTFBAAACAQAbmFtZRUAbWluZWNyYWZ0OnpvbWJpZV9oZWFkBAkAbmFtZV9oYXNoixuENYuaGgEDCgBuZXR3b3JrX2lk0NsHDgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:creeper_head", + "groupId": 93, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTHBAAACAQAbmFtZRYAbWluZWNyYWZ0OmNyZWVwZXJfaGVhZAQJAG5hbWVfaGFzaCvAGFMS/RqVAwoAbmV0d29ya19pZEfskXYKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:dragon_head", + "groupId": 93, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTIBAAACAQAbmFtZRUAbWluZWNyYWZ0OmRyYWdvbl9oZWFkBAkAbmFtZV9oYXNozjh6bGRaa5UDCgBuZXR3b3JrX2lk/zjetgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:skeleton_skull", + "groupId": 93, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAAAACAQAbmFtZRgAbWluZWNyYWZ0OnNrZWxldG9uX3NrdWxsBAkAbmFtZV9oYXNo3+kbzeMgg4kDCgBuZXR3b3JrX2lk/RqWbwoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:wither_skeleton_skull", + "groupId": 93, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTEBAAACAQAbmFtZR8AbWluZWNyYWZ0OndpdGhlcl9za2VsZXRvbl9za3VsbAQJAG5hbWVfaGFzaEcZrUyy9cfRAwoAbmV0d29ya19pZJZ2G/oKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:piglin_head", + "groupId": 93, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTJBAAACAQAbmFtZRUAbWluZWNyYWZ0OnBpZ2xpbl9oZWFkBAkAbmFtZV9oYXNo+jUCKgb5DskDCgBuZXR3b3JrX2lkQ1ETVwoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:beacon", + "groupId": 94, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAAAACAQAbmFtZRAAbWluZWNyYWZ0OmJlYWNvbgQJAG5hbWVfaGFzaACwhhfSkdkHAwoAbmV0d29ya19pZF8jfiEKBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:bell", + "groupId": 94, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAQAACAQAbmFtZQ4AbWluZWNyYWZ0OmJlbGwECQBuYW1lX2hhc2iPqsgDXRcsxAMKAG5ldHdvcmtfaWT7zhOoCgYAc3RhdGVzCAoAYXR0YWNobWVudAgAc3RhbmRpbmcDCQBkaXJlY3Rpb24AAAAAAQoAdG9nZ2xlX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:conduit", + "groupId": 94, + "block_state_b64": "CgAAAwgAYmxvY2tfaWScAQAACAQAbmFtZREAbWluZWNyYWZ0OmNvbmR1aXQECQBuYW1lX2hhc2jqxKAxq2EaWQMKAG5ldHdvcmtfaWTWcBVnCgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:stonecutter_block", + "groupId": 94, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lY3V0dGVyX2Jsb2NrBAkAbmFtZV9oYXNoQAXTbAM3MeYDCgBuZXR3b3JrX2lkWS4RjAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:coal", + "groupId": 94 + }, + { + "id": "minecraft:charcoal", + "groupId": 94 + }, + { + "id": "minecraft:diamond", + "groupId": 94 + }, + { + "id": "minecraft:iron_nugget", + "groupId": 94 + }, + { + "id": "minecraft:raw_iron", + "groupId": 94 + }, + { + "id": "minecraft:raw_gold", + "groupId": 94 + }, + { + "id": "minecraft:raw_copper", + "groupId": 94 + }, + { + "id": "minecraft:copper_ingot", + "groupId": 94 + }, + { + "id": "minecraft:iron_ingot", + "groupId": 94 + }, + { + "id": "minecraft:netherite_scrap", + "groupId": 94 + }, + { + "id": "minecraft:netherite_ingot", + "groupId": 94 + }, + { + "id": "minecraft:gold_nugget", + "groupId": 94 + }, + { + "id": "minecraft:gold_ingot", + "groupId": 94 + }, + { + "id": "minecraft:emerald", + "groupId": 94 + }, + { + "id": "minecraft:quartz", + "groupId": 94 + }, + { + "id": "minecraft:clay_ball", + "groupId": 94 + }, + { + "id": "minecraft:brick", + "groupId": 94 + }, + { + "id": "minecraft:netherbrick", + "groupId": 94 + }, + { + "id": "minecraft:resin_brick", + "groupId": 94 + }, + { + "id": "minecraft:prismarine_shard", + "groupId": 94 + }, + { + "id": "minecraft:amethyst_shard", + "groupId": 94 + }, + { + "id": "minecraft:prismarine_crystals", + "groupId": 94 + }, + { + "id": "minecraft:nautilus_shell", + "groupId": 94 + }, + { + "id": "minecraft:heart_of_the_sea", + "groupId": 94 + }, + { + "id": "minecraft:turtle_scute", + "groupId": 94 + }, + { + "id": "minecraft:armadillo_scute", + "groupId": 94 + }, + { + "id": "minecraft:phantom_membrane", + "groupId": 94 + }, + { + "id": "minecraft:string", + "groupId": 94 + }, + { + "id": "minecraft:feather", + "groupId": 94 + }, + { + "id": "minecraft:flint", + "groupId": 94 + }, + { + "id": "minecraft:gunpowder", + "groupId": 94 + }, + { + "id": "minecraft:leather", + "groupId": 94 + }, + { + "id": "minecraft:rabbit_hide", + "groupId": 94 + }, + { + "id": "minecraft:rabbit_foot", + "groupId": 94 + }, + { + "id": "minecraft:fire_charge", + "groupId": 94 + }, + { + "id": "minecraft:blaze_rod", + "groupId": 94 + }, + { + "id": "minecraft:breeze_rod", + "groupId": 94 + }, + { + "id": "minecraft:heavy_core", + "groupId": 94, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ7AgAACAQAbmFtZRQAbWluZWNyYWZ0OmhlYXZ5X2NvcmUECQBuYW1lX2hhc2hhz/uNCtrC2QMKAG5ldHdvcmtfaWRaFu+8CgYAc3RhdGVzAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:blaze_powder", + "groupId": 94 + }, + { + "id": "minecraft:magma_cream", + "groupId": 94 + }, + { + "id": "minecraft:fermented_spider_eye", + "groupId": 94 + }, + { + "id": "minecraft:echo_shard", + "groupId": 94 + }, + { + "id": "minecraft:dragon_breath", + "groupId": 94 + }, + { + "id": "minecraft:shulker_shell", + "groupId": 94 + }, + { + "id": "minecraft:ghast_tear", + "groupId": 94 + }, + { + "id": "minecraft:slime_ball", + "groupId": 94 + }, + { + "id": "minecraft:ender_pearl", + "groupId": 94 + }, + { + "id": "minecraft:ender_eye", + "groupId": 94 + }, + { + "id": "minecraft:nether_star", + "groupId": 94 + }, + { + "id": "minecraft:end_rod", + "groupId": 94, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTQAAAACAQAbmFtZREAbWluZWNyYWZ0OmVuZF9yb2QECQBuYW1lX2hhc2jx/q5cEA0hmQMKAG5ldHdvcmtfaWQ2eM8kCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:lightning_rod", + "groupId": 94, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ3AgAACAQAbmFtZRcAbWluZWNyYWZ0OmxpZ2h0bmluZ19yb2QECQBuYW1lX2hhc2ioXQF1xvfHNQMKAG5ldHdvcmtfaWRLuHyACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:end_crystal", + "groupId": 94 + }, + { + "id": "minecraft:paper", + "groupId": 94 + }, + { + "id": "minecraft:book", + "groupId": 94 + }, + { + "id": "minecraft:writable_book", + "groupId": 94 + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQFAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQFAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQFAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQGAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQGAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQGAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQHAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQHAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQHAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQIAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAUAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAUAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAUAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQMAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQMAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQNAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQNAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQOAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQOAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQOAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAUAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQQAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQRAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQRAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQRAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQSAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQSAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQSAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAUAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQUAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQUAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQVAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQWAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQXAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQXAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQXAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQYAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQYAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQYAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQZAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQZAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQaAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQbAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQcAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAUAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQeAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQeAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQeAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQfAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQfAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQfAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQgAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQhAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQjAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQjAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQjAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQkAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQkAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQkAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQlAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQlAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQlAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQmAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQmAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQmAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQnAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQnAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQnAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQnAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQnAAIDAGx2bAUAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQoAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQoAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQoAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "groupId": 95, + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQoAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:oak_boat", + "groupId": 96 + }, + { + "id": "minecraft:spruce_boat", + "groupId": 96 + }, + { + "id": "minecraft:birch_boat", + "groupId": 96 + }, + { + "id": "minecraft:jungle_boat", + "groupId": 96 + }, + { + "id": "minecraft:acacia_boat", + "groupId": 96 + }, + { + "id": "minecraft:dark_oak_boat", + "groupId": 96 + }, + { + "id": "minecraft:mangrove_boat", + "groupId": 96 + }, + { + "id": "minecraft:cherry_boat", + "groupId": 96 + }, + { + "id": "minecraft:pale_oak_boat", + "groupId": 96 + }, + { + "id": "minecraft:bamboo_raft", + "groupId": 96 + }, + { + "id": "minecraft:oak_chest_boat", + "groupId": 97 + }, + { + "id": "minecraft:spruce_chest_boat", + "groupId": 97 + }, + { + "id": "minecraft:birch_chest_boat", + "groupId": 97 + }, + { + "id": "minecraft:jungle_chest_boat", + "groupId": 97 + }, + { + "id": "minecraft:acacia_chest_boat", + "groupId": 97 + }, + { + "id": "minecraft:dark_oak_chest_boat", + "groupId": 97 + }, + { + "id": "minecraft:mangrove_chest_boat", + "groupId": 97 + }, + { + "id": "minecraft:cherry_chest_boat", + "groupId": 97 + }, + { + "id": "minecraft:pale_oak_chest_boat", + "groupId": 97 + }, + { + "id": "minecraft:bamboo_chest_raft", + "groupId": 97 + }, + { + "id": "minecraft:rail", + "groupId": 98, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRCAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnJhaWwECQBuYW1lX2hhc2hUzmhUXYJDUQMKAG5ldHdvcmtfaWR+Sp6YCgYAc3RhdGVzAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:golden_rail", + "groupId": 98, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQbAAAACAQAbmFtZRUAbWluZWNyYWZ0OmdvbGRlbl9yYWlsBAkAbmFtZV9oYXNoOoV5MaKipoUDCgBuZXR3b3JrX2lkfAcxLwoGAHN0YXRlcwENAHJhaWxfZGF0YV9iaXQAAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:detector_rail", + "groupId": 98, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQcAAAACAQAbmFtZRcAbWluZWNyYWZ0OmRldGVjdG9yX3JhaWwECQBuYW1lX2hhc2gVUk31qOysUQMKAG5ldHdvcmtfaWRVW/aICgYAc3RhdGVzAQ0AcmFpbF9kYXRhX2JpdAADDgByYWlsX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:activator_rail", + "groupId": 98, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AAAACAQAbmFtZRgAbWluZWNyYWZ0OmFjdGl2YXRvcl9yYWlsBAkAbmFtZV9oYXNosIL91qriCRkDCgBuZXR3b3JrX2lkZfckmwoGAHN0YXRlcwENAHJhaWxfZGF0YV9iaXQAAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:minecart", + "groupId": 99 + }, + { + "id": "minecraft:chest_minecart", + "groupId": 99 + }, + { + "id": "minecraft:hopper_minecart", + "groupId": 99 + }, + { + "id": "minecraft:tnt_minecart", + "groupId": 99 + }, + { + "id": "minecraft:redstone", + "groupId": 100 + }, + { + "id": "minecraft:redstone_block", + "groupId": 100, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSYAAAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZHN0b25lX2Jsb2NrBAkAbmFtZV9oYXNoRhULL0r8o0sDCgBuZXR3b3JrX2lklayOHgoGAHN0YXRlcwADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:redstone_torch", + "groupId": 100, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAAAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZHN0b25lX3RvcmNoBAkAbmFtZV9oYXNoizFRjpYMIDgDCgBuZXR3b3JrX2lkuHz7yAoGAHN0YXRlcwgWAHRvcmNoX2ZhY2luZ19kaXJlY3Rpb24HAHVua25vd24AAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:lever", + "groupId": 100, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmxldmVyBAkAbmFtZV9oYXNoGMJeLJsUMLYDCgBuZXR3b3JrX2lkEF/GuAoGAHN0YXRlcwgPAGxldmVyX2RpcmVjdGlvbg4AZG93bl9lYXN0X3dlc3QBCABvcGVuX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:wooden_button", + "groupId": 101, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAAAACAQAbmFtZRcAbWluZWNyYWZ0Ondvb2Rlbl9idXR0b24ECQBuYW1lX2hhc2hR7PgSTQt0sQMKAG5ldHdvcmtfaWSU07kYCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:spruce_button", + "groupId": 101, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAQAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9idXR0b24ECQBuYW1lX2hhc2jBW9Z8aYE7YQMKAG5ldHdvcmtfaWTkUIGuCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:birch_button", + "groupId": 101, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSMAQAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX2J1dHRvbgQJAG5hbWVfaGFzaJXYgGuSHbTwAwoAbmV0d29ya19pZGWp3yoKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:jungle_button", + "groupId": 101, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSOAQAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9idXR0b24ECQBuYW1lX2hhc2iCgNANcJs+BQMKAG5ldHdvcmtfaWT9fImWCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:acacia_button", + "groupId": 101, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAQAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9idXR0b24ECQBuYW1lX2hhc2gVvmcT7LTO0wMKAG5ldHdvcmtfaWRQnxIJCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:dark_oak_button", + "groupId": 101, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSNAQAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX2J1dHRvbgQJAG5hbWVfaGFzaIV10ZGGrCIEAwoAbmV0d29ya19pZN5vAmIKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:mangrove_button", + "groupId": 101, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX2J1dHRvbgQJAG5hbWVfaGFzaNzeYYKLgOzJAwoAbmV0d29ya19pZAFEGQ0KBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:cherry_button", + "groupId": 101, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9idXR0b24ECQBuYW1lX2hhc2j2/IHjeAbUcwMKAG5ldHdvcmtfaWRJ1irQCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:pale_oak_button", + "groupId": 101, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTcBAAACAQAbmFtZRkAbWluZWNyYWZ0OnBhbGVfb2FrX2J1dHRvbgQJAG5hbWVfaGFzaLk54s7RtGHgAwoAbmV0d29ya19pZNLO6ZwKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:bamboo_button", + "groupId": 101, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT+AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19idXR0b24ECQBuYW1lX2hhc2j7AddMi+6nsgMKAG5ldHdvcmtfaWSa9w4/CgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:stone_button", + "groupId": 101, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAAAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX2J1dHRvbgQJAG5hbWVfaGFzaM4ejMctmvohAwoAbmV0d29ya19pZMw+aC0KBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:crimson_button", + "groupId": 101, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fYnV0dG9uBAkAbmFtZV9oYXNofnjYHaYIeWgDCgBuZXR3b3JrX2lk+n1vyQoGAHN0YXRlcwESAGJ1dHRvbl9wcmVzc2VkX2JpdAADEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:warped_button", + "groupId": 101, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9idXR0b24ECQBuYW1lX2hhc2jwkV2EU6Cn1QMKAG5ldHdvcmtfaWTnHnk1CgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:polished_blackstone_button", + "groupId": 101, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQnAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnV0dG9uBAkAbmFtZV9oYXNojmxzQKS0S/EDCgBuZXR3b3JrX2lkDtQ95woGAHN0YXRlcwESAGJ1dHRvbl9wcmVzc2VkX2JpdAADEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:tripwire_hook", + "groupId": 102, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAAAACAQAbmFtZRcAbWluZWNyYWZ0OnRyaXB3aXJlX2hvb2sECQBuYW1lX2hhc2gQdp+oGZLNnAMKAG5ldHdvcmtfaWSy+1KJCgYAc3RhdGVzAQwAYXR0YWNoZWRfYml0AAMJAGRpcmVjdGlvbgAAAAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:wooden_pressure_plate", + "groupId": 103, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAAAACAQAbmFtZR8AbWluZWNyYWZ0Ondvb2Rlbl9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaGkGs5kCuA74AwoAbmV0d29ya19pZDRzPNwKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:spruce_pressure_plate", + "groupId": 103, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAQAACAQAbmFtZR8AbWluZWNyYWZ0OnNwcnVjZV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaNmwuq549fJKAwoAbmV0d29ya19pZLQMCw0KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:birch_pressure_plate", + "groupId": 103, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSWAQAACAQAbmFtZR4AbWluZWNyYWZ0OmJpcmNoX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNorQkT9kDdlTwDCgBuZXR3b3JrX2lkH0G97AoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:jungle_pressure_plate", + "groupId": 103, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSYAQAACAQAbmFtZR8AbWluZWNyYWZ0Omp1bmdsZV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaJ7DcteCkb8/AwoAbmV0d29ya19pZLdPBSAKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:acacia_pressure_plate", + "groupId": 103, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSVAQAACAQAbmFtZR8AbWluZWNyYWZ0OmFjYWNpYV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaC2frZtfoYqCAwoAbmV0d29ya19pZIDdI18KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:dark_oak_pressure_plate", + "groupId": 103, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAQAACAQAbmFtZSEAbWluZWNyYWZ0OmRhcmtfb2FrX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoHUCJsTy52pwDCgBuZXR3b3JrX2lkKpi8rAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:mangrove_pressure_plate", + "groupId": 103, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAgAACAQAbmFtZSEAbWluZWNyYWZ0Om1hbmdyb3ZlX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoiDsTfJaX100DCgBuZXR3b3JrX2lkuwWDyQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:cherry_pressure_plate", + "groupId": 103, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAwAACAQAbmFtZR8AbWluZWNyYWZ0OmNoZXJyeV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaALMqYEZDUQHAwoAbmV0d29ya19pZPNT+r0KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:pale_oak_pressure_plate", + "groupId": 103, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTkBAAACAQAbmFtZSEAbWluZWNyYWZ0OnBhbGVfb2FrX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNo8cvY7evY5xkDCgBuZXR3b3JrX2lkDmW0uAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:bamboo_pressure_plate", + "groupId": 103, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJhbWJvb19wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaNvxJ7NIAaqlAwoAbmV0d29ya19pZIZ8XnYKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:crimson_pressure_plate", + "groupId": 103, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAgAACAQAbmFtZSAAbWluZWNyYWZ0OmNyaW1zb25fcHJlc3N1cmVfcGxhdGUECQBuYW1lX2hhc2hqBDVDAd31/gMKAG5ldHdvcmtfaWRmV18LCgYAc3RhdGVzAw8AcmVkc3RvbmVfc2lnbmFsAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:warped_pressure_plate", + "groupId": 103, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAgAACAQAbmFtZR8AbWluZWNyYWZ0OndhcnBlZF9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaBxFoQksWtYUAwoAbmV0d29ya19pZJVRoIcKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:stone_pressure_plate", + "groupId": 103, + "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0b25lX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNounJuTBUTrU8DCgBuZXR3b3JrX2lkjDydwQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:light_weighted_pressure_plate", + "groupId": 103, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSTAAAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X3dlaWdodGVkX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoOyOJkNxLtkEDCgBuZXR3b3JrX2lkrr2AjgoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:heavy_weighted_pressure_plate", + "groupId": 103, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAAAACAQAbmFtZScAbWluZWNyYWZ0OmhlYXZ5X3dlaWdodGVkX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoltgDmDvTajUDCgBuZXR3b3JrX2lkFxVKuQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:polished_blackstone_pressure_plate", + "groupId": 103, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAgAACAQAbmFtZSwAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfcHJlc3N1cmVfcGxhdGUECQBuYW1lX2hhc2h65Ci6/CeGqwMKAG5ldHdvcmtfaWTaSW5xCgYAc3RhdGVzAw8AcmVkc3RvbmVfc2lnbmFsAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:observer", + "groupId": 104, + "block_state_b64": "CgAAAwgAYmxvY2tfaWT7AAAACAQAbmFtZRIAbWluZWNyYWZ0Om9ic2VydmVyBAkAbmFtZV9oYXNoYhlh1lpmHTgDCgBuZXR3b3JrX2lkQEh55goGAHN0YXRlcwgaAG1pbmVjcmFmdDpmYWNpbmdfZGlyZWN0aW9uBABkb3duAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:daylight_detector", + "groupId": 104, + "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAAAACAQAbmFtZRsAbWluZWNyYWZ0OmRheWxpZ2h0X2RldGVjdG9yBAkAbmFtZV9oYXNoV0F0s7B7PVgDCgBuZXR3b3JrX2lkri5afQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:repeater", + "groupId": 104 + }, + { + "id": "minecraft:comparator", + "groupId": 104 + }, + { + "id": "minecraft:hopper", + "groupId": 104 + }, + { + "id": "minecraft:dropper", + "groupId": 104, + "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AAAACAQAbmFtZREAbWluZWNyYWZ0OmRyb3BwZXIECQBuYW1lX2hhc2joXP7XqU0l3QMKAG5ldHdvcmtfaWQfQN6zCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgMAAAABDQB0cmlnZ2VyZWRfYml0AAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:dispenser", + "groupId": 104, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAAAACAQAbmFtZRMAbWluZWNyYWZ0OmRpc3BlbnNlcgQJAG5hbWVfaGFzaP1RR+zAbYP2AwoAbmV0d29ya19pZGAayD0KBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAwAAAAENAHRyaWdnZXJlZF9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:crafter", + "groupId": 104, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4AgAACAQAbmFtZREAbWluZWNyYWZ0OmNyYWZ0ZXIECQBuYW1lX2hhc2iLCT/rJmRN8QMKAG5ldHdvcmtfaWTPTbvrCgYAc3RhdGVzAQgAY3JhZnRpbmcACAsAb3JpZW50YXRpb24JAGRvd25fZWFzdAENAHRyaWdnZXJlZF9iaXQAAAMHAHZlcnNpb24hPBUBAA==" + }, + { + "id": "minecraft:piston", + "groupId": 104, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQhAAAACAQAbmFtZRAAbWluZWNyYWZ0OnBpc3RvbgQJAG5hbWVfaGFzaDs3AFh1fL0uAwoAbmV0d29ya19pZLD/5XQKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAQAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:sticky_piston", + "groupId": 104, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQdAAAACAQAbmFtZRcAbWluZWNyYWZ0OnN0aWNreV9waXN0b24ECQBuYW1lX2hhc2hPFJFJSiJ0ZQMKAG5ldHdvcmtfaWT/MzCJCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgEAAAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:tnt", + "groupId": 104, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAAAACAQAbmFtZQ0AbWluZWNyYWZ0OnRudAQJAG5hbWVfaGFzaEYOHwCvJH29AwoAbmV0d29ya19pZAXzHyUKBgBzdGF0ZXMBCwBleHBsb2RlX2JpdAAAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:name_tag", + "groupId": 104 + }, + { + "id": "minecraft:loom", + "groupId": 104, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAQAACAQAbmFtZQ4AbWluZWNyYWZ0Omxvb20ECQBuYW1lX2hhc2i7DKjAXNq8TAMKAG5ldHdvcmtfaWR/49HXCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:banner", + "groupId": 105, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 8, + "groupId": 105, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 7, + "groupId": 105, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 15, + "groupId": 105, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 12, + "groupId": 105, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 14, + "groupId": 105, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 1, + "groupId": 105, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 4, + "groupId": 105, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 5, + "groupId": 105, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 13, + "groupId": 105, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 9, + "groupId": 105, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 3, + "groupId": 105, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 11, + "groupId": 105, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 10, + "groupId": 105, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 2, + "groupId": 105, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 6, + "groupId": 105, + "nbt_b64": "CgAAAwQAVHlwZQAAAAAA" + }, + { + "id": "minecraft:banner", + "damage": 15, + "groupId": 105, + "nbt_b64": "CgAAAwQAVHlwZQEAAAAA" + }, + { + "id": "minecraft:creeper_banner_pattern", + "groupId": 106 + }, + { + "id": "minecraft:skull_banner_pattern", + "groupId": 106 + }, + { + "id": "minecraft:flower_banner_pattern", + "groupId": 106 + }, + { + "id": "minecraft:mojang_banner_pattern", + "groupId": 106 + }, + { + "id": "minecraft:field_masoned_banner_pattern", + "groupId": 106 + }, + { + "id": "minecraft:bordure_indented_banner_pattern", + "groupId": 106 + }, + { + "id": "minecraft:piglin_banner_pattern", + "groupId": 106 + }, + { + "id": "minecraft:globe_banner_pattern", + "groupId": 106 + }, + { + "id": "minecraft:flow_banner_pattern", + "groupId": 106 + }, + { + "id": "minecraft:guster_banner_pattern", + "groupId": 106 + }, + { + "id": "minecraft:angler_pottery_sherd", + "groupId": 107 + }, + { + "id": "minecraft:archer_pottery_sherd", + "groupId": 107 + }, + { + "id": "minecraft:arms_up_pottery_sherd", + "groupId": 107 + }, + { + "id": "minecraft:blade_pottery_sherd", + "groupId": 107 + }, + { + "id": "minecraft:brewer_pottery_sherd", + "groupId": 107 + }, + { + "id": "minecraft:burn_pottery_sherd", + "groupId": 107 + }, + { + "id": "minecraft:danger_pottery_sherd", + "groupId": 107 + }, + { + "id": "minecraft:explorer_pottery_sherd", + "groupId": 107 + }, + { + "id": "minecraft:flow_pottery_sherd", + "groupId": 107 + }, + { + "id": "minecraft:friend_pottery_sherd", + "groupId": 107 + }, + { + "id": "minecraft:guster_pottery_sherd", + "groupId": 107 + }, + { + "id": "minecraft:heart_pottery_sherd", + "groupId": 107 + }, + { + "id": "minecraft:heartbreak_pottery_sherd", + "groupId": 107 + }, + { + "id": "minecraft:howl_pottery_sherd", + "groupId": 107 + }, + { + "id": "minecraft:miner_pottery_sherd", + "groupId": 107 + }, + { + "id": "minecraft:mourner_pottery_sherd", + "groupId": 107 + }, + { + "id": "minecraft:plenty_pottery_sherd", + "groupId": 107 + }, + { + "id": "minecraft:prize_pottery_sherd", + "groupId": 107 + }, + { + "id": "minecraft:scrape_pottery_sherd", + "groupId": 107 + }, + { + "id": "minecraft:sheaf_pottery_sherd", + "groupId": 107 + }, + { + "id": "minecraft:shelter_pottery_sherd", + "groupId": 107 + }, + { + "id": "minecraft:skull_pottery_sherd", + "groupId": 107 + }, + { + "id": "minecraft:snort_pottery_sherd", + "groupId": 107 + }, + { + "id": "minecraft:netherite_upgrade_smithing_template", + "groupId": 108 + }, + { + "id": "minecraft:sentry_armor_trim_smithing_template", + "groupId": 108 + }, + { + "id": "minecraft:vex_armor_trim_smithing_template", + "groupId": 108 + }, + { + "id": "minecraft:wild_armor_trim_smithing_template", + "groupId": 108 + }, + { + "id": "minecraft:coast_armor_trim_smithing_template", + "groupId": 108 + }, + { + "id": "minecraft:dune_armor_trim_smithing_template", + "groupId": 108 + }, + { + "id": "minecraft:wayfinder_armor_trim_smithing_template", + "groupId": 108 + }, + { + "id": "minecraft:shaper_armor_trim_smithing_template", + "groupId": 108 + }, + { + "id": "minecraft:raiser_armor_trim_smithing_template", + "groupId": 108 + }, + { + "id": "minecraft:host_armor_trim_smithing_template", + "groupId": 108 + }, + { + "id": "minecraft:ward_armor_trim_smithing_template", + "groupId": 108 + }, + { + "id": "minecraft:silence_armor_trim_smithing_template", + "groupId": 108 + }, + { + "id": "minecraft:tide_armor_trim_smithing_template", + "groupId": 108 + }, + { + "id": "minecraft:snout_armor_trim_smithing_template", + "groupId": 108 + }, + { + "id": "minecraft:rib_armor_trim_smithing_template", + "groupId": 108 + }, + { + "id": "minecraft:eye_armor_trim_smithing_template", + "groupId": 108 + }, + { + "id": "minecraft:spire_armor_trim_smithing_template", + "groupId": 108 + }, + { + "id": "minecraft:flow_armor_trim_smithing_template", + "groupId": 108 + }, + { + "id": "minecraft:bolt_armor_trim_smithing_template", + "groupId": 108 + }, + { + "id": "minecraft:firework_rocket", + "groupId": 109, + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwAAAAAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "groupId": 109, + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAABwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "groupId": 109, + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAIBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "groupId": 109, + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAHBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "groupId": 109, + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAPBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "groupId": 109, + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAMBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "groupId": 109, + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAOBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "groupId": 109, + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAABBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "groupId": 109, + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAEBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "groupId": 109, + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAFBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "groupId": 109, + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAANBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "groupId": 109, + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAJBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "groupId": 109, + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAADBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "groupId": 109, + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAALBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "groupId": 109, + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAKBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "groupId": 109, + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAACBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "groupId": 109, + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAGBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_star", + "groupId": 110, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yIR0d/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 8, + "groupId": 110, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yUk9H/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 7, + "groupId": 110, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yl52d/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 15, + "groupId": 110, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9y8PDw/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 12, + "groupId": 110, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9y2rM6/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 14, + "groupId": 110, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yHYD5/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 1, + "groupId": 110, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yJi6w/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 4, + "groupId": 110, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yqkQ8/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 5, + "groupId": 110, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yuDKJ/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 13, + "groupId": 110, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yvU7H/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 9, + "groupId": 110, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yqovz/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 3, + "groupId": 110, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yMlSD/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 11, + "groupId": 110, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yPdj+/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 10, + "groupId": 110, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yH8eA/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 2, + "groupId": 110, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yFnxe/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 6, + "groupId": 110, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9ynJwW/wA=" + }, + { + "id": "minecraft:chain", + "groupId": 111 + }, + { + "id": "minecraft:target", + "groupId": 111, + "block_state_b64": "CgAAAwgAYmxvY2tfaWTuAQAACAQAbmFtZRAAbWluZWNyYWZ0OnRhcmdldAQJAG5hbWVfaGFzaJc66SVbYlaxAwoAbmV0d29ya19pZPBozs0KBgBzdGF0ZXMAAwcAdmVyc2lvbiE8FQEA" + }, + { + "id": "minecraft:decorated_pot", + "groupId": 111, + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAwAACAQAbmFtZRcAbWluZWNyYWZ0OmRlY29yYXRlZF9wb3QECQBuYW1lX2hhc2jjQgckn8VTvwMKAG5ldHdvcmtfaWRwvkUUCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uITwVAQA=" + }, + { + "id": "minecraft:trial_key", + "groupId": 111 + }, + { + "id": "minecraft:ominous_trial_key", + "groupId": 111 + } + ] +} diff --git a/core/src/main/resources/bedrock/item_components.nbt b/core/src/main/resources/bedrock/item_components.nbt new file mode 100644 index 0000000000000000000000000000000000000000..34d2ac7f0ca1bf5fafda5891c7666b562aa6922f GIT binary patch literal 12649 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 Xkr#9y(Pfc{?&ALgn8T(o6b}Ia*2(6l literal 0 HcmV?d00001 diff --git a/core/src/main/resources/bedrock/item_tags.1_21_60.json b/core/src/main/resources/bedrock/item_tags.1_21_60.json new file mode 100644 index 000000000..b8b94d6f3 --- /dev/null +++ b/core/src/main/resources/bedrock/item_tags.1_21_60.json @@ -0,0 +1,829 @@ +{ + "minecraft:arrow": [ + "minecraft:arrow" + ], + "minecraft:banner": [ + "minecraft:banner" + ], + "minecraft:boat": [ + "minecraft:pale_oak_chest_boat", + "minecraft:cherry_chest_boat", + "minecraft:oak_chest_boat", + "minecraft:mangrove_boat", + "minecraft:oak_boat", + "minecraft:birch_boat", + "minecraft:jungle_boat", + "minecraft:spruce_boat", + "minecraft:acacia_boat", + "minecraft:dark_oak_boat", + "minecraft:birch_chest_boat", + "minecraft:jungle_chest_boat", + "minecraft:spruce_chest_boat", + "minecraft:acacia_chest_boat", + "minecraft:dark_oak_chest_boat", + "minecraft:mangrove_chest_boat", + "minecraft:cherry_boat", + "minecraft:bamboo_raft", + "minecraft:bamboo_chest_raft", + "minecraft:pale_oak_boat" + ], + "minecraft:boats": [ + "minecraft:pale_oak_chest_boat", + "minecraft:cherry_chest_boat", + "minecraft:oak_chest_boat", + "minecraft:mangrove_boat", + "minecraft:oak_boat", + "minecraft:birch_boat", + "minecraft:jungle_boat", + "minecraft:spruce_boat", + "minecraft:acacia_boat", + "minecraft:dark_oak_boat", + "minecraft:birch_chest_boat", + "minecraft:jungle_chest_boat", + "minecraft:spruce_chest_boat", + "minecraft:acacia_chest_boat", + "minecraft:dark_oak_chest_boat", + "minecraft:mangrove_chest_boat", + "minecraft:cherry_boat", + "minecraft:bamboo_raft", + "minecraft:bamboo_chest_raft", + "minecraft:pale_oak_boat" + ], + "minecraft:bookshelf_books": [ + "minecraft:written_book", + "minecraft:book", + "minecraft:writable_book", + "minecraft:enchanted_book" + ], + "minecraft:chainmail_tier": [ + "minecraft:chainmail_helmet", + "minecraft:chainmail_chestplate", + "minecraft:chainmail_leggings", + "minecraft:chainmail_boots" + ], + "minecraft:coals": [ + "minecraft:coal", + "minecraft:charcoal" + ], + "minecraft:crimson_stems": [ + "minecraft:stripped_crimson_stem", + "minecraft:crimson_hyphae", + "minecraft:crimson_stem", + "minecraft:stripped_crimson_hyphae" + ], + "minecraft:decorated_pot_sherds": [ + "minecraft:skull_pottery_sherd", + "minecraft:mourner_pottery_sherd", + "minecraft:angler_pottery_sherd", + "minecraft:prize_pottery_sherd", + "minecraft:arms_up_pottery_sherd", + "minecraft:burn_pottery_sherd", + "minecraft:snort_pottery_sherd", + "minecraft:brick", + "minecraft:heartbreak_pottery_sherd", + "minecraft:miner_pottery_sherd", + "minecraft:brewer_pottery_sherd", + "minecraft:plenty_pottery_sherd", + "minecraft:scrape_pottery_sherd", + "minecraft:howl_pottery_sherd", + "minecraft:explorer_pottery_sherd", + "minecraft:archer_pottery_sherd", + "minecraft:blade_pottery_sherd", + "minecraft:danger_pottery_sherd", + "minecraft:flow_pottery_sherd", + "minecraft:friend_pottery_sherd", + "minecraft:guster_pottery_sherd", + "minecraft:heart_pottery_sherd", + "minecraft:sheaf_pottery_sherd", + "minecraft:shelter_pottery_sherd" + ], + "minecraft:diamond_tier": [ + "minecraft:diamond_sword", + "minecraft:diamond_shovel", + "minecraft:diamond_pickaxe", + "minecraft:diamond_axe", + "minecraft:mace", + "minecraft:diamond_hoe", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots" + ], + "minecraft:digger": [ + "minecraft:iron_shovel", + "minecraft:wooden_pickaxe", + "minecraft:iron_pickaxe", + "minecraft:iron_axe", + "minecraft:wooden_shovel", + "minecraft:wooden_axe", + "minecraft:stone_shovel", + "minecraft:stone_pickaxe", + "minecraft:stone_axe", + "minecraft:diamond_shovel", + "minecraft:diamond_pickaxe", + "minecraft:diamond_axe", + "minecraft:golden_shovel", + "minecraft:golden_pickaxe", + "minecraft:golden_axe", + "minecraft:wooden_hoe", + "minecraft:stone_hoe", + "minecraft:iron_hoe", + "minecraft:diamond_hoe", + "minecraft:golden_hoe", + "minecraft:netherite_pickaxe", + "minecraft:netherite_shovel", + "minecraft:netherite_axe", + "minecraft:netherite_hoe" + ], + "minecraft:door": [ + "minecraft:weathered_copper_door", + "minecraft:warped_door", + "minecraft:wooden_door", + "minecraft:jungle_door", + "minecraft:waxed_weathered_copper_door", + "minecraft:iron_door", + "minecraft:mangrove_door", + "minecraft:exposed_copper_door", + "minecraft:bamboo_door", + "minecraft:spruce_door", + "minecraft:birch_door", + "minecraft:acacia_door", + "minecraft:dark_oak_door", + "minecraft:crimson_door", + "minecraft:cherry_door", + "minecraft:copper_door", + "minecraft:oxidized_copper_door", + "minecraft:waxed_copper_door", + "minecraft:waxed_exposed_copper_door", + "minecraft:waxed_oxidized_copper_door", + "minecraft:pale_oak_door" + ], + "minecraft:golden_tier": [ + "minecraft:golden_sword", + "minecraft:golden_shovel", + "minecraft:golden_pickaxe", + "minecraft:golden_axe", + "minecraft:golden_hoe", + "minecraft:golden_helmet", + "minecraft:golden_chestplate", + "minecraft:golden_leggings", + "minecraft:golden_boots" + ], + "minecraft:hanging_actor": [ + "minecraft:painting" + ], + "minecraft:hanging_sign": [ + "minecraft:mangrove_hanging_sign", + "minecraft:bamboo_hanging_sign", + "minecraft:pale_oak_hanging_sign", + "minecraft:spruce_hanging_sign", + "minecraft:birch_hanging_sign", + "minecraft:cherry_hanging_sign", + "minecraft:oak_hanging_sign", + "minecraft:jungle_hanging_sign", + "minecraft:acacia_hanging_sign", + "minecraft:dark_oak_hanging_sign", + "minecraft:crimson_hanging_sign", + "minecraft:warped_hanging_sign" + ], + "minecraft:horse_armor": [ + "minecraft:iron_horse_armor", + "minecraft:golden_horse_armor", + "minecraft:leather_horse_armor", + "minecraft:diamond_horse_armor" + ], + "minecraft:iron_tier": [ + "minecraft:iron_chestplate", + "minecraft:iron_shovel", + "minecraft:iron_sword", + "minecraft:iron_pickaxe", + "minecraft:iron_axe", + "minecraft:iron_hoe", + "minecraft:iron_helmet", + "minecraft:iron_leggings", + "minecraft:iron_boots" + ], + "minecraft:is_armor": [ + "minecraft:iron_chestplate", + "minecraft:netherite_boots", + "minecraft:chainmail_helmet", + "minecraft:elytra", + "minecraft:leather_helmet", + "minecraft:leather_chestplate", + "minecraft:leather_leggings", + "minecraft:leather_boots", + "minecraft:chainmail_chestplate", + "minecraft:chainmail_leggings", + "minecraft:chainmail_boots", + "minecraft:iron_helmet", + "minecraft:iron_leggings", + "minecraft:iron_boots", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots", + "minecraft:golden_helmet", + "minecraft:golden_chestplate", + "minecraft:golden_leggings", + "minecraft:golden_boots", + "minecraft:turtle_helmet", + "minecraft:netherite_chestplate", + "minecraft:netherite_leggings", + "minecraft:netherite_helmet" + ], + "minecraft:is_axe": [ + "minecraft:iron_axe", + "minecraft:wooden_axe", + "minecraft:stone_axe", + "minecraft:diamond_axe", + "minecraft:golden_axe", + "minecraft:netherite_axe" + ], + "minecraft:is_cooked": [ + "minecraft:cooked_cod", + "minecraft:cooked_porkchop", + "minecraft:cooked_salmon", + "minecraft:cooked_rabbit", + "minecraft:cooked_beef", + "minecraft:cooked_chicken", + "minecraft:rabbit_stew", + "minecraft:cooked_mutton" + ], + "minecraft:is_fish": [ + "minecraft:cooked_cod", + "minecraft:cooked_salmon", + "minecraft:cod", + "minecraft:salmon", + "minecraft:tropical_fish", + "minecraft:pufferfish" + ], + "minecraft:is_food": [ + "minecraft:rabbit", + "minecraft:cooked_porkchop", + "minecraft:mushroom_stew", + "minecraft:potato", + "minecraft:enchanted_golden_apple", + "minecraft:golden_carrot", + "minecraft:carrot", + "minecraft:chicken", + "minecraft:beetroot", + "minecraft:sweet_berries", + "minecraft:apple", + "minecraft:golden_apple", + "minecraft:bread", + "minecraft:porkchop", + "minecraft:cookie", + "minecraft:cooked_rabbit", + "minecraft:beef", + "minecraft:dried_kelp", + "minecraft:beetroot_soup", + "minecraft:melon_slice", + "minecraft:cooked_beef", + "minecraft:rotten_flesh", + "minecraft:cooked_chicken", + "minecraft:baked_potato", + "minecraft:pumpkin_pie", + "minecraft:rabbit_stew", + "minecraft:cooked_mutton", + "minecraft:mutton" + ], + "minecraft:is_hoe": [ + "minecraft:wooden_hoe", + "minecraft:stone_hoe", + "minecraft:iron_hoe", + "minecraft:diamond_hoe", + "minecraft:golden_hoe", + "minecraft:netherite_hoe" + ], + "minecraft:is_meat": [ + "minecraft:rabbit", + "minecraft:cooked_porkchop", + "minecraft:chicken", + "minecraft:porkchop", + "minecraft:cooked_rabbit", + "minecraft:beef", + "minecraft:cooked_beef", + "minecraft:rotten_flesh", + "minecraft:cooked_chicken", + "minecraft:rabbit_stew", + "minecraft:cooked_mutton", + "minecraft:mutton" + ], + "minecraft:is_minecart": [ + "minecraft:command_block_minecart", + "minecraft:minecart", + "minecraft:chest_minecart", + "minecraft:tnt_minecart", + "minecraft:hopper_minecart" + ], + "minecraft:is_pickaxe": [ + "minecraft:wooden_pickaxe", + "minecraft:iron_pickaxe", + "minecraft:stone_pickaxe", + "minecraft:diamond_pickaxe", + "minecraft:golden_pickaxe", + "minecraft:netherite_pickaxe" + ], + "minecraft:is_shears": [ + "minecraft:shears" + ], + "minecraft:is_shovel": [ + "minecraft:iron_shovel", + "minecraft:wooden_shovel", + "minecraft:stone_shovel", + "minecraft:diamond_shovel", + "minecraft:golden_shovel", + "minecraft:netherite_shovel" + ], + "minecraft:is_sword": [ + "minecraft:netherite_sword", + "minecraft:iron_sword", + "minecraft:wooden_sword", + "minecraft:stone_sword", + "minecraft:diamond_sword", + "minecraft:mace", + "minecraft:golden_sword" + ], + "minecraft:is_tool": [ + "minecraft:netherite_sword", + "minecraft:iron_shovel", + "minecraft:iron_sword", + "minecraft:wooden_pickaxe", + "minecraft:iron_pickaxe", + "minecraft:iron_axe", + "minecraft:wooden_sword", + "minecraft:wooden_shovel", + "minecraft:wooden_axe", + "minecraft:stone_sword", + "minecraft:stone_shovel", + "minecraft:stone_pickaxe", + "minecraft:stone_axe", + "minecraft:diamond_sword", + "minecraft:diamond_shovel", + "minecraft:diamond_pickaxe", + "minecraft:diamond_axe", + "minecraft:mace", + "minecraft:golden_sword", + "minecraft:golden_shovel", + "minecraft:golden_pickaxe", + "minecraft:golden_axe", + "minecraft:wooden_hoe", + "minecraft:stone_hoe", + "minecraft:iron_hoe", + "minecraft:diamond_hoe", + "minecraft:golden_hoe", + "minecraft:netherite_pickaxe", + "minecraft:netherite_shovel", + "minecraft:netherite_axe", + "minecraft:netherite_hoe" + ], + "minecraft:is_trident": [ + "minecraft:trident" + ], + "minecraft:leather_tier": [ + "minecraft:leather_helmet", + "minecraft:leather_chestplate", + "minecraft:leather_leggings", + "minecraft:leather_boots" + ], + "minecraft:lectern_books": [ + "minecraft:written_book", + "minecraft:writable_book" + ], + "minecraft:logs": [ + "minecraft:stripped_oak_log", + "minecraft:mangrove_wood", + "minecraft:spruce_wood", + "minecraft:stripped_cherry_wood", + "minecraft:stripped_crimson_stem", + "minecraft:stripped_spruce_wood", + "minecraft:spruce_log", + "minecraft:acacia_wood", + "minecraft:stripped_acacia_wood", + "minecraft:pale_oak_wood", + "minecraft:stripped_warped_hyphae", + "minecraft:acacia_log", + "minecraft:stripped_warped_stem", + "minecraft:oak_log", + "minecraft:birch_log", + "minecraft:jungle_log", + "minecraft:stripped_pale_oak_wood", + "minecraft:dark_oak_log", + "minecraft:jungle_wood", + "minecraft:stripped_jungle_wood", + "minecraft:oak_wood", + "minecraft:birch_wood", + "minecraft:dark_oak_wood", + "minecraft:stripped_oak_wood", + "minecraft:stripped_birch_wood", + "minecraft:stripped_dark_oak_wood", + "minecraft:stripped_dark_oak_log", + "minecraft:mangrove_log", + "minecraft:stripped_jungle_log", + "minecraft:stripped_pale_oak_log", + "minecraft:stripped_mangrove_wood", + "minecraft:crimson_hyphae", + "minecraft:stripped_cherry_log", + "minecraft:stripped_birch_log", + "minecraft:stripped_acacia_log", + "minecraft:crimson_stem", + "minecraft:warped_hyphae", + "minecraft:pale_oak_log", + "minecraft:stripped_spruce_log", + "minecraft:warped_stem", + "minecraft:stripped_crimson_hyphae", + "minecraft:cherry_wood", + "minecraft:cherry_log", + "minecraft:stripped_mangrove_log" + ], + "minecraft:logs_that_burn": [ + "minecraft:stripped_oak_log", + "minecraft:mangrove_wood", + "minecraft:spruce_wood", + "minecraft:stripped_cherry_wood", + "minecraft:stripped_spruce_wood", + "minecraft:spruce_log", + "minecraft:acacia_wood", + "minecraft:stripped_acacia_wood", + "minecraft:pale_oak_wood", + "minecraft:acacia_log", + "minecraft:oak_log", + "minecraft:birch_log", + "minecraft:jungle_log", + "minecraft:stripped_pale_oak_wood", + "minecraft:dark_oak_log", + "minecraft:jungle_wood", + "minecraft:stripped_jungle_wood", + "minecraft:oak_wood", + "minecraft:birch_wood", + "minecraft:dark_oak_wood", + "minecraft:stripped_oak_wood", + "minecraft:stripped_birch_wood", + "minecraft:stripped_dark_oak_wood", + "minecraft:stripped_dark_oak_log", + "minecraft:mangrove_log", + "minecraft:stripped_jungle_log", + "minecraft:stripped_pale_oak_log", + "minecraft:stripped_mangrove_wood", + "minecraft:stripped_cherry_log", + "minecraft:stripped_birch_log", + "minecraft:stripped_acacia_log", + "minecraft:pale_oak_log", + "minecraft:stripped_spruce_log", + "minecraft:cherry_wood", + "minecraft:cherry_log", + "minecraft:stripped_mangrove_log" + ], + "minecraft:mangrove_logs": [ + "minecraft:mangrove_wood", + "minecraft:mangrove_log", + "minecraft:stripped_mangrove_wood", + "minecraft:stripped_mangrove_log" + ], + "minecraft:music_disc": [ + "minecraft:music_disc_ward", + "minecraft:music_disc_stal", + "minecraft:music_disc_wait", + "minecraft:music_disc_cat", + "minecraft:music_disc_strad", + "minecraft:music_disc_chirp", + "minecraft:music_disc_mall", + "minecraft:music_disc_creator_music_box", + "minecraft:music_disc_pigstep", + "minecraft:music_disc_11", + "minecraft:music_disc_13", + "minecraft:music_disc_blocks", + "minecraft:music_disc_far", + "minecraft:music_disc_mellohi", + "minecraft:music_disc_otherside", + "minecraft:music_disc_5", + "minecraft:music_disc_relic", + "minecraft:music_disc_creator", + "minecraft:music_disc_precipice" + ], + "minecraft:netherite_tier": [ + "minecraft:netherite_sword", + "minecraft:netherite_boots", + "minecraft:netherite_chestplate", + "minecraft:netherite_pickaxe", + "minecraft:netherite_leggings", + "minecraft:netherite_shovel", + "minecraft:netherite_axe", + "minecraft:netherite_hoe", + "minecraft:netherite_helmet" + ], + "minecraft:planks": [ + "minecraft:spruce_planks", + "minecraft:oak_planks", + "minecraft:mangrove_planks", + "minecraft:dark_oak_planks", + "minecraft:birch_planks", + "minecraft:jungle_planks", + "minecraft:acacia_planks", + "minecraft:bamboo_planks", + "minecraft:warped_planks", + "minecraft:pale_oak_planks", + "minecraft:crimson_planks", + "minecraft:cherry_planks" + ], + "minecraft:sand": [ + "minecraft:sand", + "minecraft:red_sand" + ], + "minecraft:sign": [ + "minecraft:jungle_sign", + "minecraft:bamboo_sign", + "minecraft:mangrove_hanging_sign", + "minecraft:cherry_sign", + "minecraft:oak_sign", + "minecraft:bamboo_hanging_sign", + "minecraft:warped_sign", + "minecraft:spruce_sign", + "minecraft:pale_oak_hanging_sign", + "minecraft:spruce_hanging_sign", + "minecraft:acacia_sign", + "minecraft:birch_hanging_sign", + "minecraft:birch_sign", + "minecraft:dark_oak_sign", + "minecraft:mangrove_sign", + "minecraft:crimson_sign", + "minecraft:cherry_hanging_sign", + "minecraft:oak_hanging_sign", + "minecraft:jungle_hanging_sign", + "minecraft:acacia_hanging_sign", + "minecraft:dark_oak_hanging_sign", + "minecraft:crimson_hanging_sign", + "minecraft:warped_hanging_sign", + "minecraft:pale_oak_sign" + ], + "minecraft:soul_fire_base_blocks": [ + "minecraft:soul_soil", + "minecraft:soul_sand" + ], + "minecraft:spawn_egg": [ + "minecraft:enderman_spawn_egg", + "minecraft:endermite_spawn_egg", + "minecraft:tropical_fish_spawn_egg", + "minecraft:ravager_spawn_egg", + "minecraft:pufferfish_spawn_egg", + "minecraft:zoglin_spawn_egg", + "minecraft:strider_spawn_egg", + "minecraft:slime_spawn_egg", + "minecraft:glow_squid_spawn_egg", + "minecraft:blaze_spawn_egg", + "minecraft:witch_spawn_egg", + "minecraft:horse_spawn_egg", + "minecraft:polar_bear_spawn_egg", + "minecraft:pillager_spawn_egg", + "minecraft:stray_spawn_egg", + "minecraft:zombie_pigman_spawn_egg", + "minecraft:snow_golem_spawn_egg", + "minecraft:panda_spawn_egg", + "minecraft:axolotl_spawn_egg", + "minecraft:agent_spawn_egg", + "minecraft:shulker_spawn_egg", + "minecraft:vindicator_spawn_egg", + "minecraft:evoker_spawn_egg", + "minecraft:parrot_spawn_egg", + "minecraft:wolf_spawn_egg", + "minecraft:sheep_spawn_egg", + "minecraft:elder_guardian_spawn_egg", + "minecraft:silverfish_spawn_egg", + "minecraft:tadpole_spawn_egg", + "minecraft:cow_spawn_egg", + "minecraft:bogged_spawn_egg", + "minecraft:ocelot_spawn_egg", + "minecraft:bee_spawn_egg", + "minecraft:piglin_brute_spawn_egg", + "minecraft:rabbit_spawn_egg", + "minecraft:camel_spawn_egg", + "minecraft:creeper_spawn_egg", + "minecraft:drowned_spawn_egg", + "minecraft:chicken_spawn_egg", + "minecraft:pig_spawn_egg", + "minecraft:mooshroom_spawn_egg", + "minecraft:skeleton_spawn_egg", + "minecraft:spider_spawn_egg", + "minecraft:zombie_spawn_egg", + "minecraft:villager_spawn_egg", + "minecraft:squid_spawn_egg", + "minecraft:bat_spawn_egg", + "minecraft:ghast_spawn_egg", + "minecraft:magma_cube_spawn_egg", + "minecraft:cave_spider_spawn_egg", + "minecraft:guardian_spawn_egg", + "minecraft:husk_spawn_egg", + "minecraft:piglin_spawn_egg", + "minecraft:wither_skeleton_spawn_egg", + "minecraft:donkey_spawn_egg", + "minecraft:creaking_spawn_egg", + "minecraft:mule_spawn_egg", + "minecraft:skeleton_horse_spawn_egg", + "minecraft:zombie_horse_spawn_egg", + "minecraft:npc_spawn_egg", + "minecraft:breeze_spawn_egg", + "minecraft:llama_spawn_egg", + "minecraft:vex_spawn_egg", + "minecraft:warden_spawn_egg", + "minecraft:zombie_villager_spawn_egg", + "minecraft:cod_spawn_egg", + "minecraft:salmon_spawn_egg", + "minecraft:dolphin_spawn_egg", + "minecraft:turtle_spawn_egg", + "minecraft:phantom_spawn_egg", + "minecraft:cat_spawn_egg", + "minecraft:fox_spawn_egg", + "minecraft:wandering_trader_spawn_egg", + "minecraft:hoglin_spawn_egg", + "minecraft:sniffer_spawn_egg", + "minecraft:goat_spawn_egg", + "minecraft:iron_golem_spawn_egg", + "minecraft:ender_dragon_spawn_egg", + "minecraft:wither_spawn_egg", + "minecraft:frog_spawn_egg", + "minecraft:allay_spawn_egg", + "minecraft:trader_llama_spawn_egg", + "minecraft:armadillo_spawn_egg", + "minecraft:spawn_egg" + ], + "minecraft:stone_bricks": [ + "minecraft:mossy_stone_bricks", + "minecraft:stone_bricks", + "minecraft:cracked_stone_bricks", + "minecraft:chiseled_stone_bricks" + ], + "minecraft:stone_crafting_materials": [ + "minecraft:cobblestone", + "minecraft:cobbled_deepslate", + "minecraft:blackstone" + ], + "minecraft:stone_tier": [ + "minecraft:stone_sword", + "minecraft:stone_shovel", + "minecraft:stone_pickaxe", + "minecraft:stone_axe", + "minecraft:stone_hoe" + ], + "minecraft:stone_tool_materials": [ + "minecraft:cobblestone", + "minecraft:cobbled_deepslate", + "minecraft:blackstone" + ], + "minecraft:transform_materials": [ + "minecraft:netherite_ingot" + ], + "minecraft:transform_templates": [ + "minecraft:netherite_upgrade_smithing_template" + ], + "minecraft:transformable_items": [ + "minecraft:diamond_sword", + "minecraft:diamond_shovel", + "minecraft:diamond_pickaxe", + "minecraft:diamond_axe", + "minecraft:diamond_hoe", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots", + "minecraft:golden_boots" + ], + "minecraft:trim_materials": [ + "minecraft:resin_brick", + "minecraft:diamond", + "minecraft:iron_ingot", + "minecraft:gold_ingot", + "minecraft:redstone", + "minecraft:netherite_ingot", + "minecraft:lapis_lazuli", + "minecraft:quartz", + "minecraft:copper_ingot", + "minecraft:emerald", + "minecraft:amethyst_shard" + ], + "minecraft:trim_templates": [ + "minecraft:coast_armor_trim_smithing_template", + "minecraft:vex_armor_trim_smithing_template", + "minecraft:wild_armor_trim_smithing_template", + "minecraft:flow_armor_trim_smithing_template", + "minecraft:silence_armor_trim_smithing_template", + "minecraft:snout_armor_trim_smithing_template", + "minecraft:dune_armor_trim_smithing_template", + "minecraft:rib_armor_trim_smithing_template", + "minecraft:host_armor_trim_smithing_template", + "minecraft:eye_armor_trim_smithing_template", + "minecraft:spire_armor_trim_smithing_template", + "minecraft:sentry_armor_trim_smithing_template", + "minecraft:ward_armor_trim_smithing_template", + "minecraft:tide_armor_trim_smithing_template", + "minecraft:wayfinder_armor_trim_smithing_template", + "minecraft:raiser_armor_trim_smithing_template", + "minecraft:shaper_armor_trim_smithing_template", + "minecraft:bolt_armor_trim_smithing_template" + ], + "minecraft:trimmable_armors": [ + "minecraft:iron_chestplate", + "minecraft:netherite_boots", + "minecraft:chainmail_helmet", + "minecraft:leather_helmet", + "minecraft:leather_chestplate", + "minecraft:leather_leggings", + "minecraft:leather_boots", + "minecraft:chainmail_chestplate", + "minecraft:chainmail_leggings", + "minecraft:chainmail_boots", + "minecraft:iron_helmet", + "minecraft:iron_leggings", + "minecraft:iron_boots", + "minecraft:diamond_helmet", + "minecraft:diamond_chestplate", + "minecraft:diamond_leggings", + "minecraft:diamond_boots", + "minecraft:golden_helmet", + "minecraft:golden_chestplate", + "minecraft:golden_leggings", + "minecraft:golden_boots", + "minecraft:turtle_helmet", + "minecraft:netherite_chestplate", + "minecraft:netherite_leggings", + "minecraft:netherite_helmet" + ], + "minecraft:vibration_damper": [ + "minecraft:black_carpet", + "minecraft:pink_carpet", + "minecraft:lime_carpet", + "minecraft:blue_carpet", + "minecraft:green_wool", + "minecraft:cyan_carpet", + "minecraft:orange_wool", + "minecraft:white_carpet", + "minecraft:purple_carpet", + "minecraft:yellow_carpet", + "minecraft:light_gray_wool", + "minecraft:magenta_carpet", + "minecraft:purple_wool", + "minecraft:gray_wool", + "minecraft:red_carpet", + "minecraft:brown_carpet", + "minecraft:light_blue_wool", + "minecraft:green_carpet", + "minecraft:white_wool", + "minecraft:magenta_wool", + "minecraft:yellow_wool", + "minecraft:lime_wool", + "minecraft:pink_wool", + "minecraft:cyan_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:red_wool", + "minecraft:black_wool", + "minecraft:orange_carpet", + "minecraft:light_blue_carpet", + "minecraft:gray_carpet", + "minecraft:light_gray_carpet" + ], + "minecraft:warped_stems": [ + "minecraft:stripped_warped_hyphae", + "minecraft:stripped_warped_stem", + "minecraft:warped_hyphae", + "minecraft:warped_stem" + ], + "minecraft:wooden_slabs": [ + "minecraft:birch_slab", + "minecraft:oak_slab", + "minecraft:spruce_slab", + "minecraft:bamboo_slab", + "minecraft:warped_slab", + "minecraft:pale_oak_slab", + "minecraft:mangrove_slab", + "minecraft:cherry_slab", + "minecraft:jungle_slab", + "minecraft:acacia_slab", + "minecraft:dark_oak_slab", + "minecraft:crimson_slab" + ], + "minecraft:wooden_tier": [ + "minecraft:wooden_pickaxe", + "minecraft:wooden_sword", + "minecraft:wooden_shovel", + "minecraft:wooden_axe", + "minecraft:wooden_hoe" + ], + "minecraft:wool": [ + "minecraft:green_wool", + "minecraft:orange_wool", + "minecraft:light_gray_wool", + "minecraft:purple_wool", + "minecraft:gray_wool", + "minecraft:light_blue_wool", + "minecraft:white_wool", + "minecraft:magenta_wool", + "minecraft:yellow_wool", + "minecraft:lime_wool", + "minecraft:pink_wool", + "minecraft:cyan_wool", + "minecraft:blue_wool", + "minecraft:brown_wool", + "minecraft:red_wool", + "minecraft:black_wool" + ] +} diff --git a/core/src/main/resources/bedrock/runtime_item_states.1_21_60.json b/core/src/main/resources/bedrock/runtime_item_states.1_21_60.json new file mode 100644 index 000000000..9f8bf5cdb --- /dev/null +++ b/core/src/main/resources/bedrock/runtime_item_states.1_21_60.json @@ -0,0 +1,10730 @@ +[ + { + "name": "minecraft:acacia_boat", + "id": 405, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:acacia_button", + "id": -140, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:acacia_chest_boat", + "id": 679, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:acacia_door", + "id": 589, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:acacia_double_slab", + "id": -812, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:acacia_fence", + "id": -575, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:acacia_fence_gate", + "id": 187, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:acacia_hanging_sign", + "id": -504, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:acacia_leaves", + "id": 161, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:acacia_log", + "id": 162, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:acacia_planks", + "id": -742, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:acacia_pressure_plate", + "id": -150, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:acacia_sapling", + "id": -828, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:acacia_sign", + "id": 612, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:acacia_slab", + "id": -807, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:acacia_stairs", + "id": 163, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:acacia_standing_sign", + "id": -190, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:acacia_trapdoor", + "id": -145, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:acacia_wall_sign", + "id": -191, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:acacia_wood", + "id": -817, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:activator_rail", + "id": 126, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:agent_spawn_egg", + "id": 515, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:air", + "id": -158, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:allay_spawn_egg", + "id": 668, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:allium", + "id": -831, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:allow", + "id": 210, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:amethyst_block", + "id": -327, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:amethyst_cluster", + "id": -329, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:amethyst_shard", + "id": 661, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:ancient_debris", + "id": -271, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:andesite", + "id": -594, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:andesite_double_slab", + "id": -920, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:andesite_slab", + "id": -893, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:andesite_stairs", + "id": -171, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:andesite_wall", + "id": -974, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:angler_pottery_sherd", + "id": 693, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:anvil", + "id": 145, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:apple", + "id": 278, + "version": 1, + "componentBased": true + }, + { + "name": "minecraft:archer_pottery_sherd", + "id": 694, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:armadillo_scute", + "id": 740, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:armadillo_spawn_egg", + "id": 739, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:armor_stand", + "id": 585, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:arms_up_pottery_sherd", + "id": 695, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:arrow", + "id": 325, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:axolotl_bucket", + "id": 394, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:axolotl_spawn_egg", + "id": 530, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:azalea", + "id": -337, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:azalea_leaves", + "id": -324, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:azalea_leaves_flowered", + "id": -325, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:azure_bluet", + "id": -832, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:baked_potato", + "id": 303, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:balloon", + "id": 635, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bamboo", + "id": -163, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bamboo_block", + "id": -527, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bamboo_button", + "id": -511, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bamboo_chest_raft", + "id": 691, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bamboo_door", + "id": -517, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bamboo_double_slab", + "id": -521, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bamboo_fence", + "id": -515, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bamboo_fence_gate", + "id": -516, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bamboo_hanging_sign", + "id": -522, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bamboo_mosaic", + "id": -509, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bamboo_mosaic_double_slab", + "id": -525, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bamboo_mosaic_slab", + "id": -524, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bamboo_mosaic_stairs", + "id": -523, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bamboo_planks", + "id": -510, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bamboo_pressure_plate", + "id": -514, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bamboo_raft", + "id": 690, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bamboo_sapling", + "id": -164, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bamboo_sign", + "id": 689, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bamboo_slab", + "id": -513, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bamboo_stairs", + "id": -512, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bamboo_standing_sign", + "id": -518, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bamboo_trapdoor", + "id": -520, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bamboo_wall_sign", + "id": -519, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:banner", + "id": 600, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:banner_pattern", + "id": 793, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:barrel", + "id": -203, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:barrier", + "id": -161, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:basalt", + "id": -234, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bat_spawn_egg", + "id": 480, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:beacon", + "id": 138, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bed", + "id": 444, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bedrock", + "id": 7, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bee_nest", + "id": -218, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bee_spawn_egg", + "id": 522, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:beef", + "id": 295, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:beehive", + "id": -219, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:beetroot", + "id": 307, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:beetroot_seeds", + "id": 317, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:beetroot_soup", + "id": 308, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:bell", + "id": -206, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:big_dripleaf", + "id": -323, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:birch_boat", + "id": 402, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:birch_button", + "id": -141, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:birch_chest_boat", + "id": 676, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:birch_door", + "id": 587, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:birch_double_slab", + "id": -810, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:birch_fence", + "id": -576, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:birch_fence_gate", + "id": 184, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:birch_hanging_sign", + "id": -502, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:birch_leaves", + "id": -801, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:birch_log", + "id": -570, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:birch_planks", + "id": -740, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:birch_pressure_plate", + "id": -151, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:birch_sapling", + "id": -826, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:birch_sign", + "id": 610, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:birch_slab", + "id": -805, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:birch_stairs", + "id": 135, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:birch_standing_sign", + "id": -186, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:birch_trapdoor", + "id": -146, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:birch_wall_sign", + "id": -187, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:birch_wood", + "id": -815, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:black_bundle", + "id": 257, + "version": 1, + "componentBased": true + }, + { + "name": "minecraft:black_candle", + "id": -428, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:black_candle_cake", + "id": -445, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:black_carpet", + "id": -611, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:black_concrete", + "id": -642, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:black_concrete_powder", + "id": -723, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:black_dye", + "id": 421, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:black_glazed_terracotta", + "id": 235, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:black_shulker_box", + "id": -627, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:black_stained_glass", + "id": -687, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:black_stained_glass_pane", + "id": -657, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:black_terracotta", + "id": -738, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:black_wool", + "id": -554, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blackstone", + "id": -273, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blackstone_double_slab", + "id": -283, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blackstone_slab", + "id": -282, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blackstone_stairs", + "id": -276, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blackstone_wall", + "id": -277, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blade_pottery_sherd", + "id": 696, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blast_furnace", + "id": -196, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blaze_powder", + "id": 456, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blaze_rod", + "id": 449, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blaze_spawn_egg", + "id": 483, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bleach", + "id": 633, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blue_bundle", + "id": 258, + "version": 1, + "componentBased": true + }, + { + "name": "minecraft:blue_candle", + "id": -424, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blue_candle_cake", + "id": -441, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blue_carpet", + "id": -607, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blue_concrete", + "id": -638, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blue_concrete_powder", + "id": -719, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blue_dye", + "id": 425, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blue_glazed_terracotta", + "id": 231, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blue_ice", + "id": -11, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blue_orchid", + "id": -830, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blue_shulker_box", + "id": -623, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blue_stained_glass", + "id": -683, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blue_stained_glass_pane", + "id": -653, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blue_terracotta", + "id": -734, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:blue_wool", + "id": -563, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:board", + "id": 629, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:boat", + "id": 791, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bogged_spawn_egg", + "id": 490, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bolt_armor_trim_smithing_template", + "id": 735, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bone", + "id": 441, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bone_block", + "id": 216, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bone_meal", + "id": 437, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:book", + "id": 413, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bookshelf", + "id": 47, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:border_block", + "id": 212, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bordure_indented_banner_pattern", + "id": 619, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bow", + "id": 324, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bowl", + "id": 346, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brain_coral", + "id": -581, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brain_coral_block", + "id": -849, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brain_coral_fan", + "id": -840, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brain_coral_wall_fan", + "id": -904, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bread", + "id": 283, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:breeze_rod", + "id": 274, + "version": 1, + "componentBased": true + }, + { + "name": "minecraft:breeze_spawn_egg", + "id": 529, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brewer_pottery_sherd", + "id": 697, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brewing_stand", + "id": 458, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:brick", + "id": 409, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brick_block", + "id": 45, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brick_double_slab", + "id": -880, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brick_slab", + "id": -874, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brick_stairs", + "id": 108, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brick_wall", + "id": -976, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brown_bundle", + "id": 259, + "version": 1, + "componentBased": true + }, + { + "name": "minecraft:brown_candle", + "id": -425, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brown_candle_cake", + "id": -442, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brown_carpet", + "id": -608, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brown_concrete", + "id": -639, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brown_concrete_powder", + "id": -720, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brown_dye", + "id": 424, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brown_glazed_terracotta", + "id": 232, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brown_mushroom", + "id": 39, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brown_mushroom_block", + "id": 99, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brown_shulker_box", + "id": -624, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brown_stained_glass", + "id": -684, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brown_stained_glass_pane", + "id": -654, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brown_terracotta", + "id": -735, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brown_wool", + "id": -555, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:brush", + "id": 716, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bubble_column", + "id": -160, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bubble_coral", + "id": -582, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bubble_coral_block", + "id": -850, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bubble_coral_fan", + "id": -841, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bubble_coral_wall_fan", + "id": -136, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bucket", + "id": 385, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:budding_amethyst", + "id": -328, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:bundle", + "id": 260, + "version": 1, + "componentBased": true + }, + { + "name": "minecraft:burn_pottery_sherd", + "id": 698, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cactus", + "id": 81, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cake", + "id": 443, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:calcite", + "id": -326, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:calibrated_sculk_sensor", + "id": -580, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:camel_spawn_egg", + "id": 692, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:camera", + "id": 630, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:campfire", + "id": 624, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:candle", + "id": -412, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:candle_cake", + "id": -429, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:carpet", + "id": 750, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:carrot", + "id": 301, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:carrot_on_a_stick", + "id": 550, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:carrots", + "id": 141, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cartography_table", + "id": -200, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:carved_pumpkin", + "id": -155, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cat_spawn_egg", + "id": 516, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cauldron", + "id": 459, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:cave_spider_spawn_egg", + "id": 484, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cave_vines", + "id": -322, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cave_vines_body_with_berries", + "id": -375, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cave_vines_head_with_berries", + "id": -376, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chain", + "id": 656, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:chain_command_block", + "id": 189, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chainmail_boots", + "id": 367, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chainmail_chestplate", + "id": 365, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chainmail_helmet", + "id": 364, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chainmail_leggings", + "id": 366, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chalkboard", + "id": 230, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:charcoal", + "id": 327, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:chemical_heat", + "id": 192, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chemistry_table", + "id": 785, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cherry_boat", + "id": 686, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cherry_button", + "id": -530, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cherry_chest_boat", + "id": 687, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cherry_door", + "id": -531, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cherry_double_slab", + "id": -540, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cherry_fence", + "id": -532, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cherry_fence_gate", + "id": -533, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cherry_hanging_sign", + "id": -534, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cherry_leaves", + "id": -548, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cherry_log", + "id": -536, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cherry_planks", + "id": -537, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cherry_pressure_plate", + "id": -538, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cherry_sapling", + "id": -547, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cherry_sign", + "id": 688, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cherry_slab", + "id": -539, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cherry_stairs", + "id": -541, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cherry_standing_sign", + "id": -542, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cherry_trapdoor", + "id": -543, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cherry_wall_sign", + "id": -544, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cherry_wood", + "id": -546, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chest", + "id": 54, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chest_boat", + "id": 682, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chest_minecart", + "id": 415, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chicken", + "id": 297, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:chicken_spawn_egg", + "id": 462, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chipped_anvil", + "id": -959, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chiseled_bookshelf", + "id": -526, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chiseled_copper", + "id": -760, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chiseled_deepslate", + "id": -395, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chiseled_nether_bricks", + "id": -302, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chiseled_polished_blackstone", + "id": -279, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chiseled_quartz_block", + "id": -953, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chiseled_red_sandstone", + "id": -956, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chiseled_resin_bricks", + "id": -1020, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chiseled_sandstone", + "id": -944, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chiseled_stone_bricks", + "id": -870, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chiseled_tuff", + "id": -753, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chiseled_tuff_bricks", + "id": -759, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chorus_flower", + "id": 200, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:chorus_fruit", + "id": 591, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:chorus_plant", + "id": 240, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:clay", + "id": 82, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:clay_ball", + "id": 410, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:client_request_placeholder_block", + "id": -465, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:clock", + "id": 419, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:closed_eyeblossom", + "id": -1019, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:coal", + "id": 326, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:coal_block", + "id": 173, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:coal_ore", + "id": 16, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:coarse_dirt", + "id": -962, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:coast_armor_trim_smithing_template", + "id": 720, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cobbled_deepslate", + "id": -379, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cobbled_deepslate_double_slab", + "id": -396, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cobbled_deepslate_slab", + "id": -380, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cobbled_deepslate_stairs", + "id": -381, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cobbled_deepslate_wall", + "id": -382, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cobblestone", + "id": 4, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cobblestone_double_slab", + "id": -879, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cobblestone_slab", + "id": -873, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cobblestone_wall", + "id": 139, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cocoa", + "id": 127, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cocoa_beans", + "id": 438, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cod", + "id": 286, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:cod_bucket", + "id": 389, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cod_spawn_egg", + "id": 508, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:colored_torch_blue", + "id": 204, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:colored_torch_bp", + "id": 789, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:colored_torch_green", + "id": -963, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:colored_torch_purple", + "id": -964, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:colored_torch_red", + "id": 202, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:colored_torch_rg", + "id": 788, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:command_block", + "id": 137, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:command_block_minecart", + "id": 596, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:comparator", + "id": 555, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:compass", + "id": 417, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:composter", + "id": -213, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:compound", + "id": 631, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:compound_creator", + "id": 238, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:concrete", + "id": 776, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:concrete_powder", + "id": 777, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:conduit", + "id": -157, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cooked_beef", + "id": 296, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:cooked_chicken", + "id": 298, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:cooked_cod", + "id": 290, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:cooked_mutton", + "id": 584, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:cooked_porkchop", + "id": 285, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:cooked_rabbit", + "id": 311, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:cooked_salmon", + "id": 291, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:cookie", + "id": 293, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:copper_block", + "id": -340, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:copper_bulb", + "id": -776, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:copper_door", + "id": -784, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:copper_grate", + "id": -768, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:copper_ingot", + "id": 538, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:copper_ore", + "id": -311, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:copper_trapdoor", + "id": -792, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:coral", + "id": 772, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:coral_block", + "id": 754, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:coral_fan", + "id": 763, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:coral_fan_dead", + "id": 764, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cornflower", + "id": -838, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cow_spawn_egg", + "id": 463, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cracked_deepslate_bricks", + "id": -410, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cracked_deepslate_tiles", + "id": -409, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cracked_nether_bricks", + "id": -303, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cracked_polished_blackstone_bricks", + "id": -280, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cracked_stone_bricks", + "id": -869, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:crafter", + "id": -313, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:crafting_table", + "id": 58, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:creaking_heart", + "id": -1012, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:creaking_spawn_egg", + "id": 747, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:creeper_banner_pattern", + "id": 615, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:creeper_head", + "id": -968, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:creeper_spawn_egg", + "id": 468, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:crimson_button", + "id": -260, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:crimson_door", + "id": 653, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:crimson_double_slab", + "id": -266, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:crimson_fence", + "id": -256, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:crimson_fence_gate", + "id": -258, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:crimson_fungus", + "id": -228, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:crimson_hanging_sign", + "id": -506, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:crimson_hyphae", + "id": -299, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:crimson_nylium", + "id": -232, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:crimson_planks", + "id": -242, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:crimson_pressure_plate", + "id": -262, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:crimson_roots", + "id": -223, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:crimson_sign", + "id": 651, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:crimson_slab", + "id": -264, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:crimson_stairs", + "id": -254, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:crimson_standing_sign", + "id": -250, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:crimson_stem", + "id": -225, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:crimson_trapdoor", + "id": -246, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:crimson_wall_sign", + "id": -252, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:crossbow", + "id": 608, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:crying_obsidian", + "id": -289, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cut_copper", + "id": -347, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cut_copper_slab", + "id": -361, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cut_copper_stairs", + "id": -354, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cut_red_sandstone", + "id": -957, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cut_red_sandstone_double_slab", + "id": -928, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cut_red_sandstone_slab", + "id": -901, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cut_sandstone", + "id": -945, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cut_sandstone_double_slab", + "id": -927, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cut_sandstone_slab", + "id": -900, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cyan_bundle", + "id": 261, + "version": 1, + "componentBased": true + }, + { + "name": "minecraft:cyan_candle", + "id": -422, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cyan_candle_cake", + "id": -439, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cyan_carpet", + "id": -605, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cyan_concrete", + "id": -636, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cyan_concrete_powder", + "id": -717, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cyan_dye", + "id": 427, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cyan_glazed_terracotta", + "id": 229, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cyan_shulker_box", + "id": -621, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cyan_stained_glass", + "id": -681, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cyan_stained_glass_pane", + "id": -651, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cyan_terracotta", + "id": -732, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:cyan_wool", + "id": -561, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:damaged_anvil", + "id": -960, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dandelion", + "id": 37, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:danger_pottery_sherd", + "id": 699, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dark_oak_boat", + "id": 406, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dark_oak_button", + "id": -142, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dark_oak_chest_boat", + "id": 680, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dark_oak_door", + "id": 590, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dark_oak_double_slab", + "id": -813, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dark_oak_fence", + "id": -577, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dark_oak_fence_gate", + "id": 186, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dark_oak_hanging_sign", + "id": -505, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dark_oak_leaves", + "id": -803, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dark_oak_log", + "id": -572, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dark_oak_planks", + "id": -743, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dark_oak_pressure_plate", + "id": -152, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dark_oak_sapling", + "id": -829, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dark_oak_sign", + "id": 613, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dark_oak_slab", + "id": -808, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dark_oak_stairs", + "id": 164, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dark_oak_trapdoor", + "id": -147, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dark_oak_wood", + "id": -818, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dark_prismarine", + "id": -947, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dark_prismarine_double_slab", + "id": -913, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dark_prismarine_slab", + "id": -886, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dark_prismarine_stairs", + "id": -3, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:darkoak_standing_sign", + "id": -192, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:darkoak_wall_sign", + "id": -193, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:daylight_detector", + "id": 151, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:daylight_detector_inverted", + "id": 178, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dead_brain_coral", + "id": -586, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dead_brain_coral_block", + "id": -854, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dead_brain_coral_fan", + "id": -844, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dead_brain_coral_wall_fan", + "id": -906, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dead_bubble_coral", + "id": -587, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dead_bubble_coral_block", + "id": -855, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dead_bubble_coral_fan", + "id": -845, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dead_bubble_coral_wall_fan", + "id": -908, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dead_fire_coral", + "id": -588, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dead_fire_coral_block", + "id": -856, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dead_fire_coral_fan", + "id": -846, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dead_fire_coral_wall_fan", + "id": -909, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dead_horn_coral", + "id": -589, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dead_horn_coral_block", + "id": -857, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dead_horn_coral_fan", + "id": -847, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dead_horn_coral_wall_fan", + "id": -910, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dead_tube_coral", + "id": -585, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dead_tube_coral_block", + "id": -853, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dead_tube_coral_fan", + "id": -134, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dead_tube_coral_wall_fan", + "id": -905, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deadbush", + "id": 32, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:decorated_pot", + "id": -551, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deepslate", + "id": -378, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deepslate_brick_double_slab", + "id": -399, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deepslate_brick_slab", + "id": -392, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deepslate_brick_stairs", + "id": -393, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deepslate_brick_wall", + "id": -394, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deepslate_bricks", + "id": -391, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deepslate_coal_ore", + "id": -406, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deepslate_copper_ore", + "id": -408, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deepslate_diamond_ore", + "id": -405, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deepslate_emerald_ore", + "id": -407, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deepslate_gold_ore", + "id": -402, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deepslate_iron_ore", + "id": -401, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deepslate_lapis_ore", + "id": -400, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deepslate_redstone_ore", + "id": -403, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deepslate_tile_double_slab", + "id": -398, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deepslate_tile_slab", + "id": -388, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deepslate_tile_stairs", + "id": -389, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deepslate_tile_wall", + "id": -390, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deepslate_tiles", + "id": -387, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deny", + "id": 211, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deprecated_anvil", + "id": -961, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deprecated_purpur_block_1", + "id": -950, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:deprecated_purpur_block_2", + "id": -952, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:detector_rail", + "id": 28, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:diamond", + "id": 328, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:diamond_axe", + "id": 343, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:diamond_block", + "id": 57, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:diamond_boots", + "id": 375, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:diamond_chestplate", + "id": 373, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:diamond_helmet", + "id": 372, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:diamond_hoe", + "id": 357, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:diamond_horse_armor", + "id": 566, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:diamond_leggings", + "id": 374, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:diamond_ore", + "id": 56, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:diamond_pickaxe", + "id": 342, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:diamond_shovel", + "id": 341, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:diamond_sword", + "id": 340, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:diorite", + "id": -592, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:diorite_double_slab", + "id": -921, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:diorite_slab", + "id": -894, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:diorite_stairs", + "id": -170, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:diorite_wall", + "id": -973, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dirt", + "id": 3, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dirt_with_roots", + "id": -318, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:disc_fragment_5", + "id": 674, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dispenser", + "id": 23, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dolphin_spawn_egg", + "id": 512, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:donkey_spawn_egg", + "id": 493, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:double_cut_copper_slab", + "id": -368, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:double_plant", + "id": 770, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:double_stone_block_slab", + "id": 759, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:double_stone_block_slab2", + "id": 760, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:double_stone_block_slab3", + "id": 761, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:double_stone_block_slab4", + "id": 762, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dragon_breath", + "id": 593, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dragon_egg", + "id": 122, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dragon_head", + "id": -969, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dried_kelp", + "id": 292, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:dried_kelp_block", + "id": -139, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dripstone_block", + "id": -317, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dropper", + "id": 125, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:drowned_spawn_egg", + "id": 511, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dune_armor_trim_smithing_template", + "id": 719, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:dye", + "id": 792, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:echo_shard", + "id": 684, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:egg", + "id": 416, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:elder_guardian_spawn_egg", + "id": 499, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_0", + "id": 36, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_1", + "id": -12, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_10", + "id": -21, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_100", + "id": -111, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_101", + "id": -112, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_102", + "id": -113, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_103", + "id": -114, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_104", + "id": -115, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_105", + "id": -116, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_106", + "id": -117, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_107", + "id": -118, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_108", + "id": -119, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_109", + "id": -120, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_11", + "id": -22, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_110", + "id": -121, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_111", + "id": -122, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_112", + "id": -123, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_113", + "id": -124, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_114", + "id": -125, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_115", + "id": -126, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_116", + "id": -127, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_117", + "id": -128, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_118", + "id": -129, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_12", + "id": -23, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_13", + "id": -24, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_14", + "id": -25, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_15", + "id": -26, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_16", + "id": -27, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_17", + "id": -28, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_18", + "id": -29, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_19", + "id": -30, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_2", + "id": -13, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_20", + "id": -31, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_21", + "id": -32, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_22", + "id": -33, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_23", + "id": -34, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_24", + "id": -35, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_25", + "id": -36, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_26", + "id": -37, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_27", + "id": -38, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_28", + "id": -39, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_29", + "id": -40, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_3", + "id": -14, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_30", + "id": -41, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_31", + "id": -42, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_32", + "id": -43, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_33", + "id": -44, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_34", + "id": -45, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_35", + "id": -46, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_36", + "id": -47, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_37", + "id": -48, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_38", + "id": -49, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_39", + "id": -50, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_4", + "id": -15, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_40", + "id": -51, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_41", + "id": -52, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_42", + "id": -53, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_43", + "id": -54, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_44", + "id": -55, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_45", + "id": -56, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_46", + "id": -57, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_47", + "id": -58, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_48", + "id": -59, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_49", + "id": -60, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_5", + "id": -16, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_50", + "id": -61, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_51", + "id": -62, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_52", + "id": -63, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_53", + "id": -64, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_54", + "id": -65, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_55", + "id": -66, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_56", + "id": -67, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_57", + "id": -68, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_58", + "id": -69, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_59", + "id": -70, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_6", + "id": -17, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_60", + "id": -71, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_61", + "id": -72, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_62", + "id": -73, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_63", + "id": -74, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_64", + "id": -75, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_65", + "id": -76, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_66", + "id": -77, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_67", + "id": -78, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_68", + "id": -79, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_69", + "id": -80, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_7", + "id": -18, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_70", + "id": -81, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_71", + "id": -82, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_72", + "id": -83, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_73", + "id": -84, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_74", + "id": -85, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_75", + "id": -86, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_76", + "id": -87, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_77", + "id": -88, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_78", + "id": -89, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_79", + "id": -90, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_8", + "id": -19, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_80", + "id": -91, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_81", + "id": -92, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_82", + "id": -93, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_83", + "id": -94, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_84", + "id": -95, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_85", + "id": -96, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_86", + "id": -97, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_87", + "id": -98, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_88", + "id": -99, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_89", + "id": -100, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_9", + "id": -20, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_90", + "id": -101, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_91", + "id": -102, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_92", + "id": -103, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_93", + "id": -104, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_94", + "id": -105, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_95", + "id": -106, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_96", + "id": -107, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_97", + "id": -108, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_98", + "id": -109, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_99", + "id": -110, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:element_constructor", + "id": -987, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:elytra", + "id": 597, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:emerald", + "id": 546, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:emerald_block", + "id": 133, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:emerald_ore", + "id": 129, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:empty_map", + "id": 549, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:enchanted_book", + "id": 554, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:enchanted_golden_apple", + "id": 281, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:enchanting_table", + "id": 116, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:end_brick_stairs", + "id": -178, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:end_bricks", + "id": 206, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:end_crystal", + "id": 795, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:end_gateway", + "id": 209, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:end_portal", + "id": 119, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:end_portal_frame", + "id": 120, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:end_rod", + "id": 208, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:end_stone", + "id": 121, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:end_stone_brick_double_slab", + "id": -167, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:end_stone_brick_slab", + "id": -162, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:end_stone_brick_wall", + "id": -980, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:ender_chest", + "id": 130, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:ender_dragon_spawn_egg", + "id": 535, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:ender_eye", + "id": 460, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:ender_pearl", + "id": 448, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:enderman_spawn_egg", + "id": 469, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:endermite_spawn_egg", + "id": 487, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:evoker_spawn_egg", + "id": 503, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:experience_bottle", + "id": 542, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:explorer_pottery_sherd", + "id": 700, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:exposed_chiseled_copper", + "id": -761, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:exposed_copper", + "id": -341, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:exposed_copper_bulb", + "id": -777, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:exposed_copper_door", + "id": -785, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:exposed_copper_grate", + "id": -769, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:exposed_copper_trapdoor", + "id": -793, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:exposed_cut_copper", + "id": -348, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:exposed_cut_copper_slab", + "id": -362, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:exposed_cut_copper_stairs", + "id": -355, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:exposed_double_cut_copper_slab", + "id": -369, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:eye_armor_trim_smithing_template", + "id": 723, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:farmland", + "id": 60, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:feather", + "id": 352, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:fence", + "id": 752, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:fence_gate", + "id": 107, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:fermented_spider_eye", + "id": 455, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:fern", + "id": -848, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:field_masoned_banner_pattern", + "id": 618, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:filled_map", + "id": 446, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:fire", + "id": 51, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:fire_charge", + "id": 543, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:fire_coral", + "id": -583, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:fire_coral_block", + "id": -851, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:fire_coral_fan", + "id": -842, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:fire_coral_wall_fan", + "id": -907, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:firework_rocket", + "id": 552, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:firework_star", + "id": 553, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:fishing_rod", + "id": 418, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:fletching_table", + "id": -201, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:flint", + "id": 381, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:flint_and_steel", + "id": 323, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:flow_armor_trim_smithing_template", + "id": 734, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:flow_banner_pattern", + "id": 622, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:flow_pottery_sherd", + "id": 701, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:flower_banner_pattern", + "id": 614, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:flower_pot", + "id": 548, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:flowering_azalea", + "id": -338, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:flowing_lava", + "id": 10, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:flowing_water", + "id": 8, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:fox_spawn_egg", + "id": 518, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:frame", + "id": 547, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:friend_pottery_sherd", + "id": 702, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:frog_spawn", + "id": -468, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:frog_spawn_egg", + "id": 665, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:frosted_ice", + "id": 207, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:furnace", + "id": 61, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:ghast_spawn_egg", + "id": 481, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:ghast_tear", + "id": 451, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:gilded_blackstone", + "id": -281, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:glass", + "id": 20, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:glass_bottle", + "id": 454, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:glass_pane", + "id": 102, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:glistering_melon_slice", + "id": 461, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:globe_banner_pattern", + "id": 621, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:glow_berries", + "id": 796, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:glow_frame", + "id": 660, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:glow_ink_sac", + "id": 537, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:glow_lichen", + "id": -411, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:glow_squid_spawn_egg", + "id": 532, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:glow_stick", + "id": 638, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:glowingobsidian", + "id": 246, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:glowstone", + "id": 89, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:glowstone_dust", + "id": 420, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:goat_horn", + "id": 664, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:goat_spawn_egg", + "id": 531, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:gold_block", + "id": 41, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:gold_ingot", + "id": 330, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:gold_nugget", + "id": 452, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:gold_ore", + "id": 14, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:golden_apple", + "id": 280, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:golden_axe", + "id": 350, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:golden_boots", + "id": 379, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:golden_carrot", + "id": 305, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:golden_chestplate", + "id": 377, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:golden_helmet", + "id": 376, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:golden_hoe", + "id": 358, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:golden_horse_armor", + "id": 565, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:golden_leggings", + "id": 378, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:golden_pickaxe", + "id": 349, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:golden_rail", + "id": 27, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:golden_shovel", + "id": 348, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:golden_sword", + "id": 347, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:granite", + "id": -590, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:granite_double_slab", + "id": -923, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:granite_slab", + "id": -896, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:granite_stairs", + "id": -169, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:granite_wall", + "id": -972, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:grass_block", + "id": 2, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:grass_path", + "id": 198, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:gravel", + "id": 13, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:gray_bundle", + "id": 262, + "version": 1, + "componentBased": true + }, + { + "name": "minecraft:gray_candle", + "id": -420, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:gray_candle_cake", + "id": -437, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:gray_carpet", + "id": -603, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:gray_concrete", + "id": -634, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:gray_concrete_powder", + "id": -715, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:gray_dye", + "id": 429, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:gray_glazed_terracotta", + "id": 227, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:gray_shulker_box", + "id": -619, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:gray_stained_glass", + "id": -679, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:gray_stained_glass_pane", + "id": -649, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:gray_terracotta", + "id": -730, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:gray_wool", + "id": -553, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:green_bundle", + "id": 263, + "version": 1, + "componentBased": true + }, + { + "name": "minecraft:green_candle", + "id": -426, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:green_candle_cake", + "id": -443, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:green_carpet", + "id": -609, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:green_concrete", + "id": -640, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:green_concrete_powder", + "id": -721, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:green_dye", + "id": 423, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:green_glazed_terracotta", + "id": 233, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:green_shulker_box", + "id": -625, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:green_stained_glass", + "id": -685, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:green_stained_glass_pane", + "id": -655, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:green_terracotta", + "id": -736, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:green_wool", + "id": -560, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:grindstone", + "id": -195, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:guardian_spawn_egg", + "id": 488, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:gunpowder", + "id": 353, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:guster_banner_pattern", + "id": 623, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:guster_pottery_sherd", + "id": 703, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hanging_roots", + "id": -319, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_black_stained_glass", + "id": -702, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_black_stained_glass_pane", + "id": -672, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_blue_stained_glass", + "id": -698, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_blue_stained_glass_pane", + "id": -668, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_brown_stained_glass", + "id": -699, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_brown_stained_glass_pane", + "id": -669, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_cyan_stained_glass", + "id": -696, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_cyan_stained_glass_pane", + "id": -666, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_glass", + "id": 253, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_glass_pane", + "id": 190, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_gray_stained_glass", + "id": -694, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_gray_stained_glass_pane", + "id": -664, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_green_stained_glass", + "id": -700, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_green_stained_glass_pane", + "id": -670, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_light_blue_stained_glass", + "id": -690, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_light_blue_stained_glass_pane", + "id": -660, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_light_gray_stained_glass", + "id": -695, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_light_gray_stained_glass_pane", + "id": -665, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_lime_stained_glass", + "id": -692, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_lime_stained_glass_pane", + "id": -662, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_magenta_stained_glass", + "id": -689, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_magenta_stained_glass_pane", + "id": -659, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_orange_stained_glass", + "id": -688, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_orange_stained_glass_pane", + "id": -658, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_pink_stained_glass", + "id": -693, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_pink_stained_glass_pane", + "id": -663, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_purple_stained_glass", + "id": -697, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_purple_stained_glass_pane", + "id": -667, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_red_stained_glass", + "id": -701, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_red_stained_glass_pane", + "id": -671, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_stained_glass", + "id": 786, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_stained_glass_pane", + "id": 787, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_white_stained_glass", + "id": 254, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_white_stained_glass_pane", + "id": 191, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_yellow_stained_glass", + "id": -691, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hard_yellow_stained_glass_pane", + "id": -661, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hardened_clay", + "id": 172, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hay_block", + "id": 170, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:heart_of_the_sea", + "id": 604, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:heart_pottery_sherd", + "id": 704, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:heartbreak_pottery_sherd", + "id": 705, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:heavy_core", + "id": -316, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:heavy_weighted_pressure_plate", + "id": 148, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hoglin_spawn_egg", + "id": 524, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:honey_block", + "id": -220, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:honey_bottle", + "id": 627, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:honeycomb", + "id": 626, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:honeycomb_block", + "id": -221, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:hopper", + "id": 560, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:hopper_minecart", + "id": 559, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:horn_coral", + "id": -584, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:horn_coral_block", + "id": -852, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:horn_coral_fan", + "id": -843, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:horn_coral_wall_fan", + "id": -137, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:horse_spawn_egg", + "id": 485, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:host_armor_trim_smithing_template", + "id": 733, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:howl_pottery_sherd", + "id": 706, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:husk_spawn_egg", + "id": 491, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:ice", + "id": 79, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:ice_bomb", + "id": 632, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:infested_chiseled_stone_bricks", + "id": -862, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:infested_cobblestone", + "id": -858, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:infested_cracked_stone_bricks", + "id": -861, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:infested_deepslate", + "id": -454, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:infested_mossy_stone_bricks", + "id": -860, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:infested_stone", + "id": 97, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:infested_stone_bricks", + "id": -859, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:info_update", + "id": 248, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:info_update2", + "id": 249, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:ink_sac", + "id": 439, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:invisible_bedrock", + "id": 95, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:iron_axe", + "id": 322, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:iron_bars", + "id": 101, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:iron_block", + "id": 42, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:iron_boots", + "id": 371, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:iron_chestplate", + "id": 369, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:iron_door", + "id": 397, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:iron_golem_spawn_egg", + "id": 533, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:iron_helmet", + "id": 368, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:iron_hoe", + "id": 356, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:iron_horse_armor", + "id": 564, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:iron_ingot", + "id": 329, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:iron_leggings", + "id": 370, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:iron_nugget", + "id": 602, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:iron_ore", + "id": 15, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:iron_pickaxe", + "id": 321, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:iron_shovel", + "id": 320, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:iron_sword", + "id": 331, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:iron_trapdoor", + "id": 167, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.acacia_door", + "id": 196, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.bed", + "id": 26, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.beetroot", + "id": 244, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.birch_door", + "id": 194, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.brewing_stand", + "id": 117, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.cake", + "id": 92, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.camera", + "id": 242, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.campfire", + "id": -209, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.cauldron", + "id": 118, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.chain", + "id": -286, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.crimson_door", + "id": -244, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.dark_oak_door", + "id": 197, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.flower_pot", + "id": 140, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.frame", + "id": 199, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.glow_frame", + "id": -339, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.hopper", + "id": 154, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.iron_door", + "id": 71, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.jungle_door", + "id": 195, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.kelp", + "id": -138, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.mangrove_door", + "id": -493, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.nether_sprouts", + "id": -238, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.nether_wart", + "id": 115, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.reeds", + "id": 83, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.soul_campfire", + "id": -290, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.spruce_door", + "id": 193, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.warped_door", + "id": -245, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.wheat", + "id": 59, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:item.wooden_door", + "id": 64, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:jigsaw", + "id": -211, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:jukebox", + "id": 84, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:jungle_boat", + "id": 403, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:jungle_button", + "id": -143, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:jungle_chest_boat", + "id": 677, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:jungle_door", + "id": 588, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:jungle_double_slab", + "id": -811, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:jungle_fence", + "id": -578, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:jungle_fence_gate", + "id": 185, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:jungle_hanging_sign", + "id": -503, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:jungle_leaves", + "id": -802, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:jungle_log", + "id": -571, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:jungle_planks", + "id": -741, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:jungle_pressure_plate", + "id": -153, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:jungle_sapling", + "id": -827, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:jungle_sign", + "id": 611, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:jungle_slab", + "id": -806, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:jungle_stairs", + "id": 136, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:jungle_standing_sign", + "id": -188, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:jungle_trapdoor", + "id": -148, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:jungle_wall_sign", + "id": -189, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:jungle_wood", + "id": -816, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:kelp", + "id": 408, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:lab_table", + "id": -988, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:ladder", + "id": 65, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lantern", + "id": -208, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lapis_block", + "id": 22, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lapis_lazuli", + "id": 440, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lapis_ore", + "id": 21, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:large_amethyst_bud", + "id": -330, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:large_fern", + "id": -865, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lava", + "id": 11, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lava_bucket", + "id": 388, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lead", + "id": 580, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:leather", + "id": 407, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:leather_boots", + "id": 363, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:leather_chestplate", + "id": 361, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:leather_helmet", + "id": 360, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:leather_horse_armor", + "id": 563, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:leather_leggings", + "id": 362, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:leaves", + "id": 766, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:leaves2", + "id": 767, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lectern", + "id": -194, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lever", + "id": 69, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_block", + "id": 790, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_block_0", + "id": -215, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_block_1", + "id": -929, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_block_10", + "id": -938, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_block_11", + "id": -939, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_block_12", + "id": -940, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_block_13", + "id": -941, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_block_14", + "id": -942, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_block_15", + "id": -943, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_block_2", + "id": -930, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_block_3", + "id": -931, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_block_4", + "id": -932, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_block_5", + "id": -933, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_block_6", + "id": -934, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_block_7", + "id": -935, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_block_8", + "id": -936, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_block_9", + "id": -937, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_blue_bundle", + "id": 264, + "version": 1, + "componentBased": true + }, + { + "name": "minecraft:light_blue_candle", + "id": -416, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_blue_candle_cake", + "id": -433, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_blue_carpet", + "id": -599, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_blue_concrete", + "id": -630, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_blue_concrete_powder", + "id": -711, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_blue_dye", + "id": 433, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_blue_glazed_terracotta", + "id": 223, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_blue_shulker_box", + "id": -615, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_blue_stained_glass", + "id": -675, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_blue_stained_glass_pane", + "id": -645, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_blue_terracotta", + "id": -726, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_blue_wool", + "id": -562, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_gray_bundle", + "id": 265, + "version": 1, + "componentBased": true + }, + { + "name": "minecraft:light_gray_candle", + "id": -421, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_gray_candle_cake", + "id": -438, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_gray_carpet", + "id": -604, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_gray_concrete", + "id": -635, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_gray_concrete_powder", + "id": -716, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_gray_dye", + "id": 428, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_gray_shulker_box", + "id": -620, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_gray_stained_glass", + "id": -680, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_gray_stained_glass_pane", + "id": -650, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_gray_terracotta", + "id": -731, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_gray_wool", + "id": -552, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:light_weighted_pressure_plate", + "id": 147, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lightning_rod", + "id": -312, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lilac", + "id": -863, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lily_of_the_valley", + "id": -839, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lime_bundle", + "id": 266, + "version": 1, + "componentBased": true + }, + { + "name": "minecraft:lime_candle", + "id": -418, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lime_candle_cake", + "id": -435, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lime_carpet", + "id": -601, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lime_concrete", + "id": -632, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lime_concrete_powder", + "id": -713, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lime_dye", + "id": 431, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lime_glazed_terracotta", + "id": 225, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lime_shulker_box", + "id": -617, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lime_stained_glass", + "id": -677, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lime_stained_glass_pane", + "id": -647, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lime_terracotta", + "id": -728, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lime_wool", + "id": -559, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lingering_potion", + "id": 595, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lit_blast_furnace", + "id": -214, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lit_deepslate_redstone_ore", + "id": -404, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lit_furnace", + "id": 62, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lit_pumpkin", + "id": 91, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lit_redstone_lamp", + "id": 124, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lit_redstone_ore", + "id": 74, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lit_smoker", + "id": -199, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:llama_spawn_egg", + "id": 501, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lodestone", + "id": -222, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:lodestone_compass", + "id": 639, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:log", + "id": 751, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:log2", + "id": 774, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:loom", + "id": -204, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mace", + "id": 344, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:magenta_bundle", + "id": 267, + "version": 1, + "componentBased": true + }, + { + "name": "minecraft:magenta_candle", + "id": -415, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:magenta_candle_cake", + "id": -432, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:magenta_carpet", + "id": -598, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:magenta_concrete", + "id": -629, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:magenta_concrete_powder", + "id": -710, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:magenta_dye", + "id": 434, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:magenta_glazed_terracotta", + "id": 222, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:magenta_shulker_box", + "id": -614, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:magenta_stained_glass", + "id": -674, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:magenta_stained_glass_pane", + "id": -644, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:magenta_terracotta", + "id": -725, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:magenta_wool", + "id": -565, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:magma", + "id": 213, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:magma_cream", + "id": 457, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:magma_cube_spawn_egg", + "id": 482, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mangrove_boat", + "id": 672, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mangrove_button", + "id": -487, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mangrove_chest_boat", + "id": 681, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mangrove_door", + "id": 670, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mangrove_double_slab", + "id": -499, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mangrove_fence", + "id": -491, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mangrove_fence_gate", + "id": -492, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mangrove_hanging_sign", + "id": -508, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mangrove_leaves", + "id": -472, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mangrove_log", + "id": -484, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mangrove_planks", + "id": -486, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mangrove_pressure_plate", + "id": -490, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mangrove_propagule", + "id": -474, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mangrove_roots", + "id": -482, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mangrove_sign", + "id": 671, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mangrove_slab", + "id": -489, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mangrove_stairs", + "id": -488, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mangrove_standing_sign", + "id": -494, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mangrove_trapdoor", + "id": -496, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mangrove_wall_sign", + "id": -495, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mangrove_wood", + "id": -497, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:material_reducer", + "id": -986, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:medicine", + "id": 636, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:medium_amethyst_bud", + "id": -331, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:melon_block", + "id": 103, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:melon_seeds", + "id": 315, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:melon_slice", + "id": 294, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:melon_stem", + "id": 105, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:milk_bucket", + "id": 386, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:minecart", + "id": 395, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:miner_pottery_sherd", + "id": 707, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mob_spawner", + "id": 52, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mojang_banner_pattern", + "id": 617, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:monster_egg", + "id": 775, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mooshroom_spawn_egg", + "id": 467, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:moss_block", + "id": -320, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:moss_carpet", + "id": -335, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mossy_cobblestone", + "id": 48, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mossy_cobblestone_double_slab", + "id": -915, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mossy_cobblestone_slab", + "id": -888, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mossy_cobblestone_stairs", + "id": -179, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mossy_cobblestone_wall", + "id": -971, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mossy_stone_brick_double_slab", + "id": -168, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mossy_stone_brick_slab", + "id": -166, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mossy_stone_brick_stairs", + "id": -175, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mossy_stone_brick_wall", + "id": -978, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mossy_stone_bricks", + "id": -868, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mourner_pottery_sherd", + "id": 708, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:moving_block", + "id": 250, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mud", + "id": -473, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mud_brick_double_slab", + "id": -479, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mud_brick_slab", + "id": -478, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mud_brick_stairs", + "id": -480, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mud_brick_wall", + "id": -481, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mud_bricks", + "id": -475, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:muddy_mangrove_roots", + "id": -483, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mule_spawn_egg", + "id": 494, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mushroom_stem", + "id": -1008, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:mushroom_stew", + "id": 282, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:music_disc_11", + "id": 577, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:music_disc_13", + "id": 567, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:music_disc_5", + "id": 673, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:music_disc_blocks", + "id": 569, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:music_disc_cat", + "id": 568, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:music_disc_chirp", + "id": 570, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:music_disc_creator", + "id": 782, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:music_disc_creator_music_box", + "id": 783, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:music_disc_far", + "id": 571, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:music_disc_mall", + "id": 572, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:music_disc_mellohi", + "id": 573, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:music_disc_otherside", + "id": 663, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:music_disc_pigstep", + "id": 657, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:music_disc_precipice", + "id": 784, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:music_disc_relic", + "id": 736, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:music_disc_stal", + "id": 574, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:music_disc_strad", + "id": 575, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:music_disc_wait", + "id": 578, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:music_disc_ward", + "id": 576, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:mutton", + "id": 583, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:mycelium", + "id": 110, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:name_tag", + "id": 581, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:nautilus_shell", + "id": 603, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:nether_brick", + "id": 112, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:nether_brick_double_slab", + "id": -883, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:nether_brick_fence", + "id": 113, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:nether_brick_slab", + "id": -877, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:nether_brick_stairs", + "id": 114, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:nether_brick_wall", + "id": -979, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:nether_gold_ore", + "id": -288, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:nether_sprouts", + "id": 658, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:nether_star", + "id": 551, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:nether_wart", + "id": 316, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:nether_wart_block", + "id": 214, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:netherbrick", + "id": 556, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:netherite_axe", + "id": 643, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:netherite_block", + "id": -270, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:netherite_boots", + "id": 649, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:netherite_chestplate", + "id": 647, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:netherite_helmet", + "id": 646, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:netherite_hoe", + "id": 644, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:netherite_ingot", + "id": 645, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:netherite_leggings", + "id": 648, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:netherite_pickaxe", + "id": 642, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:netherite_scrap", + "id": 650, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:netherite_shovel", + "id": 641, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:netherite_sword", + "id": 640, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:netherite_upgrade_smithing_template", + "id": 717, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:netherrack", + "id": 87, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:netherreactor", + "id": 247, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:normal_stone_double_slab", + "id": -926, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:normal_stone_slab", + "id": -899, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:normal_stone_stairs", + "id": -180, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:noteblock", + "id": 25, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:npc_spawn_egg", + "id": 498, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oak_boat", + "id": 401, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oak_chest_boat", + "id": 675, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oak_double_slab", + "id": 157, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oak_fence", + "id": 85, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oak_hanging_sign", + "id": -500, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oak_leaves", + "id": 18, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oak_log", + "id": 17, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oak_planks", + "id": 5, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oak_sapling", + "id": 6, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oak_sign", + "id": 383, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oak_slab", + "id": 158, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oak_stairs", + "id": 53, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oak_wood", + "id": -212, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:observer", + "id": 251, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:obsidian", + "id": 49, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:ocelot_spawn_egg", + "id": 478, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:ochre_froglight", + "id": -471, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:ominous_bottle", + "id": 628, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:ominous_trial_key", + "id": 275, + "version": 1, + "componentBased": true + }, + { + "name": "minecraft:open_eyeblossom", + "id": -1018, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:orange_bundle", + "id": 268, + "version": 1, + "componentBased": true + }, + { + "name": "minecraft:orange_candle", + "id": -414, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:orange_candle_cake", + "id": -431, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:orange_carpet", + "id": -597, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:orange_concrete", + "id": -628, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:orange_concrete_powder", + "id": -709, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:orange_dye", + "id": 435, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:orange_glazed_terracotta", + "id": 221, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:orange_shulker_box", + "id": -613, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:orange_stained_glass", + "id": -673, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:orange_stained_glass_pane", + "id": -643, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:orange_terracotta", + "id": -724, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:orange_tulip", + "id": -834, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:orange_wool", + "id": -557, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oxeye_daisy", + "id": -837, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oxidized_chiseled_copper", + "id": -763, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oxidized_copper", + "id": -343, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oxidized_copper_bulb", + "id": -779, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oxidized_copper_door", + "id": -787, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oxidized_copper_grate", + "id": -771, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oxidized_copper_trapdoor", + "id": -795, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oxidized_cut_copper", + "id": -350, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oxidized_cut_copper_slab", + "id": -364, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oxidized_cut_copper_stairs", + "id": -357, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:oxidized_double_cut_copper_slab", + "id": -371, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:packed_ice", + "id": 174, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:packed_mud", + "id": -477, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:painting", + "id": 382, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pale_hanging_moss", + "id": -1011, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pale_moss_block", + "id": -1009, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pale_moss_carpet", + "id": -1010, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pale_oak_boat", + "id": 744, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pale_oak_button", + "id": -989, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pale_oak_chest_boat", + "id": 745, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pale_oak_door", + "id": -990, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pale_oak_double_slab", + "id": -999, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pale_oak_fence", + "id": -991, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pale_oak_fence_gate", + "id": -992, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pale_oak_hanging_sign", + "id": -993, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pale_oak_leaves", + "id": -1007, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pale_oak_log", + "id": -995, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pale_oak_planks", + "id": -996, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pale_oak_pressure_plate", + "id": -997, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pale_oak_sapling", + "id": -1006, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pale_oak_sign", + "id": 746, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pale_oak_slab", + "id": -998, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pale_oak_stairs", + "id": -1000, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pale_oak_standing_sign", + "id": -1001, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pale_oak_trapdoor", + "id": -1002, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pale_oak_wall_sign", + "id": -1003, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pale_oak_wood", + "id": -1005, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:panda_spawn_egg", + "id": 517, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:paper", + "id": 412, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:parrot_spawn_egg", + "id": 506, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pearlescent_froglight", + "id": -469, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:peony", + "id": -867, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:petrified_oak_double_slab", + "id": -903, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:petrified_oak_slab", + "id": -902, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:phantom_membrane", + "id": 607, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:phantom_spawn_egg", + "id": 514, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pig_spawn_egg", + "id": 464, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:piglin_banner_pattern", + "id": 620, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:piglin_brute_spawn_egg", + "id": 527, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:piglin_head", + "id": -970, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:piglin_spawn_egg", + "id": 525, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pillager_spawn_egg", + "id": 519, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pink_bundle", + "id": 269, + "version": 1, + "componentBased": true + }, + { + "name": "minecraft:pink_candle", + "id": -419, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pink_candle_cake", + "id": -436, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pink_carpet", + "id": -602, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pink_concrete", + "id": -633, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pink_concrete_powder", + "id": -714, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pink_dye", + "id": 430, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pink_glazed_terracotta", + "id": 226, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pink_petals", + "id": -549, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pink_shulker_box", + "id": -618, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pink_stained_glass", + "id": -678, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pink_stained_glass_pane", + "id": -648, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pink_terracotta", + "id": -729, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pink_tulip", + "id": -836, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pink_wool", + "id": -566, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:piston", + "id": 33, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:piston_arm_collision", + "id": 34, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pitcher_crop", + "id": -574, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pitcher_plant", + "id": -612, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pitcher_pod", + "id": 319, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:planks", + "id": 771, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:player_head", + "id": -967, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:plenty_pottery_sherd", + "id": 709, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:podzol", + "id": 243, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pointed_dripstone", + "id": -308, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:poisonous_potato", + "id": 304, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:polar_bear_spawn_egg", + "id": 500, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_andesite", + "id": -595, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_andesite_double_slab", + "id": -919, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_andesite_slab", + "id": -892, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_andesite_stairs", + "id": -174, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_basalt", + "id": -235, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_blackstone", + "id": -291, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_blackstone_brick_double_slab", + "id": -285, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_blackstone_brick_slab", + "id": -284, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_blackstone_brick_stairs", + "id": -275, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_blackstone_brick_wall", + "id": -278, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_blackstone_bricks", + "id": -274, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_blackstone_button", + "id": -296, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_blackstone_double_slab", + "id": -294, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_blackstone_pressure_plate", + "id": -295, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_blackstone_slab", + "id": -293, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_blackstone_stairs", + "id": -292, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_blackstone_wall", + "id": -297, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_deepslate", + "id": -383, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_deepslate_double_slab", + "id": -397, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_deepslate_slab", + "id": -384, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_deepslate_stairs", + "id": -385, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_deepslate_wall", + "id": -386, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_diorite", + "id": -593, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_diorite_double_slab", + "id": -922, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_diorite_slab", + "id": -895, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_diorite_stairs", + "id": -173, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_granite", + "id": -591, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_granite_double_slab", + "id": -924, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_granite_slab", + "id": -897, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_granite_stairs", + "id": -172, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_tuff", + "id": -748, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_tuff_double_slab", + "id": -750, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_tuff_slab", + "id": -749, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_tuff_stairs", + "id": -751, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:polished_tuff_wall", + "id": -752, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:popped_chorus_fruit", + "id": 592, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:poppy", + "id": 38, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:porkchop", + "id": 284, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:portal", + "id": 90, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:potato", + "id": 302, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:potatoes", + "id": 142, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:potion", + "id": 453, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:powder_snow", + "id": -306, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:powder_snow_bucket", + "id": 393, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:powered_comparator", + "id": 150, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:powered_repeater", + "id": 94, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:prismarine", + "id": 168, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:prismarine_brick_double_slab", + "id": -914, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:prismarine_brick_slab", + "id": -887, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:prismarine_bricks", + "id": -948, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:prismarine_bricks_stairs", + "id": -4, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:prismarine_crystals", + "id": 582, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:prismarine_double_slab", + "id": -912, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:prismarine_shard", + "id": 598, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:prismarine_slab", + "id": -885, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:prismarine_stairs", + "id": -2, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:prismarine_wall", + "id": -981, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:prize_pottery_sherd", + "id": 710, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pufferfish", + "id": 289, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:pufferfish_bucket", + "id": 392, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pufferfish_spawn_egg", + "id": 509, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pumpkin", + "id": 86, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:pumpkin_pie", + "id": 306, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:pumpkin_seeds", + "id": 314, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:pumpkin_stem", + "id": 104, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:purple_bundle", + "id": 270, + "version": 1, + "componentBased": true + }, + { + "name": "minecraft:purple_candle", + "id": -423, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:purple_candle_cake", + "id": -440, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:purple_carpet", + "id": -606, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:purple_concrete", + "id": -637, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:purple_concrete_powder", + "id": -718, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:purple_dye", + "id": 426, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:purple_glazed_terracotta", + "id": 219, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:purple_shulker_box", + "id": -622, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:purple_stained_glass", + "id": -682, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:purple_stained_glass_pane", + "id": -652, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:purple_terracotta", + "id": -733, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:purple_wool", + "id": -564, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:purpur_block", + "id": 201, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:purpur_double_slab", + "id": -911, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:purpur_pillar", + "id": -951, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:purpur_slab", + "id": -884, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:purpur_stairs", + "id": 203, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:quartz", + "id": 557, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:quartz_block", + "id": 155, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:quartz_bricks", + "id": -304, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:quartz_double_slab", + "id": -882, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:quartz_ore", + "id": 153, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:quartz_pillar", + "id": -954, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:quartz_slab", + "id": -876, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:quartz_stairs", + "id": 156, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:rabbit", + "id": 310, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:rabbit_foot", + "id": 561, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:rabbit_hide", + "id": 562, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:rabbit_spawn_egg", + "id": 486, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:rabbit_stew", + "id": 312, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:rail", + "id": 66, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:raiser_armor_trim_smithing_template", + "id": 731, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:rapid_fertilizer", + "id": 634, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:ravager_spawn_egg", + "id": 521, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:raw_copper", + "id": 541, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:raw_copper_block", + "id": -452, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:raw_gold", + "id": 540, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:raw_gold_block", + "id": -453, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:raw_iron", + "id": 539, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:raw_iron_block", + "id": -451, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:recovery_compass", + "id": 683, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_bundle", + "id": 271, + "version": 1, + "componentBased": true + }, + { + "name": "minecraft:red_candle", + "id": -427, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_candle_cake", + "id": -444, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_carpet", + "id": -610, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_concrete", + "id": -641, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_concrete_powder", + "id": -722, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_dye", + "id": 422, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_flower", + "id": 769, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_glazed_terracotta", + "id": 234, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_mushroom", + "id": 40, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_mushroom_block", + "id": 100, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_nether_brick", + "id": 215, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_nether_brick_double_slab", + "id": -917, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_nether_brick_slab", + "id": -890, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_nether_brick_stairs", + "id": -184, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_nether_brick_wall", + "id": -983, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_sand", + "id": -949, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_sandstone", + "id": 179, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_sandstone_double_slab", + "id": 181, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_sandstone_slab", + "id": 182, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_sandstone_stairs", + "id": 180, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_sandstone_wall", + "id": -982, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_shulker_box", + "id": -626, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_stained_glass", + "id": -686, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_stained_glass_pane", + "id": -656, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_terracotta", + "id": -737, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_tulip", + "id": -833, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:red_wool", + "id": -556, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:redstone", + "id": 398, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:redstone_block", + "id": 152, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:redstone_lamp", + "id": 123, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:redstone_ore", + "id": 73, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:redstone_torch", + "id": 76, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:redstone_wire", + "id": 55, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:reinforced_deepslate", + "id": -466, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:repeater", + "id": 445, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:repeating_command_block", + "id": 188, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:reserved6", + "id": 255, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:resin_block", + "id": -1021, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:resin_brick", + "id": 748, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:resin_brick_double_slab", + "id": -1015, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:resin_brick_slab", + "id": -1014, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:resin_brick_stairs", + "id": -1016, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:resin_brick_wall", + "id": -1017, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:resin_bricks", + "id": -1013, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:resin_clump", + "id": -1022, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:respawn_anchor", + "id": -272, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:rib_armor_trim_smithing_template", + "id": 727, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:rose_bush", + "id": -866, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:rotten_flesh", + "id": 299, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:saddle", + "id": 396, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:salmon", + "id": 287, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:salmon_bucket", + "id": 390, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:salmon_spawn_egg", + "id": 510, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sand", + "id": 12, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sandstone", + "id": 24, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sandstone_double_slab", + "id": -878, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sandstone_slab", + "id": -872, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sandstone_stairs", + "id": 128, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sandstone_wall", + "id": -975, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sapling", + "id": 765, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:scaffolding", + "id": -165, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:scrape_pottery_sherd", + "id": 711, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sculk", + "id": -458, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sculk_catalyst", + "id": -460, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sculk_sensor", + "id": -307, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sculk_shrieker", + "id": -461, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sculk_vein", + "id": -459, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sea_lantern", + "id": 169, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sea_pickle", + "id": -156, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:seagrass", + "id": -130, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sentry_armor_trim_smithing_template", + "id": 718, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:shaper_armor_trim_smithing_template", + "id": 732, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sheaf_pottery_sherd", + "id": 712, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:shears", + "id": 447, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sheep_spawn_egg", + "id": 465, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:shelter_pottery_sherd", + "id": 713, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:shield", + "id": 380, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:short_grass", + "id": 31, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:shroomlight", + "id": -230, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:shulker_box", + "id": 780, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:shulker_shell", + "id": 599, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:shulker_spawn_egg", + "id": 497, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:silence_armor_trim_smithing_template", + "id": 729, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:silver_glazed_terracotta", + "id": 228, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:silverfish_spawn_egg", + "id": 470, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:skeleton_horse_spawn_egg", + "id": 495, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:skeleton_skull", + "id": 144, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:skeleton_spawn_egg", + "id": 471, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:skull", + "id": 737, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:skull_banner_pattern", + "id": 616, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:skull_pottery_sherd", + "id": 714, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:slime", + "id": 165, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:slime_ball", + "id": 414, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:slime_spawn_egg", + "id": 472, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:small_amethyst_bud", + "id": -332, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:small_dripleaf_block", + "id": -336, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:smithing_table", + "id": -202, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:smoker", + "id": -198, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:smooth_basalt", + "id": -377, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:smooth_quartz", + "id": -955, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:smooth_quartz_double_slab", + "id": -925, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:smooth_quartz_slab", + "id": -898, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:smooth_quartz_stairs", + "id": -185, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:smooth_red_sandstone", + "id": -958, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:smooth_red_sandstone_double_slab", + "id": -918, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:smooth_red_sandstone_slab", + "id": -891, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:smooth_red_sandstone_stairs", + "id": -176, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:smooth_sandstone", + "id": -946, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:smooth_sandstone_double_slab", + "id": -916, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:smooth_sandstone_slab", + "id": -889, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:smooth_sandstone_stairs", + "id": -177, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:smooth_stone", + "id": -183, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:smooth_stone_double_slab", + "id": 43, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:smooth_stone_slab", + "id": 44, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sniffer_egg", + "id": -596, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sniffer_spawn_egg", + "id": 528, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:snort_pottery_sherd", + "id": 715, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:snout_armor_trim_smithing_template", + "id": 726, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:snow", + "id": 80, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:snow_golem_spawn_egg", + "id": 534, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:snow_layer", + "id": 78, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:snowball", + "id": 399, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:soul_campfire", + "id": 659, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:soul_fire", + "id": -237, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:soul_lantern", + "id": -269, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:soul_sand", + "id": 88, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:soul_soil", + "id": -236, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:soul_torch", + "id": -268, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sparkler", + "id": 637, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spawn_egg", + "id": 794, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spider_eye", + "id": 300, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:spider_spawn_egg", + "id": 473, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spire_armor_trim_smithing_template", + "id": 728, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:splash_potion", + "id": 594, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sponge", + "id": 19, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spore_blossom", + "id": -321, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spruce_boat", + "id": 404, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spruce_button", + "id": -144, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spruce_chest_boat", + "id": 678, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spruce_door", + "id": 586, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spruce_double_slab", + "id": -809, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spruce_fence", + "id": -579, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spruce_fence_gate", + "id": 183, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spruce_hanging_sign", + "id": -501, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spruce_leaves", + "id": -800, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spruce_log", + "id": -569, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spruce_planks", + "id": -739, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spruce_pressure_plate", + "id": -154, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spruce_sapling", + "id": -825, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spruce_sign", + "id": 609, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spruce_slab", + "id": -804, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spruce_stairs", + "id": 134, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spruce_standing_sign", + "id": -181, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spruce_trapdoor", + "id": -149, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spruce_wall_sign", + "id": -182, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spruce_wood", + "id": -814, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:spyglass", + "id": 662, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:squid_spawn_egg", + "id": 477, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stained_glass", + "id": 778, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stained_glass_pane", + "id": 779, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stained_hardened_clay", + "id": 738, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:standing_banner", + "id": 176, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:standing_sign", + "id": 63, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stick", + "id": 345, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sticky_piston", + "id": 29, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sticky_piston_arm_collision", + "id": -217, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stone", + "id": 1, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stone_axe", + "id": 339, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stone_block_slab", + "id": 755, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stone_block_slab2", + "id": 756, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stone_block_slab3", + "id": 757, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stone_block_slab4", + "id": 758, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stone_brick_double_slab", + "id": -881, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stone_brick_slab", + "id": -875, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stone_brick_stairs", + "id": 109, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stone_brick_wall", + "id": -977, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stone_bricks", + "id": 98, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stone_button", + "id": 77, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stone_hoe", + "id": 355, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stone_pickaxe", + "id": 338, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stone_pressure_plate", + "id": 70, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stone_shovel", + "id": 337, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stone_stairs", + "id": 67, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stone_sword", + "id": 336, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stonebrick", + "id": 753, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stonecutter", + "id": 245, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stonecutter_block", + "id": -197, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stray_spawn_egg", + "id": 489, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:strider_spawn_egg", + "id": 523, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:string", + "id": 351, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:stripped_acacia_log", + "id": -8, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stripped_acacia_wood", + "id": -823, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stripped_bamboo_block", + "id": -528, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stripped_birch_log", + "id": -6, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stripped_birch_wood", + "id": -821, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stripped_cherry_log", + "id": -535, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stripped_cherry_wood", + "id": -545, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stripped_crimson_hyphae", + "id": -300, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stripped_crimson_stem", + "id": -240, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stripped_dark_oak_log", + "id": -9, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stripped_dark_oak_wood", + "id": -824, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stripped_jungle_log", + "id": -7, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stripped_jungle_wood", + "id": -822, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stripped_mangrove_log", + "id": -485, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stripped_mangrove_wood", + "id": -498, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stripped_oak_log", + "id": -10, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stripped_oak_wood", + "id": -819, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stripped_pale_oak_log", + "id": -994, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stripped_pale_oak_wood", + "id": -1004, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stripped_spruce_log", + "id": -5, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stripped_spruce_wood", + "id": -820, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stripped_warped_hyphae", + "id": -301, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:stripped_warped_stem", + "id": -241, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:structure_block", + "id": 252, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:structure_void", + "id": 217, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sugar", + "id": 442, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:sugar_cane", + "id": 411, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:sunflower", + "id": 175, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:suspicious_gravel", + "id": -573, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:suspicious_sand", + "id": -529, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:suspicious_stew", + "id": 625, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:sweet_berries", + "id": 309, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:sweet_berry_bush", + "id": -207, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tadpole_bucket", + "id": 667, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tadpole_spawn_egg", + "id": 666, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tall_grass", + "id": -864, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tallgrass", + "id": 773, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:target", + "id": -239, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tide_armor_trim_smithing_template", + "id": 725, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tinted_glass", + "id": -334, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tnt", + "id": 46, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tnt_minecart", + "id": 558, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:torch", + "id": 50, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:torchflower", + "id": -568, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:torchflower_crop", + "id": -567, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:torchflower_seeds", + "id": 318, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:totem_of_undying", + "id": 601, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:trader_llama_spawn_egg", + "id": 685, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:trapdoor", + "id": 96, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:trapped_chest", + "id": 146, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:trial_key", + "id": 276, + "version": 1, + "componentBased": true + }, + { + "name": "minecraft:trial_spawner", + "id": -315, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:trident", + "id": 579, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:trip_wire", + "id": 132, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tripwire_hook", + "id": 131, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tropical_fish", + "id": 288, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:tropical_fish_bucket", + "id": 391, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tropical_fish_spawn_egg", + "id": 507, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tube_coral", + "id": -131, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tube_coral_block", + "id": -132, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tube_coral_fan", + "id": -133, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tube_coral_wall_fan", + "id": -135, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tuff", + "id": -333, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tuff_brick_double_slab", + "id": -756, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tuff_brick_slab", + "id": -755, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tuff_brick_stairs", + "id": -757, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tuff_brick_wall", + "id": -758, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tuff_bricks", + "id": -754, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tuff_double_slab", + "id": -745, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tuff_slab", + "id": -744, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tuff_stairs", + "id": -746, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:tuff_wall", + "id": -747, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:turtle_egg", + "id": -159, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:turtle_helmet", + "id": 606, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:turtle_scute", + "id": 605, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:turtle_spawn_egg", + "id": 513, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:twisting_vines", + "id": -287, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:underwater_tnt", + "id": -985, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:underwater_torch", + "id": 239, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:undyed_shulker_box", + "id": 205, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:unknown", + "id": -305, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:unlit_redstone_torch", + "id": 75, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:unpowered_comparator", + "id": 149, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:unpowered_repeater", + "id": 93, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:vault", + "id": -314, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:verdant_froglight", + "id": -470, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:vex_armor_trim_smithing_template", + "id": 724, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:vex_spawn_egg", + "id": 504, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:villager_spawn_egg", + "id": 476, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:vindicator_spawn_egg", + "id": 502, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:vine", + "id": 106, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wall_banner", + "id": 177, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wall_sign", + "id": 68, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wandering_trader_spawn_egg", + "id": 520, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:ward_armor_trim_smithing_template", + "id": 722, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:warden_spawn_egg", + "id": 669, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:warped_button", + "id": -261, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:warped_door", + "id": 654, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:warped_double_slab", + "id": -267, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:warped_fence", + "id": -257, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:warped_fence_gate", + "id": -259, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:warped_fungus", + "id": -229, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:warped_fungus_on_a_stick", + "id": 655, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:warped_hanging_sign", + "id": -507, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:warped_hyphae", + "id": -298, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:warped_nylium", + "id": -233, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:warped_planks", + "id": -243, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:warped_pressure_plate", + "id": -263, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:warped_roots", + "id": -224, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:warped_sign", + "id": 652, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:warped_slab", + "id": -265, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:warped_stairs", + "id": -255, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:warped_standing_sign", + "id": -251, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:warped_stem", + "id": -226, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:warped_trapdoor", + "id": -247, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:warped_wall_sign", + "id": -253, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:warped_wart_block", + "id": -227, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:water", + "id": 9, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:water_bucket", + "id": 387, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waterlily", + "id": 111, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_chiseled_copper", + "id": -764, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_copper", + "id": -344, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_copper_bulb", + "id": -780, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_copper_door", + "id": -788, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_copper_grate", + "id": -772, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_copper_trapdoor", + "id": -796, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_cut_copper", + "id": -351, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_cut_copper_slab", + "id": -365, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_cut_copper_stairs", + "id": -358, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_double_cut_copper_slab", + "id": -372, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_exposed_chiseled_copper", + "id": -765, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_exposed_copper", + "id": -345, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_exposed_copper_bulb", + "id": -781, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_exposed_copper_door", + "id": -789, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_exposed_copper_grate", + "id": -773, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_exposed_copper_trapdoor", + "id": -797, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_exposed_cut_copper", + "id": -352, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_exposed_cut_copper_slab", + "id": -366, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_exposed_cut_copper_stairs", + "id": -359, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_exposed_double_cut_copper_slab", + "id": -373, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_oxidized_chiseled_copper", + "id": -766, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_oxidized_copper", + "id": -446, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_oxidized_copper_bulb", + "id": -783, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_oxidized_copper_door", + "id": -791, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_oxidized_copper_grate", + "id": -775, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_oxidized_copper_trapdoor", + "id": -799, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_oxidized_cut_copper", + "id": -447, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_oxidized_cut_copper_slab", + "id": -449, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_oxidized_cut_copper_stairs", + "id": -448, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_oxidized_double_cut_copper_slab", + "id": -450, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_weathered_chiseled_copper", + "id": -767, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_weathered_copper", + "id": -346, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_weathered_copper_bulb", + "id": -782, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_weathered_copper_door", + "id": -790, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_weathered_copper_grate", + "id": -774, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_weathered_copper_trapdoor", + "id": -798, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_weathered_cut_copper", + "id": -353, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_weathered_cut_copper_slab", + "id": -367, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_weathered_cut_copper_stairs", + "id": -360, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:waxed_weathered_double_cut_copper_slab", + "id": -374, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wayfinder_armor_trim_smithing_template", + "id": 730, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:weathered_chiseled_copper", + "id": -762, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:weathered_copper", + "id": -342, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:weathered_copper_bulb", + "id": -778, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:weathered_copper_door", + "id": -786, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:weathered_copper_grate", + "id": -770, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:weathered_copper_trapdoor", + "id": -794, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:weathered_cut_copper", + "id": -349, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:weathered_cut_copper_slab", + "id": -363, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:weathered_cut_copper_stairs", + "id": -356, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:weathered_double_cut_copper_slab", + "id": -370, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:web", + "id": 30, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:weeping_vines", + "id": -231, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wet_sponge", + "id": -984, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wheat", + "id": 359, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wheat_seeds", + "id": 313, + "version": 0, + "componentBased": false + }, + { + "name": "minecraft:white_bundle", + "id": 272, + "version": 1, + "componentBased": true + }, + { + "name": "minecraft:white_candle", + "id": -413, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:white_candle_cake", + "id": -430, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:white_carpet", + "id": 171, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:white_concrete", + "id": 236, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:white_concrete_powder", + "id": 237, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:white_dye", + "id": 436, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:white_glazed_terracotta", + "id": 220, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:white_shulker_box", + "id": 218, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:white_stained_glass", + "id": 241, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:white_stained_glass_pane", + "id": 160, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:white_terracotta", + "id": 159, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:white_tulip", + "id": -835, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:white_wool", + "id": 35, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wild_armor_trim_smithing_template", + "id": 721, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wind_charge", + "id": 277, + "version": 1, + "componentBased": true + }, + { + "name": "minecraft:witch_spawn_egg", + "id": 479, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wither_rose", + "id": -216, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wither_skeleton_skull", + "id": -965, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wither_skeleton_spawn_egg", + "id": 492, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wither_spawn_egg", + "id": 536, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wolf_armor", + "id": 741, + "version": 2, + "componentBased": true + }, + { + "name": "minecraft:wolf_spawn_egg", + "id": 466, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wood", + "id": 781, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wooden_axe", + "id": 335, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wooden_button", + "id": 143, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wooden_door", + "id": 384, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wooden_hoe", + "id": 354, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wooden_pickaxe", + "id": 334, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wooden_pressure_plate", + "id": 72, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wooden_shovel", + "id": 333, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wooden_slab", + "id": 768, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wooden_sword", + "id": 332, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:wool", + "id": 749, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:writable_book", + "id": 544, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:written_book", + "id": 545, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:yellow_bundle", + "id": 273, + "version": 1, + "componentBased": true + }, + { + "name": "minecraft:yellow_candle", + "id": -417, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:yellow_candle_cake", + "id": -434, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:yellow_carpet", + "id": -600, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:yellow_concrete", + "id": -631, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:yellow_concrete_powder", + "id": -712, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:yellow_dye", + "id": 432, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:yellow_glazed_terracotta", + "id": 224, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:yellow_shulker_box", + "id": -616, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:yellow_stained_glass", + "id": -676, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:yellow_stained_glass_pane", + "id": -646, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:yellow_terracotta", + "id": -727, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:yellow_wool", + "id": -558, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:zoglin_spawn_egg", + "id": 526, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:zombie_head", + "id": -966, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:zombie_horse_spawn_egg", + "id": 496, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:zombie_pigman_spawn_egg", + "id": 475, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:zombie_spawn_egg", + "id": 474, + "version": 2, + "componentBased": false + }, + { + "name": "minecraft:zombie_villager_spawn_egg", + "id": 505, + "version": 2, + "componentBased": false + } +] diff --git a/core/src/main/resources/languages b/core/src/main/resources/languages index 7499daf71..61642604b 160000 --- a/core/src/main/resources/languages +++ b/core/src/main/resources/languages @@ -1 +1 @@ -Subproject commit 7499daf712ad6de70a07fba471b51b4ad92315c5 +Subproject commit 61642604b8af1673f714087837f0c4287bfdc492 diff --git a/core/src/main/resources/mappings b/core/src/main/resources/mappings index 6808d0e16..2281e339f 160000 --- a/core/src/main/resources/mappings +++ b/core/src/main/resources/mappings @@ -1 +1 @@ -Subproject commit 6808d0e16a85e5e569d9d7f89ace59c73196c1f4 +Subproject commit 2281e339fc4aa11d606345f109bd96d4fc6781f8 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2943521e0..4616ab96d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,9 +10,9 @@ netty-io-uring = "0.0.25.Final-SNAPSHOT" guava = "29.0-jre" gson = "2.3.1" # Provided by Spigot 1.8.8 websocket = "1.5.1" -protocol-connection = "3.0.0.Beta5-20241213.160944-20" -protocol-common = "3.0.0.Beta5-20241213.160944-20" -protocol-codec = "3.0.0.Beta5-20241213.160944-20" +protocol-connection = "3.0.0.Beta6-20250203.121006-1" +protocol-common = "3.0.0.Beta6-20250203.121006-1" +protocol-codec = "3.0.0.Beta6-20250203.121006-1" raknet = "1.0.0.CR3-20250128.101054-17" minecraftauth = "4.1.1" mcprotocollib = "1.21.4-20250121.131208-18" From 04586a453296de1dbf3b3f8c5241e0401a622d2c Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Tue, 11 Feb 2025 19:49:23 +0100 Subject: [PATCH 149/165] Update API version to 2.6.1 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index c380ec371..5557e53ca 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,5 +8,5 @@ org.gradle.vfs.watch=false group=org.geysermc id=geyser -version=2.6.0-SNAPSHOT +version=2.6.1-SNAPSHOT description=Allows for players from Minecraft: Bedrock Edition to join Minecraft: Java Edition servers. From bb6ff4ddb9324978dd076a2f928f5910a5b853b9 Mon Sep 17 00:00:00 2001 From: valaphee <32491319+valaphee@users.noreply.github.com> Date: Tue, 11 Feb 2025 23:47:51 +0100 Subject: [PATCH 150/165] Update boss event packet serializer in codec processor --- .../geyser/network/CodecProcessor.java | 37 ++++++++++++------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java b/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java index b3f3af5ff..f2ed792c7 100644 --- a/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java +++ b/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java @@ -29,7 +29,6 @@ import io.netty.buffer.ByteBuf; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; -import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.MobArmorEquipmentSerializer_v291; import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.MobEquipmentSerializer_v291; import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.MoveEntityAbsoluteSerializer_v291; import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.PlayerHotbarSerializer_v291; @@ -42,6 +41,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v662.serializer.SetEntityMotionSe import org.cloudburstmc.protocol.bedrock.codec.v712.serializer.MobArmorEquipmentSerializer_v712; import org.cloudburstmc.protocol.bedrock.codec.v748.serializer.InventoryContentSerializer_v748; import org.cloudburstmc.protocol.bedrock.codec.v748.serializer.InventorySlotSerializer_v748; +import org.cloudburstmc.protocol.bedrock.codec.v776.serializer.BossEventSerializer_v776; import org.cloudburstmc.protocol.bedrock.packet.AnvilDamagePacket; import org.cloudburstmc.protocol.bedrock.packet.BedrockPacket; import org.cloudburstmc.protocol.bedrock.packet.BossEventPacket; @@ -87,6 +87,8 @@ import org.cloudburstmc.protocol.common.util.VarInts; /** * Processes the Bedrock codec to remove or modify unused or unsafe packets and fields. + * + * TODO: Keep serializers up-to-date! */ @SuppressWarnings("deprecation") class CodecProcessor { @@ -157,7 +159,16 @@ class CodecProcessor { /** * Serializer that does nothing when trying to deserialize BossEventPacket since it is not used from the client. */ - private static final BedrockPacketSerializer<BossEventPacket> BOSS_EVENT_SERIALIZER = new BossEventSerializer_v486() { + private static final BedrockPacketSerializer<BossEventPacket> BOSS_EVENT_SERIALIZER_486 = new BossEventSerializer_v486() { + @Override + public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, BossEventPacket packet) { + } + }; + + /** + * Serializer that does nothing when trying to deserialize BossEventPacket since it is not used from the client. + */ + private static final BedrockPacketSerializer<BossEventPacket> BOSS_EVENT_SERIALIZER_776 = new BossEventSerializer_v776() { @Override public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, BossEventPacket packet) { } @@ -166,16 +177,7 @@ class CodecProcessor { /** * Serializer that does nothing when trying to deserialize MobArmorEquipmentPacket since it is not used from the client. */ - private static final BedrockPacketSerializer<MobArmorEquipmentPacket> MOB_ARMOR_EQUIPMENT_SERIALIZER_V291 = new MobArmorEquipmentSerializer_v291() { - @Override - public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, MobArmorEquipmentPacket packet) { - } - }; - - /** - * Serializer that does nothing when trying to deserialize MobArmorEquipmentPacket since it is not used from the client. - */ - private static final BedrockPacketSerializer<MobArmorEquipmentPacket> MOB_ARMOR_EQUIPMENT_SERIALIZER_V712 = new MobArmorEquipmentSerializer_v712() { + private static final BedrockPacketSerializer<MobArmorEquipmentPacket> MOB_ARMOR_EQUIPMENT_SERIALIZER = new MobArmorEquipmentSerializer_v712() { @Override public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, MobArmorEquipmentPacket packet) { } @@ -242,6 +244,13 @@ class CodecProcessor { @SuppressWarnings("unchecked") static BedrockCodec processCodec(BedrockCodec codec) { + BedrockPacketSerializer<BossEventPacket> bossEventSerializer; + if (codec.getProtocolVersion() >= 776) { + bossEventSerializer = BOSS_EVENT_SERIALIZER_776; + } else { + bossEventSerializer = BOSS_EVENT_SERIALIZER_486; + } + BedrockCodec.Builder codecBuilder = codec.toBuilder() // Illegal unused serverbound EDU packets .updateSerializer(PhotoTransferPacket.class, ILLEGAL_SERIALIZER) @@ -276,8 +285,8 @@ class CodecProcessor { .updateSerializer(RiderJumpPacket.class, ILLEGAL_SERIALIZER) .updateSerializer(PlayerInputPacket.class, ILLEGAL_SERIALIZER) // Ignored only when serverbound - .updateSerializer(BossEventPacket.class, BOSS_EVENT_SERIALIZER) - .updateSerializer(MobArmorEquipmentPacket.class, MOB_ARMOR_EQUIPMENT_SERIALIZER_V712) + .updateSerializer(BossEventPacket.class, bossEventSerializer) + .updateSerializer(MobArmorEquipmentPacket.class, MOB_ARMOR_EQUIPMENT_SERIALIZER) .updateSerializer(PlayerHotbarPacket.class, PLAYER_HOTBAR_SERIALIZER) .updateSerializer(PlayerSkinPacket.class, PLAYER_SKIN_SERIALIZER) .updateSerializer(SetEntityDataPacket.class, SET_ENTITY_DATA_SERIALIZER) From 6c59a821c97d91befd03e2868ccaedb061f87099 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Wed, 12 Feb 2025 14:57:26 +0100 Subject: [PATCH 151/165] Fix eating animations not showing --- .../CustomItemRegistryPopulator.java | 5 +++-- .../DataComponentRegistryPopulator.java | 3 +++ .../populator/ItemRegistryPopulator.java | 19 +++++++++--------- .../resources/bedrock/item_components.nbt | Bin 12649 -> 14202 bytes gradle/libs.versions.toml | 6 +++--- 5 files changed, 18 insertions(+), 15 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 cd19ab147..d1cec3231 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 @@ -33,6 +33,7 @@ import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.SimpleItemDefinition; +import org.cloudburstmc.protocol.bedrock.data.inventory.ItemVersion; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.api.item.custom.CustomRenderOffsets; @@ -106,7 +107,7 @@ public class CustomItemRegistryPopulator { public static GeyserCustomMappingData registerCustomItem(String customItemName, Item javaItem, GeyserMappingItem mapping, CustomItemData customItemData, int bedrockId, int protocolVersion) { NbtMapBuilder builder = createComponentNbt(customItemData, javaItem, mapping, customItemName, bedrockId, protocolVersion); - ItemDefinition itemDefinition = new SimpleItemDefinition(customItemName, bedrockId, 1, true, builder.build()); + ItemDefinition itemDefinition = new SimpleItemDefinition(customItemName, bedrockId, ItemVersion.DATA_DRIVEN, true, builder.build()); return new GeyserCustomMappingData(itemDefinition, customItemName, bedrockId); } @@ -143,7 +144,7 @@ public class CustomItemRegistryPopulator { customItemData.isHat(), customItemData.displayHandheld(), protocolVersion); ItemMapping customItemMapping = ItemMapping.builder() .bedrockIdentifier(customIdentifier) - .bedrockDefinition(new SimpleItemDefinition(customIdentifier, customItemId, 1, true, builder.build())) + .bedrockDefinition(new SimpleItemDefinition(customIdentifier, customItemId, ItemVersion.DATA_DRIVEN, true, builder.build())) .bedrockData(0) .bedrockBlockDefinition(null) .toolType(customItemData.toolType()) diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java index 742564a39..829e8719e 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java @@ -48,6 +48,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +/** + * Loads default item components for all Java items. + */ public final class DataComponentRegistryPopulator { public static void populate() { 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 6e269b5a3..08f3226f9 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 @@ -54,6 +54,7 @@ import org.cloudburstmc.protocol.bedrock.data.definitions.SimpleItemDefinition; import org.cloudburstmc.protocol.bedrock.data.inventory.CreativeItemData; import org.cloudburstmc.protocol.bedrock.data.inventory.CreativeItemGroup; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; +import org.cloudburstmc.protocol.bedrock.data.inventory.ItemVersion; import org.geysermc.geyser.Constants; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; @@ -212,15 +213,13 @@ public class ItemRegistryPopulator { nextFreeBedrockId = id + 1; } - NbtMap components = null; - if (entry.isComponentBased()) { - components = vanillaComponents.getCompound(entry.getName()); - if (components == null) { - throw new RuntimeException("Could not find vanilla components for vanilla component based item! " + entry.getName()); - } + // Some items, e.g. food, are not component based but still have components + NbtMap components = vanillaComponents.getCompound(entry.getName()); + if (components == null && entry.isComponentBased()) { + throw new RuntimeException("Could not find vanilla components for vanilla component based item! " + entry.getName()); } - ItemDefinition definition = new SimpleItemDefinition(entry.getName().intern(), id, entry.getVersion(), entry.isComponentBased(), components); + ItemDefinition definition = new SimpleItemDefinition(entry.getName().intern(), id, ItemVersion.from(entry.getVersion()), entry.isComponentBased(), components); definitions.put(entry.getName(), definition); registry.put(definition.getRuntimeId(), definition); } @@ -453,7 +452,7 @@ public class ItemRegistryPopulator { int customProtocolId = nextFreeBedrockId++; mappingItem = mappingItem.withBedrockData(customProtocolId); bedrockIdentifier = customBlockData.identifier(); - definition = new SimpleItemDefinition(bedrockIdentifier, customProtocolId, 1, false, null); + definition = new SimpleItemDefinition(bedrockIdentifier, customProtocolId, ItemVersion.DATA_DRIVEN, true, NbtMap.EMPTY); registry.put(customProtocolId, definition); customBlockItemDefinitions.put(customBlockData, definition); customIdMappings.put(customProtocolId, bedrockIdentifier); @@ -593,7 +592,7 @@ public class ItemRegistryPopulator { if (customItemsAllowed) { // Add furnace minecart int furnaceMinecartId = nextFreeBedrockId++; - ItemDefinition definition = new SimpleItemDefinition("geysermc:furnace_minecart", furnaceMinecartId, 1, true, registerFurnaceMinecart(furnaceMinecartId)); + ItemDefinition definition = new SimpleItemDefinition("geysermc:furnace_minecart", furnaceMinecartId, ItemVersion.DATA_DRIVEN, true, registerFurnaceMinecart(furnaceMinecartId)); definitions.put("geysermc:furnace_minecart", definition); registry.put(definition.getRuntimeId(), definition); componentItemData.add(definition); @@ -667,7 +666,7 @@ public class ItemRegistryPopulator { String identifier = customBlock.identifier(); // TODO verify - final ItemDefinition definition = new SimpleItemDefinition(identifier, customProtocolId, 1, false, null); + final ItemDefinition definition = new SimpleItemDefinition(identifier, customProtocolId, ItemVersion.DATA_DRIVEN, false, null); registry.put(customProtocolId, definition); customBlockItemDefinitions.put(customBlock, definition); customIdMappings.put(customProtocolId, identifier); diff --git a/core/src/main/resources/bedrock/item_components.nbt b/core/src/main/resources/bedrock/item_components.nbt index 34d2ac7f0ca1bf5fafda5891c7666b562aa6922f..b34ebf881463170f79c3bde3343aa0761bc4d1e7 100644 GIT binary patch literal 14202 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 Qsx6BD4=*hhLlr^+0K4I!UjP6A literal 12649 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 Xkr#9y(Pfc{?&ALgn8T(o6b}Ia*2(6l diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4616ab96d..1d993bf60 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,9 +10,9 @@ netty-io-uring = "0.0.25.Final-SNAPSHOT" guava = "29.0-jre" gson = "2.3.1" # Provided by Spigot 1.8.8 websocket = "1.5.1" -protocol-connection = "3.0.0.Beta6-20250203.121006-1" -protocol-common = "3.0.0.Beta6-20250203.121006-1" -protocol-codec = "3.0.0.Beta6-20250203.121006-1" +protocol-connection = "3.0.0.Beta6-20250212.131009-3" +protocol-common = "3.0.0.Beta6-20250212.131009-3" +protocol-codec = "3.0.0.Beta6-20250212.131009-3" raknet = "1.0.0.CR3-20250128.101054-17" minecraftauth = "4.1.1" mcprotocollib = "1.21.4-20250121.131208-18" From 4d36524d05aec6637eeb5d20a6246e6ca7500cf8 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Wed, 12 Feb 2025 15:21:47 +0100 Subject: [PATCH 152/165] Fix https://github.com/GeyserMC/Geyser/issues/5280, update supported Bedrock version in the README.md The "tracking" property seems to only be used server-side, so we should not rely on it client-side --- README.md | 2 +- .../geysermc/geyser/session/cache/LodestoneCache.java | 11 +---------- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 9f5c9d8d5..57aaaf6fe 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,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! ## Supported Versions -Geyser is currently supporting Minecraft Bedrock 1.21.40 - 1.21.50 and Minecraft Java 1.21.4. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). +Geyser is currently supporting Minecraft Bedrock 1.21.40 - 1.21.60 and Minecraft Java 1.21.4. For more information, please see [here](https://geysermc.org/wiki/geyser/supported-versions/). ## Setting Up Take a look [here](https://geysermc.org/wiki/geyser/setup/) for how to set up Geyser. 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 ee8ebb13f..98aace480 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 @@ -53,13 +53,8 @@ public final class LodestoneCache { private int id = 1; public void cacheInventoryItem(GeyserItemStack itemStack, LodestoneTracker tracker) { - if (!tracker.isTracked()) { - return; - } - GlobalPos position = tracker.getPos(); if (position == null) { - // As of 1.20.6, position can still be null even if tracking is enabled. return; } int x = position.getX(); @@ -86,13 +81,9 @@ public final class LodestoneCache { } public int store(LodestoneTracker tracker) { - if (!tracker.isTracked()) { - // No coordinates; nothing to convert - return 0; - } - GlobalPos position = tracker.getPos(); if (position == null) { + // No coordinates; nothing to convert return 0; } From b0bf867581a45ca6c337120bab18702c3b9886b9 Mon Sep 17 00:00:00 2001 From: Eclipse <eclipse@eclipseisoffline.xyz> Date: Wed, 12 Feb 2025 15:32:55 +0000 Subject: [PATCH 153/165] Add basic support for the 1.21.2 minecart experiment (#5134) * Add simple translator for move minecart packet * Cleanup code * This could be cleaned up even more * Implement minecart lerping * Use ClientboundUpdateEnabledFeaturesPacket to set experimental minecart behavior * Move experiment checking to a per-session check --------- Co-authored-by: onebeastchris <github@onechris.mozmail.com> --- .../geyser/entity/type/MinecartEntity.java | 162 +++++++++++++++++- .../geyser/session/GeyserSession.java | 6 + .../java/JavaUpdateEnabledFeaturesPacket.java | 45 +++++ .../entity/JavaMoveMinecartTranslator.java | 47 +++++ 4 files changed, 259 insertions(+), 1 deletion(-) create mode 100644 core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateEnabledFeaturesPacket.java create mode 100644 core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveMinecartTranslator.java diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/MinecartEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/MinecartEntity.java index 9096d8bd6..6faecb389 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/MinecartEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/MinecartEntity.java @@ -25,20 +25,40 @@ package org.geysermc.geyser.entity.type; +import org.cloudburstmc.math.vector.Vector3d; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; +import org.cloudburstmc.protocol.bedrock.packet.MoveEntityDeltaPacket; +import org.cloudburstmc.protocol.bedrock.packet.SetEntityMotionPacket; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; +import org.geysermc.geyser.util.MathUtils; +import org.geysermc.mcprotocollib.protocol.data.game.entity.MinecartStep; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.ClientboundMoveMinecartPacket; +import java.util.LinkedList; +import java.util.List; import java.util.UUID; -public class MinecartEntity extends Entity { +public class MinecartEntity extends Entity implements Tickable { + private static final int POS_ROT_LERP_TICKS = 3; + + private final List<MinecartStep> lerpSteps = new LinkedList<>(); + private final List<MinecartStep> currentLerpSteps = new LinkedList<>(); + + private MinecartStep lastCompletedStep = new MinecartStep(Vector3d.ZERO, Vector3d. ZERO, 0.0F, 0.0F, 0.0F); + private float currentStepsTotalWeight = 0.0F; + private int lerpDelay = 0; + + private PartialStep cachedPartialStep; + private int cachedStepDelay; + private float cachedDelta; public MinecartEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) { super(session, entityId, geyserId, uuid, definition, position.add(0d, definition.offset(), 0d), motion, yaw, pitch, headYaw); @@ -58,6 +78,131 @@ public class MinecartEntity extends Entity { dirtyMetadata.put(EntityDataTypes.CUSTOM_DISPLAY, (byte) (entityMetadata.getPrimitiveValue() ? 1 : 0)); } + @Override + public void tick() { + if (!session.isUsingExperimentalMinecartLogic()) { + return; + } + + // All minecart lerp code here and in the methods below has been based off of the code in the Java NewMinecartBehavior class + lerpDelay--; + if (lerpDelay <= 0) { + updateCompletedStep(); + currentLerpSteps.clear(); + if (!lerpSteps.isEmpty()) { + currentLerpSteps.addAll(lerpSteps); + lerpSteps.clear(); + currentStepsTotalWeight = 0.0F; + + for (MinecartStep step : currentLerpSteps) { + currentStepsTotalWeight += step.weight(); + } + + lerpDelay = currentStepsTotalWeight == 0.0F ? 0 : POS_ROT_LERP_TICKS; + } + } + + if (isLerping()) { + float delta = 1.0F; // This is always 1, maybe it should be removed + + Vector3f position = getCurrentLerpPosition(delta).toFloat(); + Vector3f movement = getCurrentLerpMovement(delta).toFloat(); + setPosition(position); + setMotion(movement); + + setYaw(180.0F - getCurrentLerpYaw(delta)); + setPitch(getCurrentLerpPitch(delta)); + + MoveEntityDeltaPacket moveEntityPacket = new MoveEntityDeltaPacket(); + moveEntityPacket.setRuntimeEntityId(geyserId); + + moveEntityPacket.setX(position.getX()); + moveEntityPacket.setY(position.getY() + definition.offset()); + moveEntityPacket.setZ(position.getZ()); + moveEntityPacket.getFlags().add(MoveEntityDeltaPacket.Flag.HAS_X); + moveEntityPacket.getFlags().add(MoveEntityDeltaPacket.Flag.HAS_Y); + moveEntityPacket.getFlags().add(MoveEntityDeltaPacket.Flag.HAS_Z); + + moveEntityPacket.setYaw(getYaw()); + moveEntityPacket.setPitch(getPitch()); + moveEntityPacket.getFlags().add(MoveEntityDeltaPacket.Flag.HAS_YAW); + moveEntityPacket.getFlags().add(MoveEntityDeltaPacket.Flag.HAS_PITCH); + + SetEntityMotionPacket entityMotionPacket = new SetEntityMotionPacket(); + entityMotionPacket.setRuntimeEntityId(geyserId); + entityMotionPacket.setMotion(movement); + + session.sendUpstreamPacket(moveEntityPacket); + session.sendUpstreamPacket(entityMotionPacket); + } + } + + public void handleMinecartMovePacket(ClientboundMoveMinecartPacket packet) { + lerpSteps.addAll(packet.getLerpSteps()); + } + + private boolean isLerping() { + return !currentLerpSteps.isEmpty(); + } + + private float getCurrentLerpPitch(float delta) { + PartialStep partialStep = getCurrentLerpStep(delta); + return lerpRotation(partialStep.delta, partialStep.previousStep.xRot(), partialStep.currentStep.xRot()); + } + + private float getCurrentLerpYaw(float delta) { + PartialStep partialStep = getCurrentLerpStep(delta); + return lerpRotation(partialStep.delta, partialStep.previousStep.yRot(), partialStep.currentStep.yRot()); + } + + private Vector3d getCurrentLerpPosition(float delta) { + PartialStep partialStep = getCurrentLerpStep(delta); + return lerp(partialStep.delta, partialStep.previousStep.position(), partialStep.currentStep.position()); + } + + private Vector3d getCurrentLerpMovement(float delta) { + PartialStep partialStep = getCurrentLerpStep(delta); + return lerp(partialStep.delta, partialStep.previousStep.movement(), partialStep.currentStep.movement()); + } + + private PartialStep getCurrentLerpStep(float delta) { + if (cachedDelta != delta || lerpDelay != cachedStepDelay || cachedPartialStep == null) { + float g = ((POS_ROT_LERP_TICKS - lerpDelay) + delta) / POS_ROT_LERP_TICKS; + float totalWeight = 0.0F; + float stepDelta = 1.0F; + boolean foundStep = false; + + int step; + for (step = 0; step < currentLerpSteps.size(); step++) { + float currentWeight = currentLerpSteps.get(step).weight(); + if (!(currentWeight <= 0.0F)) { + totalWeight += currentWeight; + if ((double) totalWeight >= currentStepsTotalWeight * (double) g) { + float h = totalWeight - currentWeight; + stepDelta = (g * currentStepsTotalWeight - h) / currentWeight; + foundStep = true; + break; + } + } + } + + if (!foundStep) { + step = currentLerpSteps.size() - 1; + } + + MinecartStep currentStep = currentLerpSteps.get(step); + MinecartStep previousStep = step > 0 ? currentLerpSteps.get(step - 1) : lastCompletedStep; + cachedPartialStep = new PartialStep(stepDelta, currentStep, previousStep); + cachedStepDelay = lerpDelay; + cachedDelta = delta; + } + return cachedPartialStep; + } + + private void updateCompletedStep() { + lastCompletedStep = new MinecartStep(position.toDouble(), motion.toDouble(), yaw, pitch, 0.0F); + } + @Override public void moveAbsolute(Vector3f position, float yaw, float pitch, float headYaw, boolean isOnGround, boolean teleported) { super.moveAbsolute(position.add(0d, this.definition.offset(), 0d), yaw, pitch, headYaw, isOnGround, teleported); @@ -103,4 +248,19 @@ public class MinecartEntity extends Entity { } } } + + private static Vector3d lerp(double delta, Vector3d start, Vector3d end) { + return Vector3d.from(lerp(delta, start.getX(), end.getX()), lerp(delta, start.getY(), end.getY()), lerp(delta, start.getZ(), end.getZ())); + } + + public static double lerp(double delta, double start, double end) { + return start + delta * (end - start); + } + + private static float lerpRotation(float delta, float start, float end) { + return start + delta * MathUtils.wrapDegrees(end - start); + } + + private record PartialStep(float delta, MinecartStep currentStep, MinecartStep previousStep) { + } } 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 14a7f42a9..f9802fe52 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -477,6 +477,12 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { @Setter private boolean oldSmithingTable = false; + /** + * Whether to use the minecart_improvements experiment + */ + @Setter + private boolean isUsingExperimentalMinecartLogic = false; + /** * The current attack speed of the player. Used for sending proper cooldown timings. * Setting a default fixes cooldowns not showing up on a fresh world. diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateEnabledFeaturesPacket.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateEnabledFeaturesPacket.java new file mode 100644 index 000000000..15ea7c684 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateEnabledFeaturesPacket.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2025 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 net.kyori.adventure.key.Key; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.protocol.PacketTranslator; +import org.geysermc.geyser.translator.protocol.Translator; +import org.geysermc.mcprotocollib.protocol.packet.configuration.clientbound.ClientboundUpdateEnabledFeaturesPacket; + +import java.util.Arrays; + +@Translator(packet = ClientboundUpdateEnabledFeaturesPacket.class) +public class JavaUpdateEnabledFeaturesPacket extends PacketTranslator<ClientboundUpdateEnabledFeaturesPacket> { + + private final static Key MINECART_EXPERIMENT = Key.key("minecart_improvements"); + + @Override + public void translate(GeyserSession session, ClientboundUpdateEnabledFeaturesPacket packet) { + session.setUsingExperimentalMinecartLogic(Arrays.asList(packet.getFeatures()).contains(MINECART_EXPERIMENT)); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveMinecartTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveMinecartTranslator.java new file mode 100644 index 000000000..dc004ffba --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveMinecartTranslator.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 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.translator.protocol.java.entity; + +import org.geysermc.geyser.entity.type.Entity; +import org.geysermc.geyser.entity.type.MinecartEntity; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.protocol.PacketTranslator; +import org.geysermc.geyser.translator.protocol.Translator; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.ClientboundMoveMinecartPacket; + +@Translator(packet = ClientboundMoveMinecartPacket.class) +public class JavaMoveMinecartTranslator extends PacketTranslator<ClientboundMoveMinecartPacket> { + + @Override + public void translate(GeyserSession session, ClientboundMoveMinecartPacket packet) { + if (!packet.getLerpSteps().isEmpty()) { + Entity entity = session.getEntityCache().getEntityByJavaId(packet.getEntityId()); + if (entity instanceof MinecartEntity minecart) { + minecart.handleMinecartMovePacket(packet); + } + } + } +} From d5b5712e60107175ccaed7fab21deca09c0f15cf Mon Sep 17 00:00:00 2001 From: chris <github@onechris.mozmail.com> Date: Wed, 12 Feb 2025 20:40:05 +0100 Subject: [PATCH 154/165] Fix custom skulls (#5338) --- .../geyser/item/components/Rarity.java | 4 +-- .../org/geysermc/geyser/item/type/Item.java | 5 --- .../geyser/item/type/PlayerHeadItem.java | 36 +++++++++---------- .../populator/ItemRegistryPopulator.java | 7 ++-- .../geyser/session/cache/SkullCache.java | 2 -- .../translator/item/ItemTranslator.java | 3 +- 6 files changed, 23 insertions(+), 34 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/item/components/Rarity.java b/core/src/main/java/org/geysermc/geyser/item/components/Rarity.java index 6fa74ea35..437fc5391 100644 --- a/core/src/main/java/org/geysermc/geyser/item/components/Rarity.java +++ b/core/src/main/java/org/geysermc/geyser/item/components/Rarity.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.item.components; import lombok.Getter; +import org.checkerframework.checker.nullness.qual.NonNull; @Getter public enum Rarity { @@ -44,8 +45,7 @@ public enum Rarity { private static final Rarity[] VALUES = values(); - public static Rarity fromId(int id) { + public static @NonNull Rarity fromId(Integer id) { return VALUES.length > id ? VALUES[id] : VALUES[0]; } - } 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 738d57788..056e8b48a 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 @@ -37,7 +37,6 @@ import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.item.BedrockEnchantment; import org.geysermc.geyser.item.Items; -import org.geysermc.geyser.item.components.Rarity; import org.geysermc.geyser.item.enchantment.Enchantment; import org.geysermc.geyser.level.block.type.Block; import org.geysermc.geyser.registry.Registries; @@ -95,10 +94,6 @@ public class Item { return baseComponents.getOrDefault(DataComponentType.MAX_STACK_SIZE, 1); } - public Rarity defaultRarity() { - return Rarity.fromId(baseComponents.getOrDefault(DataComponentType.RARITY, 0)); - } - /** * Returns an unmodifiable {@link DataComponents} view containing known data components. * Optionally, additional components can be provided to replace (or add to) diff --git a/core/src/main/java/org/geysermc/geyser/item/type/PlayerHeadItem.java b/core/src/main/java/org/geysermc/geyser/item/type/PlayerHeadItem.java index d4999c80d..003aa0a73 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/PlayerHeadItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/PlayerHeadItem.java @@ -25,13 +25,14 @@ package org.geysermc.geyser.item.type; -import org.geysermc.mcprotocollib.auth.GameProfile; import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.item.components.Rarity; import org.geysermc.geyser.level.block.type.Block; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.ChatColor; import org.geysermc.geyser.text.MinecraftLocale; import org.geysermc.geyser.translator.item.BedrockItemBuilder; +import org.geysermc.mcprotocollib.auth.GameProfile; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; @@ -44,24 +45,21 @@ public class PlayerHeadItem extends BlockItem { public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNull DataComponents components, @NonNull BedrockItemBuilder builder) { super.translateComponentsToBedrock(session, components, builder); - // TODO verify - // Also - ChatColor.YELLOW + ChatColor.ITALIC + MessageTranslator.convertMessageLenient(nameTag.getValue(), session.locale())) this code existed if a custom name was already present. - // But I think we would always overwrite that because translateDisplayProperties runs after this method. - String customName = builder.getCustomName(); - if (customName == null) { - GameProfile profile = components.get(DataComponentType.PROFILE); - if (profile != null) { - String name = profile.getName(); - if (name != null) { - // Add correct name of player skull - String displayName = ChatColor.RESET + ChatColor.YELLOW + - MinecraftLocale.getLocaleString("block.minecraft.player_head.named", session.locale()).replace("%s", name); - builder.setCustomName(displayName); - } else { - // No name found so default to "Player Head" - builder.setCustomName(ChatColor.RESET + ChatColor.YELLOW + - MinecraftLocale.getLocaleString("block.minecraft.player_head", session.locale())); - } + // Use the correct color, determined by the rarity of the item + char rarity = Rarity.fromId(components.get(DataComponentType.RARITY)).getColor(); + + GameProfile profile = components.get(DataComponentType.PROFILE); + if (profile != null) { + String name = profile.getName(); + if (name != null) { + // Add correct name of player skull + String displayName = ChatColor.RESET + ChatColor.ESCAPE + rarity + + MinecraftLocale.getLocaleString("block.minecraft.player_head.named", session.locale()).replace("%s", name); + builder.setCustomName(displayName); + } else { + // No name found so default to "Player Head" + builder.setCustomName(ChatColor.RESET + ChatColor.ESCAPE + rarity + + MinecraftLocale.getLocaleString("block.minecraft.player_head", session.locale())); } } } 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 08f3226f9..c0c006549 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 @@ -67,7 +67,6 @@ import org.geysermc.geyser.api.item.custom.NonVanillaCustomItemData; import org.geysermc.geyser.inventory.item.StoredItemMappings; import org.geysermc.geyser.item.GeyserCustomMappingData; import org.geysermc.geyser.item.Items; -import org.geysermc.geyser.item.components.Rarity; import org.geysermc.geyser.item.type.BlockItem; import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.level.block.property.Properties; @@ -491,9 +490,8 @@ public class ItemRegistryPopulator { mappingBuilder = mappingBuilder.toolType(mappingItem.getToolType().intern()); } - if (javaOnlyItems.contains(javaItem) || javaItem.defaultRarity() != Rarity.COMMON) { + if (javaOnlyItems.contains(javaItem)) { // These items don't exist on Bedrock, so set up a variable that indicates they should have custom names - // Or, ensure that we are translating these at all times to account for rarity colouring mappingBuilder = mappingBuilder.translationString((javaItem instanceof BlockItem ? "block." : "item.") + entry.getKey().replace(":", ".")); GeyserImpl.getInstance().getLogger().debug("Adding " + entry.getKey() + " as an item that needs to be translated."); } @@ -665,8 +663,7 @@ public class ItemRegistryPopulator { int customProtocolId = nextFreeBedrockId++; String identifier = customBlock.identifier(); - // TODO verify - final ItemDefinition definition = new SimpleItemDefinition(identifier, customProtocolId, ItemVersion.DATA_DRIVEN, false, null); + final ItemDefinition definition = new SimpleItemDefinition(identifier, customProtocolId, ItemVersion.NONE, false, null); registry.put(customProtocolId, definition); customBlockItemDefinitions.put(customBlock, definition); customIdMappings.put(customProtocolId, identifier); 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 a3cf1247f..08f73a381 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 @@ -64,8 +64,6 @@ public class SkullCache { private Vector3f lastPlayerPosition; - private long lastCleanup = System.currentTimeMillis(); - public SkullCache(GeyserSession session) { this.session = session; this.maxVisibleSkulls = session.getGeyser().getConfig().getMaxVisibleCustomSkulls(); diff --git a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java index 3f9bf7446..a41c4ee84 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java @@ -174,7 +174,7 @@ public final class ItemTranslator { // Translate item-specific components javaItem.translateComponentsToBedrock(session, components, nbtBuilder); - Rarity rarity = Rarity.fromId(components.getOrDefault(DataComponentType.RARITY, 0)); + Rarity rarity = Rarity.fromId(components.get(DataComponentType.RARITY)); String customName = getCustomName(session, customComponents, bedrockItem, rarity.getColor(), false, false); if (customName != null) { PotionContents potionContents = components.get(DataComponentType.POTION_CONTENTS); @@ -611,6 +611,7 @@ public final class ItemTranslator { } if (textures == null || textures.isEmpty()) { + // TODO the java client looks up the texture properties here and updates the item return null; } From 3e6172642d4e894c4b76414ddd6228ee5497fe97 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Sun, 16 Feb 2025 16:58:44 +0100 Subject: [PATCH 155/165] Update MCPL, resolves issues with the ClientboundPlayerInfoUpdatePacket --- .../java/org/geysermc/geyser/session/GeyserSessionAdapter.java | 2 +- gradle/libs.versions.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSessionAdapter.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSessionAdapter.java index 9e17e9cd3..812456644 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSessionAdapter.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSessionAdapter.java @@ -232,7 +232,7 @@ public class GeyserSessionAdapter extends SessionAdapter { @Override public void packetError(PacketErrorEvent event) { geyser.getLogger().warning(GeyserLocale.getLocaleStringLog("geyser.network.downstream_error", - (event.getPacketClass() != null ? "(" + event.getPacketClass().getSimpleName() + ")" : "") + + (event.getPacketClass() != null ? "(" + event.getPacketClass().getSimpleName() + ") " : "") + event.getCause().getMessage()) ); if (geyser.getConfig().isDebugMode()) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1d993bf60..c4fc04bf7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,7 @@ protocol-common = "3.0.0.Beta6-20250212.131009-3" protocol-codec = "3.0.0.Beta6-20250212.131009-3" raknet = "1.0.0.CR3-20250128.101054-17" minecraftauth = "4.1.1" -mcprotocollib = "1.21.4-20250121.131208-18" +mcprotocollib = "1.21.4-20250216.154737-20" adventure = "4.14.0" adventure-platform = "4.3.0" junit = "5.9.2" From ecc10d656093d03720b708498741b29729d324e8 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Sun, 16 Feb 2025 15:18:55 -0500 Subject: [PATCH 156/165] Update direct connection/compression disabler for newest BungeeCord Fixes #5348 --- .../GeyserBungeeCompressionDisabler.java | 6 ++++-- .../platform/bungeecord/GeyserBungeeInjector.java | 10 +++++++++- .../bungeecord/GeyserBungeePingPassthrough.java | 15 +++++++++++++++ 3 files changed, 28 insertions(+), 3 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 485079a05..23ab36363 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 @@ -28,6 +28,7 @@ package org.geysermc.geyser.platform.bungeecord; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelPromise; +import net.md_5.bungee.netty.LengthPrependerAndCompressor; import net.md_5.bungee.protocol.packet.LoginSuccess; import net.md_5.bungee.protocol.packet.SetCompression; @@ -40,8 +41,9 @@ public class GeyserBungeeCompressionDisabler extends ChannelOutboundHandlerAdapt // 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"); + LengthPrependerAndCompressor compressor = ctx.pipeline().get(LengthPrependerAndCompressor.class); + if (compressor.isCompress()) { + compressor.setCompress(false); compressionDisabled = true; } if (ctx.pipeline().get("decompress") != null) { 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 7c60ba95d..459bde3af 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 @@ -73,6 +73,14 @@ public class GeyserBungeeInjector extends GeyserInjector implements Listener { throw new UnsupportedOperationException("Geyser does not currently support multiple listeners with injection! " + "Please reach out to us on our Discord at https://discord.gg/GeyserMC so we can hear feedback on your setup."); } + + // TODO remove + try { + ProxyServer.class.getMethod("unsafe"); + } catch (NoSuchMethodException e) { + throw new UnsupportedOperationException("You're using an outdated version of BungeeCord - please update. Thank you!"); + } + ListenerInfo listenerInfo = proxy.getConfig().getListeners().stream().findFirst().orElseThrow(IllegalStateException::new); Class<? extends ProxyServer> proxyClass = proxy.getClass(); @@ -138,7 +146,7 @@ public class GeyserBungeeInjector extends GeyserInjector implements Listener { if (channelInitializer == null) { // Proxy has finished initializing; we can safely grab this variable without fear of plugins modifying it // (Older versions of ViaVersion replace this to inject) - channelInitializer = PipelineUtils.SERVER_CHILD; + channelInitializer = proxy.unsafe().getFrontendChannelInitializer().getChannelInitializer(); } initChannel.invoke(channelInitializer, ch); 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 1193a52b3..472c5f10a 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 @@ -186,6 +186,21 @@ public class GeyserBungeePingPassthrough implements IGeyserPingPassthrough, List return false; } + @Override + public boolean isTransferred() { + return false; + } + + @Override + public CompletableFuture<byte[]> retrieveCookie(String s) { + throw new UnsupportedOperationException(); + } + + @Override + public CompletableFuture<byte[]> sendData(String s, byte[] bytes) { + throw new UnsupportedOperationException(); + } + @Override public Unsafe unsafe() { throw new UnsupportedOperationException(); From 778c0819ef76abb51eab191d0e6250c2a2e2618e Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Sun, 16 Feb 2025 15:35:07 -0500 Subject: [PATCH 157/165] Add the Gradle versions file, too... --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c4fc04bf7..f9bfd758e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -30,7 +30,7 @@ cloud = "2.0.0-rc.2" cloud-minecraft = "2.0.0-beta.9" cloud-minecraft-modded = "2.0.0-beta.10" commodore = "2.2" -bungeecord = "a7c6ede" +bungeecord = "1.21-R0.1-20250215.224541-54" velocity = "3.3.0-SNAPSHOT" viaproxy = "3.3.2-SNAPSHOT" fabric-loader = "0.16.9" @@ -116,7 +116,7 @@ neoforge-minecraft = { group = "net.neoforged", name = "neoforge", version.ref = adapters-spigot = { group = "org.geysermc.geyser.adapters", name = "spigot-all", version.ref = "adapters" } adapters-paper = { group = "org.geysermc.geyser.adapters", name = "paper-all", version.ref = "adapters" } -bungeecord-proxy = { group = "com.github.SpigotMC.BungeeCord", name = "bungeecord-proxy", version.ref = "bungeecord" } +bungeecord-proxy = { group = "net.md-5", name = "bungeecord-proxy", version.ref = "bungeecord" } checker-qual = { group = "org.checkerframework", name = "checker-qual", version.ref = "checkerframework" } commodore = { group = "me.lucko", name = "commodore", version.ref = "commodore" } guava = { group = "com.google.guava", name = "guava", version.ref = "guava" } From 7448a994ad2b4edc2bd4617035cd277834575f83 Mon Sep 17 00:00:00 2001 From: chris <github@onechris.mozmail.com> Date: Tue, 18 Feb 2025 15:12:38 +0100 Subject: [PATCH 158/165] Fix: Server-side requested container closing (#5346) * Work on closing inventories * Test more container types, add very hacky player container close workaround * Only send close container packet to Java edition when needed * Adjust warning to hopefully find where desync issues occur * don't crash when closing lecterns * remove debug logging * Don't send container close packet to the Java server when not needed, mainly for fake lecterns --- .../geysermc/geyser/inventory/Container.java | 4 +- .../geysermc/geyser/inventory/Inventory.java | 8 +++ .../geyser/inventory/LecternContainer.java | 11 ++-- .../holder/BlockInventoryHolder.java | 52 ++++++++++++------- .../inventory/holder/InventoryHolder.java | 3 +- .../populator/BlockRegistryPopulator.java | 10 ++++ .../geyser/registry/type/BlockMappings.java | 3 +- .../geyser/session/GeyserSession.java | 8 +++ .../AbstractBlockInventoryTranslator.java | 10 +++- .../inventory/AnvilInventoryTranslator.java | 6 +++ .../inventory/BeaconInventoryTranslator.java | 5 ++ .../inventory/BrewingInventoryTranslator.java | 6 +++ .../CartographyInventoryTranslator.java | 6 +++ .../inventory/CrafterInventoryTranslator.java | 5 ++ .../CraftingInventoryTranslator.java | 6 +++ .../EnchantingInventoryTranslator.java | 6 +++ .../Generic3X3InventoryTranslator.java | 6 +++ .../GrindstoneInventoryTranslator.java | 6 +++ .../inventory/HopperInventoryTranslator.java | 7 +++ .../inventory/LecternInventoryTranslator.java | 11 ++-- .../inventory/LoomInventoryTranslator.java | 6 +++ .../inventory/OldSmithingTableTranslator.java | 6 +++ .../inventory/PlayerInventoryTranslator.java | 30 ++++++++--- .../inventory/ShulkerInventoryTranslator.java | 6 +++ .../SmithingInventoryTranslator.java | 6 +++ .../StonecutterInventoryTranslator.java | 6 +++ .../chest/DoubleChestInventoryTranslator.java | 18 ++++++- .../chest/SingleChestInventoryTranslator.java | 2 +- .../BlastFurnaceInventoryTranslator.java | 7 +++ .../furnace/FurnaceInventoryTranslator.java | 7 +++ .../furnace/SmokerInventoryTranslator.java | 7 +++ .../AbstractHorseInventoryTranslator.java | 2 + .../BedrockContainerCloseTranslator.java | 4 +- .../BedrockLecternUpdateTranslator.java | 4 +- .../JavaContainerCloseTranslator.java | 1 + .../inventory/JavaOpenBookTranslator.java | 4 +- .../geysermc/geyser/util/InventoryUtils.java | 10 +++- 37 files changed, 255 insertions(+), 50 deletions(-) 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 e78a4d2c6..f2db415c0 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/Container.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/Container.java @@ -25,12 +25,12 @@ package org.geysermc.geyser.inventory; -import org.geysermc.geyser.level.block.type.Block; -import org.geysermc.mcprotocollib.protocol.data.game.inventory.ContainerType; import lombok.Getter; import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.level.block.type.Block; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.inventory.InventoryTranslator; +import org.geysermc.mcprotocollib.protocol.data.game.inventory.ContainerType; import org.jetbrains.annotations.Range; /** 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 c960ed1a2..4639e0151 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java @@ -171,4 +171,12 @@ public abstract class Inventory { public void resetNextStateId() { nextStateId = -1; } + + /** + * Whether we should be sending a {@link org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundContainerClosePacket} + * when closing the inventory. + */ + public boolean shouldConfirmContainerClose() { + return true; + } } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/LecternContainer.java b/core/src/main/java/org/geysermc/geyser/inventory/LecternContainer.java index ff21f561e..9988188f1 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/LecternContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/LecternContainer.java @@ -43,7 +43,7 @@ public class LecternContainer extends Container { @Setter private Vector3i position; - private boolean isFakeLectern = false; + private boolean isBookInPlayerInventory = false; public LecternContainer(String title, int id, int size, ContainerType containerType, PlayerInventory playerInventory) { super(title, id, size, containerType, playerInventory); @@ -55,7 +55,7 @@ public class LecternContainer extends Container { */ @Override public void setItem(int slot, @NonNull GeyserItemStack newItem, GeyserSession session) { - if (isFakeLectern) { + if (isBookInPlayerInventory) { session.getPlayerInventory().setItem(slot, newItem, session); } else { super.setItem(slot, newItem, session); @@ -67,7 +67,12 @@ public class LecternContainer extends Container { * See {@link LecternContainer#setItem(int, GeyserItemStack, GeyserSession)} as for why this is separate. */ public void setFakeLecternBook(GeyserItemStack book, GeyserSession session) { - this.isFakeLectern = true; + this.isBookInPlayerInventory = true; super.setItem(0, book, session); } + + @Override + public boolean shouldConfirmContainerClose() { + return !isBookInPlayerInventory; + } } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java b/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java index 385a1e2bd..1bf30bc7e 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java @@ -155,32 +155,46 @@ public class BlockInventoryHolder extends InventoryHolder { } @Override - public void closeInventory(InventoryTranslator translator, GeyserSession session, Inventory inventory) { - if (inventory instanceof Container container) { - if (container.isUsingRealBlock() && !(container instanceof LecternContainer)) { - // No need to reset a block since we didn't change any blocks - // But send a container close packet because we aren't destroying the original. - ContainerClosePacket packet = new ContainerClosePacket(); - packet.setId((byte) inventory.getBedrockId()); - packet.setServerInitiated(true); - packet.setType(ContainerType.CONTAINER); - session.sendUpstreamPacket(packet); - return; - } - } else { - GeyserImpl.getInstance().getLogger().warning("Tried to close a non-container inventory in a block inventory holder! "); - if (GeyserImpl.getInstance().getLogger().isDebug()) { - GeyserImpl.getInstance().getLogger().debug("Current inventory: " + inventory); - GeyserImpl.getInstance().getLogger().debug("Open inventory: " + session.getOpenInventory()); - } + public void closeInventory(InventoryTranslator translator, GeyserSession session, Inventory inventory, ContainerType type) { + if (!(inventory instanceof Container container)) { + GeyserImpl.getInstance().getLogger().warning("Tried to close a non-container inventory in a block inventory holder! Please report this error on discord."); + GeyserImpl.getInstance().getLogger().warning("Current inventory translator: " + translator.getClass().getSimpleName()); + GeyserImpl.getInstance().getLogger().warning("Current inventory: " + inventory.getClass().getSimpleName()); // Try to save ourselves? maybe? // https://github.com/GeyserMC/Geyser/issues/4141 - // TODO: improve once this issue is pinned down properly + // TODO: improve once this issue is pinned down session.setOpenInventory(null); session.setInventoryTranslator(InventoryTranslator.PLAYER_INVENTORY_TRANSLATOR); return; } + // Bedrock broke inventory closing. I wish i was kidding. + // "type" is explicitly passed to keep track of which inventory types can be closed without + // ""workarounds"". yippie. + // Further, Lecterns cannot be closed with any of the two methods below. + if (container.isUsingRealBlock() && !(container instanceof LecternContainer)) { + if (type != null) { + // No need to reset a block since we didn't change any blocks + // But send a container close packet because we aren't destroying the original. + ContainerClosePacket packet = new ContainerClosePacket(); + packet.setId((byte) inventory.getBedrockId()); + packet.setServerInitiated(true); + packet.setType(type); + session.sendUpstreamPacket(packet); + return; + } + + // Destroy the block. There's no inventory to view => it gets closed! + Vector3i holderPos = inventory.getHolderPosition(); + UpdateBlockPacket blockPacket = new UpdateBlockPacket(); + blockPacket.setDataLayer(0); + blockPacket.setBlockPosition(holderPos); + blockPacket.setDefinition(session.getBlockMappings().getBedrockAir()); + blockPacket.getFlags().addAll(UpdateBlockPacket.FLAG_ALL_PRIORITY); + session.sendUpstreamPacket(blockPacket); + } + + // Reset to correct block Vector3i holderPos = inventory.getHolderPosition(); int realBlock = session.getGeyser().getWorldManager().getBlockAt(session, holderPos.getX(), holderPos.getY(), holderPos.getZ()); UpdateBlockPacket blockPacket = new UpdateBlockPacket(); diff --git a/core/src/main/java/org/geysermc/geyser/inventory/holder/InventoryHolder.java b/core/src/main/java/org/geysermc/geyser/inventory/holder/InventoryHolder.java index 986df53db..d61193c7a 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/holder/InventoryHolder.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/holder/InventoryHolder.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.inventory.holder; +import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType; import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.inventory.InventoryTranslator; @@ -32,5 +33,5 @@ import org.geysermc.geyser.translator.inventory.InventoryTranslator; public abstract class InventoryHolder { public abstract boolean prepareInventory(InventoryTranslator translator, GeyserSession session, Inventory inventory); public abstract void openInventory(InventoryTranslator translator, GeyserSession session, Inventory inventory); - public abstract void closeInventory(InventoryTranslator translator, GeyserSession session, Inventory inventory); + public abstract void closeInventory(InventoryTranslator translator, GeyserSession session, Inventory inventory, ContainerType containerType); } 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 29591ce9e..59cdd52c4 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 @@ -245,6 +245,7 @@ public final class BlockRegistryPopulator { GeyserBedrockBlock airDefinition = null; BlockDefinition commandBlockDefinition = null; BlockDefinition mobSpawnerBlockDefinition = null; + BlockDefinition netherPortalBlockDefinition = null; BlockDefinition waterDefinition = null; BlockDefinition movingBlockDefinition = null; Iterator<NbtMap> blocksIterator = BLOCKS_NBT.iterator(); @@ -330,6 +331,10 @@ public final class BlockRegistryPopulator { structureBlockDefinitions.put(mode.toUpperCase(Locale.ROOT), bedrockDefinition); } + if (block == Blocks.NETHER_PORTAL) { + netherPortalBlockDefinition = bedrockDefinition; + } + boolean waterlogged = blockState.getValue(Properties.WATERLOGGED, false) || block == Blocks.BUBBLE_COLUMN || block == Blocks.KELP || block == Blocks.KELP_PLANT || block == Blocks.SEAGRASS || block == Blocks.TALL_SEAGRASS; @@ -358,6 +363,11 @@ public final class BlockRegistryPopulator { } builder.mobSpawnerBlock(mobSpawnerBlockDefinition); + if (netherPortalBlockDefinition == null) { + throw new AssertionError("Unable to find nether portal block in palette"); + } + builder.netherPortalBlock(netherPortalBlockDefinition); + 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 be96fec0e..c783aee56 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 @@ -64,6 +64,7 @@ public class BlockMappings implements DefinitionRegistry<BlockDefinition> { BlockDefinition commandBlock; BlockDefinition mobSpawnerBlock; + BlockDefinition netherPortalBlock; Map<NbtMap, BlockDefinition> itemFrames; Map<Block, NbtMap> flowerPotBlocks; @@ -137,4 +138,4 @@ public class BlockMappings implements DefinitionRegistry<BlockDefinition> { public boolean isRegistered(BlockDefinition bedrockBlock) { return getDefinition(bedrockBlock.getRuntimeId()) == bedrockBlock; } -} \ No newline at end of file +} 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 f9802fe52..4a2863b9e 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -526,6 +526,14 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { @Setter private boolean placedBucket; + /** + * Stores whether the Java server requested the player inventory to be closed. + * Used to prevent our hacky player inventory closing workaround in {@link org.geysermc.geyser.translator.inventory.PlayerInventoryTranslator#closeInventory(GeyserSession, Inventory)} + * to run when the closing is initated by the Bedrock client. + */ + @Setter + private boolean serverRequestedClosePlayerInventory; + /** * Counts how many ticks have occurred since an arm animation started. * -1 means there is no active arm swing; -2 means an arm swing will start in a tick. diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/AbstractBlockInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/AbstractBlockInventoryTranslator.java index 4476391c8..0cd60987d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/AbstractBlockInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/AbstractBlockInventoryTranslator.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.translator.inventory; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType; import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.holder.BlockInventoryHolder; @@ -86,7 +87,7 @@ public abstract class AbstractBlockInventoryTranslator extends BaseInventoryTran @Override public void closeInventory(GeyserSession session, Inventory inventory) { - holder.closeInventory(this, session, inventory); + holder.closeInventory(this, session, inventory, closeContainerType(inventory)); } @Override @@ -98,4 +99,11 @@ public abstract class AbstractBlockInventoryTranslator extends BaseInventoryTran public void updateSlot(GeyserSession session, Inventory inventory, int slot) { updater.updateSlot(this, session, inventory, slot); } + + /* + So. Sometime in 1.21, Bedrock just broke the ContainerClosePacket. As in: Geyser sends it, the player ignores it. + But only for some blocks! And some blocks only respond to specific container types (dispensers/droppers now require the specific type...) + When this returns null, we just... break the block, and replace it. Primitive. But if that works... fine. + */ + public abstract @Nullable ContainerType closeContainerType(Inventory inventory); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/AnvilInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/AnvilInventoryTranslator.java index cbc8ce7bd..f43d1301b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/AnvilInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/AnvilInventoryTranslator.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.translator.inventory; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequest; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequestSlotData; @@ -115,4 +116,9 @@ public class AnvilInventoryTranslator extends AbstractBlockInventoryTranslator { anvilContainer.setUseJavaLevelCost(true); updateSlot(session, anvilContainer, 1); } + + @Override + public org.cloudburstmc.protocol.bedrock.data.inventory.@Nullable ContainerType closeContainerType(Inventory inventory) { + return null; + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/BeaconInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/BeaconInventoryTranslator.java index 6edbd925e..2b731000d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/BeaconInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/BeaconInventoryTranslator.java @@ -147,4 +147,9 @@ public class BeaconInventoryTranslator extends AbstractBlockInventoryTranslator public Inventory createInventory(String name, int windowId, ContainerType containerType, PlayerInventory playerInventory) { return new BeaconContainer(name, windowId, this.size, containerType, playerInventory); } + + @Override + public org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType closeContainerType(Inventory inventory) { + return null; + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/BrewingInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/BrewingInventoryTranslator.java index 5147fb75d..d3b5299eb 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/BrewingInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/BrewingInventoryTranslator.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.translator.inventory; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequestSlotData; @@ -106,4 +107,9 @@ public class BrewingInventoryTranslator extends AbstractBlockInventoryTranslator default -> super.javaSlotToBedrockContainer(slot); }; } + + @Override + public @Nullable ContainerType closeContainerType(Inventory inventory) { + return ContainerType.BREWING_STAND; + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java index 65fc7b35c..2cb4d0f14 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.translator.inventory; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequestSlotData; import org.geysermc.geyser.inventory.*; @@ -88,4 +89,9 @@ public class CartographyInventoryTranslator extends AbstractBlockInventoryTransl public Inventory createInventory(String name, int windowId, ContainerType containerType, PlayerInventory playerInventory) { return new CartographyContainer(name, windowId, this.size, containerType, playerInventory); } + + @Override + public org.cloudburstmc.protocol.bedrock.data.inventory.@Nullable ContainerType closeContainerType(Inventory inventory) { + return null; + } } 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 index 83076640a..390c0d6e6 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/CrafterInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/CrafterInventoryTranslator.java @@ -162,4 +162,9 @@ public class CrafterInventoryTranslator extends AbstractBlockInventoryTranslator BlockEntityUtils.updateBlockEntity(session, tag.build(), container.getHolderPosition()); } + + @Override + public org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType closeContainerType(Inventory inventory) { + return null; + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/CraftingInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/CraftingInventoryTranslator.java index 577d87fe5..6c9dad5f3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/CraftingInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/CraftingInventoryTranslator.java @@ -29,6 +29,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequestSlotData; import org.geysermc.geyser.inventory.BedrockContainerSlot; +import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.SlotType; import org.geysermc.geyser.inventory.updater.UIInventoryUpdater; import org.geysermc.geyser.level.block.Blocks; @@ -86,4 +87,9 @@ public class CraftingInventoryTranslator extends AbstractBlockInventoryTranslato public static boolean isCraftingGrid(int slot) { return slot >= 1 && slot <= 9; } + + @Override + public ContainerType closeContainerType(Inventory inventory) { + return null; + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/EnchantingInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/EnchantingInventoryTranslator.java index eb0e351e1..10386c23e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/EnchantingInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/EnchantingInventoryTranslator.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.translator.inventory; import it.unimi.dsi.fastutil.ints.IntSets; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.data.inventory.EnchantOptionData; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequest; @@ -170,4 +171,9 @@ public class EnchantingInventoryTranslator extends AbstractBlockInventoryTransla public Inventory createInventory(String name, int windowId, ContainerType containerType, PlayerInventory playerInventory) { return new EnchantingContainer(name, windowId, this.size, containerType, playerInventory); } + + @Override + public org.cloudburstmc.protocol.bedrock.data.inventory.@Nullable ContainerType closeContainerType(Inventory inventory) { + return null; + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/Generic3X3InventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/Generic3X3InventoryTranslator.java index 80040e375..0f90240d1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/Generic3X3InventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/Generic3X3InventoryTranslator.java @@ -68,4 +68,10 @@ public class Generic3X3InventoryTranslator extends AbstractBlockInventoryTransla } return super.javaSlotToBedrockContainer(javaSlot); } + + @Override + public org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType closeContainerType(Inventory inventory) { + return ((Generic3X3Container) inventory).isDropper() ? org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType.DROPPER : + org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType.DISPENSER; + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/GrindstoneInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/GrindstoneInventoryTranslator.java index d3283de40..2c4430ac3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/GrindstoneInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/GrindstoneInventoryTranslator.java @@ -29,6 +29,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequestSlotData; import org.geysermc.geyser.inventory.BedrockContainerSlot; +import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.updater.UIInventoryUpdater; import org.geysermc.geyser.level.block.Blocks; @@ -66,4 +67,9 @@ public class GrindstoneInventoryTranslator extends AbstractBlockInventoryTransla default -> super.javaSlotToBedrock(slot); }; } + + @Override + public ContainerType closeContainerType(Inventory inventory) { + return null; + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/HopperInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/HopperInventoryTranslator.java index fdcd7bf57..37cb4a813 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/HopperInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/HopperInventoryTranslator.java @@ -25,9 +25,11 @@ package org.geysermc.geyser.translator.inventory; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType; import org.geysermc.geyser.inventory.BedrockContainerSlot; +import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.updater.ContainerInventoryUpdater; import org.geysermc.geyser.level.block.Blocks; @@ -46,4 +48,9 @@ public class HopperInventoryTranslator extends AbstractBlockInventoryTranslator } return super.javaSlotToBedrockContainer(javaSlot); } + + @Override + public @Nullable ContainerType closeContainerType(Inventory inventory) { + return ContainerType.HOPPER; + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java index 414ab655a..c5814e336 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.translator.inventory; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; @@ -62,7 +63,7 @@ public class LecternInventoryTranslator extends AbstractBlockInventoryTranslator @Override public boolean prepareInventory(GeyserSession session, Inventory inventory) { super.prepareInventory(session, inventory); - if (((LecternContainer) inventory).isFakeLectern()) { + if (((LecternContainer) inventory).isBookInPlayerInventory()) { // See JavaOpenBookTranslator; this isn't a lectern but a book in the player inventory updateBook(session, inventory, inventory.getItem(0)); receivedBook = true; @@ -98,7 +99,6 @@ public class LecternInventoryTranslator extends AbstractBlockInventoryTranslator // Now: Restore the lectern, if it actually exists if (lecternContainer.isUsingRealBlock()) { boolean hasBook = session.getGeyser().getWorldManager().blockAt(session, position).getValue(Properties.HAS_BOOK, false); - NbtMap map = LecternBlock.getBaseLecternTag(position, hasBook); BlockEntityUtils.updateBlockEntity(session, map, position); } @@ -131,7 +131,7 @@ public class LecternInventoryTranslator extends AbstractBlockInventoryTranslator @Override public void updateSlot(GeyserSession session, Inventory inventory, int slot) { // If we're not in a real lectern, the Java server thinks we are still in the player inventory. - if (((LecternContainer) inventory).isFakeLectern()) { + if (((LecternContainer) inventory).isBookInPlayerInventory()) { InventoryTranslator.PLAYER_INVENTORY_TRANSLATOR.updateSlot(session, session.getPlayerInventory(), slot); return; } @@ -141,6 +141,11 @@ public class LecternInventoryTranslator extends AbstractBlockInventoryTranslator } } + @Override + public org.cloudburstmc.protocol.bedrock.data.inventory.@Nullable ContainerType closeContainerType(Inventory inventory) { + return null; + } + /** * Translate the data of the book in the lectern into a block entity tag. */ diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java index 998108154..9fb407336 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.translator.inventory; import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; @@ -207,4 +208,9 @@ public class LoomInventoryTranslator extends AbstractBlockInventoryTranslator { } return super.getSlotType(javaSlot); } + + @Override + public @Nullable ContainerType closeContainerType(Inventory inventory) { + return null; + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/OldSmithingTableTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/OldSmithingTableTranslator.java index fc9c4f587..1ee8b18eb 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/OldSmithingTableTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/OldSmithingTableTranslator.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.translator.inventory; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType; @@ -145,4 +146,9 @@ public class OldSmithingTableTranslator extends AbstractBlockInventoryTranslator slotPacket.setItem(UPGRADE_TEMPLATE.apply(session.getUpstream().getProtocolVersion())); session.sendUpstreamPacket(slotPacket); } + + @Override + public @Nullable ContainerType closeContainerType(Inventory inventory) { + return null; + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java index c69293717..45deacaad 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java @@ -28,6 +28,8 @@ package org.geysermc.geyser.translator.inventory; import it.unimi.dsi.fastutil.ints.IntIterator; import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntSet; +import org.cloudburstmc.math.vector.Vector3i; +import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.data.inventory.CreativeItemData; @@ -41,10 +43,10 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.SwapAction; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.action.TransferItemStackRequestAction; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.response.ItemStackResponse; -import org.cloudburstmc.protocol.bedrock.packet.ContainerClosePacket; import org.cloudburstmc.protocol.bedrock.packet.ContainerOpenPacket; import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket; import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket; +import org.cloudburstmc.protocol.bedrock.packet.UpdateBlockPacket; import org.geysermc.geyser.inventory.BedrockContainerSlot; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.Inventory; @@ -65,6 +67,7 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.S import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.concurrent.TimeUnit; import java.util.function.IntFunction; public class PlayerInventoryTranslator extends InventoryTranslator { @@ -577,11 +580,26 @@ public class PlayerInventoryTranslator extends InventoryTranslator { @Override public void closeInventory(GeyserSession session, Inventory inventory) { - ContainerClosePacket packet = new ContainerClosePacket(); - packet.setServerInitiated(true); - packet.setId((byte) ContainerId.INVENTORY); - packet.setType(org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType.INVENTORY); - session.sendUpstreamPacket(packet); + if (session.isServerRequestedClosePlayerInventory()) { + Vector3i pos = session.getPlayerEntity().getPosition().toInt(); + + UpdateBlockPacket packet = new UpdateBlockPacket(); + packet.setBlockPosition(pos); + packet.setDefinition(session.getBlockMappings().getNetherPortalBlock()); + packet.setDataLayer(0); + packet.getFlags().add(UpdateBlockPacket.Flag.PRIORITY); + session.sendUpstreamPacket(packet); + + session.scheduleInEventLoop(() -> { + BlockDefinition definition = session.getBlockMappings().getBedrockBlock(session.getGeyser().getWorldManager().blockAt(session, pos)); + + packet.setBlockPosition(pos); + packet.setDefinition(definition); + packet.getFlags().add(UpdateBlockPacket.Flag.PRIORITY); + packet.setDataLayer(0); + session.sendUpstreamPacket(packet); + }, 50, TimeUnit.MILLISECONDS); + } } @Override diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/ShulkerInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/ShulkerInventoryTranslator.java index 464bf07f7..ccf0d32be 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/ShulkerInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/ShulkerInventoryTranslator.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.translator.inventory; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; @@ -80,4 +81,9 @@ public class ShulkerInventoryTranslator extends AbstractBlockInventoryTranslator } return super.javaSlotToBedrockContainer(javaSlot); } + + @Override + public @Nullable ContainerType closeContainerType(Inventory inventory) { + return ContainerType.CONTAINER; + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/SmithingInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/SmithingInventoryTranslator.java index 2a9e974f3..8067585d3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/SmithingInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/SmithingInventoryTranslator.java @@ -29,6 +29,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequestSlotData; import org.geysermc.geyser.inventory.BedrockContainerSlot; +import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.updater.UIInventoryUpdater; import org.geysermc.geyser.level.block.Blocks; @@ -74,4 +75,9 @@ public class SmithingInventoryTranslator extends AbstractBlockInventoryTranslato default -> super.javaSlotToBedrock(slot); }; } + + @Override + public ContainerType closeContainerType(Inventory inventory) { + return null; + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/StonecutterInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/StonecutterInventoryTranslator.java index df7e15fef..90ef13fd5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/StonecutterInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/StonecutterInventoryTranslator.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.translator.inventory; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequest; import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequestSlotData; @@ -125,4 +126,9 @@ public class StonecutterInventoryTranslator extends AbstractBlockInventoryTransl public Inventory createInventory(String name, int windowId, ContainerType containerType, PlayerInventory playerInventory) { return new StonecutterContainer(name, windowId, this.size, containerType, playerInventory); } + + @Override + public org.cloudburstmc.protocol.bedrock.data.inventory.@Nullable ContainerType closeContainerType(Inventory inventory) { + return org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType.STONECUTTER; + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java index 856cc1876..93b9d8e04 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java @@ -34,6 +34,7 @@ import org.cloudburstmc.protocol.bedrock.packet.BlockEntityDataPacket; import org.cloudburstmc.protocol.bedrock.packet.ContainerClosePacket; import org.cloudburstmc.protocol.bedrock.packet.ContainerOpenPacket; import org.cloudburstmc.protocol.bedrock.packet.UpdateBlockPacket; +import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.inventory.Container; import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.level.block.Blocks; @@ -43,6 +44,7 @@ import org.geysermc.geyser.level.block.type.BlockState; import org.geysermc.geyser.level.physics.Direction; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.inventory.InventoryTranslator; import org.geysermc.geyser.translator.level.block.entity.BlockEntityTranslator; import org.geysermc.geyser.translator.level.block.entity.DoubleChestBlockEntityTranslator; import org.geysermc.geyser.util.InventoryUtils; @@ -146,13 +148,25 @@ public class DoubleChestInventoryTranslator extends ChestInventoryTranslator { @Override public void closeInventory(GeyserSession session, Inventory inventory) { - if (((Container) inventory).isUsingRealBlock()) { + if (!(inventory instanceof Container container)) { + GeyserImpl.getInstance().getLogger().warning("Tried to close a non-container inventory in a block inventory holder! Please report this error on discord."); + GeyserImpl.getInstance().getLogger().warning("Current inventory translator: " + session.getInventoryTranslator().getClass().getSimpleName()); + GeyserImpl.getInstance().getLogger().warning("Current inventory: " + inventory.getClass().getSimpleName()); + // Try to save ourselves? maybe? + // https://github.com/GeyserMC/Geyser/issues/4141 + // TODO: improve once this issue is pinned down + session.setOpenInventory(null); + session.setInventoryTranslator(InventoryTranslator.PLAYER_INVENTORY_TRANSLATOR); + return; + } + + if (container.isUsingRealBlock()) { // No need to reset a block since we didn't change any blocks // But send a container close packet because we aren't destroying the original. ContainerClosePacket packet = new ContainerClosePacket(); packet.setId((byte) inventory.getBedrockId()); packet.setServerInitiated(true); - packet.setType(ContainerType.MINECART_CHEST); + packet.setType(ContainerType.CONTAINER); session.sendUpstreamPacket(packet); return; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/SingleChestInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/SingleChestInventoryTranslator.java index 94bdeb281..30a9ff8d6 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/SingleChestInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/SingleChestInventoryTranslator.java @@ -67,6 +67,6 @@ public class SingleChestInventoryTranslator extends ChestInventoryTranslator { @Override public void closeInventory(GeyserSession session, Inventory inventory) { - holder.closeInventory(this, session, inventory); + holder.closeInventory(this, session, inventory, ContainerType.CONTAINER); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/BlastFurnaceInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/BlastFurnaceInventoryTranslator.java index 185cafc51..5f2721ae3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/BlastFurnaceInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/BlastFurnaceInventoryTranslator.java @@ -25,9 +25,11 @@ package org.geysermc.geyser.translator.inventory.furnace; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType; import org.geysermc.geyser.inventory.BedrockContainerSlot; +import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.level.block.Blocks; public class BlastFurnaceInventoryTranslator extends AbstractFurnaceInventoryTranslator { @@ -42,4 +44,9 @@ public class BlastFurnaceInventoryTranslator extends AbstractFurnaceInventoryTra } return super.javaSlotToBedrockContainer(slot); } + + @Override + public @Nullable ContainerType closeContainerType(Inventory inventory) { + return ContainerType.BLAST_FURNACE; + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/FurnaceInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/FurnaceInventoryTranslator.java index bc96f7105..8a520dde2 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/FurnaceInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/FurnaceInventoryTranslator.java @@ -25,9 +25,11 @@ package org.geysermc.geyser.translator.inventory.furnace; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType; import org.geysermc.geyser.inventory.BedrockContainerSlot; +import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.level.block.Blocks; public class FurnaceInventoryTranslator extends AbstractFurnaceInventoryTranslator { @@ -42,4 +44,9 @@ public class FurnaceInventoryTranslator extends AbstractFurnaceInventoryTranslat } return super.javaSlotToBedrockContainer(slot); } + + @Override + public @Nullable ContainerType closeContainerType(Inventory inventory) { + return ContainerType.FURNACE; + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/SmokerInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/SmokerInventoryTranslator.java index 380446f09..2b676c424 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/SmokerInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/SmokerInventoryTranslator.java @@ -25,9 +25,11 @@ package org.geysermc.geyser.translator.inventory.furnace; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType; import org.geysermc.geyser.inventory.BedrockContainerSlot; +import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.level.block.Blocks; public class SmokerInventoryTranslator extends AbstractFurnaceInventoryTranslator { @@ -42,4 +44,9 @@ public class SmokerInventoryTranslator extends AbstractFurnaceInventoryTranslato } return super.javaSlotToBedrockContainer(slot); } + + @Override + public @Nullable ContainerType closeContainerType(Inventory inventory) { + return ContainerType.SMOKER; + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/AbstractHorseInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/AbstractHorseInventoryTranslator.java index 538133e0e..06d62fadf 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/AbstractHorseInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/AbstractHorseInventoryTranslator.java @@ -50,6 +50,8 @@ public abstract class AbstractHorseInventoryTranslator extends BaseInventoryTran @Override public void closeInventory(GeyserSession session, Inventory inventory) { + // TODO find a way to implement + // Can cause inventory de-sync if the Java server requests an inventory close } @Override diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockContainerCloseTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockContainerCloseTranslator.java index d675a07e9..4554bbe38 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockContainerCloseTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockContainerCloseTranslator.java @@ -25,7 +25,6 @@ package org.geysermc.geyser.translator.protocol.bedrock; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundContainerClosePacket; import org.cloudburstmc.protocol.bedrock.packet.ContainerClosePacket; import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.MerchantContainer; @@ -54,8 +53,7 @@ public class BedrockContainerCloseTranslator extends PacketTranslator<ContainerC Inventory openInventory = session.getOpenInventory(); if (openInventory != null) { if (bedrockId == openInventory.getBedrockId()) { - ServerboundContainerClosePacket closeWindowPacket = new ServerboundContainerClosePacket(openInventory.getJavaId()); - session.sendDownstreamGamePacket(closeWindowPacket); + InventoryUtils.sendJavaContainerClose(session, openInventory); InventoryUtils.closeInventory(session, openInventory.getJavaId(), false); } else if (openInventory.isPending()) { InventoryUtils.displayInventory(session, openInventory); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockLecternUpdateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockLecternUpdateTranslator.java index 31a2d74cf..4ba81c967 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockLecternUpdateTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockLecternUpdateTranslator.java @@ -34,7 +34,6 @@ import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.util.InventoryUtils; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundContainerButtonClickPacket; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundContainerClosePacket; /** * Used to translate moving pages, or closing the inventory @@ -52,8 +51,7 @@ public class BedrockLecternUpdateTranslator extends PacketTranslator<LecternUpda if (lecternContainer.getCurrentBedrockPage() == packet.getPage()) { // The same page means Bedrock is closing the window - ServerboundContainerClosePacket closeWindowPacket = new ServerboundContainerClosePacket(lecternContainer.getJavaId()); - session.sendDownstreamGamePacket(closeWindowPacket); + InventoryUtils.sendJavaContainerClose(session, lecternContainer); InventoryUtils.closeInventory(session, lecternContainer.getJavaId(), false); } else { // Each "page" Bedrock gives to us actually represents two pages (think opening a book and seeing two pages) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerCloseTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerCloseTranslator.java index c5786d9aa..d9c4566dd 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerCloseTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerCloseTranslator.java @@ -38,6 +38,7 @@ public class JavaContainerCloseTranslator extends PacketTranslator<ClientboundCo public void translate(GeyserSession session, ClientboundContainerClosePacket packet) { // Sometimes the server can request a window close of ID 0... when the window isn't even open // Don't confirm in this instance + session.setServerRequestedClosePlayerInventory(packet.getContainerId() == 0); InventoryUtils.closeInventory(session, packet.getContainerId(), (session.getOpenInventory() != null && session.getOpenInventory().getJavaId() == packet.getContainerId())); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaOpenBookTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaOpenBookTranslator.java index 172880725..9189898f7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaOpenBookTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaOpenBookTranslator.java @@ -36,7 +36,6 @@ import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.util.InventoryUtils; import org.geysermc.mcprotocollib.protocol.data.game.inventory.ContainerType; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.inventory.ClientboundOpenBookPacket; -import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundContainerClosePacket; import java.util.Objects; @@ -65,8 +64,7 @@ public class JavaOpenBookTranslator extends PacketTranslator<ClientboundOpenBook if (openInventory != null) { InventoryUtils.closeInventory(session, openInventory.getJavaId(), true); - ServerboundContainerClosePacket closeWindowPacket = new ServerboundContainerClosePacket(openInventory.getJavaId()); - session.sendDownstreamGamePacket(closeWindowPacket); + InventoryUtils.sendJavaContainerClose(session, openInventory); } InventoryTranslator translator = InventoryTranslator.inventoryTranslator(ContainerType.LECTERN); 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 042f37a89..4266c33ce 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java @@ -119,8 +119,7 @@ public class InventoryUtils { } } else { // Can occur if we e.g. did not find a spot to put a fake container in - ServerboundContainerClosePacket closePacket = new ServerboundContainerClosePacket(inventory.getJavaId()); - session.sendDownstreamGamePacket(closePacket); + sendJavaContainerClose(session, inventory); session.setOpenInventory(null); session.setInventoryTranslator(InventoryTranslator.PLAYER_INVENTORY_TRANSLATOR); } @@ -161,6 +160,13 @@ public class InventoryUtils { } } + public static void sendJavaContainerClose(GeyserSession session, Inventory inventory) { + if (inventory.shouldConfirmContainerClose()) { + ServerboundContainerClosePacket closeWindowPacket = new ServerboundContainerClosePacket(inventory.getJavaId()); + session.sendDownstreamGamePacket(closeWindowPacket); + } + } + /** * Finds a usable block space in the world to place a fake inventory block, and returns the position. */ From 4a88117753d262e3398dcd65350b888a2618d4dc Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Wed, 19 Feb 2025 14:27:22 +0100 Subject: [PATCH 159/165] Update to latest MCPL changes, fix issues with the force-player-inventory workaround --- .../geyser/entity/EntityDefinition.java | 7 +- .../geyser/entity/EntityDefinitions.java | 314 +++++++++--------- .../geyser/entity/type/FireworkEntity.java | 2 +- .../geyser/entity/type/ItemFrameEntity.java | 2 +- .../geyser/entity/type/LivingEntity.java | 4 +- .../entity/type/ThrownPotionEntity.java | 6 +- .../living/animal/tameable/WolfEntity.java | 4 +- .../geyser/inventory/AnvilContainer.java | 4 +- .../geyser/inventory/GeyserItemStack.java | 7 +- .../geysermc/geyser/inventory/Inventory.java | 4 +- .../updater/AnvilInventoryUpdater.java | 20 +- .../geysermc/geyser/item/type/ArmorItem.java | 4 +- .../geysermc/geyser/item/type/ArrowItem.java | 4 +- .../geysermc/geyser/item/type/BannerItem.java | 10 +- .../geyser/item/type/CompassItem.java | 6 +- .../geyser/item/type/CrossbowItem.java | 4 +- .../geyser/item/type/DecoratedPotItem.java | 4 +- .../geyser/item/type/EnchantedBookItem.java | 6 +- .../geyser/item/type/FilledMapItem.java | 4 +- .../geyser/item/type/FireworkRocketItem.java | 6 +- .../geyser/item/type/FireworkStarItem.java | 6 +- .../geyser/item/type/GoatHornItem.java | 12 +- .../org/geysermc/geyser/item/type/Item.java | 19 +- .../geysermc/geyser/item/type/LightItem.java | 4 +- .../geysermc/geyser/item/type/MapItem.java | 4 +- .../geyser/item/type/OminousBottleItem.java | 6 +- .../geyser/item/type/PlayerHeadItem.java | 6 +- .../geysermc/geyser/item/type/PotionItem.java | 6 +- .../geysermc/geyser/item/type/ShieldItem.java | 6 +- .../geyser/item/type/ShulkerBoxItem.java | 8 +- .../geyser/item/type/TippedArrowItem.java | 4 +- .../item/type/TropicalFishBucketItem.java | 4 +- .../geyser/item/type/WritableBookItem.java | 4 +- .../geyser/item/type/WrittenBookItem.java | 4 +- .../geysermc/geyser/level/WorldManager.java | 3 +- .../geyser/level/block/type/SkullBlock.java | 6 +- .../CustomItemRegistryPopulator.java | 7 +- .../DataComponentRegistryPopulator.java | 3 +- .../geyser/session/GeyserSession.java | 2 +- .../geyser/session/cache/BundleCache.java | 4 +- .../geyser/session/cache/WorldCache.java | 4 +- .../entity/EntityMetadataTranslator.java | 2 +- .../inventory/BundleInventoryTranslator.java | 6 +- .../inventory/InventoryTranslator.java | 7 +- .../inventory/LecternInventoryTranslator.java | 6 +- .../inventory/LoomInventoryTranslator.java | 6 +- .../inventory/PlayerInventoryTranslator.java | 14 +- .../translator/item/CustomItemTranslator.java | 8 +- .../translator/item/ItemTranslator.java | 36 +- .../entity/VaultBlockEntityTranslator.java | 6 +- .../bedrock/BedrockBookEditTranslator.java | 6 +- ...BedrockInventoryTransactionTranslator.java | 4 +- .../java/JavaRecipeBookAddTranslator.java | 2 +- .../entity/JavaSetEquipmentTranslator.java | 6 +- .../JavaContainerCloseTranslator.java | 3 +- .../BlockSoundInteractionTranslator.java | 4 +- .../org/geysermc/geyser/util/BlockUtils.java | 6 +- .../geysermc/geyser/util/InventoryUtils.java | 2 +- .../org/geysermc/geyser/util/ItemUtils.java | 8 +- .../network/ScoreboardIssueTests.java | 8 +- gradle/libs.versions.toml | 2 +- 61 files changed, 346 insertions(+), 340 deletions(-) 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 5b4dc0969..d26a25d2c 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java @@ -26,9 +26,6 @@ package org.geysermc.geyser.entity; import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import java.util.List; -import java.util.Locale; -import java.util.function.BiConsumer; import lombok.Setter; import lombok.experimental.Accessors; import org.geysermc.geyser.GeyserImpl; @@ -41,6 +38,10 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetad import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.MetadataType; import org.geysermc.mcprotocollib.protocol.data.game.entity.type.EntityType; +import java.util.List; +import java.util.Locale; +import java.util.function.BiConsumer; + /** * Represents data for an entity. This includes properties such as height and width, as well as the list of entity * metadata translators needed to translate the properties sent from the server. The translators are structured in such 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 b17e3d21d..c8488238d 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java @@ -147,7 +147,7 @@ import org.geysermc.geyser.entity.type.living.monster.raid.VindicatorEntity; import org.geysermc.geyser.entity.type.player.PlayerEntity; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.translator.text.MessageTranslator; -import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.MetadataType; +import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.MetadataTypes; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.FloatEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.type.EntityType; @@ -310,14 +310,14 @@ public final class EntityDefinitions { static { EntityDefinition<Entity> entityBase = EntityDefinition.builder(Entity::new) - .addTranslator(MetadataType.BYTE, Entity::setFlags) - .addTranslator(MetadataType.INT, Entity::setAir) // Air/bubbles - .addTranslator(MetadataType.OPTIONAL_CHAT, Entity::setDisplayName) - .addTranslator(MetadataType.BOOLEAN, Entity::setDisplayNameVisible) - .addTranslator(MetadataType.BOOLEAN, Entity::setSilent) - .addTranslator(MetadataType.BOOLEAN, Entity::setGravity) - .addTranslator(MetadataType.POSE, (entity, entityMetadata) -> entity.setPose(entityMetadata.getValue())) - .addTranslator(MetadataType.INT, Entity::setFreezing) + .addTranslator(MetadataTypes.BYTE, Entity::setFlags) + .addTranslator(MetadataTypes.INT, Entity::setAir) // Air/bubbles + .addTranslator(MetadataTypes.OPTIONAL_CHAT, Entity::setDisplayName) + .addTranslator(MetadataTypes.BOOLEAN, Entity::setDisplayNameVisible) + .addTranslator(MetadataTypes.BOOLEAN, Entity::setSilent) + .addTranslator(MetadataTypes.BOOLEAN, Entity::setGravity) + .addTranslator(MetadataTypes.POSE, (entity, entityMetadata) -> entity.setPose(entityMetadata.getValue())) + .addTranslator(MetadataTypes.INT, Entity::setFreezing) .build(); // Extends entity @@ -325,9 +325,9 @@ public final class EntityDefinitions { AREA_EFFECT_CLOUD = EntityDefinition.inherited(AreaEffectCloudEntity::new, entityBase) .type(EntityType.AREA_EFFECT_CLOUD) .height(0.5f).width(1.0f) - .addTranslator(MetadataType.FLOAT, AreaEffectCloudEntity::setRadius) + .addTranslator(MetadataTypes.FLOAT, AreaEffectCloudEntity::setRadius) .addTranslator(null) // Waiting - .addTranslator(MetadataType.PARTICLE, AreaEffectCloudEntity::setParticle) + .addTranslator(MetadataTypes.PARTICLE, AreaEffectCloudEntity::setParticle) .build(); DRAGON_FIREBALL = EntityDefinition.inherited(FireballEntity::new, entityBase) .type(EntityType.DRAGON_FIREBALL) @@ -337,8 +337,8 @@ public final class EntityDefinitions { .type(EntityType.END_CRYSTAL) .heightAndWidth(2.0f) .identifier("minecraft:ender_crystal") - .addTranslator(MetadataType.OPTIONAL_POSITION, EnderCrystalEntity::setBlockTarget) - .addTranslator(MetadataType.BOOLEAN, + .addTranslator(MetadataTypes.OPTIONAL_POSITION, EnderCrystalEntity::setBlockTarget) + .addTranslator(MetadataTypes.BOOLEAN, (enderCrystalEntity, entityMetadata) -> enderCrystalEntity.setFlag(EntityFlag.SHOW_BOTTOM, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue())) // There is a base located on the ender crystal .build(); EXPERIENCE_ORB = EntityDefinition.inherited(ExpOrbEntity::new, entityBase) @@ -365,21 +365,21 @@ public final class EntityDefinitions { .type(EntityType.FIREWORK_ROCKET) .heightAndWidth(0.25f) .identifier("minecraft:fireworks_rocket") - .addTranslator(MetadataType.ITEM, FireworkEntity::setFireworkItem) - .addTranslator(MetadataType.OPTIONAL_VARINT, FireworkEntity::setPlayerGliding) + .addTranslator(MetadataTypes.ITEM, FireworkEntity::setFireworkItem) + .addTranslator(MetadataTypes.OPTIONAL_VARINT, FireworkEntity::setPlayerGliding) .addTranslator(null) // Shot at angle .build(); FISHING_BOBBER = EntityDefinition.<FishingHookEntity>inherited(null, entityBase) .type(EntityType.FISHING_BOBBER) .identifier("minecraft:fishing_hook") - .addTranslator(MetadataType.INT, FishingHookEntity::setHookedEntity) + .addTranslator(MetadataTypes.INT, FishingHookEntity::setHookedEntity) .addTranslator(null) // Biting TODO check .build(); ITEM = EntityDefinition.inherited(ItemEntity::new, entityBase) .type(EntityType.ITEM) .heightAndWidth(0.25f) .offset(0.125f) - .addTranslator(MetadataType.ITEM, ItemEntity::setItem) + .addTranslator(MetadataTypes.ITEM, ItemEntity::setItem) .build(); LEASH_KNOT = EntityDefinition.inherited(LeashKnotEntity::new, entityBase) .type(EntityType.LEASH_KNOT) @@ -394,7 +394,7 @@ public final class EntityDefinitions { .build(); PAINTING = EntityDefinition.<PaintingEntity>inherited(null, entityBase) .type(EntityType.PAINTING) - .addTranslator(MetadataType.PAINTING_VARIANT, PaintingEntity::setPaintingType) + .addTranslator(MetadataTypes.PAINTING_VARIANT, PaintingEntity::setPaintingType) .build(); SHULKER_BULLET = EntityDefinition.inherited(ThrowableEntity::new, entityBase) .type(EntityType.SHULKER_BULLET) @@ -404,14 +404,14 @@ public final class EntityDefinitions { .type(EntityType.TNT) .heightAndWidth(0.98f) .offset(0.49f) - .addTranslator(MetadataType.INT, TNTEntity::setFuseLength) + .addTranslator(MetadataTypes.INT, TNTEntity::setFuseLength) .build(); EntityDefinition<DisplayBaseEntity> displayBase = EntityDefinition.inherited(DisplayBaseEntity::new, entityBase) .addTranslator(null) // Interpolation delay .addTranslator(null) // Transformation interpolation duration .addTranslator(null) // Position/Rotation interpolation duration - .addTranslator(MetadataType.VECTOR3, DisplayBaseEntity::setTranslation) // Translation + .addTranslator(MetadataTypes.VECTOR3, DisplayBaseEntity::setTranslation) // Translation .addTranslator(null) // Scale .addTranslator(null) // Left rotation .addTranslator(null) // Right rotation @@ -428,7 +428,7 @@ public final class EntityDefinitions { .type(EntityType.TEXT_DISPLAY) .identifier("minecraft:armor_stand") .offset(-0.5f) - .addTranslator(MetadataType.CHAT, TextDisplayEntity::setText) + .addTranslator(MetadataTypes.CHAT, TextDisplayEntity::setText) .addTranslator(null) // Line width .addTranslator(null) // Background color .addTranslator(null) // Text opacity @@ -439,9 +439,9 @@ public final class EntityDefinitions { .type(EntityType.INTERACTION) .heightAndWidth(1.0f) // default size until server specifies otherwise .identifier("minecraft:armor_stand") - .addTranslator(MetadataType.FLOAT, InteractionEntity::setWidth) - .addTranslator(MetadataType.FLOAT, InteractionEntity::setHeight) - .addTranslator(MetadataType.BOOLEAN, InteractionEntity::setResponse) + .addTranslator(MetadataTypes.FLOAT, InteractionEntity::setWidth) + .addTranslator(MetadataTypes.FLOAT, InteractionEntity::setHeight) + .addTranslator(MetadataTypes.BOOLEAN, InteractionEntity::setResponse) .build(); EntityDefinition<FireballEntity> fireballBase = EntityDefinition.inherited(FireballEntity::new, entityBase) @@ -457,7 +457,7 @@ public final class EntityDefinitions { .build(); EntityDefinition<ThrowableItemEntity> throwableItemBase = EntityDefinition.inherited(ThrowableItemEntity::new, entityBase) - .addTranslator(MetadataType.ITEM, ThrowableItemEntity::setItem) + .addTranslator(MetadataTypes.ITEM, ThrowableItemEntity::setItem) .build(); EGG = EntityDefinition.inherited(ThrowableItemEntity::new, throwableItemBase) .type(EntityType.EGG) @@ -495,14 +495,14 @@ public final class EntityDefinitions { .build(); EntityDefinition<AbstractArrowEntity> abstractArrowBase = EntityDefinition.inherited(AbstractArrowEntity::new, entityBase) - .addTranslator(MetadataType.BYTE, AbstractArrowEntity::setArrowFlags) + .addTranslator(MetadataTypes.BYTE, AbstractArrowEntity::setArrowFlags) .addTranslator(null) // "Piercing level" .addTranslator(null) // If the arrow is in the ground .build(); ARROW = EntityDefinition.inherited(ArrowEntity::new, abstractArrowBase) .type(EntityType.ARROW) .heightAndWidth(0.25f) - .addTranslator(MetadataType.INT, ArrowEntity::setPotionEffectColor) + .addTranslator(MetadataTypes.INT, ArrowEntity::setPotionEffectColor) .build(); SPECTRAL_ARROW = EntityDefinition.inherited(abstractArrowBase.factory(), abstractArrowBase) .type(EntityType.SPECTRAL_ARROW) @@ -513,14 +513,14 @@ public final class EntityDefinitions { .type(EntityType.TRIDENT) .identifier("minecraft:thrown_trident") .addTranslator(null) // Loyalty - .addTranslator(MetadataType.BOOLEAN, (tridentEntity, entityMetadata) -> tridentEntity.setFlag(EntityFlag.ENCHANTED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue())) + .addTranslator(MetadataTypes.BOOLEAN, (tridentEntity, entityMetadata) -> tridentEntity.setFlag(EntityFlag.ENCHANTED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue())) .build(); // Item frames are handled differently as they are blocks, not items, in Bedrock ITEM_FRAME = EntityDefinition.<ItemFrameEntity>inherited(null, entityBase) .type(EntityType.ITEM_FRAME) - .addTranslator(MetadataType.ITEM, ItemFrameEntity::setItemInFrame) - .addTranslator(MetadataType.INT, ItemFrameEntity::setItemRotation) + .addTranslator(MetadataTypes.ITEM, ItemFrameEntity::setItemInFrame) + .addTranslator(MetadataTypes.INT, ItemFrameEntity::setItemRotation) .build(); GLOW_ITEM_FRAME = EntityDefinition.inherited(ITEM_FRAME.factory(), ITEM_FRAME) .type(EntityType.GLOW_ITEM_FRAME) @@ -530,27 +530,27 @@ public final class EntityDefinitions { .type(EntityType.MINECART) .height(0.7f).width(0.98f) .offset(0.35f) - .addTranslator(MetadataType.INT, (minecartEntity, entityMetadata) -> minecartEntity.getDirtyMetadata().put(EntityDataTypes.STRUCTURAL_INTEGRITY, entityMetadata.getValue())) - .addTranslator(MetadataType.INT, (minecartEntity, entityMetadata) -> minecartEntity.getDirtyMetadata().put(EntityDataTypes.HURT_DIRECTION, entityMetadata.getValue())) // Direction in which the minecart is shaking - .addTranslator(MetadataType.FLOAT, (minecartEntity, entityMetadata) -> + .addTranslator(MetadataTypes.INT, (minecartEntity, entityMetadata) -> minecartEntity.getDirtyMetadata().put(EntityDataTypes.STRUCTURAL_INTEGRITY, entityMetadata.getValue())) + .addTranslator(MetadataTypes.INT, (minecartEntity, entityMetadata) -> minecartEntity.getDirtyMetadata().put(EntityDataTypes.HURT_DIRECTION, entityMetadata.getValue())) // Direction in which the minecart is shaking + .addTranslator(MetadataTypes.FLOAT, (minecartEntity, entityMetadata) -> // Power in Java, hurt ticks in Bedrock minecartEntity.getDirtyMetadata().put(EntityDataTypes.HURT_TICKS, Math.min((int) ((FloatEntityMetadata) entityMetadata).getPrimitiveValue(), 15))) - .addTranslator(MetadataType.INT, MinecartEntity::setCustomBlock) - .addTranslator(MetadataType.INT, MinecartEntity::setCustomBlockOffset) - .addTranslator(MetadataType.BOOLEAN, MinecartEntity::setShowCustomBlock) + .addTranslator(MetadataTypes.INT, MinecartEntity::setCustomBlock) + .addTranslator(MetadataTypes.INT, MinecartEntity::setCustomBlockOffset) + .addTranslator(MetadataTypes.BOOLEAN, MinecartEntity::setShowCustomBlock) .build(); CHEST_MINECART = EntityDefinition.inherited(MINECART.factory(), MINECART) .type(EntityType.CHEST_MINECART) .build(); COMMAND_BLOCK_MINECART = EntityDefinition.inherited(CommandBlockMinecartEntity::new, MINECART) .type(EntityType.COMMAND_BLOCK_MINECART) - .addTranslator(MetadataType.STRING, (entity, entityMetadata) -> entity.getDirtyMetadata().put(EntityDataTypes.COMMAND_BLOCK_NAME, entityMetadata.getValue())) - .addTranslator(MetadataType.CHAT, (entity, entityMetadata) -> entity.getDirtyMetadata().put(EntityDataTypes.COMMAND_BLOCK_LAST_OUTPUT, MessageTranslator.convertMessage(entityMetadata.getValue()))) + .addTranslator(MetadataTypes.STRING, (entity, entityMetadata) -> entity.getDirtyMetadata().put(EntityDataTypes.COMMAND_BLOCK_NAME, entityMetadata.getValue())) + .addTranslator(MetadataTypes.CHAT, (entity, entityMetadata) -> entity.getDirtyMetadata().put(EntityDataTypes.COMMAND_BLOCK_LAST_OUTPUT, MessageTranslator.convertMessage(entityMetadata.getValue()))) .build(); FURNACE_MINECART = EntityDefinition.inherited(FurnaceMinecartEntity::new, MINECART) .type(EntityType.FURNACE_MINECART) .identifier("minecraft:minecart") - .addTranslator(MetadataType.BOOLEAN, FurnaceMinecartEntity::setHasFuel) + .addTranslator(MetadataTypes.BOOLEAN, FurnaceMinecartEntity::setHasFuel) .build(); HOPPER_MINECART = EntityDefinition.inherited(MINECART.factory(), MINECART) .type(EntityType.HOPPER_MINECART) @@ -566,7 +566,7 @@ public final class EntityDefinitions { WITHER_SKULL = EntityDefinition.inherited(WitherSkullEntity::new, entityBase) .type(EntityType.WITHER_SKULL) .heightAndWidth(0.3125f) - .addTranslator(MetadataType.BOOLEAN, WitherSkullEntity::setDangerous) + .addTranslator(MetadataTypes.BOOLEAN, WitherSkullEntity::setDangerous) .build(); WITHER_SKULL_DANGEROUS = EntityDefinition.inherited(WITHER_SKULL.factory(), WITHER_SKULL) .build(false); @@ -577,14 +577,14 @@ public final class EntityDefinitions { EntityDefinition<BoatEntity> boatBase = EntityDefinition.<BoatEntity>inherited(null, entityBase) .height(0.6f).width(1.6f) .offset(0.35f) - .addTranslator(MetadataType.INT, (boatEntity, entityMetadata) -> boatEntity.getDirtyMetadata().put(EntityDataTypes.HURT_TICKS, entityMetadata.getValue())) // Time since last hit - .addTranslator(MetadataType.INT, (boatEntity, entityMetadata) -> boatEntity.getDirtyMetadata().put(EntityDataTypes.HURT_DIRECTION, entityMetadata.getValue())) // Rocking direction - .addTranslator(MetadataType.FLOAT, (boatEntity, entityMetadata) -> + .addTranslator(MetadataTypes.INT, (boatEntity, entityMetadata) -> boatEntity.getDirtyMetadata().put(EntityDataTypes.HURT_TICKS, entityMetadata.getValue())) // Time since last hit + .addTranslator(MetadataTypes.INT, (boatEntity, entityMetadata) -> boatEntity.getDirtyMetadata().put(EntityDataTypes.HURT_DIRECTION, entityMetadata.getValue())) // Rocking direction + .addTranslator(MetadataTypes.FLOAT, (boatEntity, entityMetadata) -> // 'Health' in Bedrock, damage taken in Java - it makes motion in Bedrock boatEntity.getDirtyMetadata().put(EntityDataTypes.STRUCTURAL_INTEGRITY, 40 - ((int) ((FloatEntityMetadata) entityMetadata).getPrimitiveValue()))) - .addTranslator(MetadataType.BOOLEAN, BoatEntity::setPaddlingLeft) - .addTranslator(MetadataType.BOOLEAN, BoatEntity::setPaddlingRight) - .addTranslator(MetadataType.INT, (boatEntity, entityMetadata) -> boatEntity.getDirtyMetadata().put(EntityDataTypes.BOAT_BUBBLE_TIME, entityMetadata.getValue())) // May not actually do anything + .addTranslator(MetadataTypes.BOOLEAN, BoatEntity::setPaddlingLeft) + .addTranslator(MetadataTypes.BOOLEAN, BoatEntity::setPaddlingRight) + .addTranslator(MetadataTypes.INT, (boatEntity, entityMetadata) -> boatEntity.getDirtyMetadata().put(EntityDataTypes.BOAT_BUBBLE_TIME, entityMetadata.getValue())) // May not actually do anything .build(); ACACIA_BOAT = buildBoat(boatBase, EntityType.ACACIA_BOAT, BoatEntity.BoatVariant.ACACIA); @@ -614,41 +614,41 @@ public final class EntityDefinitions { } EntityDefinition<LivingEntity> livingEntityBase = EntityDefinition.inherited(LivingEntity::new, entityBase) - .addTranslator(MetadataType.BYTE, LivingEntity::setLivingEntityFlags) - .addTranslator(MetadataType.FLOAT, LivingEntity::setHealth) - .addTranslator(MetadataType.PARTICLES, LivingEntity::setParticles) - .addTranslator(MetadataType.BOOLEAN, + .addTranslator(MetadataTypes.BYTE, LivingEntity::setLivingEntityFlags) + .addTranslator(MetadataTypes.FLOAT, LivingEntity::setHealth) + .addTranslator(MetadataTypes.PARTICLES, LivingEntity::setParticles) + .addTranslator(MetadataTypes.BOOLEAN, (livingEntity, entityMetadata) -> livingEntity.getDirtyMetadata().put(EntityDataTypes.EFFECT_AMBIENCE, (byte) (((BooleanEntityMetadata) entityMetadata).getPrimitiveValue() ? 1 : 0))) .addTranslator(null) // Arrow count .addTranslator(null) // Stinger count - .addTranslator(MetadataType.OPTIONAL_POSITION, LivingEntity::setBedPosition) + .addTranslator(MetadataTypes.OPTIONAL_POSITION, LivingEntity::setBedPosition) .build(); ARMOR_STAND = EntityDefinition.inherited(ArmorStandEntity::new, livingEntityBase) .type(EntityType.ARMOR_STAND) .height(1.975f).width(0.5f) - .addTranslator(MetadataType.BYTE, ArmorStandEntity::setArmorStandFlags) - .addTranslator(MetadataType.ROTATION, ArmorStandEntity::setHeadRotation) - .addTranslator(MetadataType.ROTATION, ArmorStandEntity::setBodyRotation) - .addTranslator(MetadataType.ROTATION, ArmorStandEntity::setLeftArmRotation) - .addTranslator(MetadataType.ROTATION, ArmorStandEntity::setRightArmRotation) - .addTranslator(MetadataType.ROTATION, ArmorStandEntity::setLeftLegRotation) - .addTranslator(MetadataType.ROTATION, ArmorStandEntity::setRightLegRotation) + .addTranslator(MetadataTypes.BYTE, ArmorStandEntity::setArmorStandFlags) + .addTranslator(MetadataTypes.ROTATION, ArmorStandEntity::setHeadRotation) + .addTranslator(MetadataTypes.ROTATION, ArmorStandEntity::setBodyRotation) + .addTranslator(MetadataTypes.ROTATION, ArmorStandEntity::setLeftArmRotation) + .addTranslator(MetadataTypes.ROTATION, ArmorStandEntity::setRightArmRotation) + .addTranslator(MetadataTypes.ROTATION, ArmorStandEntity::setLeftLegRotation) + .addTranslator(MetadataTypes.ROTATION, ArmorStandEntity::setRightLegRotation) .build(); PLAYER = EntityDefinition.<PlayerEntity>inherited(null, livingEntityBase) .type(EntityType.PLAYER) .height(1.8f).width(0.6f) .offset(1.62f) - .addTranslator(MetadataType.FLOAT, PlayerEntity::setAbsorptionHearts) + .addTranslator(MetadataTypes.FLOAT, PlayerEntity::setAbsorptionHearts) .addTranslator(null) // Player score - .addTranslator(MetadataType.BYTE, PlayerEntity::setSkinVisibility) + .addTranslator(MetadataTypes.BYTE, PlayerEntity::setSkinVisibility) .addTranslator(null) // Player main hand - .addTranslator(MetadataType.NBT_TAG, PlayerEntity::setLeftParrot) - .addTranslator(MetadataType.NBT_TAG, PlayerEntity::setRightParrot) + .addTranslator(MetadataTypes.NBT_TAG, PlayerEntity::setLeftParrot) + .addTranslator(MetadataTypes.NBT_TAG, PlayerEntity::setRightParrot) .build(); EntityDefinition<MobEntity> mobEntityBase = EntityDefinition.inherited(MobEntity::new, livingEntityBase) - .addTranslator(MetadataType.BYTE, MobEntity::setMobFlags) + .addTranslator(MetadataTypes.BYTE, MobEntity::setMobFlags) .build(); // Extends mob @@ -656,23 +656,23 @@ public final class EntityDefinitions { ALLAY = EntityDefinition.inherited(AllayEntity::new, mobEntityBase) .type(EntityType.ALLAY) .height(0.6f).width(0.35f) - .addTranslator(MetadataType.BOOLEAN, AllayEntity::setDancing) - .addTranslator(MetadataType.BOOLEAN, AllayEntity::setCanDuplicate) + .addTranslator(MetadataTypes.BOOLEAN, AllayEntity::setDancing) + .addTranslator(MetadataTypes.BOOLEAN, AllayEntity::setCanDuplicate) .build(); BAT = EntityDefinition.inherited(BatEntity::new, mobEntityBase) .type(EntityType.BAT) .height(0.9f).width(0.5f) - .addTranslator(MetadataType.BYTE, BatEntity::setBatFlags) + .addTranslator(MetadataTypes.BYTE, BatEntity::setBatFlags) .build(); BOGGED = EntityDefinition.inherited(BoggedEntity::new, mobEntityBase) .type(EntityType.BOGGED) .height(1.99f).width(0.6f) - .addTranslator(MetadataType.BOOLEAN, BoggedEntity::setSheared) + .addTranslator(MetadataTypes.BOOLEAN, BoggedEntity::setSheared) .build(); BLAZE = EntityDefinition.inherited(BlazeEntity::new, mobEntityBase) .type(EntityType.BLAZE) .height(1.8f).width(0.6f) - .addTranslator(MetadataType.BYTE, BlazeEntity::setBlazeFlags) + .addTranslator(MetadataTypes.BYTE, BlazeEntity::setBlazeFlags) .build(); BREEZE = EntityDefinition.inherited(BreezeEntity::new, mobEntityBase) .type(EntityType.BREEZE) @@ -681,10 +681,10 @@ public final class EntityDefinitions { CREAKING = EntityDefinition.inherited(CreakingEntity::new, mobEntityBase) .type(EntityType.CREAKING) .height(2.7f).width(0.9f) - .addTranslator(MetadataType.BOOLEAN, CreakingEntity::setCanMove) - .addTranslator(MetadataType.BOOLEAN, CreakingEntity::setActive) - .addTranslator(MetadataType.BOOLEAN, CreakingEntity::setIsTearingDown) - .addTranslator(MetadataType.OPTIONAL_POSITION, CreakingEntity::setHomePos) + .addTranslator(MetadataTypes.BOOLEAN, CreakingEntity::setCanMove) + .addTranslator(MetadataTypes.BOOLEAN, CreakingEntity::setActive) + .addTranslator(MetadataTypes.BOOLEAN, CreakingEntity::setIsTearingDown) + .addTranslator(MetadataTypes.OPTIONAL_POSITION, CreakingEntity::setHomePos) .properties(new GeyserEntityProperties.Builder() .addEnum(CreakingEntity.CREAKING_STATE, "neutral", @@ -699,16 +699,16 @@ public final class EntityDefinitions { .type(EntityType.CREEPER) .height(1.7f).width(0.6f) .offset(1.62f) - .addTranslator(MetadataType.INT, CreeperEntity::setSwelling) - .addTranslator(MetadataType.BOOLEAN, (entity, entityMetadata) -> entity.setFlag(EntityFlag.POWERED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue())) - .addTranslator(MetadataType.BOOLEAN, CreeperEntity::setIgnited) + .addTranslator(MetadataTypes.INT, CreeperEntity::setSwelling) + .addTranslator(MetadataTypes.BOOLEAN, (entity, entityMetadata) -> entity.setFlag(EntityFlag.POWERED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue())) + .addTranslator(MetadataTypes.BOOLEAN, CreeperEntity::setIgnited) .build(); ENDERMAN = EntityDefinition.inherited(EndermanEntity::new, mobEntityBase) .type(EntityType.ENDERMAN) .height(2.9f).width(0.6f) - .addTranslator(MetadataType.OPTIONAL_BLOCK_STATE, EndermanEntity::setCarriedBlock) - .addTranslator(MetadataType.BOOLEAN, EndermanEntity::setScreaming) - .addTranslator(MetadataType.BOOLEAN, EndermanEntity::setAngry) + .addTranslator(MetadataTypes.OPTIONAL_BLOCK_STATE, EndermanEntity::setCarriedBlock) + .addTranslator(MetadataTypes.BOOLEAN, EndermanEntity::setScreaming) + .addTranslator(MetadataTypes.BOOLEAN, EndermanEntity::setAngry) .build(); ENDERMITE = EntityDefinition.inherited(MonsterEntity::new, mobEntityBase) .type(EntityType.ENDERMITE) @@ -716,12 +716,12 @@ public final class EntityDefinitions { .build(); ENDER_DRAGON = EntityDefinition.inherited(EnderDragonEntity::new, mobEntityBase) .type(EntityType.ENDER_DRAGON) - .addTranslator(MetadataType.INT, EnderDragonEntity::setPhase) + .addTranslator(MetadataTypes.INT, EnderDragonEntity::setPhase) .build(); GHAST = EntityDefinition.inherited(GhastEntity::new, mobEntityBase) .type(EntityType.GHAST) .heightAndWidth(4.0f) - .addTranslator(MetadataType.BOOLEAN, GhastEntity::setGhastAttacking) + .addTranslator(MetadataTypes.BOOLEAN, GhastEntity::setGhastAttacking) .build(); GIANT = EntityDefinition.inherited(GiantEntity::new, mobEntityBase) .type(EntityType.GIANT) @@ -738,7 +738,7 @@ public final class EntityDefinitions { .type(EntityType.PHANTOM) .height(0.5f).width(0.9f) .offset(0.6f) - .addTranslator(MetadataType.INT, PhantomEntity::setPhantomScale) + .addTranslator(MetadataTypes.INT, PhantomEntity::setPhantomScale) .build(); SILVERFISH = EntityDefinition.inherited(MonsterEntity::new, mobEntityBase) .type(EntityType.SILVERFISH) @@ -747,26 +747,26 @@ public final class EntityDefinitions { SHULKER = EntityDefinition.inherited(ShulkerEntity::new, mobEntityBase) .type(EntityType.SHULKER) .heightAndWidth(1f) - .addTranslator(MetadataType.DIRECTION, ShulkerEntity::setAttachedFace) - .addTranslator(MetadataType.BYTE, ShulkerEntity::setShulkerHeight) - .addTranslator(MetadataType.BYTE, ShulkerEntity::setShulkerColor) + .addTranslator(MetadataTypes.DIRECTION, ShulkerEntity::setAttachedFace) + .addTranslator(MetadataTypes.BYTE, ShulkerEntity::setShulkerHeight) + .addTranslator(MetadataTypes.BYTE, ShulkerEntity::setShulkerColor) .build(); SKELETON = EntityDefinition.inherited(SkeletonEntity::new, mobEntityBase) .type(EntityType.SKELETON) .height(1.8f).width(0.6f) .offset(1.62f) - .addTranslator(MetadataType.BOOLEAN, SkeletonEntity::setConvertingToStray) + .addTranslator(MetadataTypes.BOOLEAN, SkeletonEntity::setConvertingToStray) .build(); SNOW_GOLEM = EntityDefinition.inherited(SnowGolemEntity::new, mobEntityBase) .type(EntityType.SNOW_GOLEM) .height(1.9f).width(0.7f) - .addTranslator(MetadataType.BYTE, SnowGolemEntity::setSnowGolemFlags) + .addTranslator(MetadataTypes.BYTE, SnowGolemEntity::setSnowGolemFlags) .build(); SPIDER = EntityDefinition.inherited(SpiderEntity::new, mobEntityBase) .type(EntityType.SPIDER) .height(0.9f).width(1.4f) .offset(1f) - .addTranslator(MetadataType.BYTE, SpiderEntity::setSpiderFlags) + .addTranslator(MetadataTypes.BYTE, SpiderEntity::setSpiderFlags) .build(); CAVE_SPIDER = EntityDefinition.inherited(SpiderEntity::new, SPIDER) .type(EntityType.CAVE_SPIDER) @@ -780,20 +780,20 @@ public final class EntityDefinitions { VEX = EntityDefinition.inherited(VexEntity::new, mobEntityBase) .type(EntityType.VEX) .height(0.8f).width(0.4f) - .addTranslator(MetadataType.BYTE, VexEntity::setVexFlags) + .addTranslator(MetadataTypes.BYTE, VexEntity::setVexFlags) .build(); WARDEN = EntityDefinition.inherited(WardenEntity::new, mobEntityBase) .type(EntityType.WARDEN) .height(2.9f).width(0.9f) - .addTranslator(MetadataType.INT, WardenEntity::setAngerLevel) + .addTranslator(MetadataTypes.INT, WardenEntity::setAngerLevel) .build(); WITHER = EntityDefinition.inherited(WitherEntity::new, mobEntityBase) .type(EntityType.WITHER) .height(3.5f).width(0.9f) - .addTranslator(MetadataType.INT, WitherEntity::setTarget1) - .addTranslator(MetadataType.INT, WitherEntity::setTarget2) - .addTranslator(MetadataType.INT, WitherEntity::setTarget3) - .addTranslator(MetadataType.INT, WitherEntity::setInvulnerableTicks) + .addTranslator(MetadataTypes.INT, WitherEntity::setTarget1) + .addTranslator(MetadataTypes.INT, WitherEntity::setTarget2) + .addTranslator(MetadataTypes.INT, WitherEntity::setTarget3) + .addTranslator(MetadataTypes.INT, WitherEntity::setInvulnerableTicks) .build(); WITHER_SKELETON = EntityDefinition.inherited(AbstractSkeletonEntity::new, mobEntityBase) .type(EntityType.WITHER_SKELETON) @@ -802,23 +802,23 @@ public final class EntityDefinitions { ZOGLIN = EntityDefinition.inherited(ZoglinEntity::new, mobEntityBase) .type(EntityType.ZOGLIN) .height(1.4f).width(1.3965f) - .addTranslator(MetadataType.BOOLEAN, ZoglinEntity::setBaby) + .addTranslator(MetadataTypes.BOOLEAN, ZoglinEntity::setBaby) .build(); ZOMBIE = EntityDefinition.inherited(ZombieEntity::new, mobEntityBase) .type(EntityType.ZOMBIE) .height(1.8f).width(0.6f) .offset(1.62f) - .addTranslator(MetadataType.BOOLEAN, ZombieEntity::setZombieBaby) + .addTranslator(MetadataTypes.BOOLEAN, ZombieEntity::setZombieBaby) .addTranslator(null) // "set special type", doesn't do anything - .addTranslator(MetadataType.BOOLEAN, ZombieEntity::setConvertingToDrowned) + .addTranslator(MetadataTypes.BOOLEAN, ZombieEntity::setConvertingToDrowned) .build(); ZOMBIE_VILLAGER = EntityDefinition.inherited(ZombieVillagerEntity::new, ZOMBIE) .type(EntityType.ZOMBIE_VILLAGER) .height(1.8f).width(0.6f) .offset(1.62f) .identifier("minecraft:zombie_villager_v2") - .addTranslator(MetadataType.BOOLEAN, ZombieVillagerEntity::setTransforming) - .addTranslator(MetadataType.VILLAGER_DATA, ZombieVillagerEntity::setZombieVillagerData) + .addTranslator(MetadataTypes.BOOLEAN, ZombieVillagerEntity::setTransforming) + .addTranslator(MetadataTypes.VILLAGER_DATA, ZombieVillagerEntity::setZombieVillagerData) .build(); ZOMBIFIED_PIGLIN = EntityDefinition.inherited(ZombifiedPiglinEntity::new, ZOMBIE) //TODO test how zombie entity metadata is handled? .type(EntityType.ZOMBIFIED_PIGLIN) @@ -839,7 +839,7 @@ public final class EntityDefinitions { .type(EntityType.GUARDIAN) .heightAndWidth(0.85f) .addTranslator(null) // Moving //TODO - .addTranslator(MetadataType.INT, GuardianEntity::setGuardianTarget) + .addTranslator(MetadataTypes.INT, GuardianEntity::setGuardianTarget) .build(); ELDER_GUARDIAN = EntityDefinition.inherited(ElderGuardianEntity::new, GUARDIAN) .type(EntityType.ELDER_GUARDIAN) @@ -849,7 +849,7 @@ public final class EntityDefinitions { SLIME = EntityDefinition.inherited(SlimeEntity::new, mobEntityBase) .type(EntityType.SLIME) .heightAndWidth(0.51f) - .addTranslator(MetadataType.INT, SlimeEntity::setSlimeScale) + .addTranslator(MetadataTypes.INT, SlimeEntity::setSlimeScale) .build(); MAGMA_CUBE = EntityDefinition.inherited(MagmaCubeEntity::new, SLIME) .type(EntityType.MAGMA_CUBE) @@ -865,7 +865,7 @@ public final class EntityDefinitions { PUFFERFISH = EntityDefinition.inherited(PufferFishEntity::new, abstractFishEntityBase) .type(EntityType.PUFFERFISH) .heightAndWidth(0.7f) - .addTranslator(MetadataType.INT, PufferFishEntity::setPufferfishSize) + .addTranslator(MetadataTypes.INT, PufferFishEntity::setPufferfishSize) .build(); SALMON = EntityDefinition.inherited(abstractFishEntityBase.factory(), abstractFishEntityBase) .type(EntityType.SALMON) @@ -880,18 +880,18 @@ public final class EntityDefinitions { .type(EntityType.TROPICAL_FISH) .heightAndWidth(0.6f) .identifier("minecraft:tropicalfish") - .addTranslator(MetadataType.INT, TropicalFishEntity::setFishVariant) + .addTranslator(MetadataTypes.INT, TropicalFishEntity::setFishVariant) .build(); EntityDefinition<BasePiglinEntity> abstractPiglinEntityBase = EntityDefinition.inherited(BasePiglinEntity::new, mobEntityBase) - .addTranslator(MetadataType.BOOLEAN, BasePiglinEntity::setImmuneToZombification) + .addTranslator(MetadataTypes.BOOLEAN, BasePiglinEntity::setImmuneToZombification) .build(); PIGLIN = EntityDefinition.inherited(PiglinEntity::new, abstractPiglinEntityBase) .type(EntityType.PIGLIN) .height(1.95f).width(0.6f) - .addTranslator(MetadataType.BOOLEAN, PiglinEntity::setBaby) - .addTranslator(MetadataType.BOOLEAN, PiglinEntity::setChargingCrossbow) - .addTranslator(MetadataType.BOOLEAN, PiglinEntity::setDancing) + .addTranslator(MetadataTypes.BOOLEAN, PiglinEntity::setBaby) + .addTranslator(MetadataTypes.BOOLEAN, PiglinEntity::setChargingCrossbow) + .addTranslator(MetadataTypes.BOOLEAN, PiglinEntity::setDancing) .build(); PIGLIN_BRUTE = EntityDefinition.inherited(abstractPiglinEntityBase.factory(), abstractPiglinEntityBase) .type(EntityType.PIGLIN_BRUTE) @@ -902,7 +902,7 @@ public final class EntityDefinitions { .addTranslator(null) // Celebrating //TODO .build(); EntityDefinition<SpellcasterIllagerEntity> spellcasterEntityBase = EntityDefinition.inherited(SpellcasterIllagerEntity::new, raidParticipantEntityBase) - .addTranslator(MetadataType.BYTE, SpellcasterIllagerEntity::setSpellType) + .addTranslator(MetadataTypes.BYTE, SpellcasterIllagerEntity::setSpellType) .build(); EVOKER = EntityDefinition.inherited(spellcasterEntityBase.factory(), spellcasterEntityBase) .type(EntityType.EVOKER) @@ -918,7 +918,7 @@ public final class EntityDefinitions { .type(EntityType.PILLAGER) .height(1.8f).width(0.6f) .offset(1.62f) - .addTranslator(MetadataType.BOOLEAN, PillagerEntity::setChargingCrossbow) + .addTranslator(MetadataTypes.BOOLEAN, PillagerEntity::setChargingCrossbow) .build(); RAVAGER = EntityDefinition.inherited(RavagerEntity::new, raidParticipantEntityBase) .type(EntityType.RAVAGER) @@ -938,7 +938,7 @@ public final class EntityDefinitions { } EntityDefinition<AgeableEntity> ageableEntityBase = EntityDefinition.inherited(AgeableEntity::new, mobEntityBase) - .addTranslator(MetadataType.BOOLEAN, AgeableEntity::setBaby) + .addTranslator(MetadataTypes.BOOLEAN, AgeableEntity::setBaby) .build(); // Extends ageable @@ -955,13 +955,13 @@ public final class EntityDefinitions { "rolled_up_relaxing", "rolled_up_unrolling") .build()) - .addTranslator(MetadataType.ARMADILLO_STATE, ArmadilloEntity::setArmadilloState) + .addTranslator(MetadataTypes.ARMADILLO_STATE, ArmadilloEntity::setArmadilloState) .build(); AXOLOTL = EntityDefinition.inherited(AxolotlEntity::new, ageableEntityBase) .type(EntityType.AXOLOTL) .height(0.42f).width(0.7f) - .addTranslator(MetadataType.INT, AxolotlEntity::setVariant) - .addTranslator(MetadataType.BOOLEAN, AxolotlEntity::setPlayingDead) + .addTranslator(MetadataTypes.INT, AxolotlEntity::setVariant) + .addTranslator(MetadataTypes.BOOLEAN, AxolotlEntity::setPlayingDead) .addTranslator(null) // From bucket .build(); BEE = EntityDefinition.inherited(BeeEntity::new, ageableEntityBase) @@ -970,8 +970,8 @@ public final class EntityDefinitions { .properties(new GeyserEntityProperties.Builder() .addBoolean("minecraft:has_nectar") .build()) - .addTranslator(MetadataType.BYTE, BeeEntity::setBeeFlags) - .addTranslator(MetadataType.INT, BeeEntity::setAngerTime) + .addTranslator(MetadataTypes.BYTE, BeeEntity::setBeeFlags) + .addTranslator(MetadataTypes.INT, BeeEntity::setAngerTime) .build(); CHICKEN = EntityDefinition.inherited(ChickenEntity::new, ageableEntityBase) .type(EntityType.CHICKEN) @@ -984,89 +984,89 @@ public final class EntityDefinitions { FOX = EntityDefinition.inherited(FoxEntity::new, ageableEntityBase) .type(EntityType.FOX) .height(0.7f).width(0.6f) - .addTranslator(MetadataType.INT, FoxEntity::setFoxVariant) - .addTranslator(MetadataType.BYTE, FoxEntity::setFoxFlags) + .addTranslator(MetadataTypes.INT, FoxEntity::setFoxVariant) + .addTranslator(MetadataTypes.BYTE, FoxEntity::setFoxFlags) .addTranslator(null) // Trusted player 1 .addTranslator(null) // Trusted player 2 .build(); FROG = EntityDefinition.inherited(FrogEntity::new, ageableEntityBase) .type(EntityType.FROG) .heightAndWidth(0.5f) - .addTranslator(MetadataType.FROG_VARIANT, FrogEntity::setFrogVariant) - .addTranslator(MetadataType.OPTIONAL_VARINT, FrogEntity::setTongueTarget) + .addTranslator(MetadataTypes.FROG_VARIANT, FrogEntity::setFrogVariant) + .addTranslator(MetadataTypes.OPTIONAL_VARINT, FrogEntity::setTongueTarget) .build(); HOGLIN = EntityDefinition.inherited(HoglinEntity::new, ageableEntityBase) .type(EntityType.HOGLIN) .height(1.4f).width(1.3965f) - .addTranslator(MetadataType.BOOLEAN, HoglinEntity::setImmuneToZombification) + .addTranslator(MetadataTypes.BOOLEAN, HoglinEntity::setImmuneToZombification) .build(); GOAT = EntityDefinition.inherited(GoatEntity::new, ageableEntityBase) .type(EntityType.GOAT) .height(1.3f).width(0.9f) - .addTranslator(MetadataType.BOOLEAN, GoatEntity::setScreamer) - .addTranslator(MetadataType.BOOLEAN, GoatEntity::setHasLeftHorn) - .addTranslator(MetadataType.BOOLEAN, GoatEntity::setHasRightHorn) + .addTranslator(MetadataTypes.BOOLEAN, GoatEntity::setScreamer) + .addTranslator(MetadataTypes.BOOLEAN, GoatEntity::setHasLeftHorn) + .addTranslator(MetadataTypes.BOOLEAN, GoatEntity::setHasRightHorn) .build(); MOOSHROOM = EntityDefinition.inherited(MooshroomEntity::new, ageableEntityBase) .type(EntityType.MOOSHROOM) .height(1.4f).width(0.9f) - .addTranslator(MetadataType.STRING, MooshroomEntity::setVariant) + .addTranslator(MetadataTypes.STRING, MooshroomEntity::setVariant) .build(); OCELOT = EntityDefinition.inherited(OcelotEntity::new, ageableEntityBase) .type(EntityType.OCELOT) .height(0.7f).width(0.6f) - .addTranslator(MetadataType.BOOLEAN, (ocelotEntity, entityMetadata) -> ocelotEntity.setFlag(EntityFlag.TRUSTING, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue())) + .addTranslator(MetadataTypes.BOOLEAN, (ocelotEntity, entityMetadata) -> ocelotEntity.setFlag(EntityFlag.TRUSTING, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue())) .build(); PANDA = EntityDefinition.inherited(PandaEntity::new, ageableEntityBase) .type(EntityType.PANDA) .height(1.25f).width(1.125f) .addTranslator(null) // Unhappy counter .addTranslator(null) // Sneeze counter - .addTranslator(MetadataType.INT, PandaEntity::setEatingCounter) - .addTranslator(MetadataType.BYTE, PandaEntity::setMainGene) - .addTranslator(MetadataType.BYTE, PandaEntity::setHiddenGene) - .addTranslator(MetadataType.BYTE, PandaEntity::setPandaFlags) + .addTranslator(MetadataTypes.INT, PandaEntity::setEatingCounter) + .addTranslator(MetadataTypes.BYTE, PandaEntity::setMainGene) + .addTranslator(MetadataTypes.BYTE, PandaEntity::setHiddenGene) + .addTranslator(MetadataTypes.BYTE, PandaEntity::setPandaFlags) .build(); PIG = EntityDefinition.inherited(PigEntity::new, ageableEntityBase) .type(EntityType.PIG) .heightAndWidth(0.9f) - .addTranslator(MetadataType.BOOLEAN, (pigEntity, entityMetadata) -> pigEntity.setFlag(EntityFlag.SADDLED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue())) - .addTranslator(MetadataType.INT, PigEntity::setBoost) + .addTranslator(MetadataTypes.BOOLEAN, (pigEntity, entityMetadata) -> pigEntity.setFlag(EntityFlag.SADDLED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue())) + .addTranslator(MetadataTypes.INT, PigEntity::setBoost) .build(); POLAR_BEAR = EntityDefinition.inherited(PolarBearEntity::new, ageableEntityBase) .type(EntityType.POLAR_BEAR) .height(1.4f).width(1.3f) - .addTranslator(MetadataType.BOOLEAN, (entity, entityMetadata) -> entity.setFlag(EntityFlag.STANDING, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue())) + .addTranslator(MetadataTypes.BOOLEAN, (entity, entityMetadata) -> entity.setFlag(EntityFlag.STANDING, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue())) .build(); RABBIT = EntityDefinition.inherited(RabbitEntity::new, ageableEntityBase) .type(EntityType.RABBIT) .height(0.5f).width(0.4f) - .addTranslator(MetadataType.INT, RabbitEntity::setRabbitVariant) + .addTranslator(MetadataTypes.INT, RabbitEntity::setRabbitVariant) .build(); SHEEP = EntityDefinition.inherited(SheepEntity::new, ageableEntityBase) .type(EntityType.SHEEP) .height(1.3f).width(0.9f) - .addTranslator(MetadataType.BYTE, SheepEntity::setSheepFlags) + .addTranslator(MetadataTypes.BYTE, SheepEntity::setSheepFlags) .build(); SNIFFER = EntityDefinition.inherited(SnifferEntity::new, ageableEntityBase) .type(EntityType.SNIFFER) .height(1.75f).width(1.9f) - .addTranslator(MetadataType.SNIFFER_STATE, SnifferEntity::setSnifferState) + .addTranslator(MetadataTypes.SNIFFER_STATE, SnifferEntity::setSnifferState) .addTranslator(null) // Integer, drop seed at tick .build(); STRIDER = EntityDefinition.inherited(StriderEntity::new, ageableEntityBase) .type(EntityType.STRIDER) .height(1.7f).width(0.9f) - .addTranslator(MetadataType.INT, StriderEntity::setBoost) - .addTranslator(MetadataType.BOOLEAN, StriderEntity::setCold) - .addTranslator(MetadataType.BOOLEAN, StriderEntity::setSaddled) + .addTranslator(MetadataTypes.INT, StriderEntity::setBoost) + .addTranslator(MetadataTypes.BOOLEAN, StriderEntity::setCold) + .addTranslator(MetadataTypes.BOOLEAN, StriderEntity::setSaddled) .build(); TURTLE = EntityDefinition.inherited(TurtleEntity::new, ageableEntityBase) .type(EntityType.TURTLE) .height(0.4f).width(1.2f) .addTranslator(null) // Home position - .addTranslator(MetadataType.BOOLEAN, TurtleEntity::setPregnant) - .addTranslator(MetadataType.BOOLEAN, TurtleEntity::setLayingEgg) + .addTranslator(MetadataTypes.BOOLEAN, TurtleEntity::setPregnant) + .addTranslator(MetadataTypes.BOOLEAN, TurtleEntity::setLayingEgg) .addTranslator(null) // Travel position .addTranslator(null) // Going home .addTranslator(null) // Travelling @@ -1080,7 +1080,7 @@ public final class EntityDefinitions { .height(1.8f).width(0.6f) .offset(1.62f) .identifier("minecraft:villager_v2") - .addTranslator(MetadataType.VILLAGER_DATA, VillagerEntity::setVillagerData) + .addTranslator(MetadataTypes.VILLAGER_DATA, VillagerEntity::setVillagerData) .build(); WANDERING_TRADER = EntityDefinition.inherited(abstractVillagerEntityBase.factory(), abstractVillagerEntityBase) .type(EntityType.WANDERING_TRADER) @@ -1112,18 +1112,18 @@ public final class EntityDefinitions { // Horses { EntityDefinition<AbstractHorseEntity> abstractHorseEntityBase = EntityDefinition.inherited(AbstractHorseEntity::new, ageableEntityBase) - .addTranslator(MetadataType.BYTE, AbstractHorseEntity::setHorseFlags) + .addTranslator(MetadataTypes.BYTE, AbstractHorseEntity::setHorseFlags) .build(); CAMEL = EntityDefinition.inherited(CamelEntity::new, abstractHorseEntityBase) .type(EntityType.CAMEL) .height(2.375f).width(1.7f) - .addTranslator(MetadataType.BOOLEAN, CamelEntity::setDashing) - .addTranslator(MetadataType.LONG, CamelEntity::setLastPoseTick) + .addTranslator(MetadataTypes.BOOLEAN, CamelEntity::setDashing) + .addTranslator(MetadataTypes.LONG, CamelEntity::setLastPoseTick) .build(); HORSE = EntityDefinition.inherited(HorseEntity::new, abstractHorseEntityBase) .type(EntityType.HORSE) .height(1.6f).width(1.3965f) - .addTranslator(MetadataType.INT, HorseEntity::setHorseVariant) + .addTranslator(MetadataTypes.INT, HorseEntity::setHorseVariant) .build(); SKELETON_HORSE = EntityDefinition.inherited(SkeletonHorseEntity::new, abstractHorseEntityBase) .type(EntityType.SKELETON_HORSE) @@ -1134,7 +1134,7 @@ public final class EntityDefinitions { .height(1.6f).width(1.3965f) .build(); EntityDefinition<ChestedHorseEntity> chestedHorseEntityBase = EntityDefinition.inherited(ChestedHorseEntity::new, abstractHorseEntityBase) - .addTranslator(MetadataType.BOOLEAN, (horseEntity, entityMetadata) -> horseEntity.setFlag(EntityFlag.CHESTED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue())) + .addTranslator(MetadataTypes.BOOLEAN, (horseEntity, entityMetadata) -> horseEntity.setFlag(EntityFlag.CHESTED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue())) .build(); DONKEY = EntityDefinition.inherited(chestedHorseEntityBase.factory(), chestedHorseEntityBase) .type(EntityType.DONKEY) @@ -1147,8 +1147,8 @@ public final class EntityDefinitions { LLAMA = EntityDefinition.inherited(LlamaEntity::new, chestedHorseEntityBase) .type(EntityType.LLAMA) .height(1.87f).width(0.9f) - .addTranslator(MetadataType.INT, LlamaEntity::setStrength) - .addTranslator(MetadataType.INT, (entity, entityMetadata) -> entity.getDirtyMetadata().put(EntityDataTypes.VARIANT, entityMetadata.getValue())) + .addTranslator(MetadataTypes.INT, LlamaEntity::setStrength) + .addTranslator(MetadataTypes.INT, (entity, entityMetadata) -> entity.getDirtyMetadata().put(EntityDataTypes.VARIANT, entityMetadata.getValue())) .build(); TRADER_LLAMA = EntityDefinition.inherited(TraderLlamaEntity::new, LLAMA) .type(EntityType.TRADER_LLAMA) @@ -1157,30 +1157,30 @@ public final class EntityDefinitions { } EntityDefinition<TameableEntity> tameableEntityBase = EntityDefinition.<TameableEntity>inherited(null, ageableEntityBase) // No factory, is abstract - .addTranslator(MetadataType.BYTE, TameableEntity::setTameableFlags) - .addTranslator(MetadataType.OPTIONAL_UUID, TameableEntity::setOwner) + .addTranslator(MetadataTypes.BYTE, TameableEntity::setTameableFlags) + .addTranslator(MetadataTypes.OPTIONAL_UUID, TameableEntity::setOwner) .build(); CAT = EntityDefinition.inherited(CatEntity::new, tameableEntityBase) .type(EntityType.CAT) .height(0.35f).width(0.3f) - .addTranslator(MetadataType.CAT_VARIANT, CatEntity::setCatVariant) - .addTranslator(MetadataType.BOOLEAN, CatEntity::setResting) + .addTranslator(MetadataTypes.CAT_VARIANT, CatEntity::setCatVariant) + .addTranslator(MetadataTypes.BOOLEAN, CatEntity::setResting) .addTranslator(null) // "resting state one" //TODO - .addTranslator(MetadataType.INT, CatEntity::setCollarColor) + .addTranslator(MetadataTypes.INT, CatEntity::setCollarColor) .build(); PARROT = EntityDefinition.inherited(ParrotEntity::new, tameableEntityBase) .type(EntityType.PARROT) .height(0.9f).width(0.5f) - .addTranslator(MetadataType.INT, (parrotEntity, entityMetadata) -> parrotEntity.getDirtyMetadata().put(EntityDataTypes.VARIANT, entityMetadata.getValue())) // Parrot color + .addTranslator(MetadataTypes.INT, (parrotEntity, entityMetadata) -> parrotEntity.getDirtyMetadata().put(EntityDataTypes.VARIANT, entityMetadata.getValue())) // Parrot color .build(); WOLF = EntityDefinition.inherited(WolfEntity::new, tameableEntityBase) .type(EntityType.WOLF) .height(0.85f).width(0.6f) // "Begging" on wiki.vg, "Interested" in Nukkit - the tilt of the head - .addTranslator(MetadataType.BOOLEAN, (wolfEntity, entityMetadata) -> wolfEntity.setFlag(EntityFlag.INTERESTED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue())) - .addTranslator(MetadataType.INT, WolfEntity::setCollarColor) - .addTranslator(MetadataType.INT, WolfEntity::setWolfAngerTime) - .addTranslator(MetadataType.WOLF_VARIANT, WolfEntity::setWolfVariant) + .addTranslator(MetadataTypes.BOOLEAN, (wolfEntity, entityMetadata) -> wolfEntity.setFlag(EntityFlag.INTERESTED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue())) + .addTranslator(MetadataTypes.INT, WolfEntity::setCollarColor) + .addTranslator(MetadataTypes.INT, WolfEntity::setWolfAngerTime) + .addTranslator(MetadataTypes.WOLF_VARIANT, WolfEntity::setWolfVariant) .build(); // As of 1.18 these don't track entity data at all diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/FireworkEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/FireworkEntity.java index f0739abb3..ebe35320e 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/FireworkEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/FireworkEntity.java @@ -51,7 +51,7 @@ public class FireworkEntity extends Entity { if (item == null) { return; } - DataComponents components = item.getDataComponents(); + DataComponents components = item.getDataComponentsPatch(); if (components == null) { return; } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java index afe0dcdc6..680bdecd8 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java @@ -120,7 +120,7 @@ public class ItemFrameEntity extends Entity { NbtMap itemDataTag = itemData.getTag(); if (itemDataTag != null) { // Remove custom name that Geyser sets for items due to translating non-"custom_name" components - String customName = ItemTranslator.getCustomName(session, heldItem.getDataComponents(), + String customName = ItemTranslator.getCustomName(session, heldItem.getDataComponentsPatch(), session.getItemMappings().getMapping(heldItem), 'f', true, false); if (customName == null) { // No custom name found, must modify tag if custom name exists 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 33064edfe..ca9dca6e0 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 @@ -61,7 +61,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEnt import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ObjectEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.level.particle.EntityEffectParticleData; import org.geysermc.mcprotocollib.protocol.data.game.level.particle.Particle; import org.geysermc.mcprotocollib.protocol.data.game.level.particle.ParticleType; @@ -344,7 +344,7 @@ public class LivingEntity extends Entity { */ // Implementation note for 1.20.5: this code was moved to the NameTag item. protected final InteractionResult checkInteractWithNameTag(GeyserItemStack itemStack) { - if (itemStack.getComponent(DataComponentType.CUSTOM_NAME) != null) { + if (itemStack.getComponent(DataComponentTypes.CUSTOM_NAME) != null) { // The mob shall be named return InteractionResult.SUCCESS; } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ThrownPotionEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ThrownPotionEntity.java index 88cf4f8b9..e940b074e 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ThrownPotionEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ThrownPotionEntity.java @@ -36,7 +36,7 @@ import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.PotionContents; @@ -59,9 +59,9 @@ public class ThrownPotionEntity extends ThrowableItemEntity { setFlag(EntityFlag.LINGERING, false); } else { // As of Java 1.19.3, the server/client doesn't seem to care of the item is actually a potion? - DataComponents components = itemStack.getDataComponents(); + DataComponents components = itemStack.getDataComponentsPatch(); if (components != null) { - PotionContents potionContents = components.get(DataComponentType.POTION_CONTENTS); + PotionContents potionContents = components.get(DataComponentTypes.POTION_CONTENTS); if (potionContents != null) { Potion potion = Potion.getByJavaId(potionContents.getPotionId()); if (potion != null) { 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 b108c9fbe..c8b6a6f58 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 @@ -51,7 +51,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.Object import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; import java.util.Collections; @@ -129,7 +129,7 @@ public class WolfEntity extends TameableEntity { super.setBody(stack); isCurseOfBinding = ItemUtils.hasEffect(session, stack, EnchantmentComponent.PREVENT_ARMOR_CHANGE); // Not using ItemStack#getDataComponents as that wouldn't include default item components - repairableItems = GeyserItemStack.from(stack).getComponent(DataComponentType.REPAIRABLE); + repairableItems = GeyserItemStack.from(stack).getComponent(DataComponentTypes.REPAIRABLE); } @Override 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 f5969efbb..fe760c75a 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/AnvilContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/AnvilContainer.java @@ -32,7 +32,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.text.MessageTranslator; import org.geysermc.mcprotocollib.protocol.data.game.inventory.ContainerType; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundRenameItemPacket; /** @@ -73,7 +73,7 @@ public class AnvilContainer extends Container { String correctRename; newName = rename; - Component originalName = getInput().getComponent(DataComponentType.CUSTOM_NAME); + Component originalName = getInput().getComponent(DataComponentTypes.CUSTOM_NAME); String plainOriginalName = MessageTranslator.convertToPlainText(originalName, session.locale()); String plainNewName = MessageTranslator.convertToPlainText(rename); 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 c4a3542d1..a66b07598 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java @@ -43,6 +43,7 @@ import org.geysermc.geyser.session.cache.BundleCache; import org.geysermc.geyser.translator.item.ItemTranslator; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.EmptySlotDisplay; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.ItemSlotDisplay; @@ -89,7 +90,7 @@ public class GeyserItemStack { } public static @NonNull GeyserItemStack from(@Nullable ItemStack itemStack) { - return itemStack == null ? EMPTY : new GeyserItemStack(itemStack.getId(), itemStack.getAmount(), itemStack.getDataComponents()); + return itemStack == null ? EMPTY : new GeyserItemStack(itemStack.getId(), itemStack.getAmount(), itemStack.getDataComponentsPatch()); } public static @NonNull GeyserItemStack from(@NonNull SlotDisplay slotDisplay) { @@ -217,11 +218,11 @@ public class GeyserItemStack { // Not fresh from server? Then we have changes to apply!~ if (bundleData != null && !bundleData.freshFromServer()) { if (!bundleData.contents().isEmpty()) { - getOrCreateComponents().put(DataComponentType.BUNDLE_CONTENTS, bundleData.toComponent()); + getOrCreateComponents().put(DataComponentTypes.BUNDLE_CONTENTS, bundleData.toComponent()); } else { if (components != null) { // Empty list = no component = should delete - components.getDataComponents().remove(DataComponentType.BUNDLE_CONTENTS); + components.getDataComponents().remove(DataComponentTypes.BUNDLE_CONTENTS); } } } 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 4639e0151..2c0c2798d 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java @@ -36,7 +36,7 @@ import org.geysermc.geyser.item.Items; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.item.ItemTranslator; import org.geysermc.mcprotocollib.protocol.data.game.inventory.ContainerType; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.jetbrains.annotations.Range; import java.util.Arrays; @@ -135,7 +135,7 @@ public abstract class Inventory { // Lodestone caching if (newItem.asItem() == Items.COMPASS) { - var tracker = newItem.getComponent(DataComponentType.LODESTONE_TRACKER); + var tracker = newItem.getComponent(DataComponentTypes.LODESTONE_TRACKER); if (tracker != null) { session.getLodestoneCache().cacheInventoryItem(newItem, tracker); } 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 8282607af..ac9e35909 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 @@ -44,7 +44,7 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.inventory.InventoryTranslator; import org.geysermc.geyser.translator.text.MessageTranslator; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; import org.geysermc.mcprotocollib.protocol.data.game.item.component.ItemEnchantments; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundRenameItemPacket; @@ -117,7 +117,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater { // Changing the item in the input slot resets the name field on Bedrock, but // does not result in a FilterTextPacket - String originalName = MessageTranslator.convertToPlainText(input.getComponent(DataComponentType.CUSTOM_NAME), session.locale()); + String originalName = MessageTranslator.convertToPlainText(input.getComponent(DataComponentTypes.CUSTOM_NAME), session.locale()); ServerboundRenameItemPacket renameItemPacket = new ServerboundRenameItemPacket(originalName); session.sendDownstreamGamePacket(renameItemPacket); @@ -367,9 +367,9 @@ public class AnvilInventoryUpdater extends InventoryUpdater { private Object2IntMap<Enchantment> getEnchantments(GeyserSession session, GeyserItemStack itemStack) { ItemEnchantments enchantmentComponent; if (isEnchantedBook(itemStack)) { - enchantmentComponent = itemStack.getComponent(DataComponentType.STORED_ENCHANTMENTS); + enchantmentComponent = itemStack.getComponent(DataComponentTypes.STORED_ENCHANTMENTS); } else { - enchantmentComponent = itemStack.getComponent(DataComponentType.ENCHANTMENTS); + enchantmentComponent = itemStack.getComponent(DataComponentTypes.ENCHANTMENTS); } if (enchantmentComponent != null) { Object2IntMap<Enchantment> enchantments = new Object2IntOpenHashMap<>(); @@ -395,7 +395,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater { } private boolean isRepairing(GeyserItemStack input, GeyserItemStack material, GeyserSession session) { - HolderSet repairable = input.getComponent(DataComponentType.REPAIRABLE); + HolderSet repairable = input.getComponent(DataComponentTypes.REPAIRABLE); if (repairable == null) { return false; } @@ -409,27 +409,27 @@ public class AnvilInventoryUpdater extends InventoryUpdater { } // This should really check the name field in all cases, but that requires the localized name // of the item which can change depending on NBT and Minecraft Edition - Component originalName = anvilContainer.getInput().getComponent(DataComponentType.CUSTOM_NAME); + Component originalName = anvilContainer.getInput().getComponent(DataComponentTypes.CUSTOM_NAME); if (bedrock && originalName != null && anvilContainer.getNewName() != null) { // Check text and formatting String legacyOriginalName = MessageTranslator.convertMessage(originalName, session.locale()); return !legacyOriginalName.equals(anvilContainer.getNewName()); } - return !Objects.equals(originalName, anvilContainer.getResult().getComponent(DataComponentType.CUSTOM_NAME)); + return !Objects.equals(originalName, anvilContainer.getResult().getComponent(DataComponentTypes.CUSTOM_NAME)); } private int getRepairCost(GeyserItemStack itemStack) { - return itemStack.getComponentElseGet(DataComponentType.REPAIR_COST, () -> 0); + return itemStack.getComponentElseGet(DataComponentTypes.REPAIR_COST, () -> 0); } private boolean hasDurability(GeyserItemStack itemStack) { if (itemStack.asItem().defaultMaxDamage() > 0) { - return itemStack.getComponent(DataComponentType.UNBREAKABLE) != null; + return itemStack.getComponent(DataComponentTypes.UNBREAKABLE) != null; } return false; } private int getDamage(GeyserItemStack itemStack) { - return itemStack.getComponentElseGet(DataComponentType.DAMAGE, () -> 0); + return itemStack.getComponentElseGet(DataComponentTypes.DAMAGE, () -> 0); } } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/ArmorItem.java b/core/src/main/java/org/geysermc/geyser/item/type/ArmorItem.java index ec87728a9..c20cc490e 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/ArmorItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/ArmorItem.java @@ -33,7 +33,7 @@ import org.cloudburstmc.protocol.bedrock.data.TrimPattern; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.mcprotocollib.protocol.data.game.item.component.ArmorTrim; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; public class ArmorItem extends Item { @@ -46,7 +46,7 @@ public class ArmorItem extends Item { public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNull DataComponents components, @NonNull BedrockItemBuilder builder) { super.translateComponentsToBedrock(session, components, builder); - ArmorTrim trim = components.get(DataComponentType.TRIM); + ArmorTrim trim = components.get(DataComponentTypes.TRIM); if (trim != null) { TrimMaterial material = session.getRegistryCache().trimMaterials().byId(trim.material().id()); TrimPattern pattern = session.getRegistryCache().trimPatterns().byId(trim.pattern().id()); 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 b2d3737d8..8aaf389f6 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 @@ -33,7 +33,7 @@ import org.geysermc.geyser.item.Items; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.PotionContents; public class ArrowItem extends Item { @@ -48,7 +48,7 @@ public class ArrowItem extends Item { if (potion != null) { itemStack = Items.TIPPED_ARROW.newItemStack(itemStack.getAmount(), itemStack.getComponents()); PotionContents contents = potion.toComponent(); - itemStack.getOrCreateComponents().put(DataComponentType.POTION_CONTENTS, contents); + itemStack.getOrCreateComponents().put(DataComponentTypes.POTION_CONTENTS, contents); } return itemStack; } 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 6ec0da8ed..2a5f76c33 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 @@ -44,7 +44,7 @@ import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.geyser.util.MinecraftKey; import org.geysermc.mcprotocollib.protocol.data.game.Holder; import org.geysermc.mcprotocollib.protocol.data.game.item.component.BannerPatternLayer; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.Unit; @@ -206,7 +206,7 @@ public class BannerItem extends BlockItem { public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNull DataComponents components, @NonNull BedrockItemBuilder builder) { super.translateComponentsToBedrock(session, components, builder); - List<BannerPatternLayer> patterns = components.get(DataComponentType.BANNER_PATTERNS); + List<BannerPatternLayer> patterns = components.get(DataComponentTypes.BANNER_PATTERNS); if (patterns != null) { convertBannerPattern(session, patterns, builder); } @@ -225,9 +225,9 @@ public class BannerItem extends BlockItem { pair.right().ordinal())); } - components.put(DataComponentType.BANNER_PATTERNS, patternLayers); - components.put(DataComponentType.HIDE_ADDITIONAL_TOOLTIP, Unit.INSTANCE); - components.put(DataComponentType.ITEM_NAME, Component + components.put(DataComponentTypes.BANNER_PATTERNS, patternLayers); + components.put(DataComponentTypes.HIDE_ADDITIONAL_TOOLTIP, Unit.INSTANCE); + components.put(DataComponentTypes.ITEM_NAME, Component .translatable("block.minecraft.ominous_banner") .style(Style.style(TextColor.color(16755200))) ); 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 1c0ec0d5f..d6403a8c3 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 @@ -33,7 +33,7 @@ import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.item.BedrockItemBuilder; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.LodestoneTracker; @@ -62,7 +62,7 @@ public class CompassItem extends Item { public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNull DataComponents components, @NonNull BedrockItemBuilder builder) { super.translateComponentsToBedrock(session, components, builder); - LodestoneTracker tracker = components.get(DataComponentType.LODESTONE_TRACKER); + LodestoneTracker tracker = components.get(DataComponentTypes.LODESTONE_TRACKER); if (tracker != null) { int trackId = session.getLodestoneCache().store(tracker); // Set the bedrock tracking id - will return 0 if invalid @@ -72,7 +72,7 @@ public class CompassItem extends Item { private boolean isLodestoneCompass(@Nullable DataComponents components) { if (components != null) { - return components.getDataComponents().containsKey(DataComponentType.LODESTONE_TRACKER); + return components.getDataComponents().containsKey(DataComponentTypes.LODESTONE_TRACKER); } return false; } 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 7e1181c4e..13e79958e 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 @@ -33,7 +33,7 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.geyser.translator.item.ItemTranslator; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import java.util.List; @@ -47,7 +47,7 @@ public class CrossbowItem extends Item { public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNull DataComponents components, @NonNull BedrockItemBuilder builder) { super.translateComponentsToBedrock(session, components, builder); - List<ItemStack> chargedProjectiles = components.get(DataComponentType.CHARGED_PROJECTILES); + List<ItemStack> chargedProjectiles = components.get(DataComponentTypes.CHARGED_PROJECTILES); if (chargedProjectiles != null && !chargedProjectiles.isEmpty()) { ItemStack javaProjectile = chargedProjectiles.get(0); diff --git a/core/src/main/java/org/geysermc/geyser/item/type/DecoratedPotItem.java b/core/src/main/java/org/geysermc/geyser/item/type/DecoratedPotItem.java index 578ba4063..fa08bd7ec 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/DecoratedPotItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/DecoratedPotItem.java @@ -31,7 +31,7 @@ import org.geysermc.geyser.level.block.type.Block; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.item.BedrockItemBuilder; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import java.util.ArrayList; @@ -47,7 +47,7 @@ public class DecoratedPotItem extends BlockItem { public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNull DataComponents components, @NonNull BedrockItemBuilder builder) { super.translateComponentsToBedrock(session, components, builder); - List<Integer> decorations = components.get(DataComponentType.POT_DECORATIONS); // TODO maybe unbox in MCProtocolLib + List<Integer> decorations = components.get(DataComponentTypes.POT_DECORATIONS); // TODO maybe unbox in MCProtocolLib if (decorations != null) { List<String> sherds = new ArrayList<>(decorations.size()); for (Integer decoration : decorations) { 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 8b0f3e22e..f5ddb698b 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 @@ -36,7 +36,7 @@ import org.geysermc.geyser.item.enchantment.Enchantment; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.item.BedrockItemBuilder; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.ItemEnchantments; @@ -54,7 +54,7 @@ public class EnchantedBookItem extends Item { super.translateComponentsToBedrock(session, components, builder); List<NbtMap> bedrockEnchants = new ArrayList<>(); - ItemEnchantments enchantments = components.get(DataComponentType.STORED_ENCHANTMENTS); + ItemEnchantments enchantments = components.get(DataComponentTypes.STORED_ENCHANTMENTS); if (enchantments != null) { // TODO don't duplicate code? for (Map.Entry<Integer, Integer> enchantment : enchantments.getEnchantments().entrySet()) { NbtMap bedrockTag = remapEnchantment(session, enchantment.getKey(), enchantment.getValue(), builder); @@ -94,7 +94,7 @@ public class EnchantedBookItem extends Item { } } if (!javaEnchantments.isEmpty()) { - components.put(DataComponentType.STORED_ENCHANTMENTS, new ItemEnchantments(javaEnchantments, true)); + components.put(DataComponentTypes.STORED_ENCHANTMENTS, new ItemEnchantments(javaEnchantments, true)); } } } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/FilledMapItem.java b/core/src/main/java/org/geysermc/geyser/item/type/FilledMapItem.java index 07a0ad133..82c45ff31 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/FilledMapItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/FilledMapItem.java @@ -29,7 +29,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; public class FilledMapItem extends MapItem { @@ -45,7 +45,7 @@ public class FilledMapItem extends MapItem { //return builder.tag(NbtMap.builder().putInt("map", 0).build()); TODO if this is *still* broken, let's move it to translateComponentsToBedrock return builder; } else { - Integer mapColor = components.get(DataComponentType.MAP_COLOR); + Integer mapColor = components.get(DataComponentTypes.MAP_COLOR); if (mapColor != null) { // Note: damage 5 treasure map, 6 ??? // Java Edition allows any color; Bedrock only allows some. So let's take what colors we can get diff --git a/core/src/main/java/org/geysermc/geyser/item/type/FireworkRocketItem.java b/core/src/main/java/org/geysermc/geyser/item/type/FireworkRocketItem.java index 862325a90..265d3aad7 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/FireworkRocketItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/FireworkRocketItem.java @@ -35,7 +35,7 @@ import org.geysermc.geyser.level.FireworkColor; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.item.BedrockItemBuilder; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.Fireworks; @@ -51,7 +51,7 @@ public class FireworkRocketItem extends Item implements BedrockRequiresTagItem { public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNull DataComponents components, @NonNull BedrockItemBuilder builder) { super.translateComponentsToBedrock(session, components, builder); - Fireworks fireworks = components.get(DataComponentType.FIREWORKS); + Fireworks fireworks = components.get(DataComponentTypes.FIREWORKS); if (fireworks == null) { return; } @@ -87,7 +87,7 @@ public class FireworkRocketItem extends Item implements BedrockRequiresTagItem { javaExplosions.add(javaExplosion); } } - components.put(DataComponentType.FIREWORKS, new Fireworks(1, javaExplosions)); + components.put(DataComponentTypes.FIREWORKS, new Fireworks(1, javaExplosions)); } } } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/FireworkStarItem.java b/core/src/main/java/org/geysermc/geyser/item/type/FireworkStarItem.java index 5ac0f475c..170d386fd 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/FireworkStarItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/FireworkStarItem.java @@ -30,7 +30,7 @@ import org.cloudburstmc.nbt.NbtMap; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.item.BedrockItemBuilder; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.Fireworks; @@ -43,7 +43,7 @@ public class FireworkStarItem extends Item { public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNull DataComponents components, @NonNull BedrockItemBuilder builder) { super.translateComponentsToBedrock(session, components, builder); - Fireworks.FireworkExplosion explosion = components.get(DataComponentType.FIREWORK_EXPLOSION); + Fireworks.FireworkExplosion explosion = components.get(DataComponentTypes.FIREWORK_EXPLOSION); if (explosion != null) { NbtMap newExplosion = FireworkRocketItem.translateExplosionToBedrock(explosion); builder.putCompound("FireworksItem", newExplosion); @@ -87,7 +87,7 @@ public class FireworkStarItem extends Item { if (newExplosion == null) { return; } - components.put(DataComponentType.FIREWORK_EXPLOSION, newExplosion); + components.put(DataComponentTypes.FIREWORK_EXPLOSION, newExplosion); } } 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 9af07a40e..bd1ac0724 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 @@ -34,7 +34,7 @@ import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.mcprotocollib.protocol.data.game.Holder; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.Instrument; @@ -50,7 +50,7 @@ public class GoatHornItem extends Item { return builder; } - Holder<Instrument> holder = components.get(DataComponentType.INSTRUMENT); + Holder<Instrument> holder = components.get(DataComponentTypes.INSTRUMENT); if (holder != null) { GeyserInstrument instrument = GeyserInstrument.fromHolder(session, holder); int bedrockId = instrument.bedrockId(); @@ -66,9 +66,9 @@ public class GoatHornItem extends Item { public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNull DataComponents components, @NonNull BedrockItemBuilder builder) { super.translateComponentsToBedrock(session, components, builder); - Holder<Instrument> holder = components.get(DataComponentType.INSTRUMENT); - if (holder != null && components.get(DataComponentType.HIDE_TOOLTIP) == null - && components.get(DataComponentType.HIDE_ADDITIONAL_TOOLTIP) == null) { + Holder<Instrument> holder = components.get(DataComponentTypes.INSTRUMENT); + if (holder != null && components.get(DataComponentTypes.HIDE_TOOLTIP) == null + && components.get(DataComponentTypes.HIDE_ADDITIONAL_TOOLTIP) == null) { GeyserInstrument instrument = GeyserInstrument.fromHolder(session, holder); if (instrument.bedrockInstrument() == null) { builder.getOrCreateLore().add(instrument.description()); @@ -82,7 +82,7 @@ public class GoatHornItem extends Item { int damage = itemData.getDamage(); // This could cause an issue since -1 is returned for non-vanilla goat horns - itemStack.getOrCreateComponents().put(DataComponentType.INSTRUMENT, Holder.ofId(GeyserInstrument.bedrockIdToJava(session, damage))); + itemStack.getOrCreateComponents().put(DataComponentTypes.INSTRUMENT, Holder.ofId(GeyserInstrument.bedrockIdToJava(session, damage))); return itemStack; } 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 056e8b48a..f0ae57018 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 @@ -49,6 +49,7 @@ import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.geyser.translator.text.MessageTranslator; import org.geysermc.geyser.util.MinecraftKey; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DyedItemColor; import org.geysermc.mcprotocollib.protocol.data.game.item.component.ItemEnchantments; @@ -83,7 +84,7 @@ public class Item { } public int defaultMaxDamage() { - return baseComponents.getOrDefault(DataComponentType.MAX_DAMAGE, 0); + return baseComponents.getOrDefault(DataComponentTypes.MAX_DAMAGE, 0); } public int defaultAttackDamage() { @@ -91,7 +92,7 @@ public class Item { } public int defaultMaxStackSize() { - return baseComponents.getOrDefault(DataComponentType.MAX_STACK_SIZE, 1); + return baseComponents.getOrDefault(DataComponentTypes.MAX_STACK_SIZE, 1); } /** @@ -157,21 +158,21 @@ public class Item { * Takes components from Java Edition and map them into Bedrock. */ public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNull DataComponents components, @NonNull BedrockItemBuilder builder) { - List<Component> loreComponents = components.get(DataComponentType.LORE); - if (loreComponents != null && components.get(DataComponentType.HIDE_TOOLTIP) == null) { + List<Component> loreComponents = components.get(DataComponentTypes.LORE); + if (loreComponents != null && components.get(DataComponentTypes.HIDE_TOOLTIP) == null) { List<String> lore = builder.getOrCreateLore(); for (Component loreComponent : loreComponents) { lore.add(MessageTranslator.convertMessage(loreComponent, session.locale())); } } - Integer damage = components.get(DataComponentType.DAMAGE); + Integer damage = components.get(DataComponentTypes.DAMAGE); if (damage != null) { builder.setDamage(damage); } List<NbtMap> enchantNbtList = new ArrayList<>(); - ItemEnchantments enchantments = components.get(DataComponentType.ENCHANTMENTS); + ItemEnchantments enchantments = components.get(DataComponentTypes.ENCHANTMENTS); if (enchantments != null) { for (Map.Entry<Integer, Integer> enchantment : enchantments.getEnchantments().entrySet()) { NbtMap enchantNbt = remapEnchantment(session, enchantment.getKey(), enchantment.getValue(), builder); @@ -185,7 +186,7 @@ public class Item { builder.putList("ench", NbtType.COMPOUND, enchantNbtList); } - Integer repairCost = components.get(DataComponentType.REPAIR_COST); + Integer repairCost = components.get(DataComponentTypes.REPAIR_COST); // Java sets repair cost to 0 on all items via default components, that trips up Bedrock crafting. // See https://github.com/GeyserMC/Geyser/issues/5220 for more details if (repairCost != null && repairCost != 0) { @@ -193,7 +194,7 @@ public class Item { } // If the tag exists, it's unbreakable; the value is just weather to show the tooltip. As of Java 1.21 - if (components.getDataComponents().containsKey(DataComponentType.UNBREAKABLE)) { + if (components.getDataComponents().containsKey(DataComponentTypes.UNBREAKABLE)) { builder.putByte("Unbreakable", (byte) 1); } @@ -265,7 +266,7 @@ public class Item { } protected final void translateDyedColor(DataComponents components, BedrockItemBuilder builder) { - DyedItemColor dyedItemColor = components.get(DataComponentType.DYED_COLOR); + DyedItemColor dyedItemColor = components.get(DataComponentTypes.DYED_COLOR); if (dyedItemColor != null) { builder.putInt("customColor", dyedItemColor.getRgb()); } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/LightItem.java b/core/src/main/java/org/geysermc/geyser/item/type/LightItem.java index d176ff367..36509f042 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/LightItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/LightItem.java @@ -33,7 +33,7 @@ import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.data.game.item.component.BlockStateProperties; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; public class LightItem extends BlockItem { @@ -63,7 +63,7 @@ public class LightItem extends BlockItem { private static ItemMapping getLightLevelMapping(DataComponents components, ItemMappings mappings) { String lightLevel = "15"; if (components != null) { - BlockStateProperties blockStateProperties = components.get(DataComponentType.BLOCK_STATE); + BlockStateProperties blockStateProperties = components.get(DataComponentTypes.BLOCK_STATE); if (blockStateProperties != null) { lightLevel = blockStateProperties.getProperties().get(Properties.LEVEL.name()); 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 5d8a1667d..f19da5968 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 @@ -28,7 +28,7 @@ package org.geysermc.geyser.item.type; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.item.BedrockItemBuilder; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; public class MapItem extends Item { @@ -40,7 +40,7 @@ public class MapItem extends Item { public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNull DataComponents components, @NonNull BedrockItemBuilder builder) { super.translateComponentsToBedrock(session, components, builder); - Integer mapValue = components.get(DataComponentType.MAP_ID); + Integer mapValue = components.get(DataComponentTypes.MAP_ID); if (mapValue == null) { return; } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/OminousBottleItem.java b/core/src/main/java/org/geysermc/geyser/item/type/OminousBottleItem.java index 92a8d726d..0579e1c5b 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/OminousBottleItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/OminousBottleItem.java @@ -32,7 +32,7 @@ import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; public class OminousBottleItem extends Item { @@ -47,7 +47,7 @@ public class OminousBottleItem extends Item { // Level 1 ominous bottle is null components - Java 1.21. return builder; } - Integer amplifier = components.get(DataComponentType.OMINOUS_BOTTLE_AMPLIFIER); + Integer amplifier = components.get(DataComponentTypes.OMINOUS_BOTTLE_AMPLIFIER); if (amplifier != null) { builder.damage(amplifier); } @@ -62,7 +62,7 @@ public class OminousBottleItem extends Item { if (damage == 0) { return itemStack; } - itemStack.getOrCreateComponents().put(DataComponentType.OMINOUS_BOTTLE_AMPLIFIER, damage); + itemStack.getOrCreateComponents().put(DataComponentTypes.OMINOUS_BOTTLE_AMPLIFIER, damage); return itemStack; } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/PlayerHeadItem.java b/core/src/main/java/org/geysermc/geyser/item/type/PlayerHeadItem.java index 003aa0a73..502d9be0d 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/PlayerHeadItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/PlayerHeadItem.java @@ -33,7 +33,7 @@ import org.geysermc.geyser.text.ChatColor; import org.geysermc.geyser.text.MinecraftLocale; import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.mcprotocollib.auth.GameProfile; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; public class PlayerHeadItem extends BlockItem { @@ -46,9 +46,9 @@ public class PlayerHeadItem extends BlockItem { super.translateComponentsToBedrock(session, components, builder); // Use the correct color, determined by the rarity of the item - char rarity = Rarity.fromId(components.get(DataComponentType.RARITY)).getColor(); + char rarity = Rarity.fromId(components.get(DataComponentTypes.RARITY)).getColor(); - GameProfile profile = components.get(DataComponentType.PROFILE); + GameProfile profile = components.get(DataComponentTypes.PROFILE); if (profile != null) { String name = profile.getName(); if (name != null) { 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 89e60b325..2cdd6e4c1 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 @@ -35,7 +35,7 @@ import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.item.CustomItemTranslator; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.PotionContents; @@ -47,7 +47,7 @@ public class PotionItem extends Item { @Override public ItemData.Builder translateToBedrock(GeyserSession session, int count, DataComponents components, ItemMapping mapping, ItemMappings mappings) { if (components == null) return super.translateToBedrock(session, count, components, mapping, mappings); - PotionContents potionContents = components.get(DataComponentType.POTION_CONTENTS); + PotionContents potionContents = components.get(DataComponentTypes.POTION_CONTENTS); if (potionContents != null) { ItemDefinition customItemDefinition = CustomItemTranslator.getCustomItem(components, mapping); if (customItemDefinition == null) { @@ -73,7 +73,7 @@ public class PotionItem extends Item { Potion potion = Potion.getByBedrockId(itemData.getDamage()); GeyserItemStack itemStack = super.translateToJava(session, itemData, mapping, mappings); if (potion != null) { - itemStack.getOrCreateComponents().put(DataComponentType.POTION_CONTENTS, potion.toComponent()); + itemStack.getOrCreateComponents().put(DataComponentTypes.POTION_CONTENTS, potion.toComponent()); } return itemStack; } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/ShieldItem.java b/core/src/main/java/org/geysermc/geyser/item/type/ShieldItem.java index 98ef80d95..01cea9c17 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/ShieldItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/ShieldItem.java @@ -29,7 +29,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.mcprotocollib.protocol.data.game.item.component.BannerPatternLayer; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import java.util.List; @@ -43,12 +43,12 @@ public class ShieldItem extends Item { public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNull DataComponents components, @NonNull BedrockItemBuilder builder) { super.translateComponentsToBedrock(session, components, builder); - List<BannerPatternLayer> patterns = components.get(DataComponentType.BANNER_PATTERNS); + List<BannerPatternLayer> patterns = components.get(DataComponentTypes.BANNER_PATTERNS); if (patterns != null) { BannerItem.convertBannerPattern(session, patterns, builder); } // Shield pattern backing color - Integer baseColor = components.get(DataComponentType.BASE_COLOR); + Integer baseColor = components.get(DataComponentTypes.BASE_COLOR); if (baseColor != null) { builder.putInt("Base", 15 - baseColor); } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/ShulkerBoxItem.java b/core/src/main/java/org/geysermc/geyser/item/type/ShulkerBoxItem.java index 5d14f748c..a53a9b7bc 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/ShulkerBoxItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/ShulkerBoxItem.java @@ -40,7 +40,7 @@ import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.geyser.translator.item.CustomItemTranslator; import org.geysermc.geyser.translator.item.ItemTranslator; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.PotionContents; @@ -56,7 +56,7 @@ public class ShulkerBoxItem extends BlockItem { public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNull DataComponents components, @NonNull BedrockItemBuilder builder) { super.translateComponentsToBedrock(session, components, builder); - List<ItemStack> contents = components.get(DataComponentType.CONTAINER); + List<ItemStack> contents = components.get(DataComponentTypes.CONTAINER); if (contents == null || contents.isEmpty()) { // Empty shulker box return; @@ -71,7 +71,7 @@ public class ShulkerBoxItem extends BlockItem { int bedrockData = boxMapping.getBedrockData(); String bedrockIdentifier = boxMapping.getBedrockIdentifier(); - DataComponents boxComponents = item.getDataComponents(); + DataComponents boxComponents = item.getDataComponentsPatch(); if (boxComponents != null) { // Check for custom items @@ -82,7 +82,7 @@ public class ShulkerBoxItem extends BlockItem { } else { // Manual checks for potions/tipped arrows if (boxMapping.getJavaItem() instanceof PotionItem || boxMapping.getJavaItem() instanceof ArrowItem) { - PotionContents potionContents = boxComponents.get(DataComponentType.POTION_CONTENTS); + PotionContents potionContents = boxComponents.get(DataComponentTypes.POTION_CONTENTS); if (potionContents != null) { Potion potion = Potion.getByJavaId(potionContents.getPotionId()); if (potion != null) { diff --git a/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java b/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java index 09e4ee21f..ae77be643 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java @@ -31,7 +31,7 @@ import org.geysermc.geyser.inventory.item.Potion; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.PotionContents; @@ -43,7 +43,7 @@ public class TippedArrowItem extends ArrowItem { @Override public ItemData.Builder translateToBedrock(GeyserSession session, int count, DataComponents components, ItemMapping mapping, ItemMappings mappings) { if (components != null) { - PotionContents potionContents = components.get(DataComponentType.POTION_CONTENTS); + PotionContents potionContents = components.get(DataComponentTypes.POTION_CONTENTS); if (potionContents != null) { Potion potion = Potion.getByJavaId(potionContents.getPotionId()); if (potion != null) { diff --git a/core/src/main/java/org/geysermc/geyser/item/type/TropicalFishBucketItem.java b/core/src/main/java/org/geysermc/geyser/item/type/TropicalFishBucketItem.java index 7c5ad26f6..a93cc5934 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/TropicalFishBucketItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/TropicalFishBucketItem.java @@ -36,7 +36,7 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.MinecraftLocale; import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.geyser.translator.text.MessageTranslator; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import java.util.List; @@ -57,7 +57,7 @@ public class TropicalFishBucketItem extends Item { builder.putString("CustomName", MinecraftLocale.getLocaleString("entity.minecraft.tropical_fish", session.locale())); // Add Java's client side lore tag // Do you know how frequently Java NBT used to be before 1.20.5? It was a lot. And now it's just this lowly check. - NbtMap entityTag = components.get(DataComponentType.BUCKET_ENTITY_DATA); + NbtMap entityTag = components.get(DataComponentTypes.BUCKET_ENTITY_DATA); if (entityTag != null && !entityTag.isEmpty()) { //TODO test int bucketVariant = entityTag.getInt("BucketVariantTag"); diff --git a/core/src/main/java/org/geysermc/geyser/item/type/WritableBookItem.java b/core/src/main/java/org/geysermc/geyser/item/type/WritableBookItem.java index 55ad16b20..177ca0b2a 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/WritableBookItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/WritableBookItem.java @@ -32,7 +32,7 @@ import org.cloudburstmc.nbt.NbtType; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.geyser.translator.text.MessageTranslator; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.Filterable; import org.geysermc.mcprotocollib.protocol.data.game.item.component.WritableBookContent; @@ -49,7 +49,7 @@ public class WritableBookItem extends Item { public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNull DataComponents components, @NonNull BedrockItemBuilder builder) { super.translateComponentsToBedrock(session, components, builder); - WritableBookContent bookContent = components.get(DataComponentType.WRITABLE_BOOK_CONTENT); + WritableBookContent bookContent = components.get(DataComponentTypes.WRITABLE_BOOK_CONTENT); if (bookContent == null) { return; } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/WrittenBookItem.java b/core/src/main/java/org/geysermc/geyser/item/type/WrittenBookItem.java index dd41a5e89..9cb661e70 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/WrittenBookItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/WrittenBookItem.java @@ -33,7 +33,7 @@ import org.cloudburstmc.nbt.NbtType; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.geyser.translator.text.MessageTranslator; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.Filterable; import org.geysermc.mcprotocollib.protocol.data.game.item.component.WrittenBookContent; @@ -54,7 +54,7 @@ public class WrittenBookItem extends Item { public void translateComponentsToBedrock(@NonNull GeyserSession session, @NonNull DataComponents components, @NonNull BedrockItemBuilder builder) { super.translateComponentsToBedrock(session, components, builder); - WrittenBookContent bookContent = components.get(DataComponentType.WRITTEN_BOOK_CONTENT); + WrittenBookContent bookContent = components.get(DataComponentTypes.WRITTEN_BOOK_CONTENT); if (bookContent == null) { return; } 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 c33fc7665..b0422913d 100644 --- a/core/src/main/java/org/geysermc/geyser/level/WorldManager.java +++ b/core/src/main/java/org/geysermc/geyser/level/WorldManager.java @@ -38,6 +38,7 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponent; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.setting.Difficulty; @@ -202,7 +203,7 @@ public abstract class WorldManager { try { Map<DataComponentType<?>, DataComponent<?, ?>> components = new HashMap<>(); Int2ObjectMaps.fastForEach(map, entry -> { - DataComponentType<?> type = DataComponentType.from(entry.getIntKey()); + DataComponentType<?> type = DataComponentTypes.from(entry.getIntKey()); ByteBuf buf = Unpooled.wrappedBuffer(entry.getValue()); DataComponent<?, ?> value = type.readDataComponent(buf); components.put(type, value); diff --git a/core/src/main/java/org/geysermc/geyser/level/block/type/SkullBlock.java b/core/src/main/java/org/geysermc/geyser/level/block/type/SkullBlock.java index 6e791d674..d41d160f8 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/type/SkullBlock.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/type/SkullBlock.java @@ -34,7 +34,7 @@ import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.SkullCache; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import java.util.Collections; @@ -79,7 +79,7 @@ public class SkullBlock extends Block { .putInt("y", position.getY()) .putInt("z", position.getZ()); DataComponents components = itemStack.getOrCreateComponents(); - components.put(DataComponentType.BLOCK_ENTITY_DATA, builder.build()); + components.put(DataComponentTypes.BLOCK_ENTITY_DATA, builder.build()); UUID uuid = skull.getUuid(); String texturesProperty = skull.getTexturesProperty(); @@ -87,7 +87,7 @@ public class SkullBlock extends Block { if (texturesProperty != null) { profile.setProperties(Collections.singletonList(new GameProfile.Property("textures", texturesProperty))); } - components.put(DataComponentType.PROFILE, profile); + components.put(DataComponentTypes.PROFILE, profile); return itemStack.getItemStack(); } 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 d1cec3231..4b92c6250 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 @@ -48,7 +48,8 @@ import org.geysermc.geyser.registry.mappings.MappingsConfigReader; import org.geysermc.geyser.registry.type.GeyserMappingItem; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.NonVanillaItemRegistration; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import java.util.ArrayList; @@ -134,8 +135,8 @@ public class CustomItemRegistryPopulator { String customIdentifier = customItemData.identifier(); DataComponents components = new DataComponents(new HashMap<>()); - components.put(DataComponentType.MAX_STACK_SIZE, customItemData.stackSize()); - components.put(DataComponentType.MAX_DAMAGE, customItemData.maxDamage()); + components.put(DataComponentTypes.MAX_STACK_SIZE, customItemData.stackSize()); + components.put(DataComponentTypes.MAX_DAMAGE, customItemData.maxDamage()); Item item = new Item(customIdentifier, Item.builder().components(components)); Items.register(item, customItemData.javaId()); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java index 829e8719e..ef3168f41 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/DataComponentRegistryPopulator.java @@ -39,6 +39,7 @@ import org.geysermc.geyser.registry.Registries; import org.geysermc.mcprotocollib.protocol.codec.MinecraftTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponent; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import java.io.InputStream; @@ -74,7 +75,7 @@ public final class DataComponentRegistryPopulator { byte[] bytes = Base64.getDecoder().decode(encodedValue); ByteBuf buf = Unpooled.wrappedBuffer(bytes); int varInt = MinecraftTypes.readVarInt(buf); - DataComponentType<?> dataComponentType = DataComponentType.from(varInt); + DataComponentType<?> dataComponentType = DataComponentTypes.from(varInt); DataComponent<?, ?> dataComponent = dataComponentType.readDataComponent(buf); map.put(dataComponentType, dataComponent); 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 4a2863b9e..3e18a2829 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -291,7 +291,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { private final PlayerInventory playerInventory; @Setter - private Inventory openInventory; + private @Nullable Inventory openInventory; @Setter private boolean closingInventory; diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/BundleCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/BundleCache.java index 8ad31949b..3338a11fc 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/BundleCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/BundleCache.java @@ -41,7 +41,7 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; import org.geysermc.geyser.util.InventoryUtils; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import java.util.ArrayList; import java.util.Arrays; @@ -75,7 +75,7 @@ public final class BundleCache { } BundleData bundleData; - List<ItemStack> rawContents = itemStack.getComponent(DataComponentType.BUNDLE_CONTENTS); + List<ItemStack> rawContents = itemStack.getComponent(DataComponentTypes.BUNDLE_CONTENTS); if (rawContents != null) { // Use existing list and transform it to support net IDs bundleData = new BundleData(session, rawContents); diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java index eb57e0214..6108c6432 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java @@ -41,7 +41,7 @@ import org.geysermc.geyser.scoreboard.Scoreboard; import org.geysermc.geyser.scoreboard.ScoreboardUpdater.ScoreboardSession; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.ChunkUtils; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.UseCooldown; import org.geysermc.mcprotocollib.protocol.data.game.setting.Difficulty; @@ -221,7 +221,7 @@ public final class WorldCache { } public boolean hasCooldown(GeyserItemStack item) { - UseCooldown cooldown = item.getComponent(DataComponentType.USE_COOLDOWN); + UseCooldown cooldown = item.getComponent(DataComponentTypes.USE_COOLDOWN); String cooldownGroup; if (cooldown != null && cooldown.cooldownGroup() != null) { cooldownGroup = cooldown.cooldownGroup().asString(); diff --git a/core/src/main/java/org/geysermc/geyser/translator/entity/EntityMetadataTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/entity/EntityMetadataTranslator.java index 194194501..1c9f7e8fa 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/entity/EntityMetadataTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/entity/EntityMetadataTranslator.java @@ -25,9 +25,9 @@ package org.geysermc.geyser.translator.entity; +import org.geysermc.geyser.entity.type.Entity; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.MetadataType; -import org.geysermc.geyser.entity.type.Entity; import java.util.function.BiConsumer; diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/BundleInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/BundleInventoryTranslator.java index bbe94ba95..333304f61 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/BundleInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/BundleInventoryTranslator.java @@ -44,7 +44,7 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.BundleCache; import org.geysermc.geyser.util.InventoryUtils; import org.geysermc.geyser.util.thirdparty.Fraction; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import java.util.List; @@ -308,13 +308,13 @@ public final class BundleInventoryTranslator { if (components != null) { // NOTE: this seems to be Java-only, so it can technically cause a bundle weight desync, // but it'll be so rare we can probably ignore it. - List<?> bees = components.get(DataComponentType.BEES); + List<?> bees = components.get(DataComponentTypes.BEES); if (bees != null && !bees.isEmpty()) { // Bees be heavy, I guess. return Fraction.ONE; } } - return Fraction.getFraction(1, itemStack.getComponentElseGet(DataComponentType.MAX_STACK_SIZE, () -> itemStack.asItem().defaultMaxStackSize())); + return Fraction.getFraction(1, itemStack.getComponentElseGet(DataComponentTypes.MAX_STACK_SIZE, () -> itemStack.asItem().defaultMaxStackSize())); } public static int capacityForItemStack(Fraction bundleWeight, GeyserItemStack itemStack) { 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 e6c670eea..21ffdfa96 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 @@ -75,7 +75,8 @@ import org.geysermc.geyser.translator.inventory.furnace.SmokerInventoryTranslato import org.geysermc.geyser.util.InventoryUtils; import org.geysermc.geyser.util.ItemUtils; import org.geysermc.mcprotocollib.protocol.data.game.inventory.ContainerType; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.EmptySlotDisplay; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; @@ -261,7 +262,7 @@ public abstract class InventoryTranslator { GeyserItemStack javaItem = inventory.getItem(sourceSlot); if (javaItem.asItem() == Items.PLAYER_HEAD && javaItem.hasNonBaseComponents()) { - FakeHeadProvider.setHead(session, session.getPlayerEntity(), javaItem.getComponent(DataComponentType.PROFILE)); + FakeHeadProvider.setHead(session, session.getPlayerEntity(), javaItem.getComponent(DataComponentTypes.PROFILE)); } } else if (sourceSlot == 5) { //we are probably removing the head, so restore the original skin @@ -1040,7 +1041,7 @@ public abstract class InventoryTranslator { // As of 1.16.210: Bedrock needs confirmation on what the current item durability is. // If 0 is sent, then Bedrock thinks the item is not damaged int durability = 0; - Integer damage = itemStack.getComponent(DataComponentType.DAMAGE); + Integer damage = itemStack.getComponent(DataComponentTypes.DAMAGE); if (damage != null) { durability = ItemUtils.getCorrectBedrockDurability(itemStack.asItem(), damage); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java index c5814e336..f62bfbc7c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java @@ -43,7 +43,7 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.BlockEntityUtils; import org.geysermc.geyser.util.InventoryUtils; import org.geysermc.mcprotocollib.protocol.data.game.inventory.ContainerType; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.WritableBookContent; import org.geysermc.mcprotocollib.protocol.data.game.item.component.WrittenBookContent; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundContainerButtonClickPacket; @@ -164,11 +164,11 @@ public class LecternInventoryTranslator extends AbstractBlockInventoryTranslator NbtMap blockEntityTag; if (book.hasNonBaseComponents()) { int pages = 0; - WrittenBookContent writtenBookComponents = book.getComponent(DataComponentType.WRITTEN_BOOK_CONTENT); + WrittenBookContent writtenBookComponents = book.getComponent(DataComponentTypes.WRITTEN_BOOK_CONTENT); if (writtenBookComponents != null) { pages = writtenBookComponents.getPages().size(); } else { - WritableBookContent writableBookComponents = book.getComponent(DataComponentType.WRITABLE_BOOK_CONTENT); + WritableBookContent writableBookComponents = book.getComponent(DataComponentTypes.WRITABLE_BOOK_CONTENT); if (writableBookComponents != null) { pages = writableBookComponents.getPages().size(); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java index 9fb407336..d75228f9b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java @@ -49,7 +49,7 @@ import org.geysermc.geyser.item.type.DyeItem; import org.geysermc.geyser.level.block.Blocks; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.data.game.item.component.BannerPatternLayer; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundContainerButtonClickPacket; import java.util.ArrayList; @@ -157,9 +157,9 @@ public class LoomInventoryTranslator extends AbstractBlockInventoryTranslator { inputCopy.setNetId(session.getNextItemNetId()); BannerPatternLayer bannerPatternLayer = BannerItem.getJavaBannerPattern(session, pattern); // TODO if (bannerPatternLayer != null) { - List<BannerPatternLayer> patternsList = new ArrayList<>(inputCopy.getComponentElseGet(DataComponentType.BANNER_PATTERNS, ArrayList::new)); + List<BannerPatternLayer> patternsList = new ArrayList<>(inputCopy.getComponentElseGet(DataComponentTypes.BANNER_PATTERNS, ArrayList::new)); patternsList.add(bannerPatternLayer); - inputCopy.getOrCreateComponents().put(DataComponentType.BANNER_PATTERNS, patternsList); + inputCopy.getOrCreateComponents().put(DataComponentTypes.BANNER_PATTERNS, patternsList); } // Set the new item as the output diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java index 45deacaad..f95bbb7c4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java @@ -61,7 +61,7 @@ import org.geysermc.geyser.util.InventoryUtils; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; import org.geysermc.mcprotocollib.protocol.data.game.inventory.ContainerType; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundSetCreativeModeSlotPacket; import java.util.Arrays; @@ -110,7 +110,7 @@ public class PlayerInventoryTranslator extends InventoryTranslator { if (i == 5 && item.asItem() == Items.PLAYER_HEAD && item.hasNonBaseComponents()) { - FakeHeadProvider.setHead(session, session.getPlayerEntity(), item.getComponent(DataComponentType.PROFILE)); + FakeHeadProvider.setHead(session, session.getPlayerEntity(), item.getComponent(DataComponentTypes.PROFILE)); } } armorContentPacket.setContents(Arrays.asList(contents)); @@ -154,7 +154,7 @@ public class PlayerInventoryTranslator extends InventoryTranslator { // Check for custom skull if (javaItem.asItem() == Items.PLAYER_HEAD && javaItem.hasNonBaseComponents()) { - FakeHeadProvider.setHead(session, session.getPlayerEntity(), javaItem.getComponent(DataComponentType.PROFILE)); + FakeHeadProvider.setHead(session, session.getPlayerEntity(), javaItem.getComponent(DataComponentTypes.PROFILE)); } else { FakeHeadProvider.restoreOriginalSkin(session, session.getPlayerEntity()); } @@ -523,7 +523,7 @@ public class PlayerInventoryTranslator extends InventoryTranslator { dropStack = javaCreativeItem; } else { // Specify custom count - dropStack = new ItemStack(javaCreativeItem.getId(), dropAction.getCount(), javaCreativeItem.getDataComponents()); + dropStack = new ItemStack(javaCreativeItem.getId(), dropAction.getCount(), javaCreativeItem.getDataComponentsPatch()); } ServerboundSetCreativeModeSlotPacket creativeDropPacket = new ServerboundSetCreativeModeSlotPacket((short)-1, dropStack); session.sendDownstreamGamePacket(creativeDropPacket); @@ -581,22 +581,20 @@ public class PlayerInventoryTranslator extends InventoryTranslator { @Override public void closeInventory(GeyserSession session, Inventory inventory) { if (session.isServerRequestedClosePlayerInventory()) { + session.setServerRequestedClosePlayerInventory(false); Vector3i pos = session.getPlayerEntity().getPosition().toInt(); UpdateBlockPacket packet = new UpdateBlockPacket(); packet.setBlockPosition(pos); packet.setDefinition(session.getBlockMappings().getNetherPortalBlock()); packet.setDataLayer(0); - packet.getFlags().add(UpdateBlockPacket.Flag.PRIORITY); + packet.getFlags().add(UpdateBlockPacket.Flag.NETWORK); session.sendUpstreamPacket(packet); session.scheduleInEventLoop(() -> { BlockDefinition definition = session.getBlockMappings().getBedrockBlock(session.getGeyser().getWorldManager().blockAt(session, pos)); - - packet.setBlockPosition(pos); packet.setDefinition(definition); packet.getFlags().add(UpdateBlockPacket.Flag.PRIORITY); - packet.setDataLayer(0); session.sendUpstreamPacket(packet); }, 50, TimeUnit.MILLISECONDS); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/item/CustomItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/item/CustomItemTranslator.java index c6318c461..d1a265039 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/item/CustomItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/item/CustomItemTranslator.java @@ -27,7 +27,7 @@ package org.geysermc.geyser.translator.item; import org.geysermc.mcprotocollib.protocol.data.game.item.component.CustomModelData; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import it.unimi.dsi.fastutil.Pair; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; @@ -55,7 +55,7 @@ public final class CustomItemTranslator { // TODO 1.21.4 float customModelDataInt = 0; - CustomModelData customModelData = components.get(DataComponentType.CUSTOM_MODEL_DATA); + CustomModelData customModelData = components.get(DataComponentTypes.CUSTOM_MODEL_DATA); if (customModelData != null) { if (!customModelData.floats().isEmpty()) { customModelDataInt = customModelData.floats().get(0); @@ -63,7 +63,7 @@ public final class CustomItemTranslator { } boolean checkDamage = mapping.getJavaItem().defaultMaxDamage() > 0; - int damage = !checkDamage ? 0 : components.getOrDefault(DataComponentType.DAMAGE, 0); + int damage = !checkDamage ? 0 : components.getOrDefault(DataComponentTypes.DAMAGE, 0); boolean unbreakable = checkDamage && !isDamaged(components, damage); for (Pair<CustomItemOptions, ItemDefinition> mappingTypes : customMappings) { @@ -119,7 +119,7 @@ public final class CustomItemTranslator { private static boolean isDamagableItem(DataComponents components) { // mapping.getMaxDamage > 0 should also be checked (return false if not true) but we already check prior to this function - return components.get(DataComponentType.UNBREAKABLE) == null; + return components.get(DataComponentTypes.UNBREAKABLE) == null; } private CustomItemTranslator() { diff --git a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java index a41c4ee84..f2213bd07 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/item/ItemTranslator.java @@ -64,7 +64,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.attribute.AttributeT import org.geysermc.mcprotocollib.protocol.data.game.entity.attribute.ModifierOperation; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; import org.geysermc.mcprotocollib.protocol.data.game.item.component.AdventureModePredicate; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; import org.geysermc.mcprotocollib.protocol.data.game.item.component.ItemAttributeModifiers; @@ -161,7 +161,7 @@ public final class ItemTranslator { return ItemData.AIR; } // Java item needs to be loaded separately. The mapping for tipped arrow would - return translateToBedrock(session, Registries.JAVA_ITEMS.get().get(stack.getId()), bedrockItem, stack.getAmount(), stack.getDataComponents()) + return translateToBedrock(session, Registries.JAVA_ITEMS.get().get(stack.getId()), bedrockItem, stack.getAmount(), stack.getDataComponentsPatch()) .build(); } @@ -174,22 +174,22 @@ public final class ItemTranslator { // Translate item-specific components javaItem.translateComponentsToBedrock(session, components, nbtBuilder); - Rarity rarity = Rarity.fromId(components.get(DataComponentType.RARITY)); + Rarity rarity = Rarity.fromId(components.get(DataComponentTypes.RARITY)); String customName = getCustomName(session, customComponents, bedrockItem, rarity.getColor(), false, false); if (customName != null) { - PotionContents potionContents = components.get(DataComponentType.POTION_CONTENTS); + PotionContents potionContents = components.get(DataComponentTypes.POTION_CONTENTS); // Make custom effect information visible // Ignore when item have "hide_additional_tooltip" component - if (potionContents != null && components.get(DataComponentType.HIDE_ADDITIONAL_TOOLTIP) == null) { + if (potionContents != null && components.get(DataComponentTypes.HIDE_ADDITIONAL_TOOLTIP) == null) { customName += getPotionEffectInfo(potionContents, session.locale()); } nbtBuilder.setCustomName(customName); } - boolean hideTooltips = components.get(DataComponentType.HIDE_TOOLTIP) != null; + boolean hideTooltips = components.get(DataComponentTypes.HIDE_TOOLTIP) != null; - ItemAttributeModifiers attributeModifiers = components.get(DataComponentType.ATTRIBUTE_MODIFIERS); + ItemAttributeModifiers attributeModifiers = components.get(DataComponentTypes.ATTRIBUTE_MODIFIERS); if (attributeModifiers != null && attributeModifiers.isShowInTooltip() && !hideTooltips) { // only add if attribute modifiers do not indicate to hide them addAttributeLore(session, attributeModifiers, nbtBuilder, session.locale()); @@ -200,7 +200,7 @@ public final class ItemTranslator { } // Add enchantment override. We can't remove it - enchantments would stop showing - but we can add it. - if (components.getOrDefault(DataComponentType.ENCHANTMENT_GLINT_OVERRIDE, false) && !GLINT_PRESENT.contains(javaItem)) { + if (components.getOrDefault(DataComponentTypes.ENCHANTMENT_GLINT_OVERRIDE, false) && !GLINT_PRESENT.contains(javaItem)) { NbtMapBuilder nbtMapBuilder = nbtBuilder.getOrCreateNbt(); nbtMapBuilder.putIfAbsent("ench", NbtList.EMPTY); } @@ -219,14 +219,14 @@ public final class ItemTranslator { } if (bedrockItem.getJavaItem().equals(Items.PLAYER_HEAD)) { - translatePlayerHead(session, components.get(DataComponentType.PROFILE), builder); + translatePlayerHead(session, components.get(DataComponentTypes.PROFILE), builder); } translateCustomItem(components, builder, bedrockItem); // Translate the canDestroy and canPlaceOn Java components - AdventureModePredicate canDestroy = components.get(DataComponentType.CAN_BREAK); - AdventureModePredicate canPlaceOn = components.get(DataComponentType.CAN_PLACE_ON); + AdventureModePredicate canDestroy = components.get(DataComponentTypes.CAN_BREAK); + AdventureModePredicate canPlaceOn = components.get(DataComponentTypes.CAN_PLACE_ON); String[] canBreak = getCanModify(session, canDestroy); String[] canPlace = getCanModify(session, canPlaceOn); if (canBreak != null) { @@ -422,7 +422,7 @@ public final class ItemTranslator { int maxDurability = item.defaultMaxDamage(); if (maxDurability != 0 && components != null) { - Integer durabilityComponent = components.get(DataComponentType.DAMAGE); + Integer durabilityComponent = components.get(DataComponentTypes.DAMAGE); if (durabilityComponent != null) { int durability = maxDurability - durabilityComponent; if (durability != maxDurability) { @@ -516,7 +516,7 @@ public final class ItemTranslator { } if (mapping.getJavaItem().equals(Items.PLAYER_HEAD)) { - CustomSkull customSkull = getCustomSkull(itemStack.getComponent(DataComponentType.PROFILE)); + CustomSkull customSkull = getCustomSkull(itemStack.getComponent(DataComponentTypes.PROFILE)); if (customSkull != null) { itemDefinition = session.getItemMappings().getCustomBlockItemDefinitions().get(customSkull.getCustomBlockData()); } @@ -538,26 +538,26 @@ public final class ItemTranslator { public static String getCustomName(GeyserSession session, DataComponents components, ItemMapping mapping, char translationColor, boolean customNameOnly, boolean includeAll) { if (components != null) { // ItemStack#getHoverName as of 1.20.5 - Component customName = components.get(DataComponentType.CUSTOM_NAME); + Component customName = components.get(DataComponentTypes.CUSTOM_NAME); if (customName != null) { return MessageTranslator.convertMessage(customName, session.locale()); } if (!customNameOnly) { - PotionContents potionContents = components.get(DataComponentType.POTION_CONTENTS); + PotionContents potionContents = components.get(DataComponentTypes.POTION_CONTENTS); if (potionContents != null) { - String potionName = getPotionName(potionContents, mapping, components.get(DataComponentType.HIDE_ADDITIONAL_TOOLTIP) != null, session.locale()); + String potionName = getPotionName(potionContents, mapping, components.get(DataComponentTypes.HIDE_ADDITIONAL_TOOLTIP) != null, session.locale()); if (potionName != null) { return ChatColor.RESET + ChatColor.ESCAPE + translationColor + potionName; } } if (includeAll) { // Fix book title display in tooltips of shulker box - WrittenBookContent bookContent = components.get(DataComponentType.WRITTEN_BOOK_CONTENT); + WrittenBookContent bookContent = components.get(DataComponentTypes.WRITTEN_BOOK_CONTENT); if (bookContent != null) { return ChatColor.RESET + ChatColor.ESCAPE + translationColor + bookContent.getTitle().getRaw(); } } - customName = components.get(DataComponentType.ITEM_NAME); + customName = components.get(DataComponentTypes.ITEM_NAME); if (customName != null) { // Get the translated name and prefix it with a reset char to prevent italics - matches Java Edition // behavior as of 1.21 diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/VaultBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/VaultBlockEntityTranslator.java index 81be5b33a..46a4b78bf 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/VaultBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/VaultBlockEntityTranslator.java @@ -43,7 +43,7 @@ import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.item.BedrockItemBuilder; import org.geysermc.geyser.translator.item.ItemTranslator; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.ItemEnchantments; import org.geysermc.mcprotocollib.protocol.data.game.level.block.BlockEntityType; @@ -132,7 +132,7 @@ public class VaultBlockEntityTranslator extends BlockEntityTranslator { "minecraft:potion_contents", (session, tag, components) -> { String potionId = tag.getString("potion"); Potion potion = Potion.getByJavaIdentifier(potionId); - components.put(DataComponentType.POTION_CONTENTS, potion.toComponent()); + components.put(DataComponentTypes.POTION_CONTENTS, potion.toComponent()); }, "minecraft:enchantments", (session, tag, components) -> { // Enchanted books already have glint. Translating them doesn't matter. NbtMap levels = tag.getCompound("levels"); @@ -145,6 +145,6 @@ public class VaultBlockEntityTranslator extends BlockEntityTranslator { } } } - components.put(DataComponentType.ENCHANTMENTS, new ItemEnchantments(enchantments, true)); + components.put(DataComponentTypes.ENCHANTMENTS, new ItemEnchantments(enchantments, true)); }); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBookEditTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBookEditTranslator.java index 700ba0532..e1ab6d242 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBookEditTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBookEditTranslator.java @@ -26,7 +26,7 @@ package org.geysermc.geyser.translator.protocol.bedrock; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.Filterable; import org.geysermc.mcprotocollib.protocol.data.game.item.component.WritableBookContent; @@ -57,7 +57,7 @@ public class BedrockBookEditTranslator extends PacketTranslator<BookEditPacket> ItemStack bookItem = new ItemStack(itemStack.getJavaId(), itemStack.getAmount(), components); List<String> pages = new LinkedList<>(); - WritableBookContent writableBookContent = components.get(DataComponentType.WRITABLE_BOOK_CONTENT); + WritableBookContent writableBookContent = components.get(DataComponentTypes.WRITABLE_BOOK_CONTENT); if (writableBookContent != null) { for (Filterable<String> page : writableBookContent.getPages()) { pages.add(page.getRaw()); @@ -125,7 +125,7 @@ public class BedrockBookEditTranslator extends PacketTranslator<BookEditPacket> for (String raw : pages) { filterablePages.add(new Filterable<>(raw, null)); } - components.put(DataComponentType.WRITABLE_BOOK_CONTENT, new WritableBookContent(filterablePages)); + components.put(DataComponentTypes.WRITABLE_BOOK_CONTENT, new WritableBookContent(filterablePages)); // Update local copy session.getPlayerInventory().setItem(36 + session.getPlayerInventory().getHeldItemSlot(), GeyserItemStack.from(bookItem), session); 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 db1a05011..2a3d1eb57 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 @@ -85,7 +85,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.InteractAction; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.PlayerAction; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.Instrument; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundContainerClickPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundInteractPacket; @@ -385,7 +385,7 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve if (!session.getWorldCache().hasCooldown(session.getPlayerInventory().getItemInHand())) { Holder<Instrument> holder = session.getPlayerInventory() .getItemInHand() - .getComponent(DataComponentType.INSTRUMENT); + .getComponent(DataComponentTypes.INSTRUMENT); if (holder != null) { GeyserInstrument instrument = GeyserInstrument.fromHolder(session, holder); if (instrument.bedrockInstrument() != null) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java index 8e83c9f55..332ef32db 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRecipeBookAddTranslator.java @@ -225,7 +225,7 @@ public class JavaRecipeBookAddTranslator extends PacketTranslator<ClientboundRec } else if (!(subDisplay instanceof ItemStackSlotDisplay itemStackSlotDisplay)) { id = -1; } else if (itemStackSlotDisplay.itemStack().getAmount() == 1 - && itemStackSlotDisplay.itemStack().getDataComponents() == null) { + && itemStackSlotDisplay.itemStack().getDataComponentsPatch() == null) { id = itemStackSlotDisplay.itemStack().getId(); } else { id = -1; diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java index cdadb1bb9..388c03bab 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java @@ -36,7 +36,7 @@ import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.Equipment; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.ClientboundSetEquipmentPacket; @Translator(packet = ClientboundSetEquipmentPacket.class) @@ -65,8 +65,8 @@ public class JavaSetEquipmentTranslator extends PacketTranslator<ClientboundSetE if (livingEntity instanceof PlayerEntity && javaItem != null && javaItem.getId() == Items.PLAYER_HEAD.javaId() - && javaItem.getDataComponents() != null) { - FakeHeadProvider.setHead(session, (PlayerEntity) livingEntity, GeyserItemStack.from(javaItem).getComponent(DataComponentType.PROFILE)); + && javaItem.getDataComponentsPatch() != null) { + FakeHeadProvider.setHead(session, (PlayerEntity) livingEntity, GeyserItemStack.from(javaItem).getComponent(DataComponentTypes.PROFILE)); } else { FakeHeadProvider.restoreOriginalSkin(session, livingEntity); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerCloseTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerCloseTranslator.java index d9c4566dd..d8d0a83af 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerCloseTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerCloseTranslator.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.translator.protocol.java.inventory; +import org.geysermc.geyser.inventory.PlayerInventory; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.inventory.ClientboundContainerClosePacket; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; @@ -38,7 +39,7 @@ public class JavaContainerCloseTranslator extends PacketTranslator<ClientboundCo public void translate(GeyserSession session, ClientboundContainerClosePacket packet) { // Sometimes the server can request a window close of ID 0... when the window isn't even open // Don't confirm in this instance - session.setServerRequestedClosePlayerInventory(packet.getContainerId() == 0); + session.setServerRequestedClosePlayerInventory(packet.getContainerId() == 0 && session.getOpenInventory() instanceof PlayerInventory); InventoryUtils.closeInventory(session, packet.getContainerId(), (session.getOpenInventory() != null && session.getOpenInventory().getJavaId() == packet.getContainerId())); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/BlockSoundInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/BlockSoundInteractionTranslator.java index b00d3ad2f..ed78bd6ef 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/BlockSoundInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/BlockSoundInteractionTranslator.java @@ -31,7 +31,7 @@ import org.geysermc.geyser.level.block.type.BlockState; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import java.util.Map; @@ -100,7 +100,7 @@ public interface BlockSoundInteractionTranslator extends SoundInteractionTransla return true; } - var canPlaceOn = itemInHand.getComponent(DataComponentType.CAN_PLACE_ON); + var canPlaceOn = itemInHand.getComponent(DataComponentTypes.CAN_PLACE_ON); if (canPlaceOn == null || canPlaceOn.getPredicates().isEmpty()) { // Component doesn't exist - no restrictions apply. return true; 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 dd58672f8..d3b4f7b97 100644 --- a/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java @@ -33,7 +33,7 @@ import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.EntityEffectCache; import org.geysermc.geyser.translator.collision.BlockCollision; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.ToolData; public final class BlockUtils { @@ -57,7 +57,7 @@ public final class BlockUtils { } private static boolean isCorrectItemForDrops(GeyserSession session, Block block, GeyserItemStack stack) { - ToolData tool = stack.getComponent(DataComponentType.TOOL); + ToolData tool = stack.getComponent(DataComponentTypes.TOOL); if (tool == null) { return false; } @@ -74,7 +74,7 @@ public final class BlockUtils { } private static float getItemDestroySpeed(GeyserSession session, Block block, GeyserItemStack stack) { - ToolData tool = stack.getComponent(DataComponentType.TOOL); + ToolData tool = stack.getComponent(DataComponentTypes.TOOL); if (tool == null) { return 1f; } 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 4266c33ce..57afdf44c 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java @@ -319,7 +319,7 @@ public class InventoryUtils { ItemStack other = itemStackSlotDisplay.itemStack(); // Amount check might be flimsy? return itemStack.getJavaId() == other.getId() && itemStack.getAmount() >= other.getAmount() - && Objects.equals(itemStack.getComponents(), other.getDataComponents()); + && Objects.equals(itemStack.getComponents(), other.getDataComponentsPatch()); } if (slotDisplay instanceof TagSlotDisplay tagSlotDisplay) { return session.getTagCache().is(new Tag<>(JavaRegistries.ITEM, tagSlotDisplay.tag()), itemStack.asItem()); 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 eca9756e6..6206da048 100644 --- a/core/src/main/java/org/geysermc/geyser/util/ItemUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/ItemUtils.java @@ -34,7 +34,7 @@ import org.geysermc.geyser.item.type.FishingRodItem; import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; +import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; import org.geysermc.mcprotocollib.protocol.data.game.item.component.ItemEnchantments; @@ -51,7 +51,7 @@ public final class ItemUtils { return 0; } - ItemEnchantments enchantmentData = components.get(DataComponentType.ENCHANTMENTS); + ItemEnchantments enchantmentData = components.get(DataComponentTypes.ENCHANTMENTS); if (enchantmentData == null) { return 0; } @@ -69,12 +69,12 @@ public final class ItemUtils { if (itemStack == null) { return false; } - DataComponents components = itemStack.getDataComponents(); + DataComponents components = itemStack.getDataComponentsPatch(); if (components == null) { return false; } - ItemEnchantments enchantmentData = components.get(DataComponentType.ENCHANTMENTS); + ItemEnchantments enchantmentData = components.get(DataComponentTypes.ENCHANTMENTS); if (enchantmentData == null) { return false; } diff --git a/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java b/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java index e01ea7cd3..2ad0ca8ad 100644 --- a/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java +++ b/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java @@ -45,7 +45,7 @@ import org.geysermc.mcprotocollib.auth.GameProfile; import org.geysermc.mcprotocollib.protocol.data.game.PlayerListEntry; import org.geysermc.mcprotocollib.protocol.data.game.PlayerListEntryAction; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata; -import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.MetadataType; +import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.MetadataTypes; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ByteEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ObjectEntityMetadata; @@ -213,9 +213,9 @@ public class ScoreboardIssueTests { // metadata set: invisible, custom name, custom name visible context.translate(setEntityDataTranslator, new ClientboundSetEntityDataPacket(1298, new EntityMetadata<?, ?>[]{ - new ByteEntityMetadata(0, MetadataType.BYTE, (byte) 0x20), - new ObjectEntityMetadata<>(2, MetadataType.OPTIONAL_CHAT, Optional.of(Component.text("tesss"))), - new BooleanEntityMetadata(3, MetadataType.BOOLEAN, true) + new ByteEntityMetadata(0, MetaDataTypes.BYTE, (byte) 0x20), + new ObjectEntityMetadata<>(2, MetaDataTypes.OPTIONAL_CHAT, Optional.of(Component.text("tesss"))), + new BooleanEntityMetadata(3, MetaDataTypes.BOOLEAN, true) })); assertNextPacketMatch(context, SetEntityDataPacket.class, packet -> { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f9bfd758e..3ab475829 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,7 @@ protocol-common = "3.0.0.Beta6-20250212.131009-3" protocol-codec = "3.0.0.Beta6-20250212.131009-3" raknet = "1.0.0.CR3-20250128.101054-17" minecraftauth = "4.1.1" -mcprotocollib = "1.21.4-20250216.154737-20" +mcprotocollib = "1.21.4-20250218.175633-22" adventure = "4.14.0" adventure-platform = "4.3.0" junit = "5.9.2" From ebaaed7542e681955330696985bd4326a4d15b45 Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Wed, 19 Feb 2025 14:46:46 +0100 Subject: [PATCH 160/165] fix test --- .../geyser/scoreboard/network/ScoreboardIssueTests.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java b/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java index 2ad0ca8ad..2239c9819 100644 --- a/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java +++ b/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java @@ -213,9 +213,9 @@ public class ScoreboardIssueTests { // metadata set: invisible, custom name, custom name visible context.translate(setEntityDataTranslator, new ClientboundSetEntityDataPacket(1298, new EntityMetadata<?, ?>[]{ - new ByteEntityMetadata(0, MetaDataTypes.BYTE, (byte) 0x20), - new ObjectEntityMetadata<>(2, MetaDataTypes.OPTIONAL_CHAT, Optional.of(Component.text("tesss"))), - new BooleanEntityMetadata(3, MetaDataTypes.BOOLEAN, true) + new ByteEntityMetadata(0, MetadataTypes.BYTE, (byte) 0x20), + new ObjectEntityMetadata<>(2, MetadataTypes.OPTIONAL_CHAT, Optional.of(Component.text("tesss"))), + new BooleanEntityMetadata(3, MetadataTypes.BOOLEAN, true) })); assertNextPacketMatch(context, SetEntityDataPacket.class, packet -> { From fd4c80598ed40c2069b2ccc83c39e3fe1cc46aef Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Thu, 20 Feb 2025 17:01:39 +0100 Subject: [PATCH 161/165] Fix skins not showing on 1.21.60 --- .../geyser/session/GeyserSession.java | 10 +++++-- .../geyser/skin/FakeHeadProvider.java | 30 ++++++++++++------- .../org/geysermc/geyser/skin/SkinManager.java | 25 +++++++++------- .../geyser/skin/SkullSkinManager.java | 22 ++++++++------ .../inventory/InventoryTranslator.java | 5 ++-- .../inventory/PlayerInventoryTranslator.java | 18 ++++++++--- 6 files changed, 70 insertions(+), 40 deletions(-) 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 3e18a2829..261e57aed 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -35,7 +35,6 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; @@ -94,6 +93,7 @@ import org.cloudburstmc.protocol.bedrock.packet.ItemComponentPacket; import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket; import org.cloudburstmc.protocol.bedrock.packet.LevelSoundEvent2Packet; import org.cloudburstmc.protocol.bedrock.packet.PlayStatusPacket; +import org.cloudburstmc.protocol.bedrock.packet.SetCommandsEnabledPacket; import org.cloudburstmc.protocol.bedrock.packet.SetTimePacket; import org.cloudburstmc.protocol.bedrock.packet.StartGamePacket; import org.cloudburstmc.protocol.bedrock.packet.SyncEntityPropertyPacket; @@ -331,10 +331,10 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { private final Map<Vector3i, ItemFrameEntity> itemFrameCache = new Object2ObjectOpenHashMap<>(); /** - * A list of all players that have a player head on with a custom texture. + * A map of all players (and their heads) that are wearing a player head with a custom texture. * Our workaround for these players is to give them a custom skin and geometry to emulate wearing a custom skull. */ - private final Set<UUID> playerWithCustomHeads = new ObjectOpenHashSet<>(); + private final Map<UUID, GameProfile> playerWithCustomHeads = new Object2ObjectOpenHashMap<>(); @Setter private boolean droppingLecternBook; @@ -787,6 +787,10 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { playStatusPacket.setStatus(PlayStatusPacket.Status.PLAYER_SPAWN); upstream.sendPacket(playStatusPacket); + SetCommandsEnabledPacket setCommandsEnabledPacket = new SetCommandsEnabledPacket(); + setCommandsEnabledPacket.setCommandsEnabled(!geyser.getConfig().isXboxAchievementsEnabled()); + upstream.sendPacket(setCommandsEnabledPacket); + UpdateAttributesPacket attributesPacket = new UpdateAttributesPacket(); attributesPacket.setRuntimeEntityId(getPlayerEntity().getGeyserId()); // Default move speed 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 2434d6d91..12f002025 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java +++ b/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java @@ -109,6 +109,12 @@ public class FakeHeadProvider { return; } + GameProfile current = session.getPlayerWithCustomHeads().get(entity.getUuid()); + if (profile.equals(current)) { + // We already did this, no need to re-compute + return; + } + Map<TextureType, Texture> textures; try { textures = profile.getTextures(false); @@ -118,7 +124,7 @@ public class FakeHeadProvider { } if (textures == null || textures.isEmpty()) { - loadHead(session, entity, profile.getName()); + loadHeadFromProfile(session, entity, profile); return; } @@ -133,16 +139,18 @@ public class FakeHeadProvider { boolean isAlex = skinTexture.getModel() == TextureModel.SLIM; - loadHead(session, entity, new GameProfileData(skinTexture.getURL(), capeUrl, isAlex)); + loadHeadFromProfile(session, entity, new GameProfileData(skinTexture.getURL(), capeUrl, isAlex), profile); } - public static void loadHead(GeyserSession session, PlayerEntity entity, String owner) { - if (owner == null || owner.isEmpty()) { - return; + public static void loadHeadFromProfile(GeyserSession session, PlayerEntity entity, GameProfile profile) { + CompletableFuture<String> texturesFuture; + if (profile.getId() != null) { + texturesFuture = SkinProvider.requestTexturesFromUUID(profile.getId().toString()); + } else { + texturesFuture = SkinProvider.requestTexturesFromUsername(profile.getName()); } - CompletableFuture<String> completableFuture = SkinProvider.requestTexturesFromUsername(owner); - completableFuture.whenCompleteAsync((encodedJson, throwable) -> { + texturesFuture.whenCompleteAsync((encodedJson, throwable) -> { if (throwable != null) { GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.skin.fail", entity.getUuid()), throwable); return; @@ -152,17 +160,17 @@ public class FakeHeadProvider { if (gameProfileData == null) { return; } - loadHead(session, entity, gameProfileData); + loadHeadFromProfile(session, entity, gameProfileData, profile); } catch (IOException e) { GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.skin.fail", entity.getUuid(), e.getMessage())); } }); } - public static void loadHead(GeyserSession session, PlayerEntity entity, SkinManager.GameProfileData gameProfileData) { + public static void loadHeadFromProfile(GeyserSession session, PlayerEntity entity, SkinManager.GameProfileData gameProfileData, GameProfile profile) { String fakeHeadSkinUrl = gameProfileData.skinUrl(); - session.getPlayerWithCustomHeads().add(entity.getUuid()); + session.getPlayerWithCustomHeads().put(entity.getUuid(), profile); String texturesProperty = entity.getTexturesProperty(); SkinProvider.getExecutorService().execute(() -> { try { @@ -179,7 +187,7 @@ public class FakeHeadProvider { return; } - if (!session.getPlayerWithCustomHeads().remove(entity.getUuid())) { + if (session.getPlayerWithCustomHeads().remove(entity.getUuid()) == null) { return; } 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 4c3db7504..8d4090ee4 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java +++ b/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java @@ -47,7 +47,6 @@ import org.geysermc.geyser.text.GeyserLocale; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Base64; -import java.util.Collections; import java.util.List; import java.util.UUID; import java.util.function.Consumer; @@ -102,7 +101,7 @@ public class SkinManager { Skin skin, Cape cape, SkinGeometry geometry) { - SerializedSkin serializedSkin = getSkin(skin.textureUrl(), skin, cape, geometry); + SerializedSkin serializedSkin = getSkin(session, skin.textureUrl(), skin, cape, geometry); // This attempts to find the XUID of the player so profile images show up for Xbox accounts String xuid = ""; @@ -138,7 +137,6 @@ public class SkinManager { SkinGeometry geometry = skinData.geometry(); if (entity.getUuid().equals(session.getPlayerEntity().getUuid())) { - // TODO is this special behavior needed? PlayerListPacket.Entry updatedEntry = buildEntryManually( session, entity.getUuid(), @@ -158,17 +156,24 @@ public class SkinManager { packet.setUuid(entity.getUuid()); packet.setOldSkinName(""); packet.setNewSkinName(skin.textureUrl()); - packet.setSkin(getSkin(skin.textureUrl(), skin, cape, geometry)); + packet.setSkin(getSkin(session, skin.textureUrl(), skin, cape, geometry)); packet.setTrustedSkin(true); session.sendUpstreamPacket(packet); } } - private static SerializedSkin getSkin(String skinId, Skin skin, Cape cape, SkinGeometry geometry) { - return SerializedSkin.of(skinId, "", geometry.geometryName(), - ImageData.of(skin.skinData()), Collections.emptyList(), - ImageData.of(cape.capeData()), geometry.geometryData(), - "", true, false, false, cape.capeId(), skinId); + private static SerializedSkin getSkin(GeyserSession session, String skinId, Skin skin, Cape cape, SkinGeometry geometry) { + return SerializedSkin.builder() + .skinId(skinId) + .skinResourcePatch(geometry.geometryName()) + .skinData(ImageData.of(skin.skinData())) + .capeData(ImageData.of(cape.capeData())) + .geometryData(geometry.geometryData()) + .premium(true) + .capeId(cape.capeId()) + .fullSkinId(skinId) + .geometryDataEngineVersion(session.getClientData().getGameVersion()) + .build(); } public static void requestAndHandleSkinAndCape(PlayerEntity entity, GeyserSession session, @@ -334,4 +339,4 @@ public class SkinManager { private static final String DEFAULT_FLOODGATE_STEVE = "https://textures.minecraft.net/texture/31f477eb1a7beee631c2ca64d06f8f68fa93a3386d04452ab27f43acdf1b60cb"; } -} \ No newline at end of file +} diff --git a/core/src/main/java/org/geysermc/geyser/skin/SkullSkinManager.java b/core/src/main/java/org/geysermc/geyser/skin/SkullSkinManager.java index e3f00d3b7..41e4025f1 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/SkullSkinManager.java +++ b/core/src/main/java/org/geysermc/geyser/skin/SkullSkinManager.java @@ -35,20 +35,24 @@ import org.geysermc.geyser.entity.type.player.SkullPlayerEntity; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.GeyserLocale; -import java.util.Collections; import java.util.function.BiConsumer; import java.util.function.Consumer; public class SkullSkinManager extends SkinManager { - public static SerializedSkin buildSkullEntryManually(String skinId, byte[] skinData) { - // Prevents https://cdn.discordapp.com/attachments/613194828359925800/779458146191147008/unknown.png + public static SerializedSkin buildSkullEntryManually(GeyserSession session, String skinId, byte[] skinData) { skinId = skinId + "_skull"; - return SerializedSkin.of( - skinId, "", SkinProvider.SKULL_GEOMETRY.geometryName(), ImageData.of(skinData), Collections.emptyList(), - ImageData.of(SkinProvider.EMPTY_CAPE.capeData()), SkinProvider.SKULL_GEOMETRY.geometryData(), - "", true, false, false, SkinProvider.EMPTY_CAPE.capeId(), skinId - ); + return SerializedSkin.builder() + .skinId(skinId) + .skinResourcePatch(SkinProvider.SKULL_GEOMETRY.geometryName()) + .skinData(ImageData.of(skinData)) + .capeData(ImageData.of(SkinProvider.EMPTY_CAPE.capeData())) + .geometryData(SkinProvider.SKULL_GEOMETRY.geometryData()) + .premium(true) + .capeId(SkinProvider.EMPTY_CAPE.capeId()) + .fullSkinId(skinId) + .geometryDataEngineVersion(session.getClientData().getGameVersion()) + .build(); } public static void requestAndHandleSkin(SkullPlayerEntity entity, GeyserSession session, @@ -59,7 +63,7 @@ public class SkullSkinManager extends SkinManager { packet.setUuid(entity.getUuid()); packet.setOldSkinName(""); packet.setNewSkinName(skin.textureUrl()); - packet.setSkin(buildSkullEntryManually(skin.textureUrl(), skin.skinData())); + packet.setSkin(buildSkullEntryManually(session, skin.textureUrl(), skin.skinData())); packet.setTrustedSkin(true); session.sendUpstreamPacket(packet); } catch (Exception e) { 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 21ffdfa96..6394c5312 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 @@ -76,7 +76,6 @@ import org.geysermc.geyser.util.InventoryUtils; import org.geysermc.geyser.util.ItemUtils; import org.geysermc.mcprotocollib.protocol.data.game.inventory.ContainerType; import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; -import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.EmptySlotDisplay; import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; @@ -258,14 +257,14 @@ public abstract class InventoryTranslator { if (this instanceof PlayerInventoryTranslator) { if (destSlot == 5) { - //only set the head if the destination is the head slot + // only set the head if the destination is the head slot GeyserItemStack javaItem = inventory.getItem(sourceSlot); if (javaItem.asItem() == Items.PLAYER_HEAD && javaItem.hasNonBaseComponents()) { FakeHeadProvider.setHead(session, session.getPlayerEntity(), javaItem.getComponent(DataComponentTypes.PROFILE)); } } else if (sourceSlot == 5) { - //we are probably removing the head, so restore the original skin + // we are probably removing the head, so restore the original skin FakeHeadProvider.restoreOriginalSkin(session, session.getPlayerEntity()); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java index f95bbb7c4..7064f1169 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java @@ -279,9 +279,22 @@ public class PlayerInventoryTranslator extends InventoryTranslator { return bundleResponse; } + int sourceSlot = bedrockSlotToJava(transferAction.getSource()); + int destSlot = bedrockSlotToJava(transferAction.getDestination()); + if (destSlot == 5) { + // only set the head if the destination is the head slot + GeyserItemStack javaItem = inventory.getItem(sourceSlot); + if (javaItem.asItem() == Items.PLAYER_HEAD + && javaItem.hasNonBaseComponents()) { + FakeHeadProvider.setHead(session, session.getPlayerEntity(), javaItem.getComponent(DataComponentTypes.PROFILE)); + } + } else if (sourceSlot == 5) { + // we are probably removing the head, so restore the original skin + FakeHeadProvider.restoreOriginalSkin(session, session.getPlayerEntity()); + } + int transferAmount = transferAction.getCount(); if (isCursor(transferAction.getDestination())) { - int sourceSlot = bedrockSlotToJava(transferAction.getSource()); GeyserItemStack sourceItem = inventory.getItem(sourceSlot); if (playerInv.getCursor().isEmpty()) { playerInv.setCursor(sourceItem.copy(0), session); @@ -294,7 +307,6 @@ public class PlayerInventoryTranslator extends InventoryTranslator { affectedSlots.add(sourceSlot); } else if (isCursor(transferAction.getSource())) { - int destSlot = bedrockSlotToJava(transferAction.getDestination()); GeyserItemStack sourceItem = playerInv.getCursor(); if (inventory.getItem(destSlot).isEmpty()) { inventory.setItem(destSlot, sourceItem.copy(0), session); @@ -307,8 +319,6 @@ public class PlayerInventoryTranslator extends InventoryTranslator { affectedSlots.add(destSlot); } else { - int sourceSlot = bedrockSlotToJava(transferAction.getSource()); - int destSlot = bedrockSlotToJava(transferAction.getDestination()); GeyserItemStack sourceItem = inventory.getItem(sourceSlot); if (inventory.getItem(destSlot).isEmpty()) { inventory.setItem(destSlot, sourceItem.copy(0), session); From 07be40256369e8a1cfb3dc464af065391c326d19 Mon Sep 17 00:00:00 2001 From: Alex <40795980+AlexProgrammerDE@users.noreply.github.com> Date: Sat, 22 Feb 2025 12:31:37 +0100 Subject: [PATCH 162/165] Add run tasks and remove useless variables (#5362) * Add run tasks and remove useless variables The benefit of run tasks is that proxies like velocity can be prototyped on without using standalone or a GUI. Thus simplifying the prototyping/fixing process. * Drop runwaterfall --- bootstrap/spigot/build.gradle.kts | 7 +++++++ bootstrap/standalone/build.gradle.kts | 3 --- bootstrap/velocity/build.gradle.kts | 7 +++++++ gradle/libs.versions.toml | 5 +++++ 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/bootstrap/spigot/build.gradle.kts b/bootstrap/spigot/build.gradle.kts index feabfdd7a..3a6c6b976 100644 --- a/bootstrap/spigot/build.gradle.kts +++ b/bootstrap/spigot/build.gradle.kts @@ -1,6 +1,7 @@ plugins { id("geyser.platform-conventions") id("geyser.modrinth-uploading-conventions") + alias(libs.plugins.runpaper) } dependencies { @@ -90,3 +91,9 @@ modrinth { "1.19.1", "1.19.2", "1.19.3", "1.19.4", "1.20", "1.20.1", "1.20.2", "1.20.3", "1.20.4", "1.20.5", "1.20.6") loaders.addAll("spigot", "paper") } + +tasks { + runServer { + minecraftVersion(libs.versions.runpaperversion.get()) + } +} diff --git a/bootstrap/standalone/build.gradle.kts b/bootstrap/standalone/build.gradle.kts index b210693c1..e794c266c 100644 --- a/bootstrap/standalone/build.gradle.kts +++ b/bootstrap/standalone/build.gradle.kts @@ -5,9 +5,6 @@ plugins { id("geyser.platform-conventions") } -val terminalConsoleVersion = "1.2.0" -val jlineVersion = "3.21.0" - dependencies { api(projects.core) diff --git a/bootstrap/velocity/build.gradle.kts b/bootstrap/velocity/build.gradle.kts index 05035e271..eec6c23d6 100644 --- a/bootstrap/velocity/build.gradle.kts +++ b/bootstrap/velocity/build.gradle.kts @@ -1,6 +1,7 @@ plugins { id("geyser.platform-conventions") id("geyser.modrinth-uploading-conventions") + alias(libs.plugins.runvelocity) } dependencies { @@ -83,3 +84,9 @@ modrinth { uploadFile.set(tasks.getByPath("shadowJar")) loaders.addAll("velocity") } + +tasks { + runVelocity { + version(libs.versions.runvelocityversion.get()) + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3ab475829..15691e2d9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -41,6 +41,9 @@ mixin = "0.8.5" mixinextras = "0.3.5" minecraft = "1.21.4" mockito = "5.+" +runtask = "2.3.1" +runpaperversion = "1.21.4" +runvelocityversion = "3.4.0-SNAPSHOT" # plugin versions indra = "3.1.3" @@ -150,6 +153,8 @@ minotaur = { group = "com.modrinth.minotaur", name = "Minotaur", version.ref = " [plugins] indra = { id = "net.kyori.indra", version.ref = "indra" } blossom = { id = "net.kyori.blossom", version.ref = "blossom" } +runvelocity = { id = "xyz.jpenilla.run-velocity", version.ref = "runtask" } +runpaper = { id = "xyz.jpenilla.run-paper", version.ref = "runtask" } [bundles] jackson = [ "jackson-annotations", "jackson-databind", "jackson-dataformat-yaml" ] From 87d9907413e30c96d588d2c7257e0f590cd169c4 Mon Sep 17 00:00:00 2001 From: chris <github@onechris.mozmail.com> Date: Sun, 23 Feb 2025 18:37:01 +0100 Subject: [PATCH 163/165] Increase packet limits for multiple connected clients playing from one IP address (#5351) * Fix https://github.com/GeyserMC/Geyser/issues/4926 * Extend the RakServerRateLimiter, now that it is possible * Update core/src/main/java/org/geysermc/geyser/network/netty/handler/RakGeyserRateLimiter.java * cast to int --- .../geyser/network/netty/GeyserServer.java | 4 ++ .../netty/handler/RakGeyserRateLimiter.java | 50 +++++++++++++++++++ .../geyser/session/SessionManager.java | 35 ++++++++++++- gradle/libs.versions.toml | 2 +- 4 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/network/netty/handler/RakGeyserRateLimiter.java 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 efbd8bdff..fec254996 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 @@ -59,6 +59,7 @@ import org.geysermc.geyser.network.CIDRMatcher; import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.network.GeyserServerInitializer; import org.geysermc.geyser.network.netty.handler.RakConnectionRequestHandler; +import org.geysermc.geyser.network.netty.handler.RakGeyserRateLimiter; import org.geysermc.geyser.network.netty.handler.RakPingHandler; import org.geysermc.geyser.network.netty.proxy.ProxyServerHandler; import org.geysermc.geyser.ping.GeyserPingInfo; @@ -175,6 +176,9 @@ public final class GeyserServer { if (Boolean.parseBoolean(System.getProperty("Geyser.RakRateLimitingDisabled", "false")) || isWhitelistedProxyProtocol) { // We would already block any non-whitelisted IP addresses in onConnectionRequest so we can remove the rate limiter channel.pipeline().remove(RakServerRateLimiter.NAME); + } else { + // Use our own rate limiter to allow multiple players from the same IP + channel.pipeline().replace(RakServerRateLimiter.NAME, RakGeyserRateLimiter.NAME, new RakGeyserRateLimiter(channel)); } } diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/handler/RakGeyserRateLimiter.java b/core/src/main/java/org/geysermc/geyser/network/netty/handler/RakGeyserRateLimiter.java new file mode 100644 index 000000000..65e66eb33 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/network/netty/handler/RakGeyserRateLimiter.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2019-2025 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.handler; + +import io.netty.channel.Channel; +import org.cloudburstmc.netty.channel.raknet.RakServerChannel; +import org.cloudburstmc.netty.handler.codec.raknet.server.RakServerRateLimiter; +import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.session.SessionManager; + +import java.net.InetAddress; + +public class RakGeyserRateLimiter extends RakServerRateLimiter { + public static final String NAME = "rak-geyser-rate-limiter"; + private final SessionManager sessionManager; + + public RakGeyserRateLimiter(Channel channel) { + super((RakServerChannel) channel); + this.sessionManager = GeyserImpl.getInstance().getSessionManager(); + } + + @Override + protected int getAddressMaxPacketCount(InetAddress address) { + // Using a factor of 0.8 for now, as the default packet count is already padded for multiple + return (int) (super.getAddressMaxPacketCount(address) * sessionManager.getAddressMultiplier(address) * 0.8); + } +} 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 14881d059..2175e3aaa 100644 --- a/core/src/main/java/org/geysermc/geyser/session/SessionManager.java +++ b/core/src/main/java/org/geysermc/geyser/session/SessionManager.java @@ -32,8 +32,15 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.text.GeyserLocale; -import java.util.*; +import java.net.InetAddress; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicInteger; public final class SessionManager { /** @@ -47,6 +54,13 @@ public final class SessionManager { @Getter private final Map<UUID, GeyserSession> sessions = new ConcurrentHashMap<>(); + /** + * Stores the number of connected sessions per address they're connected from. + * Used to raise per-IP connection limits. + */ + @Getter(AccessLevel.PACKAGE) + private final Map<InetAddress, AtomicInteger> connectedClients = new ConcurrentHashMap<>(); + /** * Called once the player has successfully authenticated to the Geyser server. */ @@ -60,6 +74,14 @@ public final class SessionManager { public void addSession(UUID uuid, GeyserSession session) { pendingSessions.remove(session); sessions.put(uuid, session); + connectedClients.compute(session.getSocketAddress().getAddress(), (key, count) -> { + if (count == null) { + return new AtomicInteger(0); + } + + count.getAndIncrement(); + return count; + }); } public void removeSession(GeyserSession session) { @@ -68,6 +90,17 @@ public final class SessionManager { // Connection was likely pending pendingSessions.remove(session); } + connectedClients.computeIfPresent(session.getSocketAddress().getAddress(), (key, count) -> { + if (count.decrementAndGet() <= 0) { + return null; + } + return count; + }); + } + + public int getAddressMultiplier(InetAddress ip) { + AtomicInteger atomicInteger = connectedClients.get(ip); + return atomicInteger == null ? 1 : atomicInteger.get(); } public @Nullable GeyserSession sessionByXuid(@NonNull String xuid) { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 15691e2d9..ae35c6e34 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,7 +13,7 @@ websocket = "1.5.1" protocol-connection = "3.0.0.Beta6-20250212.131009-3" protocol-common = "3.0.0.Beta6-20250212.131009-3" protocol-codec = "3.0.0.Beta6-20250212.131009-3" -raknet = "1.0.0.CR3-20250128.101054-17" +raknet = "1.0.0.CR3-20250218.160705-18" minecraftauth = "4.1.1" mcprotocollib = "1.21.4-20250218.175633-22" adventure = "4.14.0" From f0657c0d86eb7ff392016674f96703809f08caa4 Mon Sep 17 00:00:00 2001 From: chris <github@onechris.mozmail.com> Date: Sun, 23 Feb 2025 20:25:44 +0100 Subject: [PATCH 164/165] Don't restrict the default packet limit --- .../geyser/network/netty/handler/RakGeyserRateLimiter.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/handler/RakGeyserRateLimiter.java b/core/src/main/java/org/geysermc/geyser/network/netty/handler/RakGeyserRateLimiter.java index 65e66eb33..2e6f9be79 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/handler/RakGeyserRateLimiter.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/handler/RakGeyserRateLimiter.java @@ -44,7 +44,6 @@ public class RakGeyserRateLimiter extends RakServerRateLimiter { @Override protected int getAddressMaxPacketCount(InetAddress address) { - // Using a factor of 0.8 for now, as the default packet count is already padded for multiple - return (int) (super.getAddressMaxPacketCount(address) * sessionManager.getAddressMultiplier(address) * 0.8); + return super.getAddressMaxPacketCount(address) * sessionManager.getAddressMultiplier(address); } } From 9733311508a249e32a915e67e6569d177abcd59f Mon Sep 17 00:00:00 2001 From: onebeastchris <github@onechris.mozmail.com> Date: Sun, 23 Feb 2025 21:10:05 +0100 Subject: [PATCH 165/165] Revert latest Geyser changes --- .../org/geysermc/geyser/network/netty/GeyserServer.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 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 fec254996..fd26b63e1 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 @@ -59,7 +59,6 @@ import org.geysermc.geyser.network.CIDRMatcher; import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.network.GeyserServerInitializer; import org.geysermc.geyser.network.netty.handler.RakConnectionRequestHandler; -import org.geysermc.geyser.network.netty.handler.RakGeyserRateLimiter; import org.geysermc.geyser.network.netty.handler.RakPingHandler; import org.geysermc.geyser.network.netty.proxy.ProxyServerHandler; import org.geysermc.geyser.ping.GeyserPingInfo; @@ -176,10 +175,11 @@ public final class GeyserServer { if (Boolean.parseBoolean(System.getProperty("Geyser.RakRateLimitingDisabled", "false")) || isWhitelistedProxyProtocol) { // We would already block any non-whitelisted IP addresses in onConnectionRequest so we can remove the rate limiter channel.pipeline().remove(RakServerRateLimiter.NAME); - } else { - // Use our own rate limiter to allow multiple players from the same IP - channel.pipeline().replace(RakServerRateLimiter.NAME, RakGeyserRateLimiter.NAME, new RakGeyserRateLimiter(channel)); } +// else { +// // Use our own rate limiter to allow multiple players from the same IP +// channel.pipeline().replace(RakServerRateLimiter.NAME, RakGeyserRateLimiter.NAME, new RakGeyserRateLimiter(channel)); +// } } public void shutdown() {