diff --git a/README.md b/README.md index 3e247f4b5..aba8babf2 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The ultimate goal of this project is to allow Minecraft: Bedrock Edition users t Special thanks to the DragonProxy project for being a trailblazer in protocol translation and for all the team members who have joined us here! -### Currently supporting Minecraft Bedrock 1.18.0 - 1.18.31 and Minecraft Java 1.18.2. +### Currently supporting Minecraft Bedrock 1.19 and Minecraft Java 1.19.0. ## Setting Up Take a look [here](https://wiki.geysermc.org/geyser/setup/) for how to set up Geyser. diff --git a/bootstrap/spigot/pom.xml b/bootstrap/spigot/pom.xml index 1f08bf146..ff100c6fa 100644 --- a/bootstrap/spigot/pom.xml +++ b/bootstrap/spigot/pom.xml @@ -13,7 +13,7 @@ papermc - https://papermc.io/repo/repository/maven-public/ + https://repo.papermc.io/repository/maven-public/ viaversion-repo 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 0d3b8ef16..0fd8d849b 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 @@ -169,9 +169,10 @@ public class GeyserSpigotInjector extends GeyserInjector { * For the future, if someone wants to properly fix this - as of December 28, 2021, it happens on 1.16.5/1.17.1/1.18.1 EXCEPT Spigot 1.16.5 */ private void workAroundWeirdBug(GeyserBootstrap bootstrap) { + MinecraftProtocol protocol = new MinecraftProtocol(); LocalSession session = new LocalSession(bootstrap.getGeyserConfig().getRemote().getAddress(), bootstrap.getGeyserConfig().getRemote().getPort(), this.serverSocketAddress, - InetAddress.getLoopbackAddress().getHostAddress(), new MinecraftProtocol()); + InetAddress.getLoopbackAddress().getHostAddress(), protocol, protocol.createHelper()); session.connect(); } diff --git a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneBootstrap.java b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneBootstrap.java index 7c49585d5..1e84e13d9 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneBootstrap.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneBootstrap.java @@ -209,6 +209,7 @@ public class GeyserStandaloneBootstrap implements GeyserBootstrap { return; } } + geyserLogger.setDebug(geyserConfig.isDebugMode()); GeyserConfiguration.checkGeyserConfiguration(geyserConfig, geyserLogger); // Allow libraries like Protocol to have their debug information passthrough diff --git a/core/pom.xml b/core/pom.xml index 6334615d3..d817fab0f 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -72,7 +72,7 @@ com.nukkitx nbt - 2.1.0 + 2.2.1 compile @@ -120,8 +120,8 @@ com.github.CloudburstMC.Protocol - bedrock-v503 - 297567d + bedrock-beta + be0cc73 compile @@ -153,9 +153,9 @@ compile - com.github.GeyserMC - MCProtocolLib - 0771504 + com.github.steveice10 + mcprotocollib + 1.19-SNAPSHOT compile @@ -171,7 +171,7 @@ com.github.steveice10 packetlib - 2.1-SNAPSHOT + 3.0 compile diff --git a/core/src/main/java/org/geysermc/geyser/FloodgateKeyLoader.java b/core/src/main/java/org/geysermc/geyser/FloodgateKeyLoader.java index 6d47c38c6..0aa1d39c3 100644 --- a/core/src/main/java/org/geysermc/geyser/FloodgateKeyLoader.java +++ b/core/src/main/java/org/geysermc/geyser/FloodgateKeyLoader.java @@ -43,7 +43,7 @@ public class FloodgateKeyLoader { if (floodgateDataFolder != null) { Path autoKey = floodgateDataFolder.resolve("key.pem"); if (Files.exists(autoKey)) { - logger.info(GeyserLocale.getLocaleStringLog("geyser.bootstrap.floodgate.auto_loaded")); + logger.debug(GeyserLocale.getLocaleStringLog("geyser.bootstrap.floodgate.auto_loaded")); return autoKey; } else { logger.error(GeyserLocale.getLocaleStringLog("geyser.bootstrap.floodgate.missing_key")); @@ -52,7 +52,7 @@ public class FloodgateKeyLoader { Path floodgateKey; if (config.getFloodgateKeyFile().equals("public-key.pem")) { - logger.info("Floodgate 2.0 doesn't use a public/private key system anymore. We'll search for key.pem instead"); + logger.debug("Floodgate 2.0 doesn't use a public/private key system anymore. We'll search for key.pem instead"); floodgateKey = geyserDataFolder.resolve("key.pem"); } else { floodgateKey = geyserDataFolder.resolve(config.getFloodgateKeyFile()); diff --git a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java index f3ebfa4a3..0cea9fbac 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java @@ -66,6 +66,7 @@ import org.geysermc.geyser.session.SessionManager; import org.geysermc.geyser.session.auth.AuthType; import org.geysermc.geyser.skin.FloodgateSkinUploader; import org.geysermc.geyser.skin.SkinProvider; +import org.geysermc.geyser.text.ChatColor; import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.text.MinecraftLocale; import org.geysermc.geyser.translator.inventory.item.ItemTranslator; @@ -203,7 +204,6 @@ public class GeyserImpl implements GeyserApi { GeyserLogger logger = bootstrap.getGeyserLogger(); GeyserConfiguration config = bootstrap.getGeyserConfig(); - logger.setDebug(config.isDebugMode()); ScoreboardUpdater.init(); @@ -249,18 +249,6 @@ public class GeyserImpl implements GeyserApi { // Ensure that PacketLib does not create an event loop for handling packets; we'll do that ourselves TcpSession.USE_EVENT_LOOP_FOR_PACKETS = false; - if (config.getRemote().getAuthType() == AuthType.FLOODGATE) { - try { - Key key = new AesKeyProducer().produceFrom(config.getFloodgateKeyPath()); - cipher = new AesCipher(new Base64Topping()); - cipher.init(key); - logger.info(GeyserLocale.getLocaleStringLog("geyser.auth.floodgate.loaded_key")); - skinUploader = new FloodgateSkinUploader(this).start(); - } catch (Exception exception) { - logger.severe(GeyserLocale.getLocaleStringLog("geyser.auth.floodgate.bad_key"), exception); - } - } - String branch = "unknown"; int buildNumber = -1; if (this.productionEnvironment()) { @@ -321,14 +309,34 @@ public class GeyserImpl implements GeyserApi { if (shouldStartListener) { bedrockServer.bind().whenComplete((avoid, throwable) -> { if (throwable == null) { - logger.info(GeyserLocale.getLocaleStringLog("geyser.core.start", config.getBedrock().getAddress(), String.valueOf(config.getBedrock().getPort()))); + logger.info(GeyserLocale.getLocaleStringLog("geyser.core.start", config.getBedrock().getAddress(), + String.valueOf(config.getBedrock().getPort()))); } else { - logger.severe(GeyserLocale.getLocaleStringLog("geyser.core.fail", config.getBedrock().getAddress(), String.valueOf(config.getBedrock().getPort()))); - throwable.printStackTrace(); + String address = config.getBedrock().getAddress(); + int port = config.getBedrock().getPort(); + logger.severe(GeyserLocale.getLocaleStringLog("geyser.core.fail", address, String.valueOf(port))); + if (!"0.0.0.0".equals(address)) { + logger.info(ChatColor.GREEN + "Suggestion: try setting `address` under `bedrock` in the Geyser config back to 0.0.0.0"); + logger.info(ChatColor.GREEN + "Then, restart this server."); + } } }).join(); } + if (config.getRemote().getAuthType() == AuthType.FLOODGATE) { + try { + Key key = new AesKeyProducer().produceFrom(config.getFloodgateKeyPath()); + cipher = new AesCipher(new Base64Topping()); + cipher.init(key); + logger.debug(GeyserLocale.getLocaleStringLog("geyser.auth.floodgate.loaded_key")); + // Note: this is positioned after the bind so the skin uploader doesn't try to run if Geyser fails + // to load successfully. Spigot complains about class loader if the plugin is disabled. + skinUploader = new FloodgateSkinUploader(this).start(); + } catch (Exception exception) { + logger.severe(GeyserLocale.getLocaleStringLog("geyser.auth.floodgate.bad_key"), exception); + } + } + if (config.getMetrics().isEnabled()) { metrics = new Metrics(this, "GeyserMC", config.getMetrics().getUniqueId(), false, java.util.logging.Logger.getLogger("")); metrics.addCustomChart(new Metrics.SingleLineChart("players", sessionManager::size)); diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/OffhandCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/OffhandCommand.java index 1d29d5122..b0d0e1ce6 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/OffhandCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/OffhandCommand.java @@ -28,11 +28,11 @@ package org.geysermc.geyser.command.defaults; import com.github.steveice10.mc.protocol.data.game.entity.object.Direction; import com.github.steveice10.mc.protocol.data.game.entity.player.PlayerAction; import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundPlayerActionPacket; +import com.nukkitx.math.vector.Vector3i; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.command.CommandSender; import org.geysermc.geyser.command.GeyserCommand; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.util.BlockUtils; public class OffhandCommand extends GeyserCommand { @@ -46,8 +46,8 @@ public class OffhandCommand extends GeyserCommand { return; } - ServerboundPlayerActionPacket releaseItemPacket = new ServerboundPlayerActionPacket(PlayerAction.SWAP_HANDS, BlockUtils.POSITION_ZERO, - Direction.DOWN); + ServerboundPlayerActionPacket releaseItemPacket = new ServerboundPlayerActionPacket(PlayerAction.SWAP_HANDS, Vector3i.ZERO, + Direction.DOWN, session.getNextSequence()); session.sendDownstreamPacket(releaseItemPacket); } diff --git a/core/src/main/java/org/geysermc/geyser/dump/DumpInfo.java b/core/src/main/java/org/geysermc/geyser/dump/DumpInfo.java index ca902ea5c..1c9be8c3e 100644 --- a/core/src/main/java/org/geysermc/geyser/dump/DumpInfo.java +++ b/core/src/main/java/org/geysermc/geyser/dump/DumpInfo.java @@ -40,6 +40,7 @@ import org.geysermc.geyser.text.AsteriskSerializer; import org.geysermc.geyser.configuration.GeyserConfiguration; import org.geysermc.geyser.network.MinecraftProtocol; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.util.CpuUtils; import org.geysermc.geyser.util.FileUtils; import org.geysermc.geyser.util.WebUtils; import org.geysermc.floodgate.util.DeviceOs; @@ -64,6 +65,7 @@ public class DumpInfo { private final DumpInfo.VersionInfo versionInfo; private final int cpuCount; + private final String cpuName; private final Locale systemLocale; private final String systemEncoding; private Properties gitInfo; @@ -80,6 +82,7 @@ public class DumpInfo { this.versionInfo = new VersionInfo(); this.cpuCount = Runtime.getRuntime().availableProcessors(); + this.cpuName = CpuUtils.tryGetProcessorName(); this.systemLocale = Locale.getDefault(); this.systemEncoding = System.getProperty("file.encoding"); 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 1de571c94..73814628f 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java @@ -51,6 +51,7 @@ import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.translator.text.MessageTranslator; public final class EntityDefinitions { + public static final EntityDefinition ALLAY; public static final EntityDefinition AREA_EFFECT_CLOUD; public static final EntityDefinition ARMOR_STAND; public static final EntityDefinition ARROW; @@ -63,6 +64,7 @@ public final class EntityDefinitions { public static final EntityDefinition CAVE_SPIDER; public static final EntityDefinition CHEST_MINECART; public static final EntityDefinition CHICKEN; + public static final EntityDefinition CHEST_BOAT; public static final EntityDefinition COD; public static final EntityDefinition COMMAND_BLOCK_MINECART; public static final EntityDefinition COW; @@ -88,6 +90,7 @@ public final class EntityDefinitions { public static final EntityDefinition FIREWORK_ROCKET; public static final EntityDefinition FISHING_BOBBER; public static final EntityDefinition FOX; + public static final EntityDefinition FROG; public static final EntityDefinition FURNACE_MINECART; // Not present on Bedrock public static final EntityDefinition GHAST; public static final EntityDefinition GIANT; @@ -143,6 +146,7 @@ public final class EntityDefinitions { public static final EntityDefinition SQUID; public static final EntityDefinition STRAY; public static final EntityDefinition STRIDER; + public static final EntityDefinition TADPOLE; public static final EntityDefinition TNT; public static final EntityDefinition TNT_MINECART; public static final EntityDefinition TRADER_LLAMA; @@ -153,6 +157,7 @@ public final class EntityDefinitions { public static final EntityDefinition VILLAGER; public static final EntityDefinition VINDICATOR; public static final EntityDefinition WANDERING_TRADER; + public static final EntityDefinition WARDEN; public static final EntityDefinition WITCH; public static final EntityDefinition WITHER; public static final EntityDefinition WITHER_SKELETON; @@ -179,7 +184,7 @@ public final class EntityDefinitions { .addTranslator(MetadataType.INT, Entity::setAir) // Air/bubbles .addTranslator(MetadataType.OPTIONAL_CHAT, Entity::setDisplayName) .addTranslator(MetadataType.BOOLEAN, Entity::setDisplayNameVisible) - .addTranslator(MetadataType.BOOLEAN, (entity, entityMetadata) -> entity.setFlag(EntityFlag.SILENT, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue())) + .addTranslator(MetadataType.BOOLEAN, Entity::setSilent) .addTranslator(MetadataType.BOOLEAN, Entity::setGravity) .addTranslator(MetadataType.POSE, (entity, entityMetadata) -> entity.setPose(entityMetadata.getValue())) .addTranslator(MetadataType.INT, Entity::setFreezing) @@ -209,6 +214,9 @@ public final class EntityDefinitions { .addTranslator(MetadataType.BOOLEAN, BoatEntity::setPaddlingRight) .addTranslator(MetadataType.INT, (boatEntity, entityMetadata) -> boatEntity.getDirtyMetadata().put(EntityData.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) @@ -274,6 +282,7 @@ public final class EntityDefinitions { .build(); PAINTING = EntityDefinition.inherited(null, entityBase) .type(EntityType.PAINTING) + .addTranslator(MetadataType.PAINTING_VARIANT, PaintingEntity::setPaintingType) .build(); SHULKER_BULLET = EntityDefinition.inherited(ThrowableEntity::new, entityBase) .type(EntityType.SHULKER_BULLET) @@ -441,6 +450,10 @@ public final class EntityDefinitions { // Extends mob { + ALLAY = EntityDefinition.inherited(AllayEntity::new, mobEntityBase) + .type(EntityType.ALLAY) + .height(0.6f).width(0.35f) + .build(); BAT = EntityDefinition.inherited(BatEntity::new, mobEntityBase) .type(EntityType.BAT) .height(0.9f).width(0.5f) @@ -550,6 +563,11 @@ public final class EntityDefinitions { .height(0.8f).width(0.4f) .addTranslator(MetadataType.BYTE, VexEntity::setVexFlags) .build(); + WARDEN = EntityDefinition.inherited(WardenEntity::new, mobEntityBase) + .type(EntityType.WARDEN) + .height(2.9f).width(0.9f) + .addTranslator(MetadataType.INT, WardenEntity::setAngerLevel) + .build(); WITHER = EntityDefinition.inherited(WitherEntity::new, mobEntityBase) .type(EntityType.WITHER) .height(3.5f).width(0.9f) @@ -634,6 +652,10 @@ public final class EntityDefinitions { .type(EntityType.SALMON) .height(0.5f).width(0.7f) .build(); + TADPOLE = EntityDefinition.inherited(TadpoleEntity::new, abstractFishEntityBase) + .type(EntityType.TADPOLE) + .height(0.3f).width(0.4f) + .build(); TROPICAL_FISH = EntityDefinition.inherited(TropicalFishEntity::new, abstractFishEntityBase) .type(EntityType.TROPICAL_FISH) .heightAndWidth(0.6f) @@ -735,6 +757,12 @@ public final class EntityDefinitions { .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) + .build(); HOGLIN = EntityDefinition.inherited(HoglinEntity::new, ageableEntityBase) .type(EntityType.HOGLIN) .height(1.4f).width(1.3965f) @@ -871,7 +899,7 @@ public final class EntityDefinitions { CAT = EntityDefinition.inherited(CatEntity::new, tameableEntityBase) .type(EntityType.CAT) .height(0.35f).width(0.3f) - .addTranslator(MetadataType.INT, CatEntity::setCatVariant) + .addTranslator(MetadataType.CAT_VARIANT, CatEntity::setCatVariant) .addTranslator(MetadataType.BOOLEAN, CatEntity::setResting) .addTranslator(null) // "resting state one" //TODO .addTranslator(MetadataType.INT, CatEntity::setCollarColor) 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 f0095d26a..c896c239e 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/GeyserDirtyMetadata.java +++ b/core/src/main/java/org/geysermc/geyser/entity/GeyserDirtyMetadata.java @@ -52,4 +52,9 @@ public final class GeyserDirtyMetadata { public boolean hasEntries() { return !metadata.isEmpty(); } + + @Override + public String toString() { + return metadata.toString(); + } } 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 new file mode 100644 index 000000000..724bf921e --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ChestBoatEntity.java @@ -0,0 +1,51 @@ +/* + * 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.entity.type; + +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import com.nukkitx.math.vector.Vector3f; +import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.util.InteractionResult; +import org.geysermc.geyser.util.InteractiveTag; + +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); + } + + @Override + protected InteractiveTag testInteraction(Hand hand) { + return passengers.isEmpty() && !session.isSneaking() ? super.testInteraction(hand) : InteractiveTag.OPEN_CONTAINER; + } + + @Override + public InteractionResult interact(Hand hand) { + return passengers.isEmpty() && !session.isSneaking() ? super.interact(hand) : InteractionResult.SUCCESS; + } +} diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/EnderCrystalEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/EnderCrystalEntity.java index a1e91bfd2..f9e4af7c1 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/EnderCrystalEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/EnderCrystalEntity.java @@ -26,7 +26,6 @@ package org.geysermc.geyser.entity.type; import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata; -import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.math.vector.Vector3i; import com.nukkitx.protocol.bedrock.data.entity.EntityData; @@ -50,13 +49,12 @@ public class EnderCrystalEntity extends Entity { setFlag(EntityFlag.FIRE_IMMUNE, true); } - public void setBlockTarget(EntityMetadata, ?> entityMetadata) { + public void setBlockTarget(EntityMetadata, ?> entityMetadata) { // Show beam // Usually performed client-side on Bedrock except for Ender Dragon respawn event - Optional optionalPos = entityMetadata.getValue(); + Optional optionalPos = entityMetadata.getValue(); if (optionalPos.isPresent()) { - Position pos = optionalPos.get(); - dirtyMetadata.put(EntityData.BLOCK_TARGET, Vector3i.from(pos.getX(), pos.getY(), pos.getZ())); + dirtyMetadata.put(EntityData.BLOCK_TARGET, optionalPos.get()); } else { dirtyMetadata.put(EntityData.BLOCK_TARGET, Vector3i.ZERO); } 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 4dc3a437a..144d1cbf9 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 @@ -94,6 +94,8 @@ public class Entity { private float boundingBoxWidth; @Setter(AccessLevel.NONE) protected String nametag = ""; + @Setter(AccessLevel.NONE) + protected boolean silent = false; /* Metadata end */ protected List passengers = Collections.emptyList(); @@ -141,13 +143,19 @@ public class Entity { */ protected void initializeMetadata() { dirtyMetadata.put(EntityData.SCALE, 1f); - dirtyMetadata.put(EntityData.COLOR, 0); + dirtyMetadata.put(EntityData.COLOR, (byte) 0); dirtyMetadata.put(EntityData.MAX_AIR_SUPPLY, getMaxAir()); setDimensions(Pose.STANDING); setFlag(EntityFlag.HAS_GRAVITY, true); setFlag(EntityFlag.HAS_COLLISION, true); setFlag(EntityFlag.CAN_SHOW_NAME, true); setFlag(EntityFlag.CAN_CLIMB, true); + // Let the Java server (or us) supply all sounds for an entity + setClientSideSilent(); + } + + protected void setClientSideSilent() { + setFlag(EntityFlag.SILENT, true); } public void spawnEntity() { @@ -351,7 +359,7 @@ public class Entity { dirtyMetadata.put(EntityData.AIR_SUPPLY, (short) MathUtils.constrain(amount, 0, getMaxAir())); } - protected int getMaxAir() { + protected short getMaxAir() { return 300; } @@ -370,6 +378,10 @@ public class Entity { dirtyMetadata.put(EntityData.NAMETAG_ALWAYS_SHOW, (byte) (entityMetadata.getPrimitiveValue() ? 1 : 0)); } + public final void setSilent(BooleanEntityMetadata entityMetadata) { + silent = entityMetadata.getPrimitiveValue(); + } + public void setGravity(BooleanEntityMetadata entityMetadata) { setFlag(EntityFlag.HAS_GRAVITY, !entityMetadata.getPrimitiveValue()); } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/EvokerFangsEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/EvokerFangsEntity.java index 03c71cec6..af7dca68c 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/EvokerFangsEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/EvokerFangsEntity.java @@ -27,7 +27,6 @@ package org.geysermc.geyser.entity.type; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.entity.EntityData; -import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; import com.nukkitx.protocol.bedrock.packet.PlaySoundPacket; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.session.GeyserSession; @@ -58,7 +57,7 @@ public class EvokerFangsEntity extends Entity implements Tickable { public void setAttackStarted() { this.attackStarted = true; - if (!getFlag(EntityFlag.SILENT)) { + if (!silent) { // Play the chomp sound PlaySoundPacket packet = new PlaySoundPacket(); packet.setPosition(this.position); diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/FallingBlockEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/FallingBlockEntity.java index ceb3ea15c..3e64cfcea 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/FallingBlockEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/FallingBlockEntity.java @@ -36,8 +36,8 @@ import java.util.UUID; public class FallingBlockEntity extends Entity { - public FallingBlockEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, Vector3f position, Vector3f motion, float yaw, float pitch, int javaId) { - super(session, entityId, geyserId, uuid, EntityDefinitions.FALLING_BLOCK, position, motion, yaw, pitch, 0f); + public FallingBlockEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw, int javaId) { + super(session, entityId, geyserId, uuid, EntityDefinitions.FALLING_BLOCK, position, motion, yaw, pitch, headYaw); this.dirtyMetadata.put(EntityData.VARIANT, session.getBlockMappings().getBedrockBlockId(javaId)); } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/FishingHookEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/FishingHookEntity.java index 52ad82370..75bdd9021 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/FishingHookEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/FishingHookEntity.java @@ -28,17 +28,16 @@ package org.geysermc.geyser.entity.type; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.entity.EntityData; -import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; import com.nukkitx.protocol.bedrock.packet.PlaySoundPacket; import lombok.Getter; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.type.player.PlayerEntity; -import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.level.physics.BoundingBox; -import org.geysermc.geyser.translator.collision.BlockCollision; -import org.geysermc.geyser.level.block.BlockStateValues; -import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.level.block.BlockPositionIterator; +import org.geysermc.geyser.level.block.BlockStateValues; +import org.geysermc.geyser.level.physics.BoundingBox; +import org.geysermc.geyser.registry.BlockRegistries; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.collision.BlockCollision; import org.geysermc.geyser.util.BlockUtils; import java.util.UUID; @@ -56,7 +55,7 @@ public class FishingHookEntity extends ThrowableEntity { private final BoundingBox boundingBox; - public FishingHookEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, Vector3f position, Vector3f motion, float yaw, float pitch, PlayerEntity owner) { + public FishingHookEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw, PlayerEntity owner) { super(session, entityId, geyserId, uuid, EntityDefinitions.FISHING_BOBBER, position, motion, yaw, pitch, 0f); this.boundingBox = new BoundingBox(0.125, 0.125, 0.125, 0.25, 0.25, 0.25); @@ -129,7 +128,7 @@ public class FishingHookEntity extends ThrowableEntity { } private void sendSplashSound(GeyserSession session) { - if (!getFlag(EntityFlag.SILENT)) { + if (!silent) { float volume = (float) (0.2f * Math.sqrt(0.2 * (motion.getX() * motion.getX() + motion.getZ() * motion.getZ()) + motion.getY() * motion.getY())); if (volume > 1) { volume = 1; 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 9cfa22a1f..bc7736e9b 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 @@ -79,8 +79,8 @@ public class ItemFrameEntity extends Entity { */ private boolean changed = true; - public ItemFrameEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition definition, Vector3f position, Vector3f motion, float yaw, float pitch, Direction direction) { - super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, 0f); + public ItemFrameEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw, Direction direction) { + super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); NbtMapBuilder blockBuilder = NbtMap.builder() .putString("name", this.definition.entityType() == EntityType.GLOW_ITEM_FRAME ? "minecraft:glow_frame" : "minecraft:frame") 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 87b709309..2550643d3 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 @@ -29,7 +29,6 @@ import com.github.steveice10.mc.protocol.data.game.entity.attribute.Attribute; import com.github.steveice10.mc.protocol.data.game.entity.attribute.AttributeType; import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.metadata.Pose; -import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.FloatEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata; @@ -52,17 +51,13 @@ import lombok.Setter; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.entity.attribute.GeyserAttributeType; import org.geysermc.geyser.inventory.GeyserItemStack; -import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.registry.type.ItemMapping; +import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.AttributeUtils; import org.geysermc.geyser.util.ChunkUtils; import org.geysermc.geyser.util.InteractionResult; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Optional; -import java.util.UUID; +import java.util.*; @Getter @Setter @@ -123,12 +118,11 @@ public class LivingEntity extends Entity { session.sendUpstreamPacket(attributesPacket); } - public Vector3i setBedPosition(EntityMetadata, ?> entityMetadata) { - Optional optionalPos = entityMetadata.getValue(); + public Vector3i setBedPosition(EntityMetadata, ?> entityMetadata) { + Optional optionalPos = entityMetadata.getValue(); if (optionalPos.isPresent()) { - Position bedPosition = optionalPos.get(); - Vector3i vector = Vector3i.from(bedPosition.getX(), bedPosition.getY(), bedPosition.getZ()); - dirtyMetadata.put(EntityData.BED_POSITION, vector); + Vector3i bedPosition = optionalPos.get(); + dirtyMetadata.put(EntityData.BED_POSITION, bedPosition); int bed = session.getGeyser().getWorldManager().getBlockAt(session, bedPosition); // Bed has to be updated, or else player is floating in the air ChunkUtils.updateBlock(session, bed, bedPosition); @@ -136,7 +130,7 @@ public class LivingEntity extends Entity { // Has to be a byte or it does not work // (Bed position is what actually triggers sleep - "pose" is only optional) dirtyMetadata.put(EntityData.PLAYER_FLAGS, (byte) 2); - return vector; + return bedPosition; } else { // Player is no longer sleeping dirtyMetadata.put(EntityData.PLAYER_FLAGS, (byte) 0); diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/PaintingEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/PaintingEntity.java index 70b5d52ba..cdd9449e5 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/PaintingEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/PaintingEntity.java @@ -25,33 +25,45 @@ package org.geysermc.geyser.entity.type; +import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ObjectEntityMetadata; +import com.github.steveice10.mc.protocol.data.game.entity.object.Direction; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.packet.AddPaintingPacket; -import org.geysermc.geyser.entity.EntityDefinitions; -import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.level.PaintingType; +import org.geysermc.geyser.session.GeyserSession; import java.util.UUID; public class PaintingEntity extends Entity { private static final double OFFSET = -0.46875; - private final PaintingType paintingName; - private final int direction; + private final Direction direction; - public PaintingEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, Vector3f position, PaintingType paintingName, int direction) { - super(session, entityId, geyserId, uuid, EntityDefinitions.PAINTING, position, Vector3f.ZERO, 0f, 0f, 0f); - this.paintingName = paintingName; + public PaintingEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw, Direction direction) { + super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); this.direction = direction; } @Override public void spawnEntity() { + // Wait until we get the metadata needed + } + + public void setPaintingType(ObjectEntityMetadata entityMetadata) { + PaintingType type = PaintingType.getByPaintingType(entityMetadata.getValue()); AddPaintingPacket addPaintingPacket = new AddPaintingPacket(); addPaintingPacket.setUniqueEntityId(geyserId); addPaintingPacket.setRuntimeEntityId(geyserId); - addPaintingPacket.setMotive(paintingName.getBedrockName()); - addPaintingPacket.setPosition(fixOffset()); - addPaintingPacket.setDirection(direction); + addPaintingPacket.setMotive(type.getBedrockName()); + addPaintingPacket.setPosition(fixOffset(type)); + addPaintingPacket.setDirection(switch (direction) { + //TODO this doesn't seem right. Why did it work fine before? + case SOUTH -> 0; + case WEST -> 1; + case NORTH -> 2; + case EAST -> 3; + default -> 0; + }); session.sendUpstreamPacket(addPaintingPacket); valid = true; @@ -64,17 +76,17 @@ public class PaintingEntity extends Entity { // Do nothing, as head look messes up paintings } - private Vector3f fixOffset() { + private Vector3f fixOffset(PaintingType paintingName) { Vector3f position = super.position; position = position.add(0.5, 0.5, 0.5); double widthOffset = paintingName.getWidth() > 1 ? 0.5 : 0; double heightOffset = paintingName.getHeight() > 1 && paintingName.getHeight() != 3 ? 0.5 : 0; return switch (direction) { - case 0 -> position.add(widthOffset, heightOffset, OFFSET); - case 1 -> position.add(-OFFSET, heightOffset, widthOffset); - case 2 -> position.add(-widthOffset, heightOffset, -OFFSET); - case 3 -> position.add(OFFSET, heightOffset, -widthOffset); + case SOUTH -> position.add(widthOffset, heightOffset, OFFSET); + case WEST -> position.add(-OFFSET, heightOffset, widthOffset); + case NORTH -> position.add(-widthOffset, heightOffset, -OFFSET); + case EAST -> position.add(OFFSET, heightOffset, -widthOffset); default -> position; }; } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/AbstractFishEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/AbstractFishEntity.java index e6cd13f61..842c94e95 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/AbstractFishEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/AbstractFishEntity.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.entity.type.living; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; @@ -49,11 +50,11 @@ public class AbstractFishEntity extends WaterEntity { @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (EntityUtils.attemptToBucket(session, itemInHand)) { return InteractionResult.SUCCESS; } else { - return super.mobInteract(itemInHand); + return super.mobInteract(hand, itemInHand); } } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/AllayEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/AllayEntity.java new file mode 100644 index 000000000..ab444c4ab --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/AllayEntity.java @@ -0,0 +1,70 @@ +/* + * 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.entity.type.living; + +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import com.nukkitx.math.vector.Vector3f; +import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.inventory.GeyserItemStack; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.util.InteractionResult; +import org.geysermc.geyser.util.InteractiveTag; + +import javax.annotation.Nonnull; +import java.util.UUID; + +public class AllayEntity extends MobEntity { + public AllayEntity(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); + } + + @Nonnull + @Override + protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + if (!this.hand.isValid() && !itemInHand.isEmpty()) { + return InteractiveTag.GIVE_ITEM_TO_ALLAY; + } else if (this.hand.isValid() && hand == Hand.MAIN_HAND && itemInHand.isEmpty()) { + // Seems like there isn't a good tag for this yet + return InteractiveTag.GIVE_ITEM_TO_ALLAY; + } else { + return super.testMobInteraction(hand, itemInHand); + } + } + + @Nonnull + @Override + protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + if (!this.hand.isValid() && !itemInHand.isEmpty()) { + //TODO play sound? + return InteractionResult.SUCCESS; + } else if (this.hand.isValid() && hand == Hand.MAIN_HAND && itemInHand.isEmpty()) { + //TOCHECK also play sound here? + return InteractionResult.SUCCESS; + } else { + return super.mobInteract(hand, itemInHand); + } + } +} 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 18076763e..04e4727d0 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 @@ -26,9 +26,7 @@ package org.geysermc.geyser.entity.type.living; import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata; -import com.github.steveice10.mc.protocol.data.game.entity.metadata.Rotation; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata; -import com.github.steveice10.mc.protocol.data.game.entity.player.GameMode; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.entity.EntityData; @@ -165,27 +163,27 @@ public class ArmorStandEntity extends LivingEntity { setFlag(EntityFlag.ADMIRING, (xd & 0x08) == 0x08); // Has no baseplate } - public void setHeadRotation(EntityMetadata entityMetadata) { + public void setHeadRotation(EntityMetadata entityMetadata) { onRotationUpdate(EntityData.MARK_VARIANT, EntityFlag.INTERESTED, EntityFlag.CHARGED, EntityFlag.POWERED, entityMetadata.getValue()); } - public void setBodyRotation(EntityMetadata entityMetadata) { + public void setBodyRotation(EntityMetadata entityMetadata) { onRotationUpdate(EntityData.VARIANT, EntityFlag.IN_LOVE, EntityFlag.CELEBRATING, EntityFlag.CELEBRATING_SPECIAL, entityMetadata.getValue()); } - public void setLeftArmRotation(EntityMetadata entityMetadata) { + public void setLeftArmRotation(EntityMetadata entityMetadata) { onRotationUpdate(EntityData.TRADE_TIER, EntityFlag.CHARGING, EntityFlag.CRITICAL, EntityFlag.DANCING, entityMetadata.getValue()); } - public void setRightArmRotation(EntityMetadata entityMetadata) { + public void setRightArmRotation(EntityMetadata entityMetadata) { onRotationUpdate(EntityData.MAX_TRADE_TIER, EntityFlag.ELDER, EntityFlag.EMOTING, EntityFlag.IDLING, entityMetadata.getValue()); } - public void setLeftLegRotation(EntityMetadata entityMetadata) { + public void setLeftLegRotation(EntityMetadata entityMetadata) { onRotationUpdate(EntityData.SKIN_ID, EntityFlag.IS_ILLAGER_CAPTAIN, EntityFlag.IS_IN_UI, EntityFlag.LINGERING, entityMetadata.getValue()); } - public void setRightLegRotation(EntityMetadata entityMetadata) { + public void setRightLegRotation(EntityMetadata entityMetadata) { onRotationUpdate(EntityData.HURT_DIRECTION, EntityFlag.IS_PREGNANT, EntityFlag.SHEARED, EntityFlag.STALKING, entityMetadata.getValue()); } @@ -200,13 +198,13 @@ public class ArmorStandEntity extends LivingEntity { * @param negativeZToggle the flag to set true if the Z value of rotation is negative * @param rotation the Java rotation value */ - private void onRotationUpdate(EntityData dataLeech, EntityFlag negativeXToggle, EntityFlag negativeYToggle, EntityFlag negativeZToggle, Rotation rotation) { + private void onRotationUpdate(EntityData dataLeech, EntityFlag negativeXToggle, EntityFlag negativeYToggle, EntityFlag negativeZToggle, Vector3f rotation) { // Indicate that rotation should be checked setFlag(EntityFlag.BRIBED, true); - int rotationX = MathUtils.wrapDegreesToInt(rotation.getPitch()); - int rotationY = MathUtils.wrapDegreesToInt(rotation.getYaw()); - int rotationZ = MathUtils.wrapDegreesToInt(rotation.getRoll()); + int rotationX = MathUtils.wrapDegreesToInt(rotation.getX()); + int rotationY = MathUtils.wrapDegreesToInt(rotation.getY()); + int rotationZ = MathUtils.wrapDegreesToInt(rotation.getZ()); // The top bit acts like binary and determines if each rotation goes above 100 // We don't do this for the negative values out of concerns of the number being too big int topBit = (Math.abs(rotationX) >= 100 ? 4 : 0) + (Math.abs(rotationY) >= 100 ? 2 : 0) + (Math.abs(rotationZ) >= 100 ? 1 : 0); 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 7085547f8..5d49f3e85 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 @@ -25,6 +25,7 @@ package org.geysermc.geyser.entity.type.living; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.nukkitx.math.vector.Vector3f; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.inventory.GeyserItemStack; @@ -47,20 +48,20 @@ public class DolphinEntity extends WaterEntity { @Nonnull @Override - protected InteractiveTag testMobInteraction(@Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (!itemInHand.isEmpty() && session.getTagCache().isFish(itemInHand)) { return InteractiveTag.FEED; } - return super.testMobInteraction(itemInHand); + return super.testMobInteraction(hand, itemInHand); } @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (!itemInHand.isEmpty() && session.getTagCache().isFish(itemInHand)) { // Feed return InteractionResult.SUCCESS; } - return super.mobInteract(itemInHand); + return super.mobInteract(hand, itemInHand); } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/IronGolemEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/IronGolemEntity.java index 4ab36b00e..e5cbb2f89 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/IronGolemEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/IronGolemEntity.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.entity.type.living; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.entity.EntityData; import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; @@ -48,7 +49,7 @@ public class IronGolemEntity extends GolemEntity { @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (itemInHand.getJavaId() == session.getItemMappings().getStoredItems().ironIngot()) { if (health < maxHealth) { // Healing the iron golem @@ -57,6 +58,6 @@ public class IronGolemEntity extends GolemEntity { return InteractionResult.PASS; } } - return super.mobInteract(itemInHand); + return super.mobInteract(hand, itemInHand); } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/MobEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/MobEntity.java index 8734f8bd1..723a9c431 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/MobEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/MobEntity.java @@ -90,7 +90,7 @@ public class MobEntity extends LivingEntity { } } - InteractiveTag tag = testMobInteraction(itemStack); + InteractiveTag tag = testMobInteraction(hand, itemStack); return tag != InteractiveTag.NONE ? tag : super.testInteraction(hand); } } @@ -109,7 +109,7 @@ public class MobEntity extends LivingEntity { if (result.consumesAction()) { return result; } else { - InteractionResult mobResult = mobInteract(itemInHand); + InteractionResult mobResult = mobInteract(hand, itemInHand); return mobResult.consumesAction() ? mobResult : super.interact(hand); } } @@ -137,12 +137,12 @@ public class MobEntity extends LivingEntity { } @Nonnull - protected InteractiveTag testMobInteraction(@Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { return InteractiveTag.NONE; } @Nonnull - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { return InteractionResult.PASS; } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/SnowGolemEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/SnowGolemEntity.java index 794f71c04..b075de882 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/SnowGolemEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/SnowGolemEntity.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.entity.type.living; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; @@ -51,7 +52,7 @@ public class SnowGolemEntity extends GolemEntity { @Nonnull @Override - protected InteractiveTag testMobInteraction(@Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (session.getItemMappings().getStoredItems().shears() == itemInHand.getJavaId() && isAlive() && !getFlag(EntityFlag.SHEARED)) { // Shearing the snow golem return InteractiveTag.SHEAR; @@ -61,7 +62,7 @@ public class SnowGolemEntity extends GolemEntity { @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (session.getItemMappings().getStoredItems().shears() == itemInHand.getJavaId() && isAlive() && !getFlag(EntityFlag.SHEARED)) { // Shearing the snow golem return InteractionResult.SUCCESS; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/TadpoleEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/TadpoleEntity.java new file mode 100644 index 000000000..034dffc65 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/TadpoleEntity.java @@ -0,0 +1,66 @@ +/* + * 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.entity.type.living; + +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import com.nukkitx.math.vector.Vector3f; +import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.inventory.GeyserItemStack; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.util.InteractionResult; +import org.geysermc.geyser.util.InteractiveTag; + +import javax.annotation.Nonnull; +import java.util.UUID; + +public class TadpoleEntity extends AbstractFishEntity { + public TadpoleEntity(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); + } + + @Nonnull + @Override + protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + if (isFood(itemInHand)) { + return InteractiveTag.FEED; + } + return super.testMobInteraction(hand, itemInHand); + } + + @Nonnull + @Override + protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + if (isFood(itemInHand)) { + //TODO particles + return InteractionResult.SUCCESS; + } + return super.mobInteract(hand, itemInHand); + } + + private boolean isFood(GeyserItemStack itemStack) { + return itemStack.getJavaId() == session.getItemMappings().getStoredItems().slimeBall(); + } +} 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 64f41c5ad..0da53b7c6 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 @@ -25,6 +25,7 @@ package org.geysermc.geyser.entity.type.living.animal; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.entity.EntityEventType; import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; @@ -63,16 +64,16 @@ public class AnimalEntity extends AgeableEntity { @Nonnull @Override - protected InteractiveTag testMobInteraction(@Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (canEat(itemInHand)) { return InteractiveTag.FEED; } - return super.testMobInteraction(itemInHand); + return super.testMobInteraction(hand, itemInHand); } @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (canEat(itemInHand)) { // FEED if (getFlag(EntityFlag.BABY)) { @@ -82,6 +83,6 @@ public class AnimalEntity extends AgeableEntity { return InteractionResult.CONSUME; } } - return super.mobInteract(itemInHand); + return super.mobInteract(hand, itemInHand); } } 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 aafa2b782..ca7ee57a2 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 @@ -27,6 +27,7 @@ package org.geysermc.geyser.entity.type.living.animal; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.entity.EntityData; import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; @@ -64,7 +65,7 @@ public class AxolotlEntity extends AnimalEntity { } @Override - protected int getMaxAir() { + protected short getMaxAir() { return 6000; } @@ -75,11 +76,11 @@ public class AxolotlEntity extends AnimalEntity { @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (EntityUtils.attemptToBucket(session, itemInHand)) { return InteractionResult.SUCCESS; } else { - return super.mobInteract(itemInHand); + return super.mobInteract(hand, itemInHand); } } } 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 b5ae48b23..3fd55d073 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 @@ -25,6 +25,7 @@ package org.geysermc.geyser.entity.type.living.animal; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.SoundEvent; import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; @@ -44,9 +45,9 @@ public class CowEntity extends AnimalEntity { @Nonnull @Override - protected InteractiveTag testMobInteraction(@Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (getFlag(EntityFlag.BABY) || !itemInHand.getMapping(session).getJavaIdentifier().equals("minecraft:bucket")) { - return super.testMobInteraction(itemInHand); + return super.testMobInteraction(hand, itemInHand); } return InteractiveTag.MILK; @@ -54,9 +55,9 @@ public class CowEntity extends AnimalEntity { @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (getFlag(EntityFlag.BABY) || !itemInHand.getMapping(session).getJavaIdentifier().equals("minecraft:bucket")) { - return super.mobInteract(itemInHand); + return super.mobInteract(hand, itemInHand); } session.playSoundEvent(SoundEvent.MILK, position); 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 new file mode 100644 index 000000000..97af056a0 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FrogEntity.java @@ -0,0 +1,81 @@ +/* + * 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.entity.type.living.animal; + +import com.github.steveice10.mc.protocol.data.game.entity.metadata.Pose; +import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata; +import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ObjectEntityMetadata; +import com.nukkitx.math.vector.Vector3f; +import com.nukkitx.protocol.bedrock.data.entity.EntityData; +import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; +import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.entity.type.Entity; +import org.geysermc.geyser.registry.type.ItemMapping; +import org.geysermc.geyser.session.GeyserSession; + +import java.util.OptionalInt; +import java.util.UUID; + +public class FrogEntity extends AnimalEntity { + public FrogEntity(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 void setPose(Pose pose) { + setFlag(EntityFlag.JUMP_GOAL_JUMP, pose == Pose.LONG_JUMPING); + setFlag(EntityFlag.CROAKING, pose == Pose.CROAKING); + setFlag(EntityFlag.EAT_MOB, pose == Pose.USING_TONGUE); + + super.setPose(pose); + } + + public void setFrogVariant(IntEntityMetadata entityMetadata) { + int variant = entityMetadata.getPrimitiveValue(); + dirtyMetadata.put(EntityData.VARIANT, switch (variant) { + case 1 -> 2; // White + case 2 -> 1; // Green + default -> variant; + }); + } + + public void setTongueTarget(ObjectEntityMetadata entityMetadata) { + OptionalInt entityId = entityMetadata.getValue(); + if (entityId.isPresent()) { + Entity entity = session.getEntityCache().getEntityByJavaId(entityId.getAsInt()); + if (entity != null) { + dirtyMetadata.put(EntityData.TARGET_EID, entity.getGeyserId()); + } + } else { + dirtyMetadata.put(EntityData.TARGET_EID, 0L); + } + } + + @Override + public boolean canEat(String javaIdentifierStripped, ItemMapping mapping) { + return mapping.getJavaId() == session.getItemMappings().getStoredItems().slimeBall(); + } +} 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 817b466fa..a6f2e268e 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 @@ -27,6 +27,7 @@ package org.geysermc.geyser.entity.type.living.animal; import com.github.steveice10.mc.protocol.data.game.entity.metadata.Pose; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.SoundEvent; import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; @@ -65,12 +66,12 @@ public class GoatEntity extends AnimalEntity { @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (!getFlag(EntityFlag.BABY) && itemInHand.getMapping(session).getJavaIdentifier().equals("minecraft:bucket")) { session.playSoundEvent(isScreamer ? SoundEvent.MILK_SCREAMER : SoundEvent.MILK, position); return InteractionResult.SUCCESS; } else { - return super.mobInteract(itemInHand); + return super.mobInteract(hand, itemInHand); } } } 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 362c25256..a96d3072c 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 @@ -49,7 +49,7 @@ public class HoglinEntity extends AnimalEntity { @Override protected boolean isShaking() { - return (!isImmuneToZombification && !session.isDimensionPiglinSafe()) || super.isShaking(); + return (!isImmuneToZombification && !session.getDimensionType().piglinSafe()) || super.isShaking(); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java index c249663ac..d2b8420fd 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.entity.type.living.animal; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ObjectEntityMetadata; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.entity.EntityData; import org.geysermc.geyser.entity.EntityDefinition; @@ -52,7 +53,7 @@ public class MooshroomEntity extends AnimalEntity { @Nonnull @Override - protected InteractiveTag testMobInteraction(@Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { StoredItemMappings storedItems = session.getItemMappings().getStoredItems(); if (!isBaby()) { if (itemInHand.getJavaId() == storedItems.bowl()) { @@ -63,12 +64,12 @@ public class MooshroomEntity extends AnimalEntity { return InteractiveTag.MOOSHROOM_SHEAR; } } - return super.testMobInteraction(itemInHand); + return super.testMobInteraction(hand, itemInHand); } @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { StoredItemMappings storedItems = session.getItemMappings().getStoredItems(); boolean isBaby = isBaby(); if (!isBaby && itemInHand.getJavaId() == storedItems.bowl()) { @@ -81,6 +82,6 @@ public class MooshroomEntity extends AnimalEntity { // ? return InteractionResult.SUCCESS; } - return super.mobInteract(itemInHand); + return super.mobInteract(hand, itemInHand); } } 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 4ed2bdce1..af1fe0bad 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 @@ -25,6 +25,7 @@ package org.geysermc.geyser.entity.type.living.animal; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; @@ -50,23 +51,23 @@ public class OcelotEntity extends AnimalEntity { @Nonnull @Override - protected InteractiveTag testMobInteraction(@Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (!getFlag(EntityFlag.TRUSTING) && canEat(itemInHand) && session.getPlayerEntity().getPosition().distanceSquared(position) < 9f) { // Attempt to feed return InteractiveTag.FEED; } else { - return super.testMobInteraction(itemInHand); + return super.testMobInteraction(hand, itemInHand); } } @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (!getFlag(EntityFlag.TRUSTING) && canEat(itemInHand) && session.getPlayerEntity().getPosition().distanceSquared(position) < 9f) { // Attempt to feed return InteractionResult.SUCCESS; } else { - return super.mobInteract(itemInHand); + return super.mobInteract(hand, itemInHand); } } } 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 d607f113b..51f595526 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 @@ -27,6 +27,7 @@ package org.geysermc.geyser.entity.type.living.animal; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.entity.EntityData; import com.nukkitx.protocol.bedrock.data.entity.EntityEventType; @@ -93,16 +94,16 @@ public class PandaEntity extends AnimalEntity { @Nonnull @Override - protected InteractiveTag testMobInteraction(@Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (mainGene == Gene.WORRIED && session.isThunder()) { return InteractiveTag.NONE; } - return super.testMobInteraction(itemInHand); + return super.testMobInteraction(hand, itemInHand); } @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (mainGene == Gene.WORRIED && session.isThunder()) { // Huh! return InteractionResult.PASS; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PigEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PigEntity.java index 05f628f44..db8a1ccd8 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 @@ -25,6 +25,7 @@ package org.geysermc.geyser.entity.type.living.animal; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; @@ -51,12 +52,12 @@ public class PigEntity extends AnimalEntity { @Nonnull @Override - protected InteractiveTag testMobInteraction(@Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (!canEat(itemInHand) && getFlag(EntityFlag.SADDLED) && passengers.isEmpty() && !session.isSneaking()) { // Mount return InteractiveTag.MOUNT; } else { - InteractiveTag superTag = super.testMobInteraction(itemInHand); + InteractiveTag superTag = super.testMobInteraction(hand, itemInHand); if (superTag != InteractiveTag.NONE) { return superTag; } else { @@ -68,12 +69,12 @@ public class PigEntity extends AnimalEntity { @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (!canEat(itemInHand) && getFlag(EntityFlag.SADDLED) && passengers.isEmpty() && !session.isSneaking()) { // Mount return InteractionResult.SUCCESS; } else { - InteractionResult superResult = super.mobInteract(itemInHand); + InteractionResult superResult = super.mobInteract(hand, itemInHand); if (superResult.consumesAction()) { return superResult; } else { 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 9481944a7..0febfdb11 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 @@ -26,6 +26,7 @@ package org.geysermc.geyser.entity.type.living.animal; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.entity.EntityData; import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; @@ -55,11 +56,11 @@ public class SheepEntity extends AnimalEntity { @Nonnull @Override - protected InteractiveTag testMobInteraction(@Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (itemInHand.getJavaId() == session.getItemMappings().getStoredItems().shears()) { return InteractiveTag.SHEAR; } else { - InteractiveTag tag = super.testMobInteraction(itemInHand); + InteractiveTag tag = super.testMobInteraction(hand, itemInHand); if (tag != InteractiveTag.NONE) { return tag; } else { @@ -74,11 +75,11 @@ public class SheepEntity extends AnimalEntity { @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (itemInHand.getJavaId() == session.getItemMappings().getStoredItems().shears()) { return InteractionResult.CONSUME; } else { - InteractionResult superResult = super.mobInteract(itemInHand); + InteractionResult superResult = super.mobInteract(hand, itemInHand); if (superResult.consumesAction()) { return superResult; } else { diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/StriderEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/StriderEntity.java index 5f42b4b67..f8d549299 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 @@ -26,6 +26,7 @@ package org.geysermc.geyser.entity.type.living.animal; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.type.Entity; @@ -98,12 +99,12 @@ public class StriderEntity extends AnimalEntity { @Nonnull @Override - protected InteractiveTag testMobInteraction(@Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (!canEat(itemInHand) && getFlag(EntityFlag.SADDLED) && passengers.isEmpty() && !session.isSneaking()) { // Mount Strider return InteractiveTag.RIDE_STRIDER; } else { - InteractiveTag tag = super.testMobInteraction(itemInHand); + InteractiveTag tag = super.testMobInteraction(hand, itemInHand); if (tag != InteractiveTag.NONE) { return tag; } else { @@ -115,12 +116,12 @@ public class StriderEntity extends AnimalEntity { @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (!canEat(itemInHand) && getFlag(EntityFlag.SADDLED) && passengers.isEmpty() && !session.isSneaking()) { // Mount Strider return InteractionResult.SUCCESS; } else { - InteractionResult superResult = super.mobInteract(itemInHand); + InteractionResult superResult = super.mobInteract(hand, itemInHand); if (superResult.consumesAction()) { return superResult; } else { 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 9139495b8..867d9f799 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 @@ -26,6 +26,7 @@ package org.geysermc.geyser.entity.type.living.animal.horse; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.google.common.collect.ImmutableSet; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.entity.EntityData; @@ -129,12 +130,12 @@ public class AbstractHorseEntity extends AnimalEntity { @Nonnull @Override - protected InteractiveTag testMobInteraction(@Nonnull GeyserItemStack itemInHand) { - return testHorseInteraction(itemInHand); + protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { + return testHorseInteraction(hand, itemInHand); } @Nonnull - protected final InteractiveTag testHorseInteraction(@Nonnull GeyserItemStack itemInHand) { + protected final InteractiveTag testHorseInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { boolean isBaby = isBaby(); if (!isBaby) { if (getFlag(EntityFlag.TAMED) && session.isSneaking()) { @@ -142,7 +143,7 @@ public class AbstractHorseEntity extends AnimalEntity { } if (!passengers.isEmpty()) { - return super.testMobInteraction(itemInHand); + return super.testMobInteraction(hand, itemInHand); } } @@ -171,7 +172,7 @@ public class AbstractHorseEntity extends AnimalEntity { } if (isBaby) { - return super.testMobInteraction(itemInHand); + return super.testMobInteraction(hand, itemInHand); } else { return InteractiveTag.MOUNT; } @@ -179,12 +180,12 @@ public class AbstractHorseEntity extends AnimalEntity { @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { - return mobHorseInteract(itemInHand); + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { + return mobHorseInteract(hand, itemInHand); } @Nonnull - protected final InteractionResult mobHorseInteract(@Nonnull GeyserItemStack itemInHand) { + protected final InteractionResult mobHorseInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { boolean isBaby = isBaby(); if (!isBaby) { if (getFlag(EntityFlag.TAMED) && session.isSneaking()) { @@ -193,7 +194,7 @@ public class AbstractHorseEntity extends AnimalEntity { } if (!passengers.isEmpty()) { - return super.mobInteract(itemInHand); + return super.mobInteract(hand, itemInHand); } } @@ -227,7 +228,7 @@ public class AbstractHorseEntity extends AnimalEntity { } if (isBaby) { - return super.mobInteract(itemInHand); + return super.mobInteract(hand, itemInHand); } else { // Attempt to mount // TODO client-set flags sitting standing? @@ -249,15 +250,15 @@ public class AbstractHorseEntity extends AnimalEntity { /* Just a place to stuff common code for the undead variants without having duplicate code */ - protected final InteractiveTag testUndeadHorseInteraction(@Nonnull GeyserItemStack itemInHand) { + protected final InteractiveTag testUndeadHorseInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { if (!getFlag(EntityFlag.TAMED)) { return InteractiveTag.NONE; } else if (isBaby()) { - return testHorseInteraction(itemInHand); + return testHorseInteraction(hand, itemInHand); } else if (session.isSneaking()) { return InteractiveTag.OPEN_CONTAINER; } else if (!passengers.isEmpty()) { - return testHorseInteraction(itemInHand); + return testHorseInteraction(hand, itemInHand); } else { if (session.getItemMappings().getStoredItems().saddle() == itemInHand.getJavaId()) { return InteractiveTag.OPEN_CONTAINER; @@ -271,16 +272,16 @@ public class AbstractHorseEntity extends AnimalEntity { } } - protected final InteractionResult undeadHorseInteract(@Nonnull GeyserItemStack itemInHand) { + protected final InteractionResult undeadHorseInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { if (!getFlag(EntityFlag.TAMED)) { return InteractionResult.PASS; } else if (isBaby()) { - return mobHorseInteract(itemInHand); + return mobHorseInteract(hand, itemInHand); } else if (session.isSneaking()) { // Opens inventory return InteractionResult.SUCCESS; } else if (!passengers.isEmpty()) { - return mobHorseInteract(itemInHand); + return mobHorseInteract(hand, itemInHand); } else { // The client tests for saddle but it doesn't matter for us at this point. return InteractionResult.SUCCESS; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/SkeletonHorseEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/SkeletonHorseEntity.java index c9f95f507..4d07c7d13 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/SkeletonHorseEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/SkeletonHorseEntity.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.entity.type.living.animal.horse; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.nukkitx.math.vector.Vector3f; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.inventory.GeyserItemStack; @@ -42,13 +43,13 @@ public class SkeletonHorseEntity extends AbstractHorseEntity { @Nonnull @Override - protected InteractiveTag testMobInteraction(@Nonnull GeyserItemStack itemInHand) { - return testUndeadHorseInteraction(itemInHand); + protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { + return testUndeadHorseInteraction(hand, itemInHand); } @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { - return undeadHorseInteract(itemInHand); + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { + return undeadHorseInteract(hand, itemInHand); } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ZombieHorseEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ZombieHorseEntity.java index ddde11c5d..659a8bad8 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ZombieHorseEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ZombieHorseEntity.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.entity.type.living.animal.horse; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.nukkitx.math.vector.Vector3f; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.inventory.GeyserItemStack; @@ -42,13 +43,13 @@ public class ZombieHorseEntity extends AbstractHorseEntity { @Nonnull @Override - protected InteractiveTag testMobInteraction(@Nonnull GeyserItemStack itemInHand) { - return testUndeadHorseInteraction(itemInHand); + protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { + return testUndeadHorseInteraction(hand, itemInHand); } @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { - return undeadHorseInteract(itemInHand); + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { + return undeadHorseInteract(hand, itemInHand); } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/CatEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/CatEntity.java index c17503606..022535592 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 @@ -28,6 +28,7 @@ package org.geysermc.geyser.entity.type.living.animal.tameable; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.entity.EntityData; import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; @@ -105,7 +106,7 @@ public class CatEntity extends TameableEntity { @Nonnull @Override - protected InteractiveTag testMobInteraction(@Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { boolean tamed = getFlag(EntityFlag.TAMED); if (tamed && ownerBedrockId == session.getPlayerEntity().getGeyserId()) { // Toggle sitting @@ -117,7 +118,7 @@ public class CatEntity extends TameableEntity { @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { boolean tamed = getFlag(EntityFlag.TAMED); if (tamed && ownerBedrockId == session.getPlayerEntity().getGeyserId()) { return InteractionResult.SUCCESS; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/ParrotEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/ParrotEntity.java index b7aca99e5..2b49168dd 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 @@ -25,6 +25,7 @@ package org.geysermc.geyser.entity.type.living.animal.tameable; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; @@ -58,7 +59,7 @@ public class ParrotEntity extends TameableEntity { @Nonnull @Override - protected InteractiveTag testMobInteraction(@Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { String javaIdentifierStripped = itemInHand.getMapping(session).getJavaIdentifier().replace("minecraft:", ""); boolean tame = getFlag(EntityFlag.TAMED); if (!tame && isTameFood(javaIdentifierStripped)) { @@ -69,12 +70,12 @@ public class ParrotEntity extends TameableEntity { // Sitting/standing return getFlag(EntityFlag.SITTING) ? InteractiveTag.STAND : InteractiveTag.SIT; } - return super.testMobInteraction(itemInHand); + return super.testMobInteraction(hand, itemInHand); } @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { String javaIdentifierStripped = itemInHand.getMapping(session).getJavaIdentifier().replace("minecraft:", ""); boolean tame = getFlag(EntityFlag.TAMED); if (!tame && isTameFood(javaIdentifierStripped)) { @@ -85,6 +86,6 @@ public class ParrotEntity extends TameableEntity { // Sitting/standing return InteractionResult.SUCCESS; } - return super.mobInteract(itemInHand); + return super.mobInteract(hand, itemInHand); } } 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 8b900f071..bc5209bcb 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 @@ -27,6 +27,7 @@ package org.geysermc.geyser.entity.type.living.animal.tameable; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.google.common.collect.ImmutableSet; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.entity.EntityData; @@ -103,7 +104,7 @@ public class WolfEntity extends TameableEntity { @Nonnull @Override - protected InteractiveTag testMobInteraction(@Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (getFlag(EntityFlag.ANGRY)) { return InteractiveTag.NONE; } @@ -122,12 +123,12 @@ public class WolfEntity extends TameableEntity { return getFlag(EntityFlag.SITTING) ? InteractiveTag.STAND : InteractiveTag.SIT; } } - return super.testMobInteraction(itemInHand); + return super.testMobInteraction(hand, itemInHand); } @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (ownerBedrockId == session.getPlayerEntity().getGeyserId() || getFlag(EntityFlag.TAMED) || itemInHand.getMapping(session).getJavaIdentifier().equals("minecraft:bone") && !getFlag(EntityFlag.ANGRY)) { // Sitting toggle or feeding; not angry diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/AbstractMerchantEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/AbstractMerchantEntity.java index 633ba707f..e6538ebad 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/AbstractMerchantEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/AbstractMerchantEntity.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.entity.type.living.merchant; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; @@ -51,7 +52,7 @@ public class AbstractMerchantEntity extends AgeableEntity { @Nonnull @Override - protected InteractiveTag testMobInteraction(@Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { String javaIdentifier = itemInHand.getMapping(session).getJavaIdentifier(); if (!javaIdentifier.equals("minecraft:villager_spawn_egg") && (definition != EntityDefinitions.VILLAGER || !getFlag(EntityFlag.SLEEPING) && ((VillagerEntity) this).isCanTradeWith())) { @@ -60,12 +61,12 @@ public class AbstractMerchantEntity extends AgeableEntity { return InteractiveTag.TRADE; } } - return super.testMobInteraction(itemInHand); + return super.testMobInteraction(hand, itemInHand); } @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { String javaIdentifier = itemInHand.getMapping(session).getJavaIdentifier(); if (!javaIdentifier.equals("minecraft:villager_spawn_egg") && (definition != EntityDefinitions.VILLAGER || !getFlag(EntityFlag.SLEEPING)) @@ -73,7 +74,7 @@ public class AbstractMerchantEntity extends AgeableEntity { // Trading time return InteractionResult.SUCCESS; } else { - return super.mobInteract(itemInHand); + return super.mobInteract(hand, itemInHand); } } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/VillagerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/VillagerEntity.java index 866ba36fc..e77d34f23 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/VillagerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/VillagerEntity.java @@ -26,7 +26,6 @@ package org.geysermc.geyser.entity.type.living.merchant; import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata; -import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position; import com.github.steveice10.mc.protocol.data.game.entity.metadata.VillagerData; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.math.vector.Vector3i; @@ -103,7 +102,7 @@ public class VillagerEntity extends AbstractMerchantEntity { } @Override - public Vector3i setBedPosition(EntityMetadata, ?> entityMetadata) { + public Vector3i setBedPosition(EntityMetadata, ?> entityMetadata) { return bedPosition = super.setBedPosition(entityMetadata); } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BasePiglinEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BasePiglinEntity.java index ed26a71e1..e003dd080 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BasePiglinEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BasePiglinEntity.java @@ -48,6 +48,6 @@ public class BasePiglinEntity extends MonsterEntity { @Override protected boolean isShaking() { - return (!isImmuneToZombification && !session.isDimensionPiglinSafe()) || super.isShaking(); + return (!isImmuneToZombification && !session.getDimensionType().piglinSafe()) || super.isShaking(); } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreeperEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreeperEntity.java index cf9393410..f73ab257a 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreeperEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreeperEntity.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.entity.type.living.monster; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.SoundEvent; import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; @@ -63,23 +64,23 @@ public class CreeperEntity extends MonsterEntity { @Nonnull @Override - protected InteractiveTag testMobInteraction(@Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (itemInHand.getJavaId() == session.getItemMappings().getStoredItems().flintAndSteel()) { return InteractiveTag.IGNITE_CREEPER; } else { - return super.testMobInteraction(itemInHand); + return super.testMobInteraction(hand, itemInHand); } } @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (itemInHand.getJavaId() == session.getItemMappings().getStoredItems().flintAndSteel()) { // Ignite creeper session.playSoundEvent(SoundEvent.IGNITE, position); return InteractionResult.SUCCESS; } else { - return super.mobInteract(itemInHand); + return super.mobInteract(hand, itemInHand); } } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EnderDragonEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EnderDragonEntity.java index 1d689e806..6adcb4694 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EnderDragonEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EnderDragonEntity.java @@ -213,7 +213,7 @@ public class EnderDragonEntity extends MobEntity implements Tickable { */ private void effectTick() { Random random = ThreadLocalRandom.current(); - if (!getFlag(EntityFlag.SILENT)) { + if (!silent) { if (Math.cos(wingPosition * 2f * Math.PI) <= -0.3f && Math.cos(lastWingPosition * 2f * Math.PI) >= -0.3f) { PlaySoundPacket playSoundPacket = new PlaySoundPacket(); playSoundPacket.setSound("mob.enderdragon.flap"); diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PiglinEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PiglinEntity.java index f0577ee20..4eb0baa6c 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PiglinEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PiglinEntity.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.entity.type.living.monster; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.entity.EntityData; import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; @@ -71,8 +72,8 @@ public class PiglinEntity extends BasePiglinEntity { @Nonnull @Override - protected InteractiveTag testMobInteraction(@Nonnull GeyserItemStack itemInHand) { - InteractiveTag tag = super.testMobInteraction(itemInHand); + protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { + InteractiveTag tag = super.testMobInteraction(hand, itemInHand); if (tag != InteractiveTag.NONE) { return tag; } else { @@ -82,8 +83,8 @@ public class PiglinEntity extends BasePiglinEntity { @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { - InteractionResult superResult = super.mobInteract(itemInHand); + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { + InteractionResult superResult = super.mobInteract(hand, itemInHand); if (superResult.consumesAction()) { return superResult; } else { diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/WardenEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/WardenEntity.java new file mode 100644 index 000000000..1ca34037c --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/WardenEntity.java @@ -0,0 +1,98 @@ +/* + * 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.entity.type.living.monster; + +import com.github.steveice10.mc.protocol.data.game.entity.metadata.Pose; +import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata; +import com.nukkitx.math.GenericMath; +import com.nukkitx.math.vector.Vector3f; +import com.nukkitx.protocol.bedrock.data.entity.EntityData; +import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; +import com.nukkitx.protocol.bedrock.packet.PlaySoundPacket; +import org.geysermc.geyser.entity.EntityDefinition; +import org.geysermc.geyser.entity.type.Tickable; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.util.MathUtils; + +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; + +public class WardenEntity extends MonsterEntity implements Tickable { + private int heartBeatDelay; + private int tickCount; + + private int sonicBoomTickDuration; + + public WardenEntity(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 void setPose(Pose pose) { + setFlag(EntityFlag.DIGGING, pose == Pose.DIGGING); + setFlag(EntityFlag.EMERGING, pose == Pose.EMERGING); + setFlag(EntityFlag.ROARING, pose == Pose.ROARING); + setFlag(EntityFlag.SNIFFING, pose == Pose.SNIFFING); + super.setPose(pose); + } + + public void setAngerLevel(IntEntityMetadata entityMetadata) { + float anger = (float) entityMetadata.getPrimitiveValue() / 80f; + heartBeatDelay = 40 - GenericMath.floor(MathUtils.clamp(anger, 0.0F, 1.0F) * 30F); + dirtyMetadata.put(EntityData.HEARTBEAT_INTERVAL_TICKS, heartBeatDelay); + } + + @Override + public void tick() { + if (++tickCount % heartBeatDelay == 0 && !silent) { + // We have to do these calculations because they're clientside on Java Edition but we mute entities + // to prevent hearing their step sounds + ThreadLocalRandom random = ThreadLocalRandom.current(); + + PlaySoundPacket packet = new PlaySoundPacket(); + packet.setSound("mob.warden.heartbeat"); + packet.setPosition(position); + packet.setPitch((random.nextFloat() - random.nextFloat()) * 0.2f + 1.0f); + packet.setVolume(1.0f); + session.sendUpstreamPacket(packet); + } + + if (sonicBoomTickDuration > 0) { + sonicBoomTickDuration--; + if (sonicBoomTickDuration == 0) { + setFlag(EntityFlag.SONIC_BOOM, false); + updateBedrockMetadata(); + } + } + } + + public void onSonicBoom() { + setFlag(EntityFlag.SONIC_BOOM, true); + updateBedrockMetadata(); + + sonicBoomTickDuration = 3 * 20; + } +} diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieVillagerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieVillagerEntity.java index 1ec0fc26b..bf5180e36 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieVillagerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieVillagerEntity.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.entity.type.living.monster; import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.metadata.VillagerData; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; +import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.entity.EntityData; import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; @@ -67,22 +68,22 @@ public class ZombieVillagerEntity extends ZombieEntity { @Nonnull @Override - protected InteractiveTag testMobInteraction(@Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (itemInHand.getJavaId() == session.getItemMappings().getStoredItems().goldenApple()) { return InteractiveTag.CURE; } else { - return super.testMobInteraction(itemInHand); + return super.testMobInteraction(hand, itemInHand); } } @Nonnull @Override - protected InteractionResult mobInteract(@Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { if (itemInHand.getJavaId() == session.getItemMappings().getStoredItems().goldenApple()) { // The client doesn't know if the entity has weakness as that's not usually sent over the network return InteractionResult.CONSUME; } else { - return super.mobInteract(itemInHand); + return super.mobInteract(hand, itemInHand); } } } 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 5c0b18838..6f2958ffd 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 @@ -27,7 +27,6 @@ package org.geysermc.geyser.entity.type.player; import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.metadata.Pose; -import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.FloatEntityMetadata; @@ -169,6 +168,12 @@ public class PlayerEntity extends LivingEntity { } session.sendUpstreamPacket(movePlayerPacket); + + if (teleported) { + // As of 1.19.0, head yaw seems to be ignored during teleports. + updateHeadLookRotation(headYaw); + } + if (leftParrot != null) { leftParrot.moveAbsolute(position, yaw, pitch, headYaw, true, teleported); } @@ -211,52 +216,8 @@ public class PlayerEntity extends LivingEntity { } } - @Override - public void updateHeadLookRotation(float headYaw) { - moveRelative(0, 0, 0, getYaw(), getPitch(), headYaw, isOnGround()); - MovePlayerPacket movePlayerPacket = new MovePlayerPacket(); - movePlayerPacket.setRuntimeEntityId(geyserId); - movePlayerPacket.setPosition(position); - movePlayerPacket.setRotation(getBedrockRotation()); - movePlayerPacket.setMode(MovePlayerPacket.Mode.HEAD_ROTATION); - session.sendUpstreamPacket(movePlayerPacket); - } - - @Override - public void updatePositionAndRotation(double moveX, double moveY, double moveZ, float yaw, float pitch, boolean isOnGround) { - moveRelative(moveX, moveY, moveZ, yaw, pitch, isOnGround); - if (leftParrot != null) { - leftParrot.moveRelative(moveX, moveY, moveZ, yaw, pitch, isOnGround); - } - if (rightParrot != null) { - rightParrot.moveRelative(moveX, moveY, moveZ, yaw, pitch, isOnGround); - } - } - public void updateRotation(float yaw, float pitch, float headYaw, boolean isOnGround) { - // the method below is called by super.updateRotation(yaw, pitch, isOnGround). - // but we have to be able to set the headYaw, so we call the method below directly. - super.moveRelative(0, 0, 0, yaw, pitch, headYaw, isOnGround); - - // Both packets need to be sent or else player head rotation isn't correctly updated - MovePlayerPacket movePlayerPacket = new MovePlayerPacket(); - movePlayerPacket.setRuntimeEntityId(geyserId); - movePlayerPacket.setPosition(position); - movePlayerPacket.setRotation(getBedrockRotation()); - movePlayerPacket.setOnGround(isOnGround); - movePlayerPacket.setMode(MovePlayerPacket.Mode.HEAD_ROTATION); - session.sendUpstreamPacket(movePlayerPacket); - if (leftParrot != null) { - leftParrot.updateRotation(yaw, pitch, isOnGround); - } - if (rightParrot != null) { - rightParrot.updateRotation(yaw, pitch, isOnGround); - } - } - - @Override - public void updateRotation(float yaw, float pitch, boolean isOnGround) { - updateRotation(yaw, pitch, getHeadYaw(), isOnGround); + moveRelative(0, 0, 0, yaw, pitch, headYaw, isOnGround); } @Override @@ -265,7 +226,7 @@ public class PlayerEntity extends LivingEntity { } @Override - public Vector3i setBedPosition(EntityMetadata, ?> entityMetadata) { + public Vector3i setBedPosition(EntityMetadata, ?> entityMetadata) { return bedPosition = super.setBedPosition(entityMetadata); } 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 6edcd60f3..d4b703c40 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 @@ -27,6 +27,7 @@ package org.geysermc.geyser.entity.type.player; import com.github.steveice10.mc.protocol.data.game.entity.attribute.Attribute; import com.github.steveice10.mc.protocol.data.game.entity.attribute.AttributeType; +import com.github.steveice10.mc.protocol.data.game.entity.metadata.GlobalPos; import com.github.steveice10.mc.protocol.data.game.entity.metadata.Pose; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata; import com.nukkitx.math.vector.Vector3f; @@ -40,11 +41,10 @@ import org.geysermc.geyser.entity.attribute.GeyserAttributeType; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.AttributeUtils; +import org.geysermc.geyser.util.DimensionUtils; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import javax.annotation.Nullable; +import java.util.*; /** * The entity class specifically for a {@link GeyserSession}'s player. @@ -75,6 +75,11 @@ public class SessionPlayerEntity extends PlayerEntity { valid = true; } + @Override + protected void setClientSideSilent() { + // Do nothing, since we want the session player to hear their own footstep sounds for example. + } + @Override public void spawnEntity() { // Already logged in @@ -222,4 +227,14 @@ public class SessionPlayerEntity extends PlayerEntity { this.attributes.put(type, attributeData); return attributeData; } + + public void setLastDeathPosition(@Nullable GlobalPos pos) { + if (pos != null) { + dirtyMetadata.put(EntityData.PLAYER_LAST_DEATH_POS, pos.getPosition()); + dirtyMetadata.put(EntityData.PLAYER_LAST_DEATH_DIMENSION, DimensionUtils.javaToBedrock(pos.getDimension())); + dirtyMetadata.put(EntityData.PLAYER_HAS_DIED, (byte) 1); + } else { + dirtyMetadata.put(EntityData.PLAYER_HAS_DIED, (byte) 0); + } + } } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/GeyserEnchantOption.java b/core/src/main/java/org/geysermc/geyser/inventory/GeyserEnchantOption.java index 2bd4b6756..94462268e 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/GeyserEnchantOption.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/GeyserEnchantOption.java @@ -46,7 +46,7 @@ public class GeyserEnchantOption { */ private static final List ENCHANT_NAMES = Arrays.asList("tougher armor", "lukeeey", "fall better", "explode less", "camo toy", "breathe better", "rtm five one six", "armor stab", "water walk", "you are elsa", - "tim two zero three", "fast walk nether", "oof ouch owie", "enemy on fire", "spider sad", "aj ferguson", "redned", + "tim two zero three", "fast walk nether", "davchoo", "oof ouch owie", "enemy on fire", "spider sad", "aj ferguson", "redned", "more items thx", "long sword reach", "fast tool", "give me block", "less breaky break", "cube craft", "strong arrow", "fist arrow", "spicy arrow", "many many arrows", "geyser", "come here fish", "i like this", "stabby stab", "supreme mortal", "avatar i guess", "more arrows", "fly finder seventeen", "in and out", 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 0da085e5d..fd26cc170 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 @@ -25,7 +25,6 @@ package org.geysermc.geyser.inventory.holder; -import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position; import com.google.common.collect.ImmutableSet; import com.nukkitx.math.vector.Vector3i; import com.nukkitx.nbt.NbtMap; @@ -36,9 +35,9 @@ import com.nukkitx.protocol.bedrock.packet.ContainerOpenPacket; import com.nukkitx.protocol.bedrock.packet.UpdateBlockPacket; import org.geysermc.geyser.inventory.Container; import org.geysermc.geyser.inventory.Inventory; +import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.inventory.InventoryTranslator; -import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.util.BlockUtils; import java.util.Collections; @@ -154,8 +153,7 @@ public class BlockInventoryHolder extends InventoryHolder { } Vector3i holderPos = inventory.getHolderPosition(); - Position pos = new Position(holderPos.getX(), holderPos.getY(), holderPos.getZ()); - int realBlock = session.getGeyser().getWorldManager().getBlockAt(session, pos.getX(), pos.getY(), pos.getZ()); + int realBlock = session.getGeyser().getWorldManager().getBlockAt(session, holderPos.getX(), holderPos.getY(), holderPos.getZ()); UpdateBlockPacket blockPacket = new UpdateBlockPacket(); blockPacket.setDataLayer(0); blockPacket.setBlockPosition(holderPos); diff --git a/core/src/main/java/org/geysermc/geyser/inventory/item/Enchantment.java b/core/src/main/java/org/geysermc/geyser/inventory/item/Enchantment.java index 9872b9441..bcbfe3e17 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/item/Enchantment.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/item/Enchantment.java @@ -67,7 +67,8 @@ public enum Enchantment { MULTISHOT, PIERCING, QUICK_CHARGE, - SOUL_SPEED; + SOUL_SPEED, + SWIFT_SNEAK; private static final Enchantment[] VALUES = values(); @@ -109,6 +110,7 @@ public enum Enchantment { FROST_WALKER, BINDING_CURSE, SOUL_SPEED, + SWIFT_SNEAK, SHARPNESS, SMITE, BANE_OF_ARTHROPODS, diff --git a/core/src/main/java/org/geysermc/geyser/inventory/item/StoredItemMappings.java b/core/src/main/java/org/geysermc/geyser/inventory/item/StoredItemMappings.java index c787f87a1..56b6ee7ac 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/item/StoredItemMappings.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/item/StoredItemMappings.java @@ -60,6 +60,7 @@ public class StoredItemMappings { private final int saddle; private final int shears; private final ItemMapping shield; + private final int slimeBall; private final int waterBucket; private final ItemMapping wheat; private final ItemMapping writableBook; @@ -87,6 +88,7 @@ public class StoredItemMappings { this.saddle = load(itemMappings, "saddle").getJavaId(); this.shears = load(itemMappings, "shears").getJavaId(); this.shield = load(itemMappings, "shield"); + this.slimeBall = load(itemMappings, "slime_ball").getJavaId(); this.waterBucket = load(itemMappings, "water_bucket").getJavaId(); this.wheat = load(itemMappings, "wheat"); this.writableBook = load(itemMappings, "writable_book"); diff --git a/core/src/main/java/org/geysermc/geyser/level/GeyserAdvancement.java b/core/src/main/java/org/geysermc/geyser/level/GeyserAdvancement.java index f75405160..fc3c86dd4 100644 --- a/core/src/main/java/org/geysermc/geyser/level/GeyserAdvancement.java +++ b/core/src/main/java/org/geysermc/geyser/level/GeyserAdvancement.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.level; import com.github.steveice10.mc.protocol.data.game.advancement.Advancement; import lombok.NonNull; import org.geysermc.geyser.session.cache.AdvancementsCache; +import org.geysermc.geyser.text.ChatColor; import java.util.List; @@ -69,6 +70,14 @@ public class GeyserAdvancement { return this.advancement.getDisplayData(); } + /** + * @return Purple for challenges and green for normal advancements + */ + public String getDisplayColor() { + Advancement.DisplayData displayData = getDisplayData(); + return displayData != null && displayData.getFrameType() == Advancement.DisplayData.FrameType.CHALLENGE ? ChatColor.LIGHT_PURPLE : ChatColor.GREEN; + } + public String getRootId(AdvancementsCache advancementsCache) { if (rootId == null) { if (this.advancement.getParentId() == null) { 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 5766cabbf..100917793 100644 --- a/core/src/main/java/org/geysermc/geyser/level/GeyserWorldManager.java +++ b/core/src/main/java/org/geysermc/geyser/level/GeyserWorldManager.java @@ -27,15 +27,14 @@ package org.geysermc.geyser.level; import com.github.steveice10.mc.protocol.data.game.entity.player.GameMode; import com.github.steveice10.mc.protocol.data.game.setting.Difficulty; -import com.github.steveice10.mc.protocol.packet.ingame.serverbound.ServerboundChatPacket; import com.nukkitx.nbt.NbtMap; import com.nukkitx.nbt.NbtMapBuilder; import it.unimi.dsi.fastutil.objects.Object2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import org.geysermc.geyser.level.block.BlockStateValues; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.ChunkCache; import org.geysermc.geyser.translator.inventory.LecternInventoryTranslator; -import org.geysermc.geyser.level.block.BlockStateValues; import java.util.Locale; @@ -83,7 +82,7 @@ public class GeyserWorldManager extends WorldManager { @Override public void setGameRule(GeyserSession session, String name, Object value) { - session.sendDownstreamPacket(new ServerboundChatPacket("/gamerule " + name + " " + value)); + session.sendCommand("gamerule " + name + " " + value); gameruleCache.put(name, String.valueOf(value)); } @@ -109,12 +108,12 @@ public class GeyserWorldManager extends WorldManager { @Override public void setPlayerGameMode(GeyserSession session, GameMode gameMode) { - session.sendDownstreamPacket(new ServerboundChatPacket("/gamemode " + gameMode.name().toLowerCase(Locale.ROOT))); + session.sendCommand("gamemode " + gameMode.name().toLowerCase(Locale.ROOT)); } @Override public void setDifficulty(GeyserSession session, Difficulty difficulty) { - session.sendDownstreamPacket(new ServerboundChatPacket("/difficulty " + difficulty.name().toLowerCase(Locale.ROOT))); + session.sendCommand("difficulty " + difficulty.name().toLowerCase(Locale.ROOT)); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/level/JavaDimension.java b/core/src/main/java/org/geysermc/geyser/level/JavaDimension.java new file mode 100644 index 000000000..5f3c96b86 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/level/JavaDimension.java @@ -0,0 +1,56 @@ +/* + * 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.level; + +import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import com.github.steveice10.opennbt.tag.builtin.IntTag; +import org.geysermc.geyser.util.JavaCodecEntry; + +import java.util.Map; + +/** + * Represents the information we store from the current Java dimension + * @param piglinSafe Whether piglins and hoglins are safe from conversion in this dimension. + * This controls if they have the shaking effect applied in the dimension. + */ +public record JavaDimension(int minY, int maxY, boolean piglinSafe, double worldCoordinateScale) { + + public static void load(CompoundTag tag, Map map) { + for (CompoundTag dimension : JavaCodecEntry.iterateAsTag(tag.get("minecraft:dimension_type"))) { + CompoundTag elements = dimension.get("element"); + int minY = ((IntTag) elements.get("min_y")).getValue(); + int maxY = ((IntTag) elements.get("height")).getValue(); + // Logical height can be ignored probably - seems to be for artificial limits like the Nether. + + // Set if piglins/hoglins should shake + boolean piglinSafe = ((Number) elements.get("piglin_safe").getValue()).byteValue() != (byte) 0; + // Load world coordinate scale for the world border + double coordinateScale = ((Number) elements.get("coordinate_scale").getValue()).doubleValue(); + + map.put((String) dimension.get("name").getValue(), new JavaDimension(minY, maxY, piglinSafe, coordinateScale)); + } + } +} diff --git a/core/src/main/java/org/geysermc/geyser/level/PaintingType.java b/core/src/main/java/org/geysermc/geyser/level/PaintingType.java index 1d8b56030..5c0cbf643 100644 --- a/core/src/main/java/org/geysermc/geyser/level/PaintingType.java +++ b/core/src/main/java/org/geysermc/geyser/level/PaintingType.java @@ -56,17 +56,17 @@ public enum PaintingType { SKELETON("Skeleton", 4, 3), DONKEY_KONG("DonkeyKong", 4, 3), POINTER("Pointer", 4, 4), - PIG_SCENE("Pigscene", 4, 4), - BURNING_SKULL("BurningSkull", 4, 4); + PIGSCENE("Pigscene", 4, 4), + BURNING_SKULL("BurningSkull", 4, 4), + EARTH("Earth", 2, 2), + WIND("Wind", 2, 2), + WATER("Water", 2, 2), + FIRE("Fire", 2, 2); private static final PaintingType[] VALUES = values(); - private String bedrockName; - private int width; - private int height; - - public com.github.steveice10.mc.protocol.data.game.entity.type.PaintingType toJavaType() { - return com.github.steveice10.mc.protocol.data.game.entity.type.PaintingType.valueOf(name()); - } + private final String bedrockName; + private final int width; + private final int height; public static PaintingType getByName(String javaName) { for (PaintingType paintingName : VALUES) { 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 fc86739e2..69f5d5beb 100644 --- a/core/src/main/java/org/geysermc/geyser/level/WorldManager.java +++ b/core/src/main/java/org/geysermc/geyser/level/WorldManager.java @@ -25,7 +25,6 @@ package org.geysermc.geyser.level; -import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position; import com.github.steveice10.mc.protocol.data.game.entity.player.GameMode; import com.github.steveice10.mc.protocol.data.game.setting.Difficulty; import com.nukkitx.math.vector.Vector3i; @@ -41,17 +40,6 @@ import org.geysermc.geyser.session.GeyserSession; */ public abstract class WorldManager { - /** - * Gets the Java block state at the specified location - * - * @param session the session - * @param position the position - * @return the block state at the specified location - */ - public int getBlockAt(GeyserSession session, Position position) { - return this.getBlockAt(session, position.getX(), position.getY(), position.getZ()); - } - /** * Gets the Java block state at the specified location * @@ -59,7 +47,7 @@ public abstract class WorldManager { * @param vector the position * @return the block state at the specified location */ - public int getBlockAt(GeyserSession session, Vector3i vector) { + public final int getBlockAt(GeyserSession session, Vector3i vector) { return this.getBlockAt(session, vector.getX(), vector.getY(), vector.getZ()); } diff --git a/core/src/main/java/org/geysermc/geyser/network/MinecraftProtocol.java b/core/src/main/java/org/geysermc/geyser/network/MinecraftProtocol.java index 828b04a9d..fff0d38fe 100644 --- a/core/src/main/java/org/geysermc/geyser/network/MinecraftProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/MinecraftProtocol.java @@ -28,9 +28,7 @@ package org.geysermc.geyser.network; import com.github.steveice10.mc.protocol.codec.MinecraftCodec; import com.github.steveice10.mc.protocol.codec.PacketCodec; import com.nukkitx.protocol.bedrock.BedrockPacketCodec; -import com.nukkitx.protocol.bedrock.v475.Bedrock_v475; -import com.nukkitx.protocol.bedrock.v486.Bedrock_v486; -import com.nukkitx.protocol.bedrock.v503.Bedrock_v503; +import com.nukkitx.protocol.bedrock.beta.BedrockBeta; import java.util.ArrayList; import java.util.Collections; @@ -45,7 +43,7 @@ public final class MinecraftProtocol { * Default Bedrock codec that should act as a fallback. Should represent the latest available * release of the game that Geyser supports. */ - public static final BedrockPacketCodec DEFAULT_BEDROCK_CODEC = Bedrock_v503.V503_CODEC; + public static final BedrockPacketCodec DEFAULT_BEDROCK_CODEC = BedrockBeta.BETA_CODEC; /** * A list of all supported Bedrock versions that can join Geyser */ @@ -58,12 +56,8 @@ public final class MinecraftProtocol { private static final PacketCodec DEFAULT_JAVA_CODEC = MinecraftCodec.CODEC; static { - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v475.V475_CODEC.toBuilder().minecraftVersion("1.18.0/1.18.1/1.18.2").build()); - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v486.V486_CODEC.toBuilder() - .minecraftVersion("1.18.10/1.18.12") // 1.18.11 is also supported, but was only on Switch and since that auto-updates it's not needed - .build()); SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC.toBuilder() - .minecraftVersion("1.18.30/1.18.31") + .minecraftVersion("1.19.0") .build()); } 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 f3ccb0d2e..0781a04b2 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 @@ -26,6 +26,7 @@ package org.geysermc.geyser.network.netty; import com.github.steveice10.packetlib.BuiltinFlags; +import com.github.steveice10.packetlib.codec.PacketCodecHelper; import com.github.steveice10.packetlib.packet.PacketProtocol; import com.github.steveice10.packetlib.tcp.*; import io.netty.bootstrap.Bootstrap; @@ -47,15 +48,17 @@ public final class LocalSession extends TcpSession { private final SocketAddress targetAddress; private final String clientIp; + private final PacketCodecHelper codecHelper; - public LocalSession(String host, int port, SocketAddress targetAddress, String clientIp, PacketProtocol protocol) { + public LocalSession(String host, int port, SocketAddress targetAddress, String clientIp, PacketProtocol protocol, PacketCodecHelper codecHelper) { super(host, port, protocol); this.targetAddress = targetAddress; this.clientIp = clientIp; + this.codecHelper = codecHelper; } @Override - public void connect() { + public void connect(boolean wait) { if (this.disconnected) { throw new IllegalStateException("Connection has already been disconnected."); } @@ -102,6 +105,11 @@ public final class LocalSession extends TcpSession { } } + @Override + public PacketCodecHelper getCodecHelper() { + return this.codecHelper; + } + // TODO duplicate code private void addHAProxySupport(ChannelPipeline pipeline) { InetSocketAddress clientAddress = getFlag(BuiltinFlags.CLIENT_PROXIED_ADDRESS); 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 0b59492d3..8f2a9775a 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/Registries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/Registries.java @@ -27,7 +27,7 @@ package org.geysermc.geyser.registry; import com.github.steveice10.mc.protocol.data.game.entity.type.EntityType; import com.github.steveice10.mc.protocol.data.game.level.block.BlockEntityType; -import com.github.steveice10.mc.protocol.data.game.level.event.SoundEvent; +import com.github.steveice10.mc.protocol.data.game.level.event.LevelEvent; import com.github.steveice10.mc.protocol.data.game.level.particle.ParticleType; import com.github.steveice10.mc.protocol.data.game.recipe.RecipeType; import com.github.steveice10.packetlib.packet.Packet; @@ -155,9 +155,9 @@ public final class Registries { public static final SimpleMappedRegistry SOUNDS = SimpleMappedRegistry.create("mappings/sounds.json", SoundRegistryLoader::new); /** - * A mapped registry holding {@link SoundEvent}s to their corresponding {@link LevelEventTranslator}. + * A mapped registry holding {@link LevelEvent}s to their corresponding {@link LevelEventTranslator}. */ - public static final SimpleMappedRegistry SOUND_EVENTS = SimpleMappedRegistry.create("mappings/effects.json", SoundEventsRegistryLoader::new); + public static final SimpleMappedRegistry SOUND_LEVEL_EVENTS = SimpleMappedRegistry.create("mappings/effects.json", SoundEventsRegistryLoader::new); /** * A mapped registry holding {@link SoundTranslator}s to their corresponding {@link SoundInteractionTranslator}. diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/SoundEventsRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/SoundEventsRegistryLoader.java index fa7898f97..64d974bc3 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/SoundEventsRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/SoundEventsRegistryLoader.java @@ -26,7 +26,7 @@ package org.geysermc.geyser.registry.loader; import com.fasterxml.jackson.databind.JsonNode; -import com.github.steveice10.mc.protocol.data.game.level.event.SoundEvent; +import com.github.steveice10.mc.protocol.data.game.level.event.LevelEvent; import com.nukkitx.protocol.bedrock.data.LevelEventType; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import org.geysermc.geyser.GeyserImpl; @@ -41,37 +41,37 @@ import java.util.Map; /** * Loads sound effects from the given resource path. */ -public class SoundEventsRegistryLoader extends EffectRegistryLoader> { +public class SoundEventsRegistryLoader extends EffectRegistryLoader> { @Override - public Map load(String input) { + public Map load(String input) { this.loadFile(input); Iterator> effectsIterator = this.get(input).fields(); - Map soundEffects = new Object2ObjectOpenHashMap<>(); + Map soundEffects = new Object2ObjectOpenHashMap<>(); while (effectsIterator.hasNext()) { Map.Entry entry = effectsIterator.next(); JsonNode node = entry.getValue(); try { String type = node.get("type").asText(); - SoundEvent javaEffect = null; + LevelEvent javaEffect = null; LevelEventTranslator transformer = null; switch (type) { case "soundLevel" -> { - javaEffect = SoundEvent.valueOf(entry.getKey()); + javaEffect = LevelEvent.valueOf(entry.getKey()); LevelEventType levelEventType = LevelEventType.valueOf(node.get("name").asText()); int data = node.has("data") ? node.get("data").intValue() : 0; transformer = new SoundLevelEventTranslator(levelEventType, data); } case "soundEvent" -> { - javaEffect = SoundEvent.valueOf(entry.getKey()); + javaEffect = LevelEvent.valueOf(entry.getKey()); com.nukkitx.protocol.bedrock.data.SoundEvent soundEvent = com.nukkitx.protocol.bedrock.data.SoundEvent.valueOf(node.get("name").asText()); String identifier = node.has("identifier") ? node.get("identifier").asText() : ""; int extraData = node.has("extraData") ? node.get("extraData").intValue() : -1; transformer = new SoundEventEventTranslator(soundEvent, identifier, extraData); } case "playSound" -> { - javaEffect = SoundEvent.valueOf(entry.getKey()); + javaEffect = LevelEvent.valueOf(entry.getKey()); String name = node.get("name").asText(); float volume = node.has("volume") ? node.get("volume").floatValue() : 1.0f; boolean pitchSub = node.has("pitch_sub") && node.get("pitch_sub").booleanValue(); @@ -85,7 +85,7 @@ public class SoundEventsRegistryLoader extends EffectRegistryLoader next = soundsIterator.next(); JsonNode brMap = next.getValue(); - soundMappings.put(next.getKey(), new SoundMapping( - next.getKey(), + String javaSound = next.getKey(); + soundMappings.put(javaSound, new SoundMapping( + javaSound, brMap.has("bedrock_mapping") && brMap.get("bedrock_mapping").isTextual() ? brMap.get("bedrock_mapping").asText() : null, brMap.has("playsound_mapping") && brMap.get("playsound_mapping").isTextual() ? brMap.get("playsound_mapping").asText() : null, brMap.has("extra_data") && brMap.get("extra_data").isInt() ? brMap.get("extra_data").asInt() : -1, 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 412d7d779..58a1bdb0f 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 @@ -28,9 +28,7 @@ package org.geysermc.geyser.registry.populator; import com.fasterxml.jackson.databind.JsonNode; import com.google.common.collect.ImmutableMap; import com.nukkitx.nbt.*; -import com.nukkitx.protocol.bedrock.v475.Bedrock_v475; -import com.nukkitx.protocol.bedrock.v486.Bedrock_v486; -import com.nukkitx.protocol.bedrock.v503.Bedrock_v503; +import com.nukkitx.protocol.bedrock.beta.BedrockBeta; import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntSet; import it.unimi.dsi.fastutil.objects.Object2IntMap; @@ -61,51 +59,9 @@ public class BlockRegistryPopulator { private static final ImmutableMap, BiFunction> BLOCK_MAPPERS; private static final BiFunction EMPTY_MAPPER = (bedrockIdentifier, statesBuilder) -> null; - private static final BiFunction V486_MAPPER = (bedrockIdentifier, statesBuilder) -> { - statesBuilder.remove("no_drop_bit"); // Used in skulls - if (bedrockIdentifier.equals("minecraft:glow_lichen")) { - // Moved around north, south, west - int bits = (int) statesBuilder.get("multi_face_direction_bits"); - boolean north = (bits & (1 << 2)) != 0; - boolean south = (bits & (1 << 3)) != 0; - boolean west = (bits & (1 << 4)) != 0; - if (north) { - bits |= 1 << 4; - } else { - bits &= ~(1 << 4); - } - if (south) { - bits |= 1 << 2; - } else { - bits &= ~(1 << 2); - } - if (west) { - bits |= 1 << 3; - } else { - bits &= ~(1 << 3); - } - statesBuilder.put("multi_face_direction_bits", bits); - } - return null; - }; - static { ImmutableMap.Builder, BiFunction> stateMapperBuilder = ImmutableMap., BiFunction>builder() - .put(ObjectIntPair.of("1_18_0", Bedrock_v475.V475_CODEC.getProtocolVersion()), EMPTY_MAPPER) - .put(ObjectIntPair.of("1_18_10", Bedrock_v486.V486_CODEC.getProtocolVersion()), V486_MAPPER) - .put(ObjectIntPair.of("1_18_30", Bedrock_v503.V503_CODEC.getProtocolVersion()), (bedrockIdentifier, statesBuilder) -> { - // Apply these fixes too - V486_MAPPER.apply(bedrockIdentifier, statesBuilder); - return switch (bedrockIdentifier) { - case "minecraft:pistonArmCollision" -> "minecraft:piston_arm_collision"; - case "minecraft:stickyPistonArmCollision" -> "minecraft:sticky_piston_arm_collision"; - case "minecraft:movingBlock" -> "minecraft:moving_block"; - case "minecraft:tripWire" -> "minecraft:trip_wire"; - case "minecraft:seaLantern" -> "minecraft:sea_lantern"; - case "minecraft:concretePowder" -> "minecraft:concrete_powder"; - default -> null; - }; - }); + .put(ObjectIntPair.of("1_19_0", BedrockBeta.BETA_CODEC.getProtocolVersion()), EMPTY_MAPPER); BLOCK_MAPPERS = stateMapperBuilder.build(); } @@ -294,7 +250,7 @@ public class BlockRegistryPopulator { builder.pickItem(pickItemNode.textValue().intern()); } - if (javaId.equals("minecraft:obsidian") || javaId.equals("minecraft:crying_obsidian") || javaId.startsWith("minecraft:respawn_anchor")) { + if (javaId.equals("minecraft:obsidian") || javaId.equals("minecraft:crying_obsidian") || javaId.startsWith("minecraft:respawn_anchor") || javaId.startsWith("minecraft:reinforced_deepslate")) { builder.pistonBehavior(PistonBehavior.BLOCK); } else { JsonNode pistonBehaviorNode = entry.getValue().get("piston_behavior"); 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 37b6c49f4..2868652bd 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 @@ -31,13 +31,11 @@ import com.nukkitx.nbt.NbtMap; import com.nukkitx.nbt.NbtMapBuilder; import com.nukkitx.nbt.NbtType; import com.nukkitx.nbt.NbtUtils; +import com.nukkitx.protocol.bedrock.beta.BedrockBeta; import com.nukkitx.protocol.bedrock.data.SoundEvent; import com.nukkitx.protocol.bedrock.data.inventory.ComponentItemData; import com.nukkitx.protocol.bedrock.data.inventory.ItemData; import com.nukkitx.protocol.bedrock.packet.StartGamePacket; -import com.nukkitx.protocol.bedrock.v475.Bedrock_v475; -import com.nukkitx.protocol.bedrock.v486.Bedrock_v486; -import com.nukkitx.protocol.bedrock.v503.Bedrock_v503; import it.unimi.dsi.fastutil.ints.Int2IntMap; import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntList; @@ -66,9 +64,7 @@ public class ItemRegistryPopulator { public static void populate() { Map paletteVersions = new Object2ObjectOpenHashMap<>(); - paletteVersions.put("1_18_0", new PaletteVersion(Bedrock_v475.V475_CODEC.getProtocolVersion(), Collections.emptyMap())); - paletteVersions.put("1_18_10", new PaletteVersion(Bedrock_v486.V486_CODEC.getProtocolVersion(), Collections.emptyMap())); - paletteVersions.put("1_18_30", new PaletteVersion(Bedrock_v503.V503_CODEC.getProtocolVersion(), Collections.emptyMap())); + paletteVersions.put("1_19_0", new PaletteVersion(BedrockBeta.BETA_CODEC.getProtocolVersion(), Collections.emptyMap())); GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); @@ -230,18 +226,6 @@ public class ItemRegistryPopulator { mappingItem = entry.getValue(); } - String bedrockIdentifier; - if (javaIdentifier.equals("minecraft:globe_banner_pattern") && palette.getValue().protocolVersion() < Bedrock_v486.V486_CODEC.getProtocolVersion()) { - bedrockIdentifier = "minecraft:banner_pattern"; - } else { - bedrockIdentifier = mappingItem.getBedrockIdentifier(); - if (palette.getValue().protocolVersion() >= Bedrock_v503.V503_CODEC.getProtocolVersion()) { - if (bedrockIdentifier.equals("minecraft:sealantern")) { - bedrockIdentifier = "minecraft:sea_lantern"; - } - } - } - if (usingFurnaceMinecart && javaIdentifier.equals("minecraft:furnace_minecart")) { javaFurnaceMinecartId = itemIndex; itemIndex++; @@ -250,6 +234,7 @@ public class ItemRegistryPopulator { continue; } + String bedrockIdentifier = mappingItem.getBedrockIdentifier(); int bedrockId = bedrockIdentifierToId.getInt(bedrockIdentifier); if (bedrockId == Short.MIN_VALUE) { throw new RuntimeException("Missing Bedrock ID in mappings: " + bedrockIdentifier); diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/SoundMapping.java b/core/src/main/java/org/geysermc/geyser/registry/type/SoundMapping.java index 4120b6eb5..27b5e631d 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/SoundMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/SoundMapping.java @@ -38,10 +38,10 @@ public class SoundMapping { public SoundMapping(String java, String bedrock, String playsound, int extraData, String identifier, boolean levelEvent) { this.java = java; - this.bedrock = bedrock == null || bedrock.equalsIgnoreCase("") ? null : bedrock; - this.playsound = playsound == null || playsound.equalsIgnoreCase("") ? null : playsound; + this.bedrock = bedrock == null || bedrock.isEmpty() ? null : bedrock; + this.playsound = playsound == null || playsound.isEmpty() ? null : playsound; this.extraData = extraData; - this.identifier = identifier == null || identifier.equalsIgnoreCase("") ? ":" : identifier; + this.identifier = identifier == null || identifier.isEmpty() ? ":" : identifier; this.levelEvent = levelEvent; } } \ 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 b55d392ad..c18562c88 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -34,8 +34,10 @@ import com.github.steveice10.mc.auth.service.MojangAuthenticationService; import com.github.steveice10.mc.auth.service.MsaAuthenticationService; import com.github.steveice10.mc.protocol.MinecraftConstants; import com.github.steveice10.mc.protocol.MinecraftProtocol; +import com.github.steveice10.mc.protocol.codec.MinecraftCodecHelper; import com.github.steveice10.mc.protocol.data.ProtocolState; import com.github.steveice10.mc.protocol.data.UnexpectedEncryptionException; +import com.github.steveice10.mc.protocol.data.game.MessageType; import com.github.steveice10.mc.protocol.data.game.entity.metadata.Pose; import com.github.steveice10.mc.protocol.data.game.entity.object.Direction; import com.github.steveice10.mc.protocol.data.game.entity.player.GameMode; @@ -47,6 +49,8 @@ import com.github.steveice10.mc.protocol.data.game.setting.SkinPart; import com.github.steveice10.mc.protocol.data.game.statistic.CustomStatistic; import com.github.steveice10.mc.protocol.data.game.statistic.Statistic; import com.github.steveice10.mc.protocol.packet.handshake.serverbound.ClientIntentionPacket; +import com.github.steveice10.mc.protocol.packet.ingame.serverbound.ServerboundChatCommandPacket; +import com.github.steveice10.mc.protocol.packet.ingame.serverbound.ServerboundChatPacket; import com.github.steveice10.mc.protocol.packet.ingame.serverbound.ServerboundClientInformationPacket; import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerPosPacket; import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundPlayerAbilitiesPacket; @@ -61,6 +65,7 @@ import com.github.steveice10.packetlib.tcp.TcpClientSession; import com.github.steveice10.packetlib.tcp.TcpSession; import com.nukkitx.math.GenericMath; import com.nukkitx.math.vector.*; +import com.nukkitx.nbt.NbtMap; import com.nukkitx.protocol.bedrock.BedrockPacket; import com.nukkitx.protocol.bedrock.BedrockServerSession; import com.nukkitx.protocol.bedrock.data.*; @@ -69,6 +74,7 @@ import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; import com.nukkitx.protocol.bedrock.packet.*; import io.netty.channel.Channel; import io.netty.channel.EventLoop; +import it.unimi.dsi.fastutil.bytes.ByteArrays; import it.unimi.dsi.fastutil.ints.Int2IntMap; import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; @@ -81,6 +87,7 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NonNull; import lombok.Setter; +import org.checkerframework.checker.nullness.qual.MonotonicNonNull; import org.checkerframework.common.value.qual.IntRange; import org.geysermc.common.PlatformType; import org.geysermc.cumulus.form.Form; @@ -101,6 +108,7 @@ 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.GeyserStonecutterData; +import org.geysermc.geyser.level.JavaDimension; import org.geysermc.geyser.level.WorldManager; import org.geysermc.geyser.level.physics.CollisionManager; import org.geysermc.geyser.network.netty.LocalSession; @@ -115,6 +123,7 @@ import org.geysermc.geyser.session.cache.*; import org.geysermc.geyser.skin.FloodgateSkinUploader; import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.text.MinecraftLocale; +import org.geysermc.geyser.text.TextDecoration; import org.geysermc.geyser.translator.inventory.InventoryTranslator; import org.geysermc.geyser.translator.text.MessageTranslator; import org.geysermc.geyser.util.*; @@ -124,6 +133,7 @@ import java.net.ConnectException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.nio.charset.StandardCharsets; +import java.time.Instant; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ScheduledFuture; @@ -318,12 +328,15 @@ public class GeyserSession implements GeyserConnection, CommandSender { */ @Setter private String dimension = DimensionUtils.OVERWORLD; - /** - * Whether piglins and hoglins are safe from conversion in this dimension. - * This controls if they have the shaking effect applied in the dimension. - */ + @MonotonicNonNull @Setter - private boolean dimensionPiglinSafe; + private JavaDimension dimensionType = null; + /** + * All dimensions that the client could possibly connect to. + */ + private final Map dimensions = new Object2ObjectOpenHashMap<>(3); + + private final Map chatTypes = new EnumMap<>(MessageType.class); @Setter private int breakingBlock; @@ -480,15 +493,6 @@ public class GeyserSession implements GeyserConnection, CommandSender { @Setter private boolean thunder = false; - /** - * Stores the last text inputted into a sign. - *

- * Bedrock sends packets every time you update the sign, Java only wants the final packet. - * Until we determine that the user has finished editing, we save the sign's current status. - */ - @Setter - private String lastSignMessage; - /** * Stores a map of all statistics sent from the server. * The server only sends new statistics back to us, so in order to show all statistics we need to cache existing ones. @@ -840,7 +844,8 @@ public class GeyserSession implements GeyserConnection, CommandSender { if (geyser.getBootstrap().getSocketAddress() != null) { // We're going to connect through the JVM and not through TCP downstream = new LocalSession(this.remoteAddress, this.remotePort, - geyser.getBootstrap().getSocketAddress(), upstream.getAddress().getAddress().getHostAddress(), this.protocol); + geyser.getBootstrap().getSocketAddress(), upstream.getAddress().getAddress().getHostAddress(), + this.protocol, this.protocol.createHelper()); } else { downstream = new TcpClientSession(this.remoteAddress, this.remotePort, this.protocol); disableSrvResolving(); @@ -1012,7 +1017,7 @@ public class GeyserSession implements GeyserConnection, CommandSender { setDaylightCycle(true); } - downstream.connect(); + downstream.connect(false); } public void disconnect(String reason) { @@ -1261,9 +1266,9 @@ public class GeyserSession implements GeyserConnection, CommandSender { ServerboundUseItemPacket useItemPacket; if (playerInventory.getItemInHand().getJavaId() == shield.getJavaId()) { - useItemPacket = new ServerboundUseItemPacket(Hand.MAIN_HAND); + useItemPacket = new ServerboundUseItemPacket(Hand.MAIN_HAND, getNextSequence()); } else if (playerInventory.getOffhand().getJavaId() == shield.getJavaId()) { - useItemPacket = new ServerboundUseItemPacket(Hand.OFF_HAND); + useItemPacket = new ServerboundUseItemPacket(Hand.OFF_HAND, getNextSequence()); } else { // No blocking return false; @@ -1292,7 +1297,7 @@ public class GeyserSession implements GeyserConnection, CommandSender { private boolean disableBlocking() { if (playerEntity.getFlag(EntityFlag.BLOCKING)) { ServerboundPlayerActionPacket releaseItemPacket = new ServerboundPlayerActionPacket(PlayerAction.RELEASE_USE_ITEM, - BlockUtils.POSITION_ZERO, Direction.DOWN); + Vector3i.ZERO, Direction.DOWN, getNextSequence()); sendDownstreamPacket(releaseItemPacket); playerEntity.setFlag(EntityFlag.BLOCKING, false); return true; @@ -1358,7 +1363,21 @@ public class GeyserSession implements GeyserConnection, CommandSender { @Override public String getLocale() { return clientData.getLanguageCode(); - } + } + + /** + * Sends a chat message to the Java server. + */ + public void sendChat(String message) { + sendDownstreamPacket(new ServerboundChatPacket(message, Instant.now().toEpochMilli(), 0L, ByteArrays.EMPTY_ARRAY, false)); + } + + /** + * Sends a command to the Java server. + */ + public void sendCommand(String command) { + sendDownstreamPacket(new ServerboundChatCommandPacket(command, Instant.now().toEpochMilli(), 0L, Collections.emptyMap(), false)); + } public void setServerRenderDistance(int renderDistance) { renderDistance = GenericMath.ceil(++renderDistance * MathUtils.SQRT_OF_TWO); //square to circle @@ -1452,6 +1471,9 @@ public class GeyserSession implements GeyserConnection, CommandSender { startGamePacket.setInventoriesServerAuthoritative(true); startGamePacket.setServerEngine(""); // Do we want to fill this in? + startGamePacket.setPlayerPropertyData(NbtMap.EMPTY); + startGamePacket.setWorldTemplateId(UUID.randomUUID()); + SyncedPlayerMovementSettings settings = new SyncedPlayerMovementSettings(); settings.setMovementMode(AuthoritativeMovementMode.CLIENT); settings.setRewindHistorySize(0); @@ -1653,6 +1675,10 @@ public class GeyserSession implements GeyserConnection, CommandSender { sendDownstreamPacket(clientSettingsPacket); } + public int getNextSequence() { + return 0; + } + /** * Used for updating statistic values since we only get changes from the server * @@ -1729,4 +1755,8 @@ public class GeyserSession implements GeyserConnection, CommandSender { packet.setExtraData(-1); sendUpstreamPacket(packet); } + + public MinecraftCodecHelper getCodecHelper() { + return (MinecraftCodecHelper) this.downstream.getCodecHelper(); + } } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/AdvancementsCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/AdvancementsCache.java index d100f61cb..f5801ed2b 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/AdvancementsCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/AdvancementsCache.java @@ -37,6 +37,7 @@ import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.text.MinecraftLocale; import org.geysermc.geyser.translator.text.MessageTranslator; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -75,33 +76,20 @@ public class AdvancementsCache { .translator(MinecraftLocale::getLocaleString, session.getLocale()) .title("gui.advancements"); - boolean hasAdvancements = false; + List rootAdvancementIds = new ArrayList<>(); for (Map.Entry advancement : storedAdvancements.entrySet()) { if (advancement.getValue().getParentId() == null) { // No parent means this is a root advancement - hasAdvancements = true; builder.button(MessageTranslator.convertMessage(advancement.getValue().getDisplayData().getTitle(), session.getLocale())); + rootAdvancementIds.add(advancement.getKey()); } } - if (!hasAdvancements) { + if (rootAdvancementIds.isEmpty()) { builder.content("advancements.empty"); } builder.validResultHandler((response) -> { - String id = ""; - - int advancementIndex = 0; - for (Map.Entry advancement : storedAdvancements.entrySet()) { - if (advancement.getValue().getParentId() == null) { // Root advancement - if (advancementIndex == response.clickedButtonId()) { - id = advancement.getKey(); - break; - } else { - advancementIndex++; - } - } - } - + String id = rootAdvancementIds.get(response.clickedButtonId()); if (!id.equals("")) { if (id.equals(currentAdvancementCategoryId)) { // The server thinks we are already on this tab @@ -130,12 +118,16 @@ public class AdvancementsCache { .title(MessageTranslator.convertMessage(categoryAdvancement.getDisplayData().getTitle(), language)) .content(MessageTranslator.convertMessage(categoryAdvancement.getDisplayData().getDescription(), language)); + List visibleAdvancements = new ArrayList<>(); if (currentAdvancementCategoryId != null) { for (GeyserAdvancement advancement : storedAdvancements.values()) { - if (advancement != null) { + boolean earned = isEarned(advancement); + if (earned || !advancement.getDisplayData().isHidden()) { if (advancement.getParentId() != null && currentAdvancementCategoryId.equals(advancement.getRootId(this))) { - boolean color = isEarned(advancement) || !advancement.getDisplayData().isShowToast(); - builder.button((color ? ChatColor.DARK_GREEN : "") + MessageTranslator.convertMessage(advancement.getDisplayData().getTitle()) + '\n'); + String color = earned ? advancement.getDisplayColor() : ""; + builder.button(color + MessageTranslator.convertMessage(advancement.getDisplayData().getTitle()) + '\n'); + + visibleAdvancements.add(advancement); } } } @@ -148,22 +140,8 @@ public class AdvancementsCache { session.sendDownstreamPacket(new ServerboundSeenAdvancementsPacket()); }).validResultHandler((response) -> { - GeyserAdvancement advancement = null; - int advancementIndex = 0; - // Loop around to find the advancement that the client pressed - for (GeyserAdvancement advancementEntry : storedAdvancements.values()) { - if (advancementEntry.getParentId() != null && - currentAdvancementCategoryId.equals(advancementEntry.getRootId(this))) { - if (advancementIndex == response.clickedButtonId()) { - advancement = advancementEntry; - break; - } else { - advancementIndex++; - } - } - } - - if (advancement != null) { + if (response.getClickedButtonId() < visibleAdvancements.size()) { + GeyserAdvancement advancement = visibleAdvancements.get(response.clickedButtonId()); buildAndShowInfoForm(advancement); } else { buildAndShowMenuForm(); diff --git a/core/src/main/java/org/geysermc/geyser/text/TextDecoration.java b/core/src/main/java/org/geysermc/geyser/text/TextDecoration.java new file mode 100644 index 000000000..296cacaf5 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/text/TextDecoration.java @@ -0,0 +1,93 @@ +/* + * 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.text; + +import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import com.github.steveice10.opennbt.tag.builtin.ListTag; +import com.github.steveice10.opennbt.tag.builtin.StringTag; +import com.github.steveice10.opennbt.tag.builtin.Tag; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.Style; + +import java.util.EnumSet; +import java.util.Locale; +import java.util.Set; + +public final class TextDecoration { + private final String translationKey; + private final Style style; + private final Set parameters; + + public TextDecoration(CompoundTag tag) { + translationKey = (String) tag.get("translation_key").getValue(); + + CompoundTag styleTag = tag.get("style"); + Style.Builder builder = Style.style(); + StringTag color = styleTag.get("color"); + if (color != null) { + builder.color(NamedTextColor.NAMES.value(color.getValue())); + } + //TODO implement the rest + Tag italic = styleTag.get("italic"); + if (italic != null && ((Number) italic.getValue()).byteValue() == (byte) 1) { + builder.decorate(net.kyori.adventure.text.format.TextDecoration.ITALIC); + } + style = builder.build(); + + this.parameters = EnumSet.noneOf(Parameter.class); + ListTag parameters = tag.get("parameters"); + for (Tag parameter : parameters) { + this.parameters.add(Parameter.valueOf(((String) parameter.getValue()).toUpperCase(Locale.ROOT))); + } + } + + public String translationKey() { + return translationKey; + } + + public Style style() { + return style; + } + + public Set parameters() { + return parameters; + } + + @Override + public String toString() { + return "TextDecoration{" + + "translationKey='" + translationKey + '\'' + + ", style=" + style + + ", parameters=" + parameters + + '}'; + } + + public enum Parameter { + CONTENT, + SENDER, + TEAM_NAME + } +} 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 f194d0d3f..54dc533c6 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 @@ -48,6 +48,8 @@ import org.geysermc.geyser.inventory.updater.UIInventoryUpdater; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InventoryUtils; +import java.util.OptionalInt; + public class BeaconInventoryTranslator extends AbstractBlockInventoryTranslator { public BeaconInventoryTranslator() { super(1, new BlockInventoryHolder("minecraft:beacon", com.nukkitx.protocol.bedrock.data.inventory.ContainerType.BEACON) { @@ -111,11 +113,15 @@ public class BeaconInventoryTranslator extends AbstractBlockInventoryTranslator public ItemStackResponsePacket.Response translateSpecialRequest(GeyserSession session, Inventory inventory, ItemStackRequest request) { // Input a beacon payment BeaconPaymentStackRequestActionData beaconPayment = (BeaconPaymentStackRequestActionData) request.getActions()[0]; - ServerboundSetBeaconPacket packet = new ServerboundSetBeaconPacket(beaconPayment.getPrimaryEffect(), beaconPayment.getSecondaryEffect()); + ServerboundSetBeaconPacket packet = new ServerboundSetBeaconPacket(toJava(beaconPayment.getPrimaryEffect()), toJava(beaconPayment.getSecondaryEffect())); session.sendDownstreamPacket(packet); return acceptRequest(request, makeContainerEntries(session, inventory, IntSets.emptySet())); } + private OptionalInt toJava(int effectChoice) { + return effectChoice == -1 ? OptionalInt.empty() : OptionalInt.of(effectChoice); + } + @Override public int bedrockSlotToJava(StackRequestSlotInfoData slotInfoData) { if (slotInfoData.getContainer() == ContainerSlotType.BEACON_PAYMENT) { 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 248bd35b7..061f6c5ea 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 @@ -37,7 +37,6 @@ import com.nukkitx.protocol.bedrock.data.inventory.stackrequestactions.AutoCraft import com.nukkitx.protocol.bedrock.data.inventory.stackrequestactions.CraftRecipeStackRequestActionData; import com.nukkitx.protocol.bedrock.packet.ItemStackResponsePacket; import com.nukkitx.protocol.bedrock.packet.SetEntityLinkPacket; -import com.nukkitx.protocol.bedrock.v486.Bedrock_v486; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.inventory.Inventory; @@ -140,10 +139,6 @@ public class MerchantInventoryTranslator extends BaseInventoryTranslator { @Override public ItemStackResponsePacket.Response translateCraftingRequest(GeyserSession session, Inventory inventory, ItemStackRequest request) { - if (session.getUpstream().getProtocolVersion() < Bedrock_v486.V486_CODEC.getProtocolVersion()) { - return super.translateCraftingRequest(session, inventory, request); - } - // Behavior as of 1.18.10. // We set the net ID to the trade index + 1. This doesn't appear to cause issues and means we don't have to // store a map of net ID to trade index on our end. @@ -153,12 +148,6 @@ public class MerchantInventoryTranslator extends BaseInventoryTranslator { @Override public ItemStackResponsePacket.Response translateAutoCraftingRequest(GeyserSession session, Inventory inventory, ItemStackRequest request) { - if (session.getUpstream().getProtocolVersion() < Bedrock_v486.V486_CODEC.getProtocolVersion()) { - // We're not crafting here - // Called at least by consoles when pressing a trade option button - return translateRequest(session, inventory, request); - } - // 1.18.10 update - seems impossible to call without consoles/controller input // We set the net ID to the trade index + 1. This doesn't appear to cause issues and means we don't have to // store a map of net ID to trade index on our end. diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/BiomeTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/BiomeTranslator.java index ac9a0517a..537c93a41 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/BiomeTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/BiomeTranslator.java @@ -42,6 +42,7 @@ import org.geysermc.geyser.level.chunk.bitarray.BitArray; import org.geysermc.geyser.level.chunk.bitarray.BitArrayVersion; import org.geysermc.geyser.level.chunk.bitarray.SingletonBitArray; import org.geysermc.geyser.registry.Registries; +import org.geysermc.geyser.util.JavaCodecEntry; import org.geysermc.geyser.util.MathUtils; // Array index formula by https://wiki.vg/Chunk_Format @@ -55,27 +56,26 @@ public class BiomeTranslator { ListTag serverBiomes = worldGen.get("value"); session.setBiomeGlobalPalette(MathUtils.getGlobalPaletteForSize(serverBiomes.size())); - for (Tag tag : serverBiomes) { - CompoundTag biomeTag = (CompoundTag) tag; - + for (CompoundTag biomeTag : JavaCodecEntry.iterateAsTag(worldGen)) { String javaIdentifier = ((StringTag) biomeTag.get("name")).getValue(); - int bedrockId = Registries.BIOME_IDENTIFIERS.get().getOrDefault(javaIdentifier, -1); + int bedrockId = Registries.BIOME_IDENTIFIERS.get().getOrDefault(javaIdentifier, 0); int javaId = ((IntTag) biomeTag.get("id")).getValue(); - if (bedrockId == -1) { - // There is no matching Bedrock variation for this biome; let's set the closest match based on biome category - String category = ((StringTag) ((CompoundTag) biomeTag.get("element")).get("category")).getValue(); - String replacementBiome = switch (category) { - case "extreme_hills" -> "minecraft:mountains"; - case "icy" -> "minecraft:ice_spikes"; - case "mesa" -> "minecraft:badlands"; - case "mushroom" -> "minecraft:mushroom_fields"; - case "nether" -> "minecraft:nether_wastes"; - default -> "minecraft:ocean"; // Typically ID 0 so a good default - case "taiga", "jungle", "plains", "savanna", "the_end", "beach", "ocean", "desert", "river", "swamp" -> "minecraft:" + category; - }; - bedrockId = Registries.BIOME_IDENTIFIERS.get().getInt(replacementBiome); - } + // TODO - the category tag no longer exists - find a better replacement option +// if (bedrockId == -1) { +// // There is no matching Bedrock variation for this biome; let's set the closest match based on biome category +// String category = ((StringTag) ((CompoundTag) biomeTag.get("element")).get("category")).getValue(); +// String replacementBiome = switch (category) { +// case "extreme_hills" -> "minecraft:mountains"; +// case "icy" -> "minecraft:ice_spikes"; +// case "mesa" -> "minecraft:badlands"; +// case "mushroom" -> "minecraft:mushroom_fields"; +// case "nether" -> "minecraft:nether_wastes"; +// default -> "minecraft:ocean"; // Typically ID 0 so a good default +// case "taiga", "jungle", "plains", "savanna", "the_end", "beach", "ocean", "desert", "river", "swamp" -> "minecraft:" + category; +// }; +// bedrockId = Registries.BIOME_IDENTIFIERS.get().getInt(replacementBiome); +// } // When we see the Java ID, we should instead apply the Bedrock ID biomeTranslations.put(javaId, bedrockId); diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/event/SoundEventEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/event/SoundEventEventTranslator.java index 049870114..1cb3670fb 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/event/SoundEventEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/event/SoundEventEventTranslator.java @@ -40,7 +40,7 @@ public record SoundEventEventTranslator(SoundEvent soundEvent, levelSoundEvent.setIdentifier(identifier); levelSoundEvent.setExtraData(extraData); levelSoundEvent.setRelativeVolumeDisabled(packet.isBroadcast()); - levelSoundEvent.setPosition(Vector3f.from(packet.getPosition().getX(), packet.getPosition().getY(), packet.getPosition().getZ()).add(0.5f, 0.5f, 0.5f)); + levelSoundEvent.setPosition(Vector3f.from(packet.getPosition().getX() + 0.5f, packet.getPosition().getY() + 0.5f, packet.getPosition().getZ() + 0.5f)); levelSoundEvent.setBabySound(false); session.sendUpstreamPacket(levelSoundEvent); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockEntityDataTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockEntityDataTranslator.java index 1f2f29ea5..67f0d0d59 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockEntityDataTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockEntityDataTranslator.java @@ -25,12 +25,11 @@ package org.geysermc.geyser.translator.protocol.bedrock; -import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position; import com.github.steveice10.mc.protocol.packet.ingame.serverbound.inventory.ServerboundSetJigsawBlockPacket; import com.github.steveice10.mc.protocol.packet.ingame.serverbound.level.ServerboundSignUpdatePacket; +import com.nukkitx.math.vector.Vector3i; import com.nukkitx.nbt.NbtMap; import com.nukkitx.protocol.bedrock.packet.BlockEntityDataPacket; -import com.nukkitx.protocol.bedrock.v503.Bedrock_v503; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; @@ -45,16 +44,8 @@ public class BedrockBlockEntityDataTranslator extends PacketTranslator { + case BOAT, CHEST_BOAT -> { // Include type of boat in the name int variant = ((BoatEntity) entity).getVariant(); String typeOfBoat = switch (variant) { @@ -61,9 +61,10 @@ public class BedrockEntityPickRequestTranslator extends PacketTranslator "jungle"; case 4 -> "acacia"; case 5 -> "dark_oak"; + case 6 -> "mangrove"; default -> "oak"; }; - itemName = typeOfBoat + "_boat"; + itemName = typeOfBoat + "_" + entity.getDefinition().entityType().name().toLowerCase(Locale.ROOT); } case LEASH_KNOT -> itemName = "lead"; case CHEST_MINECART, COMMAND_BLOCK_MINECART, FURNACE_MINECART, HOPPER_MINECART, TNT_MINECART -> 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 a5787c1c6..243b1cede 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 @@ -26,7 +26,6 @@ package org.geysermc.geyser.translator.protocol.bedrock; import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack; -import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position; import com.github.steveice10.mc.protocol.data.game.entity.object.Direction; import com.github.steveice10.mc.protocol.data.game.entity.player.GameMode; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; @@ -121,8 +120,9 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator { - ServerboundUseItemPacket itemPacket = new ServerboundUseItemPacket(Hand.MAIN_HAND); + ServerboundUseItemPacket itemPacket = new ServerboundUseItemPacket(Hand.MAIN_HAND, session.getNextSequence()); session.sendDownstreamPacket(itemPacket); }, 5, TimeUnit.MILLISECONDS)); } @@ -336,7 +337,7 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator legacySlots = packet.getLegacySlots(); @@ -417,8 +418,7 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator session.sendDownstreamPacket(new ServerboundUseItemPacket(Hand.MAIN_HAND)), + session.scheduleInEventLoop(() -> session.sendDownstreamPacket(new ServerboundUseItemPacket(Hand.MAIN_HAND, session.getNextSequence())), 50, TimeUnit.MILLISECONDS); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockTextTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockTextTranslator.java index 91ed5aa2b..e52fac371 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockTextTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockTextTranslator.java @@ -25,7 +25,6 @@ package org.geysermc.geyser.translator.protocol.bedrock; -import com.github.steveice10.mc.protocol.packet.ingame.serverbound.ServerboundChatPacket; import com.nukkitx.protocol.bedrock.packet.TextPacket; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.ChatColor; @@ -63,7 +62,6 @@ public class BedrockTextTranslator extends PacketTranslator { return; } - ServerboundChatPacket chatPacket = new ServerboundChatPacket(message); - session.sendDownstreamPacket(chatPacket); + session.sendChat(message); } } 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 5429899fa..fe519c329 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 @@ -25,7 +25,6 @@ package org.geysermc.geyser.translator.protocol.bedrock.entity.player; -import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position; import com.github.steveice10.mc.protocol.data.game.entity.object.Direction; import com.github.steveice10.mc.protocol.data.game.entity.player.*; import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundInteractPacket; @@ -129,8 +128,8 @@ public class BedrockActionTranslator extends PacketTranslator { @@ -43,8 +43,8 @@ public class BedrockEmoteTranslator extends PacketTranslator { public void translate(GeyserSession session, EmotePacket packet) { if (session.getGeyser().getConfig().getEmoteOffhandWorkaround() != EmoteOffhandWorkaroundOption.DISABLED) { // Activate the workaround - we should trigger the offhand now - ServerboundPlayerActionPacket swapHandsPacket = new ServerboundPlayerActionPacket(PlayerAction.SWAP_HANDS, BlockUtils.POSITION_ZERO, - Direction.DOWN); + ServerboundPlayerActionPacket swapHandsPacket = new ServerboundPlayerActionPacket(PlayerAction.SWAP_HANDS, Vector3i.ZERO, + Direction.DOWN, session.getNextSequence()); session.sendDownstreamPacket(swapHandsPacket); if (session.getGeyser().getConfig().getEmoteOffhandWorkaround() == EmoteOffhandWorkaroundOption.NO_EMOTES) { 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 471668492..fed8f5ce6 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 @@ -28,10 +28,10 @@ package org.geysermc.geyser.translator.protocol.bedrock.entity.player; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import com.github.steveice10.mc.protocol.data.game.entity.player.InteractAction; import com.github.steveice10.mc.protocol.data.game.entity.player.PlayerState; +import com.github.steveice10.mc.protocol.data.game.entity.type.EntityType; import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundInteractPacket; import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundPlayerCommandPacket; import com.nukkitx.protocol.bedrock.data.entity.EntityData; -import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; import com.nukkitx.protocol.bedrock.data.inventory.ContainerType; import com.nukkitx.protocol.bedrock.packet.ContainerOpenPacket; import com.nukkitx.protocol.bedrock.packet.InteractPacket; @@ -96,12 +96,10 @@ public class BedrockInteractTranslator extends PacketTranslator case OPEN_INVENTORY: if (session.getOpenInventory() == null) { Entity ridingEntity = session.getPlayerEntity().getVehicle(); - if (ridingEntity instanceof AbstractHorseEntity) { - if (ridingEntity.getFlag(EntityFlag.TAMED)) { - // We should request to open the horse inventory instead - ServerboundPlayerCommandPacket openHorseWindowPacket = new ServerboundPlayerCommandPacket(session.getPlayerEntity().getEntityId(), PlayerState.OPEN_HORSE_INVENTORY); - session.sendDownstreamPacket(openHorseWindowPacket); - } + if (ridingEntity instanceof AbstractHorseEntity || (ridingEntity != null && ridingEntity.getDefinition().entityType() == EntityType.CHEST_BOAT)) { + // 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.sendDownstreamPacket(openVehicleWindowPacket); } else { session.setOpenInventory(session.getPlayerInventory()); 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 00b60fec0..b6f7a2451 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 @@ -222,7 +222,7 @@ public class JavaCommandsTranslator extends PacketTranslator CommandParam.BLOCK_POSITION; case COLUMN_POS, VEC3 -> CommandParam.POSITION; case MESSAGE -> CommandParam.MESSAGE; - case NBT, NBT_COMPOUND_TAG, NBT_TAG, NBT_PATH -> CommandParam.JSON; + case NBT_COMPOUND_TAG, NBT_TAG, NBT_PATH -> CommandParam.JSON; //TODO NBT was removed case RESOURCE_LOCATION, FUNCTION -> CommandParam.FILE_PATH; case BOOL -> ENUM_BOOLEAN; case OPERATION -> CommandParam.OPERATOR; // ">=", "==", etc @@ -248,7 +248,7 @@ public class JavaCommandsTranslator extends PacketTranslator // So if paramNode.getName() == "value" and enumData.getName() == "bool": - children.add(new ParamInfo(paramNode, new CommandParamData(paramNode.getName(), this.paramNode.isExecutable(), enumData, type, null, Collections.emptyList()))); + children.add(new ParamInfo(paramNode, new CommandParamData(paramNode.getName(), optional, enumData, type, null, Collections.emptyList()))); } } 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 b68c0996d..a5c949c10 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 @@ -25,48 +25,79 @@ package org.geysermc.geyser.translator.protocol.java; +import com.github.steveice10.mc.protocol.data.game.MessageType; import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundLoginPacket; import com.github.steveice10.mc.protocol.packet.ingame.serverbound.ServerboundCustomPayloadPacket; +import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import com.github.steveice10.opennbt.tag.builtin.IntTag; import com.nukkitx.protocol.bedrock.data.GameRuleData; import com.nukkitx.protocol.bedrock.data.PlayerPermission; import com.nukkitx.protocol.bedrock.packet.AdventureSettingsPacket; import com.nukkitx.protocol.bedrock.packet.GameRulesChangedPacket; import com.nukkitx.protocol.bedrock.packet.SetPlayerGameTypePacket; import org.geysermc.floodgate.pluginmessage.PluginMessageChannels; -import org.geysermc.geyser.entity.type.player.PlayerEntity; +import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; +import org.geysermc.geyser.level.JavaDimension; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.auth.AuthType; +import org.geysermc.geyser.text.TextDecoration; import org.geysermc.geyser.translator.level.BiomeTranslator; 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.DimensionUtils; +import org.geysermc.geyser.util.JavaCodecEntry; import org.geysermc.geyser.util.PluginMessageUtils; +import java.util.Map; + @Translator(packet = ClientboundLoginPacket.class) public class JavaLoginTranslator extends PacketTranslator { @Override public void translate(GeyserSession session, ClientboundLoginPacket packet) { - PlayerEntity entity = session.getPlayerEntity(); + SessionPlayerEntity entity = session.getPlayerEntity(); entity.setEntityId(packet.getEntityId()); + Map dimensions = session.getDimensions(); + dimensions.clear(); + + JavaDimension.load(packet.getRegistry(), dimensions); + + Map chatTypes = session.getChatTypes(); + chatTypes.clear(); + for (CompoundTag tag : JavaCodecEntry.iterateAsTag(packet.getRegistry().get("minecraft:chat_type"))) { + int id = ((IntTag) tag.get("id")).getValue(); + CompoundTag element = tag.get("element"); + CompoundTag chat = element.get("chat"); + if (chat == null) { + continue; + } + CompoundTag decoration = chat.get("decoration"); + if (decoration == null) { + continue; + } + MessageType type = MessageType.from(id); + chatTypes.put(type, new TextDecoration(decoration)); + } + // If the player is already initialized and a join game packet is sent, they // are swapping servers - String newDimension = DimensionUtils.getNewDimension(packet.getDimension()); if (session.isSpawned()) { - String fakeDim = DimensionUtils.getTemporaryDimension(session.getDimension(), newDimension); + String fakeDim = DimensionUtils.getTemporaryDimension(session.getDimension(), packet.getDimension()); DimensionUtils.switchDimension(session, fakeDim); session.getWorldCache().removeScoreboard(); } session.setWorldName(packet.getWorldName()); - BiomeTranslator.loadServerBiomes(session, packet.getDimensionCodec()); + BiomeTranslator.loadServerBiomes(session, packet.getRegistry()); session.getTagCache().clear(); session.setGameMode(packet.getGameMode()); + String newDimension = packet.getDimension(); + boolean needsSpawnPacket = !session.isSentSpawnPacket(); if (needsSpawnPacket) { // The player has yet to spawn so let's do that using some of the information in this Java packet @@ -85,6 +116,8 @@ public class JavaLoginTranslator extends PacketTranslator { + + @Override + public void translate(GeyserSession session, ClientboundPlayerChatPacket packet) { + TextPacket textPacket = new TextPacket(); + textPacket.setPlatformChatId(""); + textPacket.setSourceName(""); + textPacket.setXuid(session.getAuthData().xuid()); + // TODO new types + textPacket.setType(switch (packet.getType()) { + case CHAT -> TextPacket.Type.CHAT; + case SYSTEM -> TextPacket.Type.SYSTEM; + case GAME_INFO -> TextPacket.Type.TIP; + default -> TextPacket.Type.RAW; + }); + + textPacket.setNeedsTranslation(false); + Component message = packet.getUnsignedContent() == null ? packet.getSignedContent() : packet.getUnsignedContent(); + + TextDecoration decoration = session.getChatTypes().get(packet.getType()); + if (decoration != null) { + // As of 1.19 - do this to apply all the styling for signed messages + // Though, Bedrock cannot care about the signed stuff. + TranslatableComponent.Builder withDecoration = Component.translatable() + .key(decoration.translationKey()) + .style(decoration.style()); + Set parameters = decoration.parameters(); + List args = new ArrayList<>(3); + if (parameters.contains(TextDecoration.Parameter.TEAM_NAME)) { + args.add(packet.getSenderTeamName()); + } + if (parameters.contains(TextDecoration.Parameter.SENDER)) { + args.add(packet.getSenderName()); + } + if (parameters.contains(TextDecoration.Parameter.CONTENT)) { + args.add(message); + } + withDecoration.args(args); + textPacket.setMessage(MessageTranslator.convertMessage(withDecoration.build(), session.getLocale())); + } else { + textPacket.setMessage(MessageTranslator.convertMessage(message, session.getLocale())); + } + + session.sendUpstreamPacket(textPacket); + } +} 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 03d006a50..3471ce576 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 @@ -33,9 +33,9 @@ import com.nukkitx.protocol.bedrock.packet.SetPlayerGameTypePacket; import org.geysermc.geyser.entity.attribute.GeyserAttributeType; import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; 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.geyser.translator.inventory.InventoryTranslator; import org.geysermc.geyser.util.ChunkUtils; import org.geysermc.geyser.util.DimensionUtils; @@ -55,6 +55,9 @@ public class JavaRespawnTranslator extends PacketTranslator { +@Translator(packet = ClientboundSystemChatPacket.class) +public class JavaSystemChatTranslator extends PacketTranslator { @Override - public void translate(GeyserSession session, ClientboundChatPacket packet) { + public void translate(GeyserSession session, ClientboundSystemChatPacket packet) { TextPacket textPacket = new TextPacket(); textPacket.setPlatformChatId(""); textPacket.setSourceName(""); textPacket.setXuid(session.getAuthData().xuid()); + // TODO new types textPacket.setType(switch (packet.getType()) { case CHAT -> TextPacket.Type.CHAT; case SYSTEM -> TextPacket.Type.SYSTEM; - case NOTIFICATION -> TextPacket.Type.TIP; + case GAME_INFO -> TextPacket.Type.TIP; default -> TextPacket.Type.RAW; }); textPacket.setNeedsTranslation(false); - textPacket.setMessage(MessageTranslator.convertMessage(packet.getMessage(), session.getLocale())); + textPacket.setMessage(MessageTranslator.convertMessage(packet.getContent(), session.getLocale())); session.sendUpstreamPacket(textPacket); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateAdvancementsTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateAdvancementsTranslator.java index f65c17374..a1d8da90c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateAdvancementsTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateAdvancementsTranslator.java @@ -27,7 +27,7 @@ package org.geysermc.geyser.translator.protocol.java; import com.github.steveice10.mc.protocol.data.game.advancement.Advancement; import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundUpdateAdvancementsPacket; -import com.nukkitx.protocol.bedrock.packet.SetTitlePacket; +import com.nukkitx.protocol.bedrock.packet.ToastRequestPacket; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; @@ -36,7 +36,7 @@ import org.geysermc.geyser.session.cache.AdvancementsCache; import org.geysermc.geyser.level.GeyserAdvancement; import org.geysermc.geyser.text.MinecraftLocale; -import java.util.Map; +import java.util.Locale; @Translator(packet = ClientboundUpdateAdvancementsPacket.class) public class JavaUpdateAdvancementsTranslator extends PacketTranslator { @@ -56,48 +56,39 @@ public class JavaUpdateAdvancementsTranslator extends PacketTranslator> progress : packet.getProgress().entrySet()) { - GeyserAdvancement advancement = session.getAdvancementsCache().getStoredAdvancements().get(progress.getKey()); + for (String advancementId : packet.getProgress().keySet()) { + GeyserAdvancement advancement = session.getAdvancementsCache().getStoredAdvancements().get(advancementId); if (advancement != null && advancement.getDisplayData() != null) { - if (session.getAdvancementsCache().isEarned(advancement)) { - // Java uses some pink color for toast challenge completes - String color = advancement.getDisplayData().getFrameType() == Advancement.DisplayData.FrameType.CHALLENGE ? - "§d" : "§a"; + if (advancement.getDisplayData().isShowToast() && session.getAdvancementsCache().isEarned(advancement)) { + String frameType = advancement.getDisplayData().getFrameType().toString().toLowerCase(Locale.ROOT); + String frameTitle = advancement.getDisplayColor() + MinecraftLocale.getLocaleString("advancements.toast." + frameType, session.getLocale()); String advancementName = MessageTranslator.convertMessage(advancement.getDisplayData().getTitle(), session.getLocale()); - // Send an action bar message stating they earned an achievement - // Sent for instances where broadcasting advancements through chat are disabled - SetTitlePacket titlePacket = new SetTitlePacket(); - titlePacket.setText(color + "[" + MinecraftLocale.getLocaleString("advancements.toast." + - advancement.getDisplayData().getFrameType().toString().toLowerCase(), session.getLocale()) + "]§f " + advancementName); - titlePacket.setType(SetTitlePacket.Type.ACTIONBAR); - titlePacket.setFadeOutTime(3); - titlePacket.setFadeInTime(3); - titlePacket.setStayTime(3); - titlePacket.setXuid(""); - titlePacket.setPlatformOnlineId(""); - session.sendUpstreamPacket(titlePacket); + ToastRequestPacket toastRequestPacket = new ToastRequestPacket(); + toastRequestPacket.setTitle(frameTitle); + toastRequestPacket.setContent(advancementName); + session.sendUpstreamPacket(toastRequestPacket); } } } 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 1c5a15b0b..f1de83914 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 @@ -38,7 +38,6 @@ import com.nukkitx.nbt.NbtMap; import com.nukkitx.protocol.bedrock.data.inventory.CraftingData; import com.nukkitx.protocol.bedrock.data.inventory.ItemData; import com.nukkitx.protocol.bedrock.packet.CraftingDataPacket; -import com.nukkitx.protocol.bedrock.v486.Bedrock_v486; import it.unimi.dsi.fastutil.ints.*; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; @@ -82,8 +81,6 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator= Bedrock_v486.V486_CODEC.getProtocolVersion(); - Int2ObjectMap recipeMap = new Int2ObjectOpenHashMap<>(Registries.RECIPES.forVersion(session.getUpstream().getProtocolVersion())); Int2ObjectMap> unsortedStonecutterData = new Int2ObjectOpenHashMap<>(); CraftingDataPacket craftingDataPacket = new CraftingDataPacket(); @@ -138,10 +135,6 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator { // Required to translate these as of 1.18.10, or else they cannot be crafted - if (!applySmithingRecipes) { - continue; - } - SmithingRecipeData recipeData = (SmithingRecipeData) recipe.getData(); ItemData output = ItemTranslator.translateToBedrock(session, recipeData.getResult()); for (ItemStack base : recipeData.getBase().getOptions()) { 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 de4a2c22b..d82a20a27 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 @@ -26,7 +26,6 @@ package org.geysermc.geyser.translator.protocol.java.entity; import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.ClientboundEntityEventPacket; -import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.LevelEventType; import com.nukkitx.protocol.bedrock.data.SoundEvent; import com.nukkitx.protocol.bedrock.data.entity.EntityData; @@ -38,11 +37,11 @@ import org.geysermc.geyser.entity.type.Entity; 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.monster.WardenEntity; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; -import java.util.Random; import java.util.concurrent.ThreadLocalRandom; @Translator(packet = ClientboundEntityEventPacket.class) @@ -56,7 +55,7 @@ public class JavaEntityEventTranslator extends PacketTranslator { +import org.geysermc.geyser.util.SoundUtils; +@Translator(packet = ClientboundSoundEntityPacket.class) +public class JavaSoundEntityTranslator extends PacketTranslator { @Override - public void translate(GeyserSession session, ClientboundAddPaintingPacket packet) { - Vector3f position = Vector3f.from(packet.getPosition().getX(), packet.getPosition().getY(), packet.getPosition().getZ()); - - PaintingEntity entity = new PaintingEntity(session, packet.getEntityId(), - session.getEntityCache().getNextEntityId().incrementAndGet(), packet.getUuid(), - position, PaintingType.getByPaintingType(packet.getPaintingType()), packet.getDirection().getHorizontalIndex()); - - session.getEntityCache().spawnEntity(entity); + public void translate(GeyserSession session, ClientboundSoundEntityPacket packet) { + Entity entity = session.getEntityCache().getEntityByJavaId(packet.getEntityId()); + if (entity == null) { + return; + } + SoundUtils.playBuiltinSound(session, packet.getSound(), entity.getPosition(), packet.getVolume(), packet.getPitch()); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaBlockBreakAckTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaBlockChangedAckTranslator.java similarity index 57% rename from core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaBlockBreakAckTranslator.java rename to core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaBlockChangedAckTranslator.java index 634d4d424..6afb0b3ef 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaBlockBreakAckTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaBlockChangedAckTranslator.java @@ -25,30 +25,16 @@ package org.geysermc.geyser.translator.protocol.java.entity.player; -import com.github.steveice10.mc.protocol.data.game.entity.player.PlayerAction; -import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.player.ClientboundBlockBreakAckPacket; -import com.nukkitx.math.vector.Vector3f; -import com.nukkitx.protocol.bedrock.data.LevelEventType; -import com.nukkitx.protocol.bedrock.packet.LevelEventPacket; +import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.player.ClientboundBlockChangedAckPacket; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; -import org.geysermc.geyser.level.block.BlockStateValues; -import org.geysermc.geyser.util.ChunkUtils; -@Translator(packet = ClientboundBlockBreakAckPacket.class) -public class JavaBlockBreakAckTranslator extends PacketTranslator { +@Translator(packet = ClientboundBlockChangedAckPacket.class) +public class JavaBlockChangedAckTranslator extends PacketTranslator { @Override - public void translate(GeyserSession session, ClientboundBlockBreakAckPacket packet) { - ChunkUtils.updateBlock(session, packet.getNewState(), packet.getPosition()); - if (packet.getAction() == PlayerAction.START_DIGGING && !packet.isSuccessful()) { - LevelEventPacket stopBreak = new LevelEventPacket(); - stopBreak.setType(LevelEventType.BLOCK_STOP_BREAK); - stopBreak.setPosition(Vector3f.from(packet.getPosition().getX(), packet.getPosition().getY(), packet.getPosition().getZ())); - stopBreak.setData(0); - session.setBreakingBlock(BlockStateValues.JAVA_AIR_ID); - session.sendUpstreamPacket(stopBreak); - } + public void translate(GeyserSession session, ClientboundBlockChangedAckPacket packet) { + // TODO } } \ No newline at end of file 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 33a347658..49cca79d2 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 @@ -32,10 +32,7 @@ import com.github.steveice10.mc.protocol.data.game.entity.type.EntityType; import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.spawn.ClientboundAddEntityPacket; import com.nukkitx.math.vector.Vector3f; import org.geysermc.geyser.entity.EntityDefinition; -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.*; import org.geysermc.geyser.entity.type.player.PlayerEntity; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.session.GeyserSession; @@ -52,6 +49,7 @@ public class JavaAddEntityTranslator extends PacketTranslator definition = Registries.ENTITY_DEFINITIONS.get(packet.getType()); if (definition == null) { @@ -62,11 +60,14 @@ public class JavaAddEntityTranslator extends PacketTranslator { - - @Override - public void translate(GeyserSession session, ClientboundAddMobPacket packet) { - Vector3f position = Vector3f.from(packet.getX(), packet.getY(), packet.getZ()); - Vector3f motion = Vector3f.from(packet.getMotionX(), packet.getMotionY(), packet.getMotionZ()); - - EntityDefinition definition = Registries.ENTITY_DEFINITIONS.get(packet.getType()); - if (definition == null) { - session.getGeyser().getLogger().warning(GeyserLocale.getLocaleStringLog("geyser.entity.type_null", packet.getType())); - return; - } - - Entity entity = definition.factory().create(session, packet.getEntityId(), session.getEntityCache().getNextEntityId().incrementAndGet(), - packet.getUuid(), definition, position, motion, packet.getYaw(), packet.getPitch(), packet.getHeadYaw() - ); - session.getEntityCache().spawnEntity(entity); - } -} 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 7c4bd561f..84d7f766d 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 @@ -27,14 +27,13 @@ package org.geysermc.geyser.translator.protocol.java.level; import com.github.steveice10.mc.protocol.packet.ingame.clientbound.level.ClientboundBlockDestructionPacket; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; -import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.LevelEventType; import com.nukkitx.protocol.bedrock.packet.LevelEventPacket; +import org.geysermc.geyser.registry.BlockRegistries; +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.registry.BlockRegistries; -import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.util.BlockUtils; @Translator(packet = ClientboundBlockDestructionPacket.class) @@ -45,11 +44,7 @@ public class JavaBlockDestructionTranslator extends PacketTranslator= 2 && session.getGameMode() == GameMode.CREATIVE && packet.getNbt() != null && packet.getNbt().size() > 5) { ContainerOpenPacket openPacket = new ContainerOpenPacket(); - openPacket.setBlockPosition(Vector3i.from(packet.getPosition().getX(), packet.getPosition().getY(), packet.getPosition().getZ())); + openPacket.setBlockPosition(position); openPacket.setId((byte) 1); openPacket.setType(ContainerType.COMMAND_BLOCK); openPacket.setUniqueEntityId(-1); 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 6adf1e00f..8824f88c4 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 @@ -25,7 +25,6 @@ package org.geysermc.geyser.translator.protocol.java.level; -import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position; import com.github.steveice10.mc.protocol.data.game.level.block.value.*; import com.github.steveice10.mc.protocol.packet.ingame.clientbound.level.ClientboundBlockEventPacket; import com.nukkitx.math.vector.Vector3i; @@ -49,9 +48,8 @@ public class JavaBlockEventTranslator extends PacketTranslator 0 ? 1 : 0); @@ -78,20 +76,20 @@ public class JavaBlockEventTranslator extends PacketTranslator new PistonBlockEntity(session, pos, direction, true, true)); + PistonBlockEntity blockEntity = pistonCache.getPistons().computeIfAbsent(position, pos -> new PistonBlockEntity(session, pos, direction, true, true)); if (blockEntity.getAction() != action) { blockEntity.setAction(action, Object2IntMaps.emptyMap()); } } } else { - PistonBlockEntity blockEntity = pistonCache.getPistons().computeIfAbsent(vector, pos -> { + PistonBlockEntity blockEntity = pistonCache.getPistons().computeIfAbsent(position, pos -> { int blockId = session.getGeyser().getWorldManager().getBlockAt(session, position); boolean sticky = BlockStateValues.isStickyPiston(blockId); boolean extended = action != PistonValueType.PUSHING; @@ -108,7 +106,7 @@ public class JavaBlockEventTranslator extends PacketTranslator { @Override public void translate(GeyserSession session, ClientboundCustomSoundPacket packet) { - String packetSound; - if (packet.getSound() instanceof BuiltinSound) { - packetSound = ((BuiltinSound) packet.getSound()).getName(); - } else if (packet.getSound() instanceof CustomSound) { - packetSound = ((CustomSound) packet.getSound()).getName(); - } else { - session.getGeyser().getLogger().debug("Unknown sound packet, we were unable to map this. " + packet.toString()); - return; - } - - SoundMapping soundMapping = Registries.SOUNDS.get(packetSound.replace("minecraft:", "")); - String playsound; - if (soundMapping == null || soundMapping.getPlaysound() == null) { - // no mapping - session.getGeyser().getLogger() - .debug("[PlaySound] Defaulting to sound server gave us for " + packet.toString()); - playsound = packetSound.replace("minecraft:", ""); - } else { - playsound = soundMapping.getPlaysound(); - } - PlaySoundPacket playSoundPacket = new PlaySoundPacket(); - playSoundPacket.setSound(playsound); + playSoundPacket.setSound(SoundUtils.translatePlaySound(packet.getSound())); playSoundPacket.setPosition(Vector3f.from(packet.getX(), packet.getY(), packet.getZ())); playSoundPacket.setVolume(packet.getVolume()); playSoundPacket.setPitch(packet.getPitch()); 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 e8fcbeec1..d5ac1abba 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 @@ -25,7 +25,6 @@ package org.geysermc.geyser.translator.protocol.java.level; -import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position; import com.github.steveice10.mc.protocol.packet.ingame.clientbound.level.ClientboundExplodePacket; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.math.vector.Vector3i; @@ -34,10 +33,10 @@ import com.nukkitx.protocol.bedrock.data.SoundEvent; import com.nukkitx.protocol.bedrock.packet.LevelEventPacket; import com.nukkitx.protocol.bedrock.packet.LevelSoundEventPacket; import com.nukkitx.protocol.bedrock.packet.SetEntityMotionPacket; +import org.geysermc.geyser.level.block.BlockStateValues; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; -import org.geysermc.geyser.level.block.BlockStateValues; import org.geysermc.geyser.util.ChunkUtils; @Translator(packet = ClientboundExplodePacket.class) @@ -45,7 +44,7 @@ public class JavaExplodeTranslator extends PacketTranslator { @@ -110,9 +108,9 @@ public class JavaLevelChunkWithLightTranslator extends PacketTranslator> 4))]; try { - NetInput in = new StreamNetInput(new ByteArrayInputStream(packet.getChunkData())); + ByteBuf in = Unpooled.wrappedBuffer(packet.getChunkData()); for (int sectionY = 0; sectionY < chunkSize; sectionY++) { - ChunkSection javaSection = ChunkSection.read(in, biomeGlobalPalette); + ChunkSection javaSection = session.getCodecHelper().readChunkSection(in, biomeGlobalPalette); javaChunks[sectionY] = javaSection.getChunkData(); javaBiomes[sectionY] = javaSection.getBiomeData(); @@ -312,10 +310,8 @@ public class JavaLevelChunkWithLightTranslator extends PacketTranslator= Bedrock_v503.V503_CODEC.getProtocolVersion(); - int biomeCount = isNewVersion ? bedrockDimension.height() >> 4 : 25; + // As of 1.18.30, the amount of biomes read is dependent on how high Bedrock thinks the dimension is + int biomeCount = bedrockDimension.height() >> 4; int dimensionOffset = bedrockDimension.minY() >> 4; for (int i = 0; i < biomeCount; i++) { int biomeYOffset = dimensionOffset + i; @@ -326,13 +322,8 @@ public class JavaLevelChunkWithLightTranslator extends PacketTranslator= (chunkSize + yOffset)) { // This biome section goes above the height of the Java world - if (isNewVersion) { - // A header that says to carry on the biome data from the previous chunk - // This notably fixes biomes in the End - byteBuf.writeByte((127 << 1) | 1); - } else { - byteBuf.writeBytes(ChunkUtils.EMPTY_BIOME_DATA); - } + // The byte written here is a header that says to carry on the biome data from the previous chunk + byteBuf.writeByte((127 << 1) | 1); continue; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java index 2271388c2..8fcfa381f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java @@ -25,14 +25,15 @@ package org.geysermc.geyser.translator.protocol.java.level; +import com.github.steveice10.mc.protocol.data.game.entity.object.Direction; import com.github.steveice10.mc.protocol.data.game.level.event.*; import com.github.steveice10.mc.protocol.packet.ingame.clientbound.level.ClientboundLevelEventPacket; import com.nukkitx.math.vector.Vector3f; +import com.nukkitx.math.vector.Vector3i; +import com.nukkitx.nbt.NbtMap; import com.nukkitx.protocol.bedrock.data.LevelEventType; import com.nukkitx.protocol.bedrock.data.SoundEvent; -import com.nukkitx.protocol.bedrock.packet.LevelEventPacket; -import com.nukkitx.protocol.bedrock.packet.LevelSoundEventPacket; -import com.nukkitx.protocol.bedrock.packet.TextPacket; +import com.nukkitx.protocol.bedrock.packet.*; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.session.GeyserSession; @@ -43,6 +44,7 @@ import org.geysermc.geyser.translator.protocol.Translator; import java.util.Collections; import java.util.Locale; +import java.util.Set; @Translator(packet = ClientboundLevelEventPacket.class) public class JavaLevelEventTranslator extends PacketTranslator { @@ -50,10 +52,11 @@ public class JavaLevelEventTranslator extends PacketTranslator { + effectPacket.setType(LevelEventType.PARTICLE_CROP_GROWTH); + + ComposterEventData composterEventData = (ComposterEventData) packet.getData(); + LevelSoundEventPacket soundEventPacket = new LevelSoundEventPacket(); + switch (composterEventData) { + case FILL -> soundEventPacket.setSound(SoundEvent.COMPOSTER_FILL); + case FILL_SUCCESS -> soundEventPacket.setSound(SoundEvent.COMPOSTER_FILL_LAYER); + } + soundEventPacket.setPosition(pos); + soundEventPacket.setIdentifier(""); + soundEventPacket.setExtraData(-1); + soundEventPacket.setBabySound(false); + soundEventPacket.setRelativeVolumeDisabled(false); + session.sendUpstreamPacket(soundEventPacket); } - GeyserImpl.getInstance().getLogger().debug("Unhandled sound event: " + soundEvent.name()); - } else if (packet.getEvent() instanceof ParticleEvent particleEvent) { - Vector3f pos = Vector3f.from(packet.getPosition().getX(), packet.getPosition().getY(), packet.getPosition().getZ()).add(0.5f, 0.5f, 0.5f); + case BLOCK_LAVA_EXTINGUISH -> { + effectPacket.setType(LevelEventType.PARTICLE_EVAPORATE); + effectPacket.setPosition(pos.add(-0.5f, 0.7f, -0.5f)); - LevelEventPacket effectPacket = new LevelEventPacket(); - effectPacket.setPosition(pos); - effectPacket.setData(0); - switch (particleEvent) { - case COMPOSTER -> { - effectPacket.setType(LevelEventType.PARTICLE_CROP_GROWTH); + LevelSoundEventPacket soundEventPacket = new LevelSoundEventPacket(); + soundEventPacket.setSound(SoundEvent.EXTINGUISH_FIRE); + soundEventPacket.setPosition(pos); + soundEventPacket.setIdentifier(""); + soundEventPacket.setExtraData(-1); + soundEventPacket.setBabySound(false); + soundEventPacket.setRelativeVolumeDisabled(false); + session.sendUpstreamPacket(soundEventPacket); + } + case BLOCK_REDSTONE_TORCH_BURNOUT -> { + effectPacket.setType(LevelEventType.PARTICLE_EVAPORATE); + effectPacket.setPosition(pos.add(-0.5f, 0, -0.5f)); - ComposterEventData composterEventData = (ComposterEventData) packet.getData(); - LevelSoundEventPacket soundEventPacket = new LevelSoundEventPacket(); - switch (composterEventData) { - case FILL -> soundEventPacket.setSound(SoundEvent.COMPOSTER_FILL); - case FILL_SUCCESS -> soundEventPacket.setSound(SoundEvent.COMPOSTER_FILL_LAYER); + LevelSoundEventPacket soundEventPacket = new LevelSoundEventPacket(); + soundEventPacket.setSound(SoundEvent.EXTINGUISH_FIRE); + soundEventPacket.setPosition(pos); + soundEventPacket.setIdentifier(""); + soundEventPacket.setExtraData(-1); + soundEventPacket.setBabySound(false); + soundEventPacket.setRelativeVolumeDisabled(false); + session.sendUpstreamPacket(soundEventPacket); + } + case BLOCK_END_PORTAL_FRAME_FILL -> { + effectPacket.setType(LevelEventType.PARTICLE_EVAPORATE); + effectPacket.setPosition(pos.add(-0.5f, 0.3125f, -0.5f)); + + LevelSoundEventPacket soundEventPacket = new LevelSoundEventPacket(); + soundEventPacket.setSound(SoundEvent.BLOCK_END_PORTAL_FRAME_FILL); + soundEventPacket.setPosition(pos); + soundEventPacket.setIdentifier(""); + soundEventPacket.setExtraData(-1); + soundEventPacket.setBabySound(false); + soundEventPacket.setRelativeVolumeDisabled(false); + session.sendUpstreamPacket(soundEventPacket); + } + case SMOKE -> { + effectPacket.setType(LevelEventType.PARTICLE_SHOOT); + + SmokeEventData smokeEventData = (SmokeEventData) packet.getData(); + int data = 0; + switch (smokeEventData) { + case DOWN -> { + data = 4; + pos = pos.add(0, -0.9f, 0); } - soundEventPacket.setPosition(pos); - soundEventPacket.setIdentifier(""); - soundEventPacket.setExtraData(-1); - soundEventPacket.setBabySound(false); - soundEventPacket.setRelativeVolumeDisabled(false); - session.sendUpstreamPacket(soundEventPacket); - } - case BLOCK_LAVA_EXTINGUISH -> { - effectPacket.setType(LevelEventType.PARTICLE_EVAPORATE); - effectPacket.setPosition(pos.add(-0.5f, 0.7f, -0.5f)); - - LevelSoundEventPacket soundEventPacket = new LevelSoundEventPacket(); - soundEventPacket.setSound(SoundEvent.EXTINGUISH_FIRE); - soundEventPacket.setPosition(pos); - soundEventPacket.setIdentifier(""); - soundEventPacket.setExtraData(-1); - soundEventPacket.setBabySound(false); - soundEventPacket.setRelativeVolumeDisabled(false); - session.sendUpstreamPacket(soundEventPacket); - } - case BLOCK_REDSTONE_TORCH_BURNOUT -> { - effectPacket.setType(LevelEventType.PARTICLE_EVAPORATE); - effectPacket.setPosition(pos.add(-0.5f, 0, -0.5f)); - - LevelSoundEventPacket soundEventPacket = new LevelSoundEventPacket(); - soundEventPacket.setSound(SoundEvent.EXTINGUISH_FIRE); - soundEventPacket.setPosition(pos); - soundEventPacket.setIdentifier(""); - soundEventPacket.setExtraData(-1); - soundEventPacket.setBabySound(false); - soundEventPacket.setRelativeVolumeDisabled(false); - session.sendUpstreamPacket(soundEventPacket); - } - case BLOCK_END_PORTAL_FRAME_FILL -> { - effectPacket.setType(LevelEventType.PARTICLE_EVAPORATE); - effectPacket.setPosition(pos.add(-0.5f, 0.3125f, -0.5f)); - - LevelSoundEventPacket soundEventPacket = new LevelSoundEventPacket(); - soundEventPacket.setSound(SoundEvent.BLOCK_END_PORTAL_FRAME_FILL); - soundEventPacket.setPosition(pos); - soundEventPacket.setIdentifier(""); - soundEventPacket.setExtraData(-1); - soundEventPacket.setBabySound(false); - soundEventPacket.setRelativeVolumeDisabled(false); - session.sendUpstreamPacket(soundEventPacket); - } - case SMOKE -> { - effectPacket.setType(LevelEventType.PARTICLE_SHOOT); - - SmokeEventData smokeEventData = (SmokeEventData) packet.getData(); - int data = 0; - switch (smokeEventData) { - case DOWN -> { - data = 4; - pos = pos.add(0, -0.9f, 0); - } - case UP -> { - data = 4; - pos = pos.add(0, 0.5f, 0); - } - case NORTH -> { - data = 1; - pos = pos.add(0, -0.2f, -0.7f); - } - case SOUTH -> { - data = 7; - pos = pos.add(0, -0.2f, 0.7f); - } - case WEST -> { - data = 3; - pos = pos.add(-0.7f, -0.2f, 0); - } - case EAST -> { - data = 5; - pos = pos.add(0.7f, -0.2f, 0); - } + case UP -> { + data = 4; + pos = pos.add(0, 0.5f, 0); } - effectPacket.setPosition(pos); - effectPacket.setData(data); - } - - //TODO: Block break particles when under fire - case BREAK_BLOCK -> { - effectPacket.setType(LevelEventType.PARTICLE_DESTROY_BLOCK); - - BreakBlockEventData breakBlockEventData = (BreakBlockEventData) packet.getData(); - effectPacket.setData(session.getBlockMappings().getBedrockBlockId(breakBlockEventData.getBlockState())); - } - case BREAK_SPLASH_POTION -> { - effectPacket.setType(LevelEventType.PARTICLE_POTION_SPLASH); - effectPacket.setPosition(pos.add(0, -0.5f, 0)); - - BreakPotionEventData splashPotionData = (BreakPotionEventData) packet.getData(); - effectPacket.setData(splashPotionData.getPotionId()); - - LevelSoundEventPacket soundEventPacket = new LevelSoundEventPacket(); - soundEventPacket.setSound(SoundEvent.GLASS); - soundEventPacket.setPosition(pos); - soundEventPacket.setIdentifier(""); - soundEventPacket.setExtraData(-1); - soundEventPacket.setBabySound(false); - soundEventPacket.setRelativeVolumeDisabled(false); - session.sendUpstreamPacket(soundEventPacket); - } - case BREAK_EYE_OF_ENDER -> effectPacket.setType(LevelEventType.PARTICLE_EYE_OF_ENDER_DEATH); - case MOB_SPAWN -> effectPacket.setType(LevelEventType.PARTICLE_MOB_BLOCK_SPAWN); // TODO: Check, but I don't think I really verified this ever went into effect on Java - case BONEMEAL_GROW_WITH_SOUND, BONEMEAL_GROW -> { - effectPacket.setType(particleEvent == ParticleEvent.BONEMEAL_GROW ? LevelEventType.PARTICLE_TURTLE_EGG : LevelEventType.PARTICLE_CROP_GROWTH); - - BonemealGrowEventData growEventData = (BonemealGrowEventData) packet.getData(); - effectPacket.setData(growEventData.getParticleCount()); - } - case ENDERDRAGON_FIREBALL_EXPLODE -> { - effectPacket.setType(LevelEventType.PARTICLE_EYE_OF_ENDER_DEATH); // TODO - - DragonFireballEventData fireballEventData = (DragonFireballEventData) packet.getData(); - if (fireballEventData == DragonFireballEventData.HAS_SOUND) { - LevelSoundEventPacket soundEventPacket = new LevelSoundEventPacket(); - soundEventPacket.setSound(SoundEvent.EXPLODE); - soundEventPacket.setPosition(pos); - soundEventPacket.setIdentifier(""); - soundEventPacket.setExtraData(-1); - soundEventPacket.setBabySound(false); - soundEventPacket.setRelativeVolumeDisabled(false); - session.sendUpstreamPacket(soundEventPacket); + case NORTH -> { + data = 1; + pos = pos.add(0, -0.2f, -0.7f); + } + case SOUTH -> { + data = 7; + pos = pos.add(0, -0.2f, 0.7f); + } + case WEST -> { + data = 3; + pos = pos.add(-0.7f, -0.2f, 0); + } + case EAST -> { + data = 5; + pos = pos.add(0.7f, -0.2f, 0); } } - case EXPLOSION -> { - effectPacket.setType(LevelEventType.PARTICLE_GENERIC_SPAWN); - effectPacket.setData(61); - } - case EVAPORATE -> { - effectPacket.setType(LevelEventType.PARTICLE_EVAPORATE_WATER); - effectPacket.setPosition(pos.add(-0.5f, 0.5f, -0.5f)); - } - case END_GATEWAY_SPAWN -> { - effectPacket.setType(LevelEventType.PARTICLE_EXPLOSION); + effectPacket.setPosition(pos); + effectPacket.setData(data); + } + //TODO: Block break particles when under fire + case BREAK_BLOCK -> { + effectPacket.setType(LevelEventType.PARTICLE_DESTROY_BLOCK); + + BreakBlockEventData breakBlockEventData = (BreakBlockEventData) packet.getData(); + effectPacket.setData(session.getBlockMappings().getBedrockBlockId(breakBlockEventData.getBlockState())); + } + case BREAK_SPLASH_POTION, BREAK_SPLASH_POTION2 -> { + effectPacket.setType(LevelEventType.PARTICLE_POTION_SPLASH); + effectPacket.setPosition(pos.add(0, -0.5f, 0)); + + BreakPotionEventData splashPotionData = (BreakPotionEventData) packet.getData(); + effectPacket.setData(splashPotionData.getPotionId()); + + LevelSoundEventPacket soundEventPacket = new LevelSoundEventPacket(); + soundEventPacket.setSound(SoundEvent.GLASS); + soundEventPacket.setPosition(pos); + soundEventPacket.setIdentifier(""); + soundEventPacket.setExtraData(-1); + soundEventPacket.setBabySound(false); + soundEventPacket.setRelativeVolumeDisabled(false); + session.sendUpstreamPacket(soundEventPacket); + } + case BREAK_EYE_OF_ENDER -> effectPacket.setType(LevelEventType.PARTICLE_EYE_OF_ENDER_DEATH); + case MOB_SPAWN -> effectPacket.setType(LevelEventType.PARTICLE_MOB_BLOCK_SPAWN); // TODO: Check, but I don't think I really verified this ever went into effect on Java + case BONEMEAL_GROW_WITH_SOUND, BONEMEAL_GROW -> { + effectPacket.setType(packet.getEvent() == LevelEvent.BONEMEAL_GROW ? LevelEventType.PARTICLE_TURTLE_EGG : LevelEventType.PARTICLE_CROP_GROWTH); + + BonemealGrowEventData growEventData = (BonemealGrowEventData) packet.getData(); + effectPacket.setData(growEventData.getParticleCount()); + } + case ENDERDRAGON_FIREBALL_EXPLODE -> { + effectPacket.setType(LevelEventType.PARTICLE_EYE_OF_ENDER_DEATH); // TODO + + DragonFireballEventData fireballEventData = (DragonFireballEventData) packet.getData(); + if (fireballEventData == DragonFireballEventData.HAS_SOUND) { LevelSoundEventPacket soundEventPacket = new LevelSoundEventPacket(); soundEventPacket.setSound(SoundEvent.EXPLODE); soundEventPacket.setPosition(pos); @@ -250,17 +232,110 @@ public class JavaLevelEventTranslator extends PacketTranslator effectPacket.setType(LevelEventType.PARTICLE_DRIPSTONE_DRIP); - case ELECTRIC_SPARK -> effectPacket.setType(LevelEventType.PARTICLE_ELECTRIC_SPARK); // Matches with a Bedrock server but doesn't seem to match up with Java - case WAX_ON -> effectPacket.setType(LevelEventType.PARTICLE_WAX_ON); - case WAX_OFF -> effectPacket.setType(LevelEventType.PARTICLE_WAX_OFF); - case SCRAPE -> effectPacket.setType(LevelEventType.PARTICLE_SCRAPE); - default -> { - GeyserImpl.getInstance().getLogger().debug("Unhandled particle event: " + particleEvent.name()); - return; - } } - session.sendUpstreamPacket(effectPacket); + case EXPLOSION -> { + effectPacket.setType(LevelEventType.PARTICLE_GENERIC_SPAWN); + effectPacket.setData(61); + } + case EVAPORATE -> { + effectPacket.setType(LevelEventType.PARTICLE_EVAPORATE_WATER); + effectPacket.setPosition(pos.add(-0.5f, 0.5f, -0.5f)); + } + case END_GATEWAY_SPAWN -> { + effectPacket.setType(LevelEventType.PARTICLE_EXPLOSION); + + LevelSoundEventPacket soundEventPacket = new LevelSoundEventPacket(); + soundEventPacket.setSound(SoundEvent.EXPLODE); + soundEventPacket.setPosition(pos); + soundEventPacket.setIdentifier(""); + soundEventPacket.setExtraData(-1); + soundEventPacket.setBabySound(false); + soundEventPacket.setRelativeVolumeDisabled(false); + session.sendUpstreamPacket(soundEventPacket); + } + case DRIPSTONE_DRIP -> effectPacket.setType(LevelEventType.PARTICLE_DRIPSTONE_DRIP); + case ELECTRIC_SPARK -> effectPacket.setType(LevelEventType.PARTICLE_ELECTRIC_SPARK); // Matches with a Bedrock server but doesn't seem to match up with Java + case WAX_ON -> effectPacket.setType(LevelEventType.PARTICLE_WAX_ON); + case WAX_OFF -> effectPacket.setType(LevelEventType.PARTICLE_WAX_OFF); + case SCRAPE -> effectPacket.setType(LevelEventType.PARTICLE_SCRAPE); + case SCULK_BLOCK_CHARGE -> { + SculkBlockChargeEventData eventData = (SculkBlockChargeEventData) packet.getData(); + LevelEventGenericPacket levelEventPacket = new LevelEventGenericPacket(); + // TODO add SCULK_BLOCK_CHARGE sound + if (eventData.getCharge() > 0) { + levelEventPacket.setEventId(2037); + levelEventPacket.setTag( + NbtMap.builder() + .putInt("x", packet.getPosition().getX()) + .putInt("y", packet.getPosition().getY()) + .putInt("z", packet.getPosition().getZ()) + .putShort("charge", (short) eventData.getCharge()) + .putShort("facing", encodeFacing(eventData.getBlockFaces())) // TODO check if this is actually correct + .build() + ); + } else { + levelEventPacket.setEventId(2038); + levelEventPacket.setTag( + NbtMap.builder() + .putInt("x", packet.getPosition().getX()) + .putInt("y", packet.getPosition().getY()) + .putInt("z", packet.getPosition().getZ()) + .build() + ); + } + session.sendUpstreamPacket(levelEventPacket); + return; + } + case SCULK_SHRIEKER_SHRIEK -> { + LevelEventGenericPacket levelEventPacket = new LevelEventGenericPacket(); + levelEventPacket.setEventId(2035); + levelEventPacket.setTag( + NbtMap.builder() + .putInt("originX", packet.getPosition().getX()) + .putInt("originY", packet.getPosition().getY()) + .putInt("originZ", packet.getPosition().getZ()) + .build() + ); + session.sendUpstreamPacket(levelEventPacket); + + LevelSoundEventPacket soundEventPacket = new LevelSoundEventPacket(); + soundEventPacket.setSound(SoundEvent.SCULK_SHRIEKER_SHRIEK); + soundEventPacket.setPosition(packet.getPosition().toFloat()); + soundEventPacket.setExtraData(-1); + soundEventPacket.setIdentifier(""); + soundEventPacket.setBabySound(false); + soundEventPacket.setRelativeVolumeDisabled(false); + session.sendUpstreamPacket(soundEventPacket); + return; + } + default -> { + GeyserImpl.getInstance().getLogger().debug("Unhandled level event: " + packet.getEvent()); + return; + } } + session.sendUpstreamPacket(effectPacket); + } + + private short encodeFacing(Set blockFaces) { + short facing = 0; + if (blockFaces.contains(Direction.DOWN)) { + facing |= 1; + } + if (blockFaces.contains(Direction.UP)) { + facing |= 1 << 1; + } + if (blockFaces.contains(Direction.SOUTH)) { + facing |= 1 << 2; + } + if (blockFaces.contains(Direction.WEST)) { + facing |= 1 << 3; + } + if (blockFaces.contains(Direction.NORTH)) { + facing |= 1 << 4; + } + if (blockFaces.contains(Direction.EAST)) { + facing |= 1 << 5; + } + return facing; } } \ No newline at end of file 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 de586b600..a413421a3 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 @@ -27,13 +27,18 @@ package org.geysermc.geyser.translator.protocol.java.level; import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack; import com.github.steveice10.mc.protocol.data.game.level.particle.*; +import com.github.steveice10.mc.protocol.data.game.level.particle.positionsource.BlockPositionSource; +import com.github.steveice10.mc.protocol.data.game.level.particle.positionsource.EntityPositionSource; import com.github.steveice10.mc.protocol.packet.ingame.clientbound.level.ClientboundLevelParticlesPacket; import com.nukkitx.math.vector.Vector3f; +import com.nukkitx.nbt.NbtMap; import com.nukkitx.protocol.bedrock.BedrockPacket; import com.nukkitx.protocol.bedrock.data.LevelEventType; import com.nukkitx.protocol.bedrock.data.inventory.ItemData; +import com.nukkitx.protocol.bedrock.packet.LevelEventGenericPacket; import com.nukkitx.protocol.bedrock.packet.LevelEventPacket; import com.nukkitx.protocol.bedrock.packet.SpawnParticleEffectPacket; +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; @@ -131,6 +136,39 @@ public class JavaLevelParticlesTranslator extends PacketTranslator { + VibrationParticleData data = (VibrationParticleData) particle.getData(); + + Vector3f target; + if (data.getPositionSource() instanceof BlockPositionSource blockPositionSource) { + target = blockPositionSource.getPosition().toFloat().add(0.5f, 0.5f, 0.5f); + } else if (data.getPositionSource() instanceof EntityPositionSource entityPositionSource) { + Entity entity = session.getEntityCache().getEntityByJavaId(entityPositionSource.getEntityId()); + if (entity != null) { + target = entity.getPosition().up(entityPositionSource.getYOffset()); + } else { + session.getGeyser().getLogger().debug("Unable to find entity with Java Id: " + entityPositionSource.getEntityId() + " for vibration particle."); + return null; + } + } else { + session.getGeyser().getLogger().debug("Unknown position source " + data.getPositionSource() + " for vibration particle."); + return null; + } + + return (position) -> { + LevelEventGenericPacket packet = new LevelEventGenericPacket(); + packet.setEventId(2027); + packet.setTag( + NbtMap.builder() + .putCompound("origin", buildVec3PositionTag(position)) + .putCompound("target", buildVec3PositionTag(target)) // There is a way to target an entity but that takes an attachPos instead of a y offset + .putFloat("speed", 20f) + .putFloat("timeToLive", data.getArrivalTicks() / 20f) + .build() + ); + return packet; + }; + } default -> { ParticleMapping particleMapping = Registries.PARTICLES.get(particle.getType()); if (particleMapping == null) { //TODO ensure no particle can be null @@ -160,4 +198,13 @@ public class JavaLevelParticlesTranslator extends PacketTranslator { @Override public void translate(GeyserSession session, ClientboundSoundPacket packet) { - String packetSound = packet.getSound().getName(); - - SoundMapping soundMapping = Registries.SOUNDS.get(packetSound); - if (soundMapping == null) { - session.getGeyser().getLogger().debug("[Builtin] Sound mapping " + packetSound + " not found - " + packet.toString()); - return; - } - - if (soundMapping.isLevelEvent()) { - LevelEventPacket levelEventPacket = new LevelEventPacket(); - levelEventPacket.setPosition(Vector3f.from(packet.getX(), packet.getY(), packet.getZ())); - levelEventPacket.setData(0); - levelEventPacket.setType(LevelEventType.valueOf(soundMapping.getBedrock())); - session.sendUpstreamPacket(levelEventPacket); - return; - } - LevelSoundEventPacket soundPacket = new LevelSoundEventPacket(); - SoundEvent sound = SoundUtils.toSoundEvent(soundMapping.getBedrock()); - if (sound == null) { - sound = SoundUtils.toSoundEvent(soundMapping.getBedrock()); - } - if (sound == null) { - sound = SoundUtils.toSoundEvent(packetSound); - } - if (sound == null) { - session.getGeyser().getLogger().debug("[Builtin] Sound for original " + packetSound + " to mappings " + soundPacket - + " was not a playable level sound, or has yet to be mapped to an enum in " - + "NukkitX SoundEvent "); - return; - } - - soundPacket.setSound(sound); - soundPacket.setPosition(Vector3f.from(packet.getX(), packet.getY(), packet.getZ())); - soundPacket.setIdentifier(soundMapping.getIdentifier()); - if (sound == SoundEvent.NOTE) { - // Minecraft Wiki: 2^(x/12) = Java pitch where x is -12 to 12 - // Java sends the note value as above starting with -12 and ending at 12 - // Bedrock has a number for each type of note, then proceeds up the scale by adding to that number - soundPacket.setExtraData(soundMapping.getExtraData() + (int)(Math.round((Math.log10(packet.getPitch()) / Math.log10(2)) * 12)) + 12); - } else if (sound == SoundEvent.PLACE && soundMapping.getExtraData() == -1) { - if (!soundMapping.getIdentifier().equals(":")) { - soundPacket.setExtraData(session.getBlockMappings().getBedrockBlockId( - BlockRegistries.JAVA_IDENTIFIERS.getOrDefault(soundMapping.getIdentifier(), BlockStateValues.JAVA_AIR_ID))); - } else { - session.getGeyser().getLogger().debug("PLACE sound mapping identifier was invalid! Please report: " + packet.toString()); - } - soundPacket.setIdentifier(":"); - } else { - soundPacket.setExtraData(soundMapping.getExtraData()); - } - - - soundPacket.setBabySound(false); // might need to adjust this in the future - soundPacket.setRelativeVolumeDisabled(false); - session.sendUpstreamPacket(soundPacket); + Vector3f position = Vector3f.from(packet.getX(), packet.getY(), packet.getZ()); + SoundUtils.playBuiltinSound(session, packet.getSound(), position, packet.getVolume(), packet.getPitch()); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaStopSoundTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaStopSoundTranslator.java index d9750ad7e..e5bc7999f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaStopSoundTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaStopSoundTranslator.java @@ -25,15 +25,12 @@ package org.geysermc.geyser.translator.protocol.java.level; -import com.github.steveice10.mc.protocol.data.game.level.sound.BuiltinSound; -import com.github.steveice10.mc.protocol.data.game.level.sound.CustomSound; import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundStopSoundPacket; import com.nukkitx.protocol.bedrock.packet.StopSoundPacket; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; -import org.geysermc.geyser.registry.Registries; -import org.geysermc.geyser.registry.type.SoundMapping; +import org.geysermc.geyser.util.SoundUtils; @Translator(packet = ClientboundStopSoundPacket.class) public class JavaStopSoundTranslator extends PacketTranslator { @@ -49,36 +46,11 @@ public class JavaStopSoundTranslator extends PacketTranslator " - + soundMapping + (soundMapping == null ? "[not found]" : "") - + " - " + packet.toString()); - String playsound; - if (soundMapping == null || soundMapping.getPlaysound() == null) { - // no mapping - session.getGeyser().getLogger() - .debug("[StopSound] Defaulting to sound server gave us."); - playsound = packetSound; - } else { - playsound = soundMapping.getPlaysound(); - } - StopSoundPacket stopSoundPacket = new StopSoundPacket(); - stopSoundPacket.setSoundName(playsound); - // packet not mapped in the library + stopSoundPacket.setSoundName(SoundUtils.translatePlaySound(packet.getSound())); stopSoundPacket.setStoppingAllSound(false); session.sendUpstreamPacket(stopSoundPacket); - session.getGeyser().getLogger().debug("[StopSound] Packet sent - " + packet.toString() + " --> " + stopSoundPacket); + session.getGeyser().getLogger().debug("[StopSound] Stopped " + packet.getSound() + " -> " + stopSoundPacket.getSoundName()); } } diff --git a/core/src/main/java/org/geysermc/geyser/util/BlockEntityUtils.java b/core/src/main/java/org/geysermc/geyser/util/BlockEntityUtils.java index ff283d08f..af059cbdd 100644 --- a/core/src/main/java/org/geysermc/geyser/util/BlockEntityUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/BlockEntityUtils.java @@ -25,7 +25,6 @@ package org.geysermc.geyser.util; -import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position; import com.github.steveice10.mc.protocol.data.game.level.block.BlockEntityType; import com.nukkitx.math.vector.Vector3i; import com.nukkitx.nbt.NbtMap; @@ -84,10 +83,6 @@ public class BlockEntityUtils { return Registries.BLOCK_ENTITIES.get(type); } - public static void updateBlockEntity(GeyserSession session, @Nonnull NbtMap blockEntity, Position position) { - updateBlockEntity(session, blockEntity, Vector3i.from(position.getX(), position.getY(), position.getZ())); - } - public static void updateBlockEntity(GeyserSession session, @Nonnull NbtMap blockEntity, Vector3i position) { BlockEntityDataPacket blockEntityPacket = new BlockEntityDataPacket(); blockEntityPacket.setBlockPosition(position); 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 0b63f3c88..7059c9a8b 100644 --- a/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java @@ -25,23 +25,18 @@ package org.geysermc.geyser.util; -import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.nukkitx.math.vector.Vector3i; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.PlayerInventory; -import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.translator.collision.BlockCollision; import org.geysermc.geyser.level.block.BlockStateValues; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.type.BlockMapping; import org.geysermc.geyser.registry.type.ItemMapping; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.collision.BlockCollision; -public class BlockUtils { - /** - * A static constant of {@link Position} with all values being zero. - */ - public static final Position POSITION_ZERO = new Position(0, 0, 0); +public final class BlockUtils { private static boolean correctTool(GeyserSession session, BlockMapping blockMapping, String itemToolType) { switch (itemToolType) { @@ -241,4 +236,7 @@ public class BlockUtils { public static BlockCollision getCollisionAt(GeyserSession session, int x, int y, int z) { return getCollision(session.getGeyser().getWorldManager().getBlockAt(session, x, y, z)); } + + private BlockUtils() { + } } diff --git a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java index 6eff505f5..d1ee9f165 100644 --- a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java @@ -25,9 +25,6 @@ package org.geysermc.geyser.util; -import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position; -import com.github.steveice10.opennbt.tag.builtin.CompoundTag; -import com.github.steveice10.opennbt.tag.builtin.IntTag; import com.nukkitx.math.vector.Vector2i; import com.nukkitx.math.vector.Vector3i; import com.nukkitx.protocol.bedrock.packet.LevelChunkPacket; @@ -38,16 +35,15 @@ import io.netty.buffer.Unpooled; import it.unimi.dsi.fastutil.ints.IntLists; import lombok.experimental.UtilityClass; import org.geysermc.geyser.entity.type.ItemFrameEntity; -import org.geysermc.geyser.entity.type.player.SkullPlayerEntity; +import org.geysermc.geyser.level.BedrockDimension; +import org.geysermc.geyser.level.JavaDimension; import org.geysermc.geyser.level.block.BlockStateValues; import org.geysermc.geyser.level.chunk.BlockStorage; import org.geysermc.geyser.level.chunk.GeyserChunkSection; import org.geysermc.geyser.level.chunk.bitarray.SingletonBitArray; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.session.cache.SkullCache; import org.geysermc.geyser.text.GeyserLocale; -import org.geysermc.geyser.level.BedrockDimension; import org.geysermc.geyser.translator.level.block.entity.BedrockOnlyBlockEntity; import static org.geysermc.geyser.level.block.BlockStateValues.JAVA_AIR_ID; @@ -120,19 +116,7 @@ public class ChunkUtils { } /** - * Sends a block update to the Bedrock client. If chunk caching is enabled and the platform is not Spigot, this also - * adds that block to the cache. - * @param session the Bedrock session to send/register the block to - * @param blockState the Java block state of the block - * @param position the position of the block - */ - public static void updateBlock(GeyserSession session, int blockState, Position position) { - Vector3i pos = Vector3i.from(position.getX(), position.getY(), position.getZ()); - updateBlock(session, blockState, pos); - } - - /** - * Sends a block update to the Bedrock client. If chunk caching is enabled and the platform is not Spigot, this also + * Sends a block update to the Bedrock client. If the platform is not Spigot, this also * adds that block to the cache. * @param session the Bedrock session to send/register the block to * @param blockState the Java block state of the block @@ -227,10 +211,10 @@ public class ChunkUtils { * Process the minimum and maximum heights for this dimension, and processes the world coordinate scale. * This must be done after the player has switched dimensions so we know what their dimension is */ - public static void loadDimensionTag(GeyserSession session, CompoundTag dimensionTag) { - int minY = ((IntTag) dimensionTag.get("min_y")).getValue(); - int maxY = ((IntTag) dimensionTag.get("height")).getValue(); - // Logical height can be ignored probably - seems to be for artificial limits like the Nether. + public static void loadDimension(GeyserSession session) { + JavaDimension dimension = session.getDimensionType(); + int minY = dimension.minY(); + int maxY = dimension.maxY(); if (minY % 16 != 0) { throw new RuntimeException("Minimum Y must be a multiple of 16!"); @@ -259,11 +243,6 @@ public class ChunkUtils { session.getChunkCache().setMinY(minY); session.getChunkCache().setHeightY(maxY); - // Load world coordinate scale for the world border - double coordinateScale = ((Number) dimensionTag.get("coordinate_scale").getValue()).doubleValue(); - session.getWorldBorder().setWorldCoordinateScale(coordinateScale); - - // Set if piglins/hoglins should shake - session.setDimensionPiglinSafe(((Number) dimensionTag.get("piglin_safe").getValue()).byteValue() != (byte) 0); + session.getWorldBorder().setWorldCoordinateScale(dimension.worldCoordinateScale()); } } diff --git a/core/src/main/java/org/geysermc/geyser/util/CpuUtils.java b/core/src/main/java/org/geysermc/geyser/util/CpuUtils.java new file mode 100644 index 000000000..622722e5a --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/util/CpuUtils.java @@ -0,0 +1,94 @@ +/* + * 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.util; + +import java.io.File; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.List; +import java.util.regex.Pattern; + +public final class CpuUtils { + + public static String tryGetProcessorName() { + try { + if (new File("/proc/cpuinfo").canRead()) { + return getLinuxProcessorName(); + } else { + return getWindowsProcessorName(); + } + } catch (Exception e) { + return e.getMessage(); + } + } + + /** + * Much of the code here was copied from the OSHI project. This is simply stripped down to only get the CPU model. + * https://github.com/oshi/oshi/ + */ + private static String getLinuxProcessorName() throws Exception { + List lines = Files.readAllLines(Paths.get("/proc/cpuinfo"), StandardCharsets.UTF_8); + Pattern whitespaceColonWhitespace = Pattern.compile("\\s+:\\s"); // From ParseUtil + for (String line : lines) { + String[] splitLine = whitespaceColonWhitespace.split(line); + if ("model name".equals(splitLine[0]) || "Processor".equals(splitLine[0])) { + return splitLine[1]; + } + } + return "unknown"; + } + + /** + * https://stackoverflow.com/a/6327663 + */ + private static String getWindowsProcessorName() throws Exception { + final String cpuNameCmd = "reg query \"HKLM\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0\" /v ProcessorNameString"; + final String regstrToken = "REG_SZ"; + + Process process = Runtime.getRuntime().exec(cpuNameCmd); + process.waitFor(); + InputStream is = process.getInputStream(); + + StringBuilder sb = new StringBuilder(); + while (is.available() != 0) { + sb.append((char) is.read()); + } + + String result = sb.toString(); + int p = result.indexOf(regstrToken); + + if (p == -1) { + return null; + } + + return result.substring(p + regstrToken.length()).trim(); + } + + private CpuUtils() { + } +} diff --git a/core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java b/core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java index f1aca63e8..fbc891131 100644 --- a/core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java @@ -26,13 +26,10 @@ package org.geysermc.geyser.util; import com.github.steveice10.mc.protocol.data.game.entity.Effect; -import com.github.steveice10.opennbt.tag.builtin.CompoundTag; -import com.github.steveice10.opennbt.tag.builtin.StringTag; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.packet.ChangeDimensionPacket; import com.nukkitx.protocol.bedrock.packet.MobEffectPacket; import com.nukkitx.protocol.bedrock.packet.StopSoundPacket; -import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.session.GeyserSession; @@ -131,25 +128,6 @@ public class DimensionUtils { }; } - /** - * Determines the new dimension based on the {@link CompoundTag} sent by either the {@link com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundLoginPacket} - * or {@link com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundRespawnPacket}. - * - * @param dimensionTag the packet's dimension tag. - * @return the dimension identifier. - */ - public static String getNewDimension(CompoundTag dimensionTag) { - if (dimensionTag == null || dimensionTag.isEmpty()) { - GeyserImpl.getInstance().getLogger().debug("Dimension tag was null or empty."); - return OVERWORLD; - } - if (dimensionTag.getValue().get("effects") != null) { - return ((StringTag) dimensionTag.getValue().get("effects")).getValue(); - } - GeyserImpl.getInstance().getLogger().debug("Effects portion of the tag was null or empty."); - return OVERWORLD; - } - /** * The Nether dimension in Bedrock does not permit building above Y128 - the Bedrock above the dimension. * This workaround sets the Nether as the End dimension to ignore this limit. 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 aafbbf66e..43ccff5e0 100644 --- a/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java @@ -32,6 +32,7 @@ import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.entity.EntityData; import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; 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.ArmorStandEntity; import org.geysermc.geyser.entity.type.living.animal.AnimalEntity; @@ -72,6 +73,7 @@ public final class EntityUtils { case SLOW_FALLING -> 27; case BAD_OMEN -> 28; case HERO_OF_THE_VILLAGE -> 29; + case DARKNESS -> 30; default -> effect.ordinal() + 1; }; } @@ -85,7 +87,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 -> mountedHeightOffset = -0.1f; + case BOAT, CHEST_BOAT -> mountedHeightOffset = -0.1f; case HOGLIN, ZOGLIN -> { boolean isBaby = mount.getFlag(EntityFlag.BABY); mountedHeightOffset = height - (isBaby ? 0.2f : 0.15f); @@ -160,13 +162,14 @@ public final class EntityUtils { xOffset = -0.6f; } } + case CHEST_BOAT -> xOffset = 0.15F; case CHICKEN -> zOffset = -0.1f; case TRADER_LLAMA, LLAMA -> zOffset = -0.3f; } if (passenger.getDefinition().entityType() == EntityType.SHULKER) { switch (mount.getDefinition().entityType()) { case MINECART, HOPPER_MINECART, TNT_MINECART, CHEST_MINECART, FURNACE_MINECART, SPAWNER_MINECART, - COMMAND_BLOCK_MINECART, BOAT -> yOffset = 0.1875f; + COMMAND_BLOCK_MINECART, BOAT, CHEST_BOAT -> yOffset = 0.1875f; } } /* @@ -182,7 +185,7 @@ public final class EntityUtils { } switch (mount.getDefinition().entityType()) { case MINECART, HOPPER_MINECART, TNT_MINECART, CHEST_MINECART, FURNACE_MINECART, SPAWNER_MINECART, - COMMAND_BLOCK_MINECART, BOAT -> yOffset -= mount.getDefinition().height() * 0.5f; + COMMAND_BLOCK_MINECART, BOAT, CHEST_BOAT -> yOffset -= mount.getDefinition().height() * 0.5f; } Vector3f offset = Vector3f.from(xOffset, yOffset, zOffset); passenger.setRiderSeatPosition(offset); @@ -190,7 +193,7 @@ public final class EntityUtils { } public static void updateRiderRotationLock(Entity passenger, Entity mount, boolean isRiding) { - if (isRiding && mount.getDefinition() == EntityDefinitions.BOAT) { + if (isRiding && mount instanceof BoatEntity) { // Head rotation is locked while riding in a boat passenger.getDirtyMetadata().put(EntityData.RIDER_ROTATION_LOCKED, (byte) 1); passenger.getDirtyMetadata().put(EntityData.RIDER_MAX_ROTATION, 90f); diff --git a/core/src/main/java/org/geysermc/geyser/util/InteractiveTag.java b/core/src/main/java/org/geysermc/geyser/util/InteractiveTag.java index 1e8795478..9607ac61e 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InteractiveTag.java +++ b/core/src/main/java/org/geysermc/geyser/util/InteractiveTag.java @@ -69,7 +69,8 @@ public enum InteractiveTag { EQUIP_ARMOR_STAND("armorstand.equip"), READ, WAKE_VILLAGER("wakevillager"), - BARTER; + BARTER, + GIVE_ITEM_TO_ALLAY("allay"); /** * The full string that should be passed on to the client. diff --git a/core/src/main/java/org/geysermc/geyser/util/JavaCodecEntry.java b/core/src/main/java/org/geysermc/geyser/util/JavaCodecEntry.java new file mode 100644 index 000000000..45be5bf99 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/util/JavaCodecEntry.java @@ -0,0 +1,61 @@ +/* + * 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.util; + +import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import com.github.steveice10.opennbt.tag.builtin.ListTag; +import com.github.steveice10.opennbt.tag.builtin.Tag; + +import javax.annotation.Nonnull; +import java.util.Iterator; + +public record JavaCodecEntry() { + + /** + * Iterate over a Java Edition codec and return each entry as a CompoundTag + */ + public static Iterable iterateAsTag(CompoundTag tag) { + ListTag value = tag.get("value"); + Iterator originalIterator = value.iterator(); + return new Iterable<>() { + @Nonnull + @Override + public Iterator iterator() { + return new Iterator<>() { + @Override + public boolean hasNext() { + return originalIterator.hasNext(); + } + + @Override + public CompoundTag next() { + return (CompoundTag) originalIterator.next(); + } + }; + } + }; + } +} 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 50cfa001e..f1e262bc6 100644 --- a/core/src/main/java/org/geysermc/geyser/util/MathUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/MathUtils.java @@ -101,6 +101,25 @@ public class MathUtils { return num; } + /** + * Clamps the value between the low and high boundaries + * Copied from {@link com.nukkitx.math.GenericMath} with floats instead. + * + * @param value The value to clamp + * @param low The low bound of the clamp + * @param high The high bound of the clamp + * @return the clamped value + */ + public static float clamp(float value, float low, float high) { + if (value < low) { + return low; + } + if (value > high) { + return high; + } + return value; + } + /** * Ensures the resulting object is a byte. Java Edition does not care whether a byte is encoded as an integer or not; * it converts it into a byte anyway. 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 d2675f13e..15348939c 100644 --- a/core/src/main/java/org/geysermc/geyser/util/SoundUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/SoundUtils.java @@ -25,9 +25,25 @@ package org.geysermc.geyser.util; +import com.github.steveice10.mc.protocol.data.game.level.sound.BuiltinSound; +import com.github.steveice10.mc.protocol.data.game.level.sound.CustomSound; +import com.github.steveice10.mc.protocol.data.game.level.sound.Sound; +import com.nukkitx.math.vector.Vector3f; +import com.nukkitx.protocol.bedrock.data.LevelEventType; import com.nukkitx.protocol.bedrock.data.SoundEvent; +import com.nukkitx.protocol.bedrock.packet.LevelEventPacket; +import com.nukkitx.protocol.bedrock.packet.LevelSoundEventPacket; +import com.nukkitx.protocol.bedrock.packet.PlaySoundPacket; +import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.level.block.BlockStateValues; +import org.geysermc.geyser.registry.BlockRegistries; +import org.geysermc.geyser.registry.Registries; +import org.geysermc.geyser.registry.type.SoundMapping; +import org.geysermc.geyser.session.GeyserSession; -public class SoundUtils { +import java.util.Locale; + +public final class SoundUtils { /** * Maps a sound name to a sound event, null if one @@ -36,11 +52,118 @@ public class SoundUtils { * @param sound the sound name * @return a sound event from the given sound */ - public static SoundEvent toSoundEvent(String sound) { + private static SoundEvent toSoundEvent(String sound) { try { - return SoundEvent.valueOf(sound.toUpperCase().replaceAll("\\.", "_")); + return SoundEvent.valueOf(sound.toUpperCase(Locale.ROOT).replace(".", "_")); } catch (Exception ex) { return null; } } + + /** + * Translates a Java Custom or Builtin Sound to its Bedrock equivalent + * + * @param sound the sound to translate + * @return a Bedrock sound + */ + public static String translatePlaySound(Sound sound) { + String packetSound; + if (sound instanceof BuiltinSound builtinSound) { + packetSound = builtinSound.getName(); + } else if (sound instanceof CustomSound customSound) { + packetSound = customSound.getName(); + } else { + GeyserImpl.getInstance().getLogger().debug("Unknown sound, we were unable to map this. " + sound); + return ""; + } + + // Drop the Minecraft namespace if applicable + if (packetSound.startsWith("minecraft:")) { + packetSound = packetSound.substring("minecraft:".length()); + } + + SoundMapping soundMapping = Registries.SOUNDS.get(packetSound); + if (soundMapping == null || soundMapping.getPlaysound() == null) { + // no mapping + GeyserImpl.getInstance().getLogger().debug("[PlaySound] Defaulting to sound server gave us for " + sound); + return packetSound; + } + return soundMapping.getPlaysound(); + } + + /** + * Translates and plays a Java Builtin Sound for a Bedrock client + * + * @param session the Bedrock client session. + * @param javaSound the builtin sound to play + * @param position the position + * @param pitch the pitch + */ + public static void playBuiltinSound(GeyserSession session, BuiltinSound javaSound, Vector3f position, float volume, float pitch) { + String packetSound = javaSound.getName(); + + SoundMapping soundMapping = Registries.SOUNDS.get(packetSound); + if (soundMapping == null) { + session.getGeyser().getLogger().debug("[Builtin] Sound mapping for " + packetSound + " not found"); + return; + } + + if (soundMapping.getPlaysound() != null) { + // We always prefer the PlaySound mapping because we can control volume and pitch + PlaySoundPacket playSoundPacket = new PlaySoundPacket(); + playSoundPacket.setSound(soundMapping.getPlaysound()); + playSoundPacket.setPosition(position); + playSoundPacket.setVolume(volume); + playSoundPacket.setPitch(pitch); + session.sendUpstreamPacket(playSoundPacket); + return; + } + + if (soundMapping.isLevelEvent()) { + LevelEventPacket levelEventPacket = new LevelEventPacket(); + levelEventPacket.setPosition(position); + levelEventPacket.setData(0); + levelEventPacket.setType(LevelEventType.valueOf(soundMapping.getBedrock())); + session.sendUpstreamPacket(levelEventPacket); + return; + } + + LevelSoundEventPacket soundPacket = new LevelSoundEventPacket(); + SoundEvent sound = SoundUtils.toSoundEvent(soundMapping.getBedrock()); + if (sound == null) { + sound = SoundUtils.toSoundEvent(packetSound); + } + if (sound == null) { + session.getGeyser().getLogger().debug("[Builtin] Sound for original '" + packetSound + "' to mappings '" + soundMapping.getBedrock() + + "' was not a playable level sound, or has yet to be mapped to an enum in SoundEvent."); + return; + } + + soundPacket.setSound(sound); + soundPacket.setPosition(position); + soundPacket.setIdentifier(soundMapping.getIdentifier()); + if (sound == SoundEvent.NOTE) { + // Minecraft Wiki: 2^(x/12) = Java pitch where x is -12 to 12 + // Java sends the note value as above starting with -12 and ending at 12 + // Bedrock has a number for each type of note, then proceeds up the scale by adding to that number + soundPacket.setExtraData(soundMapping.getExtraData() + (int)(Math.round((Math.log10(pitch) / Math.log10(2)) * 12)) + 12); + } else if (sound == SoundEvent.PLACE && soundMapping.getExtraData() == -1) { + if (!soundMapping.getIdentifier().equals(":")) { + int javaId = BlockRegistries.JAVA_IDENTIFIERS.getOrDefault(soundMapping.getIdentifier(), BlockStateValues.JAVA_AIR_ID); + soundPacket.setExtraData(session.getBlockMappings().getBedrockBlockId(javaId)); + } else { + session.getGeyser().getLogger().debug("PLACE sound mapping identifier was invalid! Please report: " + soundMapping); + } + soundPacket.setIdentifier(":"); + } else { + soundPacket.setExtraData(soundMapping.getExtraData()); + } + + soundPacket.setBabySound(false); // might need to adjust this in the future + soundPacket.setRelativeVolumeDisabled(false); + session.sendUpstreamPacket(soundPacket); + } + + private SoundUtils() { + } } diff --git a/core/src/main/resources/bedrock/biome_definitions.dat b/core/src/main/resources/bedrock/biome_definitions.dat index 1bd332601..0520c61e2 100644 Binary files a/core/src/main/resources/bedrock/biome_definitions.dat and b/core/src/main/resources/bedrock/biome_definitions.dat differ diff --git a/core/src/main/resources/bedrock/block_palette.1_18_0.nbt b/core/src/main/resources/bedrock/block_palette.1_18_0.nbt deleted file mode 100644 index 0415c135a..000000000 Binary files a/core/src/main/resources/bedrock/block_palette.1_18_0.nbt and /dev/null differ diff --git a/core/src/main/resources/bedrock/block_palette.1_18_10.nbt b/core/src/main/resources/bedrock/block_palette.1_18_10.nbt deleted file mode 100644 index 637bfc952..000000000 Binary files a/core/src/main/resources/bedrock/block_palette.1_18_10.nbt and /dev/null differ diff --git a/core/src/main/resources/bedrock/block_palette.1_18_30.nbt b/core/src/main/resources/bedrock/block_palette.1_18_30.nbt deleted file mode 100644 index bf7690970..000000000 Binary files a/core/src/main/resources/bedrock/block_palette.1_18_30.nbt and /dev/null differ diff --git a/core/src/main/resources/bedrock/block_palette.1_19_0.nbt b/core/src/main/resources/bedrock/block_palette.1_19_0.nbt new file mode 100644 index 000000000..8c095ad02 Binary files /dev/null and b/core/src/main/resources/bedrock/block_palette.1_19_0.nbt differ diff --git a/core/src/main/resources/bedrock/creative_items.1_18_0.json b/core/src/main/resources/bedrock/creative_items.1_18_0.json deleted file mode 100644 index d32ba0cbf..000000000 --- a/core/src/main/resources/bedrock/creative_items.1_18_0.json +++ /dev/null @@ -1,5206 +0,0 @@ -{ - "items" : [ - { - "id" : "minecraft:planks", - "blockRuntimeId" : 5797 - }, - { - "id" : "minecraft:planks", - "blockRuntimeId" : 5798 - }, - { - "id" : "minecraft:planks", - "blockRuntimeId" : 5799 - }, - { - "id" : "minecraft:planks", - "blockRuntimeId" : 5800 - }, - { - "id" : "minecraft:planks", - "blockRuntimeId" : 5801 - }, - { - "id" : "minecraft:planks", - "blockRuntimeId" : 5802 - }, - { - "id" : "minecraft:crimson_planks", - "blockRuntimeId" : 3840 - }, - { - "id" : "minecraft:warped_planks", - "blockRuntimeId" : 7598 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1319 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1320 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1321 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1322 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1323 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1324 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1331 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1326 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1327 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1325 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1328 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1332 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1329 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1330 - }, - { - "id" : "minecraft:blackstone_wall", - "blockRuntimeId" : 507 - }, - { - "id" : "minecraft:polished_blackstone_wall", - "blockRuntimeId" : 6041 - }, - { - "id" : "minecraft:polished_blackstone_brick_wall", - "blockRuntimeId" : 5838 - }, - { - "id" : "minecraft:cobbled_deepslate_wall", - "blockRuntimeId" : 1156 - }, - { - "id" : "minecraft:deepslate_tile_wall", - "blockRuntimeId" : 4298 - }, - { - "id" : "minecraft:polished_deepslate_wall", - "blockRuntimeId" : 6216 - }, - { - "id" : "minecraft:deepslate_brick_wall", - "blockRuntimeId" : 4115 - }, - { - "id" : "minecraft:fence", - "blockRuntimeId" : 4774 - }, - { - "id" : "minecraft:fence", - "blockRuntimeId" : 4775 - }, - { - "id" : "minecraft:fence", - "blockRuntimeId" : 4776 - }, - { - "id" : "minecraft:fence", - "blockRuntimeId" : 4777 - }, - { - "id" : "minecraft:fence", - "blockRuntimeId" : 4778 - }, - { - "id" : "minecraft:fence", - "blockRuntimeId" : 4779 - }, - { - "id" : "minecraft:nether_brick_fence", - "blockRuntimeId" : 5689 - }, - { - "id" : "minecraft:crimson_fence", - "blockRuntimeId" : 3818 - }, - { - "id" : "minecraft:warped_fence", - "blockRuntimeId" : 7576 - }, - { - "id" : "minecraft:fence_gate", - "blockRuntimeId" : 4780 - }, - { - "id" : "minecraft:spruce_fence_gate", - "blockRuntimeId" : 7010 - }, - { - "id" : "minecraft:birch_fence_gate", - "blockRuntimeId" : 400 - }, - { - "id" : "minecraft:jungle_fence_gate", - "blockRuntimeId" : 5253 - }, - { - "id" : "minecraft:acacia_fence_gate", - "blockRuntimeId" : 44 - }, - { - "id" : "minecraft:dark_oak_fence_gate", - "blockRuntimeId" : 3981 - }, - { - "id" : "minecraft:crimson_fence_gate", - "blockRuntimeId" : 3819 - }, - { - "id" : "minecraft:warped_fence_gate", - "blockRuntimeId" : 7577 - }, - { - "id" : "minecraft:normal_stone_stairs", - "blockRuntimeId" : 5708 - }, - { - "id" : "minecraft:stone_stairs", - "blockRuntimeId" : 7281 - }, - { - "id" : "minecraft:mossy_cobblestone_stairs", - "blockRuntimeId" : 5668 - }, - { - "id" : "minecraft:oak_stairs", - "blockRuntimeId" : 5717 - }, - { - "id" : "minecraft:spruce_stairs", - "blockRuntimeId" : 7042 - }, - { - "id" : "minecraft:birch_stairs", - "blockRuntimeId" : 432 - }, - { - "id" : "minecraft:jungle_stairs", - "blockRuntimeId" : 5285 - }, - { - "id" : "minecraft:acacia_stairs", - "blockRuntimeId" : 76 - }, - { - "id" : "minecraft:dark_oak_stairs", - "blockRuntimeId" : 4013 - }, - { - "id" : "minecraft:stone_brick_stairs", - "blockRuntimeId" : 7187 - }, - { - "id" : "minecraft:mossy_stone_brick_stairs", - "blockRuntimeId" : 5676 - }, - { - "id" : "minecraft:sandstone_stairs", - "blockRuntimeId" : 6710 - }, - { - "id" : "minecraft:smooth_sandstone_stairs", - "blockRuntimeId" : 6903 - }, - { - "id" : "minecraft:red_sandstone_stairs", - "blockRuntimeId" : 6637 - }, - { - "id" : "minecraft:smooth_red_sandstone_stairs", - "blockRuntimeId" : 6895 - }, - { - "id" : "minecraft:granite_stairs", - "blockRuntimeId" : 4989 - }, - { - "id" : "minecraft:polished_granite_stairs", - "blockRuntimeId" : 6386 - }, - { - "id" : "minecraft:diorite_stairs", - "blockRuntimeId" : 4476 - }, - { - "id" : "minecraft:polished_diorite_stairs", - "blockRuntimeId" : 6378 - }, - { - "id" : "minecraft:andesite_stairs", - "blockRuntimeId" : 144 - }, - { - "id" : "minecraft:polished_andesite_stairs", - "blockRuntimeId" : 5814 - }, - { - "id" : "minecraft:brick_stairs", - "blockRuntimeId" : 876 - }, - { - "id" : "minecraft:nether_brick_stairs", - "blockRuntimeId" : 5690 - }, - { - "id" : "minecraft:red_nether_brick_stairs", - "blockRuntimeId" : 6625 - }, - { - "id" : "minecraft:end_brick_stairs", - "blockRuntimeId" : 4720 - }, - { - "id" : "minecraft:quartz_stairs", - "blockRuntimeId" : 6559 - }, - { - "id" : "minecraft:smooth_quartz_stairs", - "blockRuntimeId" : 6887 - }, - { - "id" : "minecraft:purpur_stairs", - "blockRuntimeId" : 6537 - }, - { - "id" : "minecraft:prismarine_stairs", - "blockRuntimeId" : 6449 - }, - { - "id" : "minecraft:dark_prismarine_stairs", - "blockRuntimeId" : 4037 - }, - { - "id" : "minecraft:prismarine_bricks_stairs", - "blockRuntimeId" : 6441 - }, - { - "id" : "minecraft:crimson_stairs", - "blockRuntimeId" : 3860 - }, - { - "id" : "minecraft:warped_stairs", - "blockRuntimeId" : 7618 - }, - { - "id" : "minecraft:blackstone_stairs", - "blockRuntimeId" : 499 - }, - { - "id" : "minecraft:polished_blackstone_stairs", - "blockRuntimeId" : 6033 - }, - { - "id" : "minecraft:polished_blackstone_brick_stairs", - "blockRuntimeId" : 5830 - }, - { - "id" : "minecraft:cut_copper_stairs", - "blockRuntimeId" : 3913 - }, - { - "id" : "minecraft:exposed_cut_copper_stairs", - "blockRuntimeId" : 4756 - }, - { - "id" : "minecraft:weathered_cut_copper_stairs", - "blockRuntimeId" : 7745 - }, - { - "id" : "minecraft:oxidized_cut_copper_stairs", - "blockRuntimeId" : 5758 - }, - { - "id" : "minecraft:waxed_cut_copper_stairs", - "blockRuntimeId" : 7689 - }, - { - "id" : "minecraft:waxed_exposed_cut_copper_stairs", - "blockRuntimeId" : 7703 - }, - { - "id" : "minecraft:waxed_weathered_cut_copper_stairs", - "blockRuntimeId" : 7731 - }, - { - "id" : "minecraft:waxed_oxidized_cut_copper_stairs", - "blockRuntimeId" : 7717 - }, - { - "id" : "minecraft:cobbled_deepslate_stairs", - "blockRuntimeId" : 1148 - }, - { - "id" : "minecraft:deepslate_tile_stairs", - "blockRuntimeId" : 4290 - }, - { - "id" : "minecraft:polished_deepslate_stairs", - "blockRuntimeId" : 6208 - }, - { - "id" : "minecraft:deepslate_brick_stairs", - "blockRuntimeId" : 4107 - }, - { - "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:iron_door" - }, - { - "id" : "minecraft:crimson_door" - }, - { - "id" : "minecraft:warped_door" - }, - { - "id" : "minecraft:trapdoor", - "blockRuntimeId" : 7363 - }, - { - "id" : "minecraft:spruce_trapdoor", - "blockRuntimeId" : 7066 - }, - { - "id" : "minecraft:birch_trapdoor", - "blockRuntimeId" : 456 - }, - { - "id" : "minecraft:jungle_trapdoor", - "blockRuntimeId" : 5309 - }, - { - "id" : "minecraft:acacia_trapdoor", - "blockRuntimeId" : 100 - }, - { - "id" : "minecraft:dark_oak_trapdoor", - "blockRuntimeId" : 4021 - }, - { - "id" : "minecraft:iron_trapdoor", - "blockRuntimeId" : 5168 - }, - { - "id" : "minecraft:crimson_trapdoor", - "blockRuntimeId" : 3887 - }, - { - "id" : "minecraft:warped_trapdoor", - "blockRuntimeId" : 7645 - }, - { - "id" : "minecraft:iron_bars", - "blockRuntimeId" : 5133 - }, - { - "id" : "minecraft:glass", - "blockRuntimeId" : 4883 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7088 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7096 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7095 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7103 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7100 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7102 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7089 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7092 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7093 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7101 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7097 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7091 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7099 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7098 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7090 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7094 - }, - { - "id" : "minecraft:tinted_glass", - "blockRuntimeId" : 7352 - }, - { - "id" : "minecraft:glass_pane", - "blockRuntimeId" : 4884 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7104 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7112 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7111 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7119 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7116 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7118 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7105 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7108 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7109 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7117 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7113 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7107 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7115 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7114 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7106 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7110 - }, - { - "id" : "minecraft:ladder", - "blockRuntimeId" : 5357 - }, - { - "id" : "minecraft:scaffolding", - "blockRuntimeId" : 6730 - }, - { - "id" : "minecraft:double_stone_slab", - "blockRuntimeId" : 7223 - }, - { - "id" : "minecraft:double_stone_slab4", - "blockRuntimeId" : 7273 - }, - { - "id" : "minecraft:double_stone_slab", - "blockRuntimeId" : 7226 - }, - { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 7244 - }, - { - "id" : "minecraft:wooden_slab", - "blockRuntimeId" : 7903 - }, - { - "id" : "minecraft:wooden_slab", - "blockRuntimeId" : 7904 - }, - { - "id" : "minecraft:wooden_slab", - "blockRuntimeId" : 7905 - }, - { - "id" : "minecraft:wooden_slab", - "blockRuntimeId" : 7906 - }, - { - "id" : "minecraft:wooden_slab", - "blockRuntimeId" : 7907 - }, - { - "id" : "minecraft:wooden_slab", - "blockRuntimeId" : 7908 - }, - { - "id" : "minecraft:double_stone_slab", - "blockRuntimeId" : 7228 - }, - { - "id" : "minecraft:double_stone_slab4", - "blockRuntimeId" : 7271 - }, - { - "id" : "minecraft:double_stone_slab", - "blockRuntimeId" : 7224 - }, - { - "id" : "minecraft:double_stone_slab4", - "blockRuntimeId" : 7274 - }, - { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 7245 - }, - { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 7239 - }, - { - "id" : "minecraft:double_stone_slab4", - "blockRuntimeId" : 7275 - }, - { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 7256 - }, - { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 7261 - }, - { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 7262 - }, - { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 7259 - }, - { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 7260 - }, - { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 7258 - }, - { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 7257 - }, - { - "id" : "minecraft:double_stone_slab", - "blockRuntimeId" : 7227 - }, - { - "id" : "minecraft:double_stone_slab", - "blockRuntimeId" : 7230 - }, - { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 7246 - }, - { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 7255 - }, - { - "id" : "minecraft:double_stone_slab", - "blockRuntimeId" : 7229 - }, - { - "id" : "minecraft:double_stone_slab4", - "blockRuntimeId" : 7272 - }, - { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 7240 - }, - { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 7241 - }, - { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 7242 - }, - { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 7243 - }, - { - "id" : "minecraft:crimson_slab", - "blockRuntimeId" : 3858 - }, - { - "id" : "minecraft:warped_slab", - "blockRuntimeId" : 7616 - }, - { - "id" : "minecraft:blackstone_slab", - "blockRuntimeId" : 497 - }, - { - "id" : "minecraft:polished_blackstone_slab", - "blockRuntimeId" : 6031 - }, - { - "id" : "minecraft:polished_blackstone_brick_slab", - "blockRuntimeId" : 5828 - }, - { - "id" : "minecraft:cut_copper_slab", - "blockRuntimeId" : 3911 - }, - { - "id" : "minecraft:exposed_cut_copper_slab", - "blockRuntimeId" : 4754 - }, - { - "id" : "minecraft:weathered_cut_copper_slab", - "blockRuntimeId" : 7743 - }, - { - "id" : "minecraft:oxidized_cut_copper_slab", - "blockRuntimeId" : 5756 - }, - { - "id" : "minecraft:waxed_cut_copper_slab", - "blockRuntimeId" : 7687 - }, - { - "id" : "minecraft:waxed_exposed_cut_copper_slab", - "blockRuntimeId" : 7701 - }, - { - "id" : "minecraft:waxed_weathered_cut_copper_slab", - "blockRuntimeId" : 7729 - }, - { - "id" : "minecraft:waxed_oxidized_cut_copper_slab", - "blockRuntimeId" : 7715 - }, - { - "id" : "minecraft:cobbled_deepslate_slab", - "blockRuntimeId" : 1146 - }, - { - "id" : "minecraft:polished_deepslate_slab", - "blockRuntimeId" : 6206 - }, - { - "id" : "minecraft:deepslate_tile_slab", - "blockRuntimeId" : 4288 - }, - { - "id" : "minecraft:deepslate_brick_slab", - "blockRuntimeId" : 4105 - }, - { - "id" : "minecraft:brick_block", - "blockRuntimeId" : 875 - }, - { - "id" : "minecraft:chiseled_nether_bricks", - "blockRuntimeId" : 1130 - }, - { - "id" : "minecraft:cracked_nether_bricks", - "blockRuntimeId" : 3769 - }, - { - "id" : "minecraft:quartz_bricks", - "blockRuntimeId" : 6557 - }, - { - "id" : "minecraft:stonebrick", - "blockRuntimeId" : 7289 - }, - { - "id" : "minecraft:stonebrick", - "blockRuntimeId" : 7290 - }, - { - "id" : "minecraft:stonebrick", - "blockRuntimeId" : 7291 - }, - { - "id" : "minecraft:stonebrick", - "blockRuntimeId" : 7292 - }, - { - "id" : "minecraft:end_bricks", - "blockRuntimeId" : 4728 - }, - { - "id" : "minecraft:prismarine", - "blockRuntimeId" : 6440 - }, - { - "id" : "minecraft:polished_blackstone_bricks", - "blockRuntimeId" : 6000 - }, - { - "id" : "minecraft:cracked_polished_blackstone_bricks", - "blockRuntimeId" : 3770 - }, - { - "id" : "minecraft:gilded_blackstone", - "blockRuntimeId" : 4882 - }, - { - "id" : "minecraft:chiseled_polished_blackstone", - "blockRuntimeId" : 1131 - }, - { - "id" : "minecraft:deepslate_tiles", - "blockRuntimeId" : 4460 - }, - { - "id" : "minecraft:cracked_deepslate_tiles", - "blockRuntimeId" : 3768 - }, - { - "id" : "minecraft:deepslate_bricks", - "blockRuntimeId" : 4277 - }, - { - "id" : "minecraft:cracked_deepslate_bricks", - "blockRuntimeId" : 3767 - }, - { - "id" : "minecraft:chiseled_deepslate", - "blockRuntimeId" : 1129 - }, - { - "id" : "minecraft:cobblestone", - "blockRuntimeId" : 1318 - }, - { - "id" : "minecraft:mossy_cobblestone", - "blockRuntimeId" : 5667 - }, - { - "id" : "minecraft:cobbled_deepslate", - "blockRuntimeId" : 1143 - }, - { - "id" : "minecraft:smooth_stone", - "blockRuntimeId" : 6911 - }, - { - "id" : "minecraft:sandstone", - "blockRuntimeId" : 6706 - }, - { - "id" : "minecraft:sandstone", - "blockRuntimeId" : 6707 - }, - { - "id" : "minecraft:sandstone", - "blockRuntimeId" : 6708 - }, - { - "id" : "minecraft:sandstone", - "blockRuntimeId" : 6709 - }, - { - "id" : "minecraft:red_sandstone", - "blockRuntimeId" : 6633 - }, - { - "id" : "minecraft:red_sandstone", - "blockRuntimeId" : 6634 - }, - { - "id" : "minecraft:red_sandstone", - "blockRuntimeId" : 6635 - }, - { - "id" : "minecraft:red_sandstone", - "blockRuntimeId" : 6636 - }, - { - "id" : "minecraft:coal_block", - "blockRuntimeId" : 1141 - }, - { - "id" : "minecraft:dried_kelp_block", - "blockRuntimeId" : 4584 - }, - { - "id" : "minecraft:gold_block", - "blockRuntimeId" : 4975 - }, - { - "id" : "minecraft:iron_block", - "blockRuntimeId" : 5134 - }, - { - "id" : "minecraft:copper_block", - "blockRuntimeId" : 3677 - }, - { - "id" : "minecraft:exposed_copper", - "blockRuntimeId" : 4752 - }, - { - "id" : "minecraft:weathered_copper", - "blockRuntimeId" : 7741 - }, - { - "id" : "minecraft:oxidized_copper", - "blockRuntimeId" : 5754 - }, - { - "id" : "minecraft:waxed_copper", - "blockRuntimeId" : 7685 - }, - { - "id" : "minecraft:waxed_exposed_copper", - "blockRuntimeId" : 7699 - }, - { - "id" : "minecraft:waxed_weathered_copper", - "blockRuntimeId" : 7727 - }, - { - "id" : "minecraft:waxed_oxidized_copper", - "blockRuntimeId" : 7713 - }, - { - "id" : "minecraft:cut_copper", - "blockRuntimeId" : 3910 - }, - { - "id" : "minecraft:exposed_cut_copper", - "blockRuntimeId" : 4753 - }, - { - "id" : "minecraft:weathered_cut_copper", - "blockRuntimeId" : 7742 - }, - { - "id" : "minecraft:oxidized_cut_copper", - "blockRuntimeId" : 5755 - }, - { - "id" : "minecraft:waxed_cut_copper", - "blockRuntimeId" : 7686 - }, - { - "id" : "minecraft:waxed_exposed_cut_copper", - "blockRuntimeId" : 7700 - }, - { - "id" : "minecraft:waxed_weathered_cut_copper", - "blockRuntimeId" : 7728 - }, - { - "id" : "minecraft:waxed_oxidized_cut_copper", - "blockRuntimeId" : 7714 - }, - { - "id" : "minecraft:emerald_block", - "blockRuntimeId" : 4717 - }, - { - "id" : "minecraft:diamond_block", - "blockRuntimeId" : 4474 - }, - { - "id" : "minecraft:lapis_block", - "blockRuntimeId" : 5365 - }, - { - "id" : "minecraft:raw_iron_block", - "blockRuntimeId" : 6579 - }, - { - "id" : "minecraft:raw_copper_block", - "blockRuntimeId" : 6577 - }, - { - "id" : "minecraft:raw_gold_block", - "blockRuntimeId" : 6578 - }, - { - "id" : "minecraft:quartz_block", - "blockRuntimeId" : 6545 - }, - { - "id" : "minecraft:quartz_block", - "blockRuntimeId" : 6547 - }, - { - "id" : "minecraft:quartz_block", - "blockRuntimeId" : 6546 - }, - { - "id" : "minecraft:quartz_block", - "blockRuntimeId" : 6548 - }, - { - "id" : "minecraft:prismarine", - "blockRuntimeId" : 6438 - }, - { - "id" : "minecraft:prismarine", - "blockRuntimeId" : 6439 - }, - { - "id" : "minecraft:slime", - "blockRuntimeId" : 6864 - }, - { - "id" : "minecraft:honey_block", - "blockRuntimeId" : 5112 - }, - { - "id" : "minecraft:honeycomb_block", - "blockRuntimeId" : 5113 - }, - { - "id" : "minecraft:hay_block", - "blockRuntimeId" : 5084 - }, - { - "id" : "minecraft:bone_block", - "blockRuntimeId" : 692 - }, - { - "id" : "minecraft:nether_brick", - "blockRuntimeId" : 5688 - }, - { - "id" : "minecraft:red_nether_brick", - "blockRuntimeId" : 6624 - }, - { - "id" : "minecraft:netherite_block", - "blockRuntimeId" : 5705 - }, - { - "id" : "minecraft:lodestone", - "blockRuntimeId" : 5563 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7915 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7923 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7922 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7930 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7927 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7929 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7916 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7919 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7920 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7928 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7924 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7918 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7926 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7925 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7917 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7921 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 963 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 971 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 970 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 978 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 975 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 977 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 964 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 967 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 968 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 976 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 972 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 966 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 974 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 973 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 965 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 969 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3660 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3668 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3667 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3675 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3672 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3674 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3661 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3664 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3665 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3673 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3669 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3663 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3671 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3670 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3662 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3666 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3644 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3652 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3651 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3659 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3656 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3658 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3645 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3648 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3649 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3657 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3653 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3647 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3655 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3654 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3646 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3650 - }, - { - "id" : "minecraft:clay", - "blockRuntimeId" : 1139 - }, - { - "id" : "minecraft:hardened_clay", - "blockRuntimeId" : 5083 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7120 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7128 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7127 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7135 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7132 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7134 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7121 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7124 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7125 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7133 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7129 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7123 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7131 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7130 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7122 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7126 - }, - { - "id" : "minecraft:white_glazed_terracotta", - "blockRuntimeId" : 7800 - }, - { - "id" : "minecraft:silver_glazed_terracotta", - "blockRuntimeId" : 6846 - }, - { - "id" : "minecraft:gray_glazed_terracotta", - "blockRuntimeId" : 5010 - }, - { - "id" : "minecraft:black_glazed_terracotta", - "blockRuntimeId" : 488 - }, - { - "id" : "minecraft:brown_glazed_terracotta", - "blockRuntimeId" : 894 - }, - { - "id" : "minecraft:red_glazed_terracotta", - "blockRuntimeId" : 6601 - }, - { - "id" : "minecraft:orange_glazed_terracotta", - "blockRuntimeId" : 5748 - }, - { - "id" : "minecraft:yellow_glazed_terracotta", - "blockRuntimeId" : 7942 - }, - { - "id" : "minecraft:lime_glazed_terracotta", - "blockRuntimeId" : 5532 - }, - { - "id" : "minecraft:green_glazed_terracotta", - "blockRuntimeId" : 5026 - }, - { - "id" : "minecraft:cyan_glazed_terracotta", - "blockRuntimeId" : 3931 - }, - { - "id" : "minecraft:light_blue_glazed_terracotta", - "blockRuntimeId" : 5484 - }, - { - "id" : "minecraft:blue_glazed_terracotta", - "blockRuntimeId" : 685 - }, - { - "id" : "minecraft:purple_glazed_terracotta", - "blockRuntimeId" : 6519 - }, - { - "id" : "minecraft:magenta_glazed_terracotta", - "blockRuntimeId" : 5596 - }, - { - "id" : "minecraft:pink_glazed_terracotta", - "blockRuntimeId" : 5779 - }, - { - "id" : "minecraft:purpur_block", - "blockRuntimeId" : 6525 - }, - { - "id" : "minecraft:purpur_block", - "blockRuntimeId" : 6527 - }, - { - "id" : "minecraft:nether_wart_block", - "blockRuntimeId" : 5704 - }, - { - "id" : "minecraft:warped_wart_block", - "blockRuntimeId" : 7667 - }, - { - "id" : "minecraft:shroomlight", - "blockRuntimeId" : 6829 - }, - { - "id" : "minecraft:crimson_nylium", - "blockRuntimeId" : 3839 - }, - { - "id" : "minecraft:warped_nylium", - "blockRuntimeId" : 7597 - }, - { - "id" : "minecraft:basalt", - "blockRuntimeId" : 214 - }, - { - "id" : "minecraft:polished_basalt", - "blockRuntimeId" : 5822 - }, - { - "id" : "minecraft:smooth_basalt", - "blockRuntimeId" : 6886 - }, - { - "id" : "minecraft:soul_soil", - "blockRuntimeId" : 6956 - }, - { - "id" : "minecraft:dirt", - "blockRuntimeId" : 4484 - }, - { - "id" : "minecraft:dirt", - "blockRuntimeId" : 4485 - }, - { - "id" : "minecraft:farmland", - "blockRuntimeId" : 4766 - }, - { - "id" : "minecraft:grass", - "blockRuntimeId" : 4997 - }, - { - "id" : "minecraft:grass_path", - "blockRuntimeId" : 4998 - }, - { - "id" : "minecraft:podzol", - "blockRuntimeId" : 5803 - }, - { - "id" : "minecraft:mycelium", - "blockRuntimeId" : 5685 - }, - { - "id" : "minecraft:stone", - "blockRuntimeId" : 7180 - }, - { - "id" : "minecraft:iron_ore", - "blockRuntimeId" : 5167 - }, - { - "id" : "minecraft:gold_ore", - "blockRuntimeId" : 4976 - }, - { - "id" : "minecraft:diamond_ore", - "blockRuntimeId" : 4475 - }, - { - "id" : "minecraft:lapis_ore", - "blockRuntimeId" : 5366 - }, - { - "id" : "minecraft:redstone_ore", - "blockRuntimeId" : 6647 - }, - { - "id" : "minecraft:coal_ore", - "blockRuntimeId" : 1142 - }, - { - "id" : "minecraft:copper_ore", - "blockRuntimeId" : 3678 - }, - { - "id" : "minecraft:emerald_ore", - "blockRuntimeId" : 4718 - }, - { - "id" : "minecraft:quartz_ore", - "blockRuntimeId" : 6558 - }, - { - "id" : "minecraft:nether_gold_ore", - "blockRuntimeId" : 5698 - }, - { - "id" : "minecraft:ancient_debris", - "blockRuntimeId" : 143 - }, - { - "id" : "minecraft:deepslate_iron_ore", - "blockRuntimeId" : 4283 - }, - { - "id" : "minecraft:deepslate_gold_ore", - "blockRuntimeId" : 4282 - }, - { - "id" : "minecraft:deepslate_diamond_ore", - "blockRuntimeId" : 4280 - }, - { - "id" : "minecraft:deepslate_lapis_ore", - "blockRuntimeId" : 4284 - }, - { - "id" : "minecraft:deepslate_redstone_ore", - "blockRuntimeId" : 4285 - }, - { - "id" : "minecraft:deepslate_emerald_ore", - "blockRuntimeId" : 4281 - }, - { - "id" : "minecraft:deepslate_coal_ore", - "blockRuntimeId" : 4278 - }, - { - "id" : "minecraft:deepslate_copper_ore", - "blockRuntimeId" : 4279 - }, - { - "id" : "minecraft:gravel", - "blockRuntimeId" : 4999 - }, - { - "id" : "minecraft:stone", - "blockRuntimeId" : 7181 - }, - { - "id" : "minecraft:stone", - "blockRuntimeId" : 7183 - }, - { - "id" : "minecraft:stone", - "blockRuntimeId" : 7185 - }, - { - "id" : "minecraft:blackstone", - "blockRuntimeId" : 494 - }, - { - "id" : "minecraft:deepslate", - "blockRuntimeId" : 4100 - }, - { - "id" : "minecraft:stone", - "blockRuntimeId" : 7182 - }, - { - "id" : "minecraft:stone", - "blockRuntimeId" : 7184 - }, - { - "id" : "minecraft:stone", - "blockRuntimeId" : 7186 - }, - { - "id" : "minecraft:polished_blackstone", - "blockRuntimeId" : 5825 - }, - { - "id" : "minecraft:polished_deepslate", - "blockRuntimeId" : 6203 - }, - { - "id" : "minecraft:sand", - "blockRuntimeId" : 6704 - }, - { - "id" : "minecraft:sand", - "blockRuntimeId" : 6705 - }, - { - "id" : "minecraft:cactus", - "blockRuntimeId" : 920 - }, - { - "id" : "minecraft:log", - "blockRuntimeId" : 5564 - }, - { - "id" : "minecraft:stripped_oak_log", - "blockRuntimeId" : 7319 - }, - { - "id" : "minecraft:log", - "blockRuntimeId" : 5565 - }, - { - "id" : "minecraft:stripped_spruce_log", - "blockRuntimeId" : 7322 - }, - { - "id" : "minecraft:log", - "blockRuntimeId" : 5566 - }, - { - "id" : "minecraft:stripped_birch_log", - "blockRuntimeId" : 7304 - }, - { - "id" : "minecraft:log", - "blockRuntimeId" : 5567 - }, - { - "id" : "minecraft:stripped_jungle_log", - "blockRuntimeId" : 7316 - }, - { - "id" : "minecraft:log2", - "blockRuntimeId" : 5576 - }, - { - "id" : "minecraft:stripped_acacia_log", - "blockRuntimeId" : 7301 - }, - { - "id" : "minecraft:log2", - "blockRuntimeId" : 5577 - }, - { - "id" : "minecraft:stripped_dark_oak_log", - "blockRuntimeId" : 7313 - }, - { - "id" : "minecraft:crimson_stem", - "blockRuntimeId" : 3884 - }, - { - "id" : "minecraft:stripped_crimson_stem", - "blockRuntimeId" : 7310 - }, - { - "id" : "minecraft:warped_stem", - "blockRuntimeId" : 7642 - }, - { - "id" : "minecraft:stripped_warped_stem", - "blockRuntimeId" : 7328 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7807 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7813 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7808 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7814 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7809 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7815 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7810 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7816 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7811 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7817 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7812 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7818 - }, - { - "id" : "minecraft:crimson_hyphae", - "blockRuntimeId" : 3836 - }, - { - "id" : "minecraft:stripped_crimson_hyphae", - "blockRuntimeId" : 7307 - }, - { - "id" : "minecraft:warped_hyphae", - "blockRuntimeId" : 7594 - }, - { - "id" : "minecraft:stripped_warped_hyphae", - "blockRuntimeId" : 7325 - }, - { - "id" : "minecraft:leaves", - "blockRuntimeId" : 5410 - }, - { - "id" : "minecraft:leaves", - "blockRuntimeId" : 5411 - }, - { - "id" : "minecraft:leaves", - "blockRuntimeId" : 5412 - }, - { - "id" : "minecraft:leaves", - "blockRuntimeId" : 5413 - }, - { - "id" : "minecraft:leaves2", - "blockRuntimeId" : 5426 - }, - { - "id" : "minecraft:leaves2", - "blockRuntimeId" : 5427 - }, - { - "id" : "minecraft:azalea_leaves", - "blockRuntimeId" : 169 - }, - { - "id" : "minecraft:azalea_leaves_flowered", - "blockRuntimeId" : 173 - }, - { - "id" : "minecraft:sapling", - "blockRuntimeId" : 6718 - }, - { - "id" : "minecraft:sapling", - "blockRuntimeId" : 6719 - }, - { - "id" : "minecraft:sapling", - "blockRuntimeId" : 6720 - }, - { - "id" : "minecraft:sapling", - "blockRuntimeId" : 6721 - }, - { - "id" : "minecraft:sapling", - "blockRuntimeId" : 6722 - }, - { - "id" : "minecraft:sapling", - "blockRuntimeId" : 6723 - }, - { - "id" : "minecraft:bee_nest", - "blockRuntimeId" : 236 - }, - { - "id" : "minecraft:wheat_seeds" - }, - { - "id" : "minecraft:pumpkin_seeds" - }, - { - "id" : "minecraft:melon_seeds" - }, - { - "id" : "minecraft:beetroot_seeds" - }, - { - "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", - "blockRuntimeId" : 5609 - }, - { - "id" : "minecraft:melon_slice" - }, - { - "id" : "minecraft:glistering_melon_slice" - }, - { - "id" : "minecraft:sweet_berries" - }, - { - "id" : "minecraft:glow_berries" - }, - { - "id" : "minecraft:pumpkin", - "blockRuntimeId" : 6457 - }, - { - "id" : "minecraft:carved_pumpkin", - "blockRuntimeId" : 988 - }, - { - "id" : "minecraft:lit_pumpkin", - "blockRuntimeId" : 5551 - }, - { - "id" : "minecraft:honeycomb" - }, - { - "id" : "minecraft:tallgrass", - "blockRuntimeId" : 7349 - }, - { - "id" : "minecraft:double_plant", - "blockRuntimeId" : 4504 - }, - { - "id" : "minecraft:tallgrass", - "blockRuntimeId" : 7348 - }, - { - "id" : "minecraft:double_plant", - "blockRuntimeId" : 4503 - }, - { - "id" : "minecraft:nether_sprouts" - }, - { - "id" : "minecraft:coral", - "blockRuntimeId" : 3682 - }, - { - "id" : "minecraft:coral", - "blockRuntimeId" : 3680 - }, - { - "id" : "minecraft:coral", - "blockRuntimeId" : 3681 - }, - { - "id" : "minecraft:coral", - "blockRuntimeId" : 3679 - }, - { - "id" : "minecraft:coral", - "blockRuntimeId" : 3683 - }, - { - "id" : "minecraft:coral", - "blockRuntimeId" : 3687 - }, - { - "id" : "minecraft:coral", - "blockRuntimeId" : 3685 - }, - { - "id" : "minecraft:coral", - "blockRuntimeId" : 3686 - }, - { - "id" : "minecraft:coral", - "blockRuntimeId" : 3684 - }, - { - "id" : "minecraft:coral", - "blockRuntimeId" : 3688 - }, - { - "id" : "minecraft:coral_fan", - "blockRuntimeId" : 3702 - }, - { - "id" : "minecraft:coral_fan", - "blockRuntimeId" : 3700 - }, - { - "id" : "minecraft:coral_fan", - "blockRuntimeId" : 3701 - }, - { - "id" : "minecraft:coral_fan", - "blockRuntimeId" : 3699 - }, - { - "id" : "minecraft:coral_fan", - "blockRuntimeId" : 3703 - }, - { - "id" : "minecraft:coral_fan_dead", - "blockRuntimeId" : 3712 - }, - { - "id" : "minecraft:coral_fan_dead", - "blockRuntimeId" : 3710 - }, - { - "id" : "minecraft:coral_fan_dead", - "blockRuntimeId" : 3711 - }, - { - "id" : "minecraft:coral_fan_dead", - "blockRuntimeId" : 3709 - }, - { - "id" : "minecraft:coral_fan_dead", - "blockRuntimeId" : 3713 - }, - { - "id" : "minecraft:kelp" - }, - { - "id" : "minecraft:seagrass", - "blockRuntimeId" : 6825 - }, - { - "id" : "minecraft:crimson_roots", - "blockRuntimeId" : 3857 - }, - { - "id" : "minecraft:warped_roots", - "blockRuntimeId" : 7615 - }, - { - "id" : "minecraft:yellow_flower", - "blockRuntimeId" : 7941 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 6590 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 6591 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 6592 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 6593 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 6594 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 6595 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 6596 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 6597 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 6598 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 6599 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 6600 - }, - { - "id" : "minecraft:double_plant", - "blockRuntimeId" : 4501 - }, - { - "id" : "minecraft:double_plant", - "blockRuntimeId" : 4502 - }, - { - "id" : "minecraft:double_plant", - "blockRuntimeId" : 4505 - }, - { - "id" : "minecraft:double_plant", - "blockRuntimeId" : 4506 - }, - { - "id" : "minecraft:wither_rose", - "blockRuntimeId" : 7806 - }, - { - "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", - "blockRuntimeId" : 7502 - }, - { - "id" : "minecraft:weeping_vines", - "blockRuntimeId" : 7756 - }, - { - "id" : "minecraft:twisting_vines", - "blockRuntimeId" : 7430 - }, - { - "id" : "minecraft:waterlily", - "blockRuntimeId" : 7684 - }, - { - "id" : "minecraft:deadbush", - "blockRuntimeId" : 4099 - }, - { - "id" : "minecraft:bamboo", - "blockRuntimeId" : 177 - }, - { - "id" : "minecraft:snow", - "blockRuntimeId" : 6912 - }, - { - "id" : "minecraft:ice", - "blockRuntimeId" : 5126 - }, - { - "id" : "minecraft:packed_ice", - "blockRuntimeId" : 5768 - }, - { - "id" : "minecraft:blue_ice", - "blockRuntimeId" : 691 - }, - { - "id" : "minecraft:snow_layer", - "blockRuntimeId" : 6913 - }, - { - "id" : "minecraft:pointed_dripstone", - "blockRuntimeId" : 5809 - }, - { - "id" : "minecraft:dripstone_block", - "blockRuntimeId" : 4585 - }, - { - "id" : "minecraft:moss_carpet", - "blockRuntimeId" : 5666 - }, - { - "id" : "minecraft:moss_block", - "blockRuntimeId" : 5665 - }, - { - "id" : "minecraft:dirt_with_roots", - "blockRuntimeId" : 4486 - }, - { - "id" : "minecraft:hanging_roots", - "blockRuntimeId" : 5048 - }, - { - "id" : "minecraft:big_dripleaf", - "blockRuntimeId" : 328 - }, - { - "id" : "minecraft:small_dripleaf_block", - "blockRuntimeId" : 6878 - }, - { - "id" : "minecraft:spore_blossom", - "blockRuntimeId" : 6965 - }, - { - "id" : "minecraft:azalea", - "blockRuntimeId" : 168 - }, - { - "id" : "minecraft:flowering_azalea", - "blockRuntimeId" : 4815 - }, - { - "id" : "minecraft:glow_lichen", - "blockRuntimeId" : 4972 - }, - { - "id" : "minecraft:amethyst_block", - "blockRuntimeId" : 136 - }, - { - "id" : "minecraft:budding_amethyst", - "blockRuntimeId" : 919 - }, - { - "id" : "minecraft:amethyst_cluster", - "blockRuntimeId" : 137 - }, - { - "id" : "minecraft:large_amethyst_bud", - "blockRuntimeId" : 5367 - }, - { - "id" : "minecraft:medium_amethyst_bud", - "blockRuntimeId" : 5603 - }, - { - "id" : "minecraft:small_amethyst_bud", - "blockRuntimeId" : 6865 - }, - { - "id" : "minecraft:tuff", - "blockRuntimeId" : 7417 - }, - { - "id" : "minecraft:calcite", - "blockRuntimeId" : 943 - }, - { - "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", - "blockRuntimeId" : 900 - }, - { - "id" : "minecraft:red_mushroom", - "blockRuntimeId" : 6607 - }, - { - "id" : "minecraft:crimson_fungus", - "blockRuntimeId" : 3835 - }, - { - "id" : "minecraft:warped_fungus", - "blockRuntimeId" : 7593 - }, - { - "id" : "minecraft:brown_mushroom_block", - "blockRuntimeId" : 915 - }, - { - "id" : "minecraft:red_mushroom_block", - "blockRuntimeId" : 6622 - }, - { - "id" : "minecraft:brown_mushroom_block", - "blockRuntimeId" : 916 - }, - { - "id" : "minecraft:brown_mushroom_block", - "blockRuntimeId" : 901 - }, - { - "id" : "minecraft:egg" - }, - { - "id" : "minecraft:sugar_cane" - }, - { - "id" : "minecraft:sugar" - }, - { - "id" : "minecraft:rotten_flesh" - }, - { - "id" : "minecraft:bone" - }, - { - "id" : "minecraft:web", - "blockRuntimeId" : 7755 - }, - { - "id" : "minecraft:spider_eye" - }, - { - "id" : "minecraft:mob_spawner", - "blockRuntimeId" : 5658 - }, - { - "id" : "minecraft:monster_egg", - "blockRuntimeId" : 5659 - }, - { - "id" : "minecraft:monster_egg", - "blockRuntimeId" : 5660 - }, - { - "id" : "minecraft:monster_egg", - "blockRuntimeId" : 5661 - }, - { - "id" : "minecraft:monster_egg", - "blockRuntimeId" : 5662 - }, - { - "id" : "minecraft:monster_egg", - "blockRuntimeId" : 5663 - }, - { - "id" : "minecraft:monster_egg", - "blockRuntimeId" : 5664 - }, - { - "id" : "minecraft:infested_deepslate", - "blockRuntimeId" : 5127 - }, - { - "id" : "minecraft:dragon_egg", - "blockRuntimeId" : 4583 - }, - { - "id" : "minecraft:turtle_egg", - "blockRuntimeId" : 7418 - }, - { - "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: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:obsidian", - "blockRuntimeId" : 5737 - }, - { - "id" : "minecraft:crying_obsidian", - "blockRuntimeId" : 3909 - }, - { - "id" : "minecraft:bedrock", - "blockRuntimeId" : 234 - }, - { - "id" : "minecraft:soul_sand", - "blockRuntimeId" : 6955 - }, - { - "id" : "minecraft:netherrack", - "blockRuntimeId" : 5706 - }, - { - "id" : "minecraft:magma", - "blockRuntimeId" : 5602 - }, - { - "id" : "minecraft:nether_wart" - }, - { - "id" : "minecraft:end_stone", - "blockRuntimeId" : 4745 - }, - { - "id" : "minecraft:chorus_flower", - "blockRuntimeId" : 1132 - }, - { - "id" : "minecraft:chorus_plant", - "blockRuntimeId" : 1138 - }, - { - "id" : "minecraft:chorus_fruit" - }, - { - "id" : "minecraft:popped_chorus_fruit" - }, - { - "id" : "minecraft:sponge", - "blockRuntimeId" : 6963 - }, - { - "id" : "minecraft:sponge", - "blockRuntimeId" : 6964 - }, - { - "id" : "minecraft:coral_block", - "blockRuntimeId" : 3689 - }, - { - "id" : "minecraft:coral_block", - "blockRuntimeId" : 3690 - }, - { - "id" : "minecraft:coral_block", - "blockRuntimeId" : 3691 - }, - { - "id" : "minecraft:coral_block", - "blockRuntimeId" : 3692 - }, - { - "id" : "minecraft:coral_block", - "blockRuntimeId" : 3693 - }, - { - "id" : "minecraft:coral_block", - "blockRuntimeId" : 3694 - }, - { - "id" : "minecraft:coral_block", - "blockRuntimeId" : 3695 - }, - { - "id" : "minecraft:coral_block", - "blockRuntimeId" : 3696 - }, - { - "id" : "minecraft:coral_block", - "blockRuntimeId" : 3697 - }, - { - "id" : "minecraft:coral_block", - "blockRuntimeId" : 3698 - }, - { - "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:empty_map" - }, - { - "id" : "minecraft:empty_map", - "damage" : 2 - }, - { - "id" : "minecraft:saddle" - }, - { - "id" : "minecraft:leather_horse_armor" - }, - { - "id" : "minecraft:iron_horse_armor" - }, - { - "id" : "minecraft:golden_horse_armor" - }, - { - "id" : "minecraft:diamond_horse_armor" - }, - { - "id" : "minecraft:trident" - }, - { - "id" : "minecraft:turtle_helmet" - }, - { - "id" : "minecraft:elytra" - }, - { - "id" : "minecraft:totem_of_undying" - }, - { - "id" : "minecraft:glass_bottle" - }, - { - "id" : "minecraft:experience_bottle" - }, - { - "id" : "minecraft:potion" - }, - { - "id" : "minecraft:potion", - "damage" : 1 - }, - { - "id" : "minecraft:potion", - "damage" : 2 - }, - { - "id" : "minecraft:potion", - "damage" : 3 - }, - { - "id" : "minecraft:potion", - "damage" : 4 - }, - { - "id" : "minecraft:potion", - "damage" : 5 - }, - { - "id" : "minecraft:potion", - "damage" : 6 - }, - { - "id" : "minecraft:potion", - "damage" : 7 - }, - { - "id" : "minecraft:potion", - "damage" : 8 - }, - { - "id" : "minecraft:potion", - "damage" : 9 - }, - { - "id" : "minecraft:potion", - "damage" : 10 - }, - { - "id" : "minecraft:potion", - "damage" : 11 - }, - { - "id" : "minecraft:potion", - "damage" : 12 - }, - { - "id" : "minecraft:potion", - "damage" : 13 - }, - { - "id" : "minecraft:potion", - "damage" : 14 - }, - { - "id" : "minecraft:potion", - "damage" : 15 - }, - { - "id" : "minecraft:potion", - "damage" : 16 - }, - { - "id" : "minecraft:potion", - "damage" : 17 - }, - { - "id" : "minecraft:potion", - "damage" : 18 - }, - { - "id" : "minecraft:potion", - "damage" : 19 - }, - { - "id" : "minecraft:potion", - "damage" : 20 - }, - { - "id" : "minecraft:potion", - "damage" : 21 - }, - { - "id" : "minecraft:potion", - "damage" : 22 - }, - { - "id" : "minecraft:potion", - "damage" : 23 - }, - { - "id" : "minecraft:potion", - "damage" : 24 - }, - { - "id" : "minecraft:potion", - "damage" : 25 - }, - { - "id" : "minecraft:potion", - "damage" : 26 - }, - { - "id" : "minecraft:potion", - "damage" : 27 - }, - { - "id" : "minecraft:potion", - "damage" : 28 - }, - { - "id" : "minecraft:potion", - "damage" : 29 - }, - { - "id" : "minecraft:potion", - "damage" : 30 - }, - { - "id" : "minecraft:potion", - "damage" : 31 - }, - { - "id" : "minecraft:potion", - "damage" : 32 - }, - { - "id" : "minecraft:potion", - "damage" : 33 - }, - { - "id" : "minecraft:potion", - "damage" : 34 - }, - { - "id" : "minecraft:potion", - "damage" : 35 - }, - { - "id" : "minecraft:potion", - "damage" : 36 - }, - { - "id" : "minecraft:potion", - "damage" : 37 - }, - { - "id" : "minecraft:potion", - "damage" : 38 - }, - { - "id" : "minecraft:potion", - "damage" : 39 - }, - { - "id" : "minecraft:potion", - "damage" : 40 - }, - { - "id" : "minecraft:potion", - "damage" : 41 - }, - { - "id" : "minecraft:potion", - "damage" : 42 - }, - { - "id" : "minecraft:splash_potion" - }, - { - "id" : "minecraft:splash_potion", - "damage" : 1 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 2 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 3 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 4 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 5 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 6 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 7 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 8 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 9 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 10 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 11 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 12 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 13 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 14 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 15 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 16 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 17 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 18 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 19 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 20 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 21 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 22 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 23 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 24 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 25 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 26 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 27 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 28 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 29 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 30 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 31 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 32 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 33 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 34 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 35 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 36 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 37 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 38 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 39 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 40 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 41 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 42 - }, - { - "id" : "minecraft:lingering_potion" - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 1 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 2 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 3 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 4 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 5 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 6 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 7 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 8 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 9 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 10 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 11 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 12 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 13 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 14 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 15 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 16 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 17 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 18 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 19 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 20 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 21 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 22 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 23 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 24 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 25 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 26 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 27 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 28 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 29 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 30 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 31 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 32 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 33 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 34 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 35 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 36 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 37 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 38 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 39 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 40 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 41 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 42 - }, - { - "id" : "minecraft:spyglass" - }, - { - "id" : "minecraft: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", - "blockRuntimeId" : 7357 - }, - { - "id" : "minecraft:soul_torch", - "blockRuntimeId" : 6957 - }, - { - "id" : "minecraft:sea_pickle", - "blockRuntimeId" : 6817 - }, - { - "id" : "minecraft:lantern", - "blockRuntimeId" : 5363 - }, - { - "id" : "minecraft:soul_lantern", - "blockRuntimeId" : 6953 - }, - { - "id" : "minecraft:candle", - "blockRuntimeId" : 953 - }, - { - "id" : "minecraft:white_candle", - "blockRuntimeId" : 7790 - }, - { - "id" : "minecraft:orange_candle", - "blockRuntimeId" : 5738 - }, - { - "id" : "minecraft:magenta_candle", - "blockRuntimeId" : 5586 - }, - { - "id" : "minecraft:light_blue_candle", - "blockRuntimeId" : 5474 - }, - { - "id" : "minecraft:yellow_candle", - "blockRuntimeId" : 7931 - }, - { - "id" : "minecraft:lime_candle", - "blockRuntimeId" : 5522 - }, - { - "id" : "minecraft:pink_candle", - "blockRuntimeId" : 5769 - }, - { - "id" : "minecraft:gray_candle", - "blockRuntimeId" : 5000 - }, - { - "id" : "minecraft:light_gray_candle", - "blockRuntimeId" : 5490 - }, - { - "id" : "minecraft:cyan_candle", - "blockRuntimeId" : 3921 - }, - { - "id" : "minecraft:purple_candle", - "blockRuntimeId" : 6509 - }, - { - "id" : "minecraft:blue_candle", - "blockRuntimeId" : 675 - }, - { - "id" : "minecraft:brown_candle", - "blockRuntimeId" : 884 - }, - { - "id" : "minecraft:green_candle", - "blockRuntimeId" : 5016 - }, - { - "id" : "minecraft:red_candle", - "blockRuntimeId" : 6580 - }, - { - "id" : "minecraft:black_candle", - "blockRuntimeId" : 478 - }, - { - "id" : "minecraft:crafting_table", - "blockRuntimeId" : 3771 - }, - { - "id" : "minecraft:cartography_table", - "blockRuntimeId" : 987 - }, - { - "id" : "minecraft:fletching_table", - "blockRuntimeId" : 4812 - }, - { - "id" : "minecraft:smithing_table", - "blockRuntimeId" : 6879 - }, - { - "id" : "minecraft:beehive", - "blockRuntimeId" : 260 - }, - { - "id" : "minecraft:campfire" - }, - { - "id" : "minecraft:soul_campfire" - }, - { - "id" : "minecraft:furnace", - "blockRuntimeId" : 4876 - }, - { - "id" : "minecraft:blast_furnace", - "blockRuntimeId" : 669 - }, - { - "id" : "minecraft:smoker", - "blockRuntimeId" : 6880 - }, - { - "id" : "minecraft:respawn_anchor", - "blockRuntimeId" : 6699 - }, - { - "id" : "minecraft:brewing_stand" - }, - { - "id" : "minecraft:anvil", - "blockRuntimeId" : 152 - }, - { - "id" : "minecraft:anvil", - "blockRuntimeId" : 156 - }, - { - "id" : "minecraft:anvil", - "blockRuntimeId" : 160 - }, - { - "id" : "minecraft:grindstone", - "blockRuntimeId" : 5032 - }, - { - "id" : "minecraft:enchanting_table", - "blockRuntimeId" : 4719 - }, - { - "id" : "minecraft:bookshelf", - "blockRuntimeId" : 704 - }, - { - "id" : "minecraft:lectern", - "blockRuntimeId" : 5434 - }, - { - "id" : "minecraft:cauldron" - }, - { - "id" : "minecraft:composter", - "blockRuntimeId" : 3635 - }, - { - "id" : "minecraft:chest", - "blockRuntimeId" : 1123 - }, - { - "id" : "minecraft:trapped_chest", - "blockRuntimeId" : 7379 - }, - { - "id" : "minecraft:ender_chest", - "blockRuntimeId" : 4746 - }, - { - "id" : "minecraft:barrel", - "blockRuntimeId" : 201 - }, - { - "id" : "minecraft:undyed_shulker_box", - "blockRuntimeId" : 7462 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6830 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6838 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6837 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6845 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6842 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6844 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6831 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6834 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6835 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6843 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6839 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6833 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6841 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6840 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6832 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6836 - }, - { - "id" : "minecraft:armor_stand" - }, - { - "id" : "minecraft:noteblock", - "blockRuntimeId" : 5716 - }, - { - "id" : "minecraft:jukebox", - "blockRuntimeId" : 5208 - }, - { - "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_pigstep" - }, - { - "id" : "minecraft:glowstone_dust" - }, - { - "id" : "minecraft:glowstone", - "blockRuntimeId" : 4974 - }, - { - "id" : "minecraft:redstone_lamp", - "blockRuntimeId" : 6646 - }, - { - "id" : "minecraft:sealantern", - "blockRuntimeId" : 6828 - }, - { - "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:crimson_sign" - }, - { - "id" : "minecraft:warped_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: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:beacon", - "blockRuntimeId" : 217 - }, - { - "id" : "minecraft:bell", - "blockRuntimeId" : 292 - }, - { - "id" : "minecraft:conduit", - "blockRuntimeId" : 3676 - }, - { - "id" : "minecraft:stonecutter_block", - "blockRuntimeId" : 7295 - }, - { - "id" : "minecraft:end_portal_frame", - "blockRuntimeId" : 4731 - }, - { - "id" : "minecraft:coal" - }, - { - "id" : "minecraft:charcoal" - }, - { - "id" : "minecraft:diamond" - }, - { - "id" : "minecraft:iron_nugget" - }, - { - "id" : "minecraft:raw_iron" - }, - { - "id" : "minecraft:raw_gold" - }, - { - "id" : "minecraft:raw_copper" - }, - { - "id" : "minecraft:copper_ingot" - }, - { - "id" : "minecraft:iron_ingot" - }, - { - "id" : "minecraft:netherite_scrap" - }, - { - "id" : "minecraft:netherite_ingot" - }, - { - "id" : "minecraft:gold_nugget" - }, - { - "id" : "minecraft:gold_ingot" - }, - { - "id" : "minecraft:emerald" - }, - { - "id" : "minecraft:quartz" - }, - { - "id" : "minecraft:clay_ball" - }, - { - "id" : "minecraft:brick" - }, - { - "id" : "minecraft:netherbrick" - }, - { - "id" : "minecraft:prismarine_shard" - }, - { - "id" : "minecraft:amethyst_shard" - }, - { - "id" : "minecraft:prismarine_crystals" - }, - { - "id" : "minecraft:nautilus_shell" - }, - { - "id" : "minecraft:heart_of_the_sea" - }, - { - "id" : "minecraft:scute" - }, - { - "id" : "minecraft:phantom_membrane" - }, - { - "id" : "minecraft:string" - }, - { - "id" : "minecraft:feather" - }, - { - "id" : "minecraft:flint" - }, - { - "id" : "minecraft:gunpowder" - }, - { - "id" : "minecraft:leather" - }, - { - "id" : "minecraft:rabbit_hide" - }, - { - "id" : "minecraft:rabbit_foot" - }, - { - "id" : "minecraft:fire_charge" - }, - { - "id" : "minecraft:blaze_rod" - }, - { - "id" : "minecraft:blaze_powder" - }, - { - "id" : "minecraft:magma_cream" - }, - { - "id" : "minecraft:fermented_spider_eye" - }, - { - "id" : "minecraft: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", - "blockRuntimeId" : 4739 - }, - { - "id" : "minecraft:lightning_rod", - "blockRuntimeId" : 5516 - }, - { - "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: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:rail", - "blockRuntimeId" : 6567 - }, - { - "id" : "minecraft:golden_rail", - "blockRuntimeId" : 4977 - }, - { - "id" : "minecraft:detector_rail", - "blockRuntimeId" : 4462 - }, - { - "id" : "minecraft:activator_rail", - "blockRuntimeId" : 122 - }, - { - "id" : "minecraft:minecart" - }, - { - "id" : "minecraft:chest_minecart" - }, - { - "id" : "minecraft:hopper_minecart" - }, - { - "id" : "minecraft:tnt_minecart" - }, - { - "id" : "minecraft:redstone" - }, - { - "id" : "minecraft:redstone_block", - "blockRuntimeId" : 6645 - }, - { - "id" : "minecraft:redstone_torch", - "blockRuntimeId" : 6648 - }, - { - "id" : "minecraft:lever", - "blockRuntimeId" : 5442 - }, - { - "id" : "minecraft:wooden_button", - "blockRuntimeId" : 7843 - }, - { - "id" : "minecraft:spruce_button", - "blockRuntimeId" : 6966 - }, - { - "id" : "minecraft:birch_button", - "blockRuntimeId" : 356 - }, - { - "id" : "minecraft:jungle_button", - "blockRuntimeId" : 5209 - }, - { - "id" : "minecraft:acacia_button" - }, - { - "id" : "minecraft:dark_oak_button", - "blockRuntimeId" : 3937 - }, - { - "id" : "minecraft:stone_button", - "blockRuntimeId" : 7195 - }, - { - "id" : "minecraft:crimson_button", - "blockRuntimeId" : 3772 - }, - { - "id" : "minecraft:warped_button", - "blockRuntimeId" : 7530 - }, - { - "id" : "minecraft:polished_blackstone_button", - "blockRuntimeId" : 6001 - }, - { - "id" : "minecraft:tripwire_hook", - "blockRuntimeId" : 7401 - }, - { - "id" : "minecraft:wooden_pressure_plate", - "blockRuntimeId" : 7887 - }, - { - "id" : "minecraft:spruce_pressure_plate", - "blockRuntimeId" : 7026 - }, - { - "id" : "minecraft:birch_pressure_plate", - "blockRuntimeId" : 416 - }, - { - "id" : "minecraft:jungle_pressure_plate", - "blockRuntimeId" : 5269 - }, - { - "id" : "minecraft:acacia_pressure_plate", - "blockRuntimeId" : 60 - }, - { - "id" : "minecraft:dark_oak_pressure_plate", - "blockRuntimeId" : 3997 - }, - { - "id" : "minecraft:crimson_pressure_plate", - "blockRuntimeId" : 3841 - }, - { - "id" : "minecraft:warped_pressure_plate", - "blockRuntimeId" : 7599 - }, - { - "id" : "minecraft:stone_pressure_plate", - "blockRuntimeId" : 7207 - }, - { - "id" : "minecraft:light_weighted_pressure_plate", - "blockRuntimeId" : 5500 - }, - { - "id" : "minecraft:heavy_weighted_pressure_plate", - "blockRuntimeId" : 5096 - }, - { - "id" : "minecraft:polished_blackstone_pressure_plate", - "blockRuntimeId" : 6015 - }, - { - "id" : "minecraft:observer", - "blockRuntimeId" : 5725 - }, - { - "id" : "minecraft:daylight_detector", - "blockRuntimeId" : 4067 - }, - { - "id" : "minecraft:repeater" - }, - { - "id" : "minecraft:comparator" - }, - { - "id" : "minecraft:hopper" - }, - { - "id" : "minecraft:dropper", - "blockRuntimeId" : 4589 - }, - { - "id" : "minecraft:dispenser", - "blockRuntimeId" : 4490 - }, - { - "id" : "minecraft:piston", - "blockRuntimeId" : 5786 - }, - { - "id" : "minecraft:sticky_piston", - "blockRuntimeId" : 7169 - }, - { - "id" : "minecraft:tnt", - "blockRuntimeId" : 7353 - }, - { - "id" : "minecraft:name_tag" - }, - { - "id" : "minecraft:loom", - "blockRuntimeId" : 5582 - }, - { - "id" : "minecraft:banner" - }, - { - "id" : "minecraft:banner", - "damage" : 8 - }, - { - "id" : "minecraft:banner", - "damage" : 7 - }, - { - "id" : "minecraft:banner", - "damage" : 15 - }, - { - "id" : "minecraft:banner", - "damage" : 12 - }, - { - "id" : "minecraft:banner", - "damage" : 14 - }, - { - "id" : "minecraft:banner", - "damage" : 1 - }, - { - "id" : "minecraft:banner", - "damage" : 4 - }, - { - "id" : "minecraft:banner", - "damage" : 5 - }, - { - "id" : "minecraft:banner", - "damage" : 13 - }, - { - "id" : "minecraft:banner", - "damage" : 9 - }, - { - "id" : "minecraft:banner", - "damage" : 3 - }, - { - "id" : "minecraft:banner", - "damage" : 11 - }, - { - "id" : "minecraft:banner", - "damage" : 10 - }, - { - "id" : "minecraft:banner", - "damage" : 2 - }, - { - "id" : "minecraft:banner", - "damage" : 6 - }, - { - "id" : "minecraft:banner", - "damage" : 15, - "nbt_b64" : "CgAAAwQAVHlwZQEAAAAA" - }, - { - "id" : "minecraft:creeper_banner_pattern" - }, - { - "id" : "minecraft:skull_banner_pattern" - }, - { - "id" : "minecraft:flower_banner_pattern" - }, - { - "id" : "minecraft:mojang_banner_pattern" - }, - { - "id" : "minecraft:field_masoned_banner_pattern" - }, - { - "id" : "minecraft:bordure_indented_banner_pattern" - }, - { - "id" : "minecraft:piglin_banner_pattern" - }, - { - "id" : "minecraft: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", - "blockRuntimeId" : 7351 - }, - { - "id" : "minecraft:lodestone_compass" - } - ] -} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/creative_items.1_18_10.json b/core/src/main/resources/bedrock/creative_items.1_18_10.json deleted file mode 100644 index dadabf91f..000000000 --- a/core/src/main/resources/bedrock/creative_items.1_18_10.json +++ /dev/null @@ -1,5209 +0,0 @@ -{ - "items" : [ - { - "id" : "minecraft:planks", - "blockRuntimeId" : 5800 - }, - { - "id" : "minecraft:planks", - "blockRuntimeId" : 5801 - }, - { - "id" : "minecraft:planks", - "blockRuntimeId" : 5802 - }, - { - "id" : "minecraft:planks", - "blockRuntimeId" : 5803 - }, - { - "id" : "minecraft:planks", - "blockRuntimeId" : 5804 - }, - { - "id" : "minecraft:planks", - "blockRuntimeId" : 5805 - }, - { - "id" : "minecraft:crimson_planks", - "blockRuntimeId" : 3840 - }, - { - "id" : "minecraft:warped_planks", - "blockRuntimeId" : 7596 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1319 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1320 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1321 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1322 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1323 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1324 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1331 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1326 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1327 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1325 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1328 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1332 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1329 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1330 - }, - { - "id" : "minecraft:blackstone_wall", - "blockRuntimeId" : 507 - }, - { - "id" : "minecraft:polished_blackstone_wall", - "blockRuntimeId" : 6044 - }, - { - "id" : "minecraft:polished_blackstone_brick_wall", - "blockRuntimeId" : 5841 - }, - { - "id" : "minecraft:cobbled_deepslate_wall", - "blockRuntimeId" : 1156 - }, - { - "id" : "minecraft:deepslate_tile_wall", - "blockRuntimeId" : 4298 - }, - { - "id" : "minecraft:polished_deepslate_wall", - "blockRuntimeId" : 6219 - }, - { - "id" : "minecraft:deepslate_brick_wall", - "blockRuntimeId" : 4115 - }, - { - "id" : "minecraft:fence", - "blockRuntimeId" : 4774 - }, - { - "id" : "minecraft:fence", - "blockRuntimeId" : 4775 - }, - { - "id" : "minecraft:fence", - "blockRuntimeId" : 4776 - }, - { - "id" : "minecraft:fence", - "blockRuntimeId" : 4777 - }, - { - "id" : "minecraft:fence", - "blockRuntimeId" : 4778 - }, - { - "id" : "minecraft:fence", - "blockRuntimeId" : 4779 - }, - { - "id" : "minecraft:nether_brick_fence", - "blockRuntimeId" : 5690 - }, - { - "id" : "minecraft:crimson_fence", - "blockRuntimeId" : 3818 - }, - { - "id" : "minecraft:warped_fence", - "blockRuntimeId" : 7574 - }, - { - "id" : "minecraft:fence_gate", - "blockRuntimeId" : 4780 - }, - { - "id" : "minecraft:spruce_fence_gate", - "blockRuntimeId" : 7007 - }, - { - "id" : "minecraft:birch_fence_gate", - "blockRuntimeId" : 400 - }, - { - "id" : "minecraft:jungle_fence_gate", - "blockRuntimeId" : 5254 - }, - { - "id" : "minecraft:acacia_fence_gate", - "blockRuntimeId" : 44 - }, - { - "id" : "minecraft:dark_oak_fence_gate", - "blockRuntimeId" : 3981 - }, - { - "id" : "minecraft:crimson_fence_gate", - "blockRuntimeId" : 3819 - }, - { - "id" : "minecraft:warped_fence_gate", - "blockRuntimeId" : 7575 - }, - { - "id" : "minecraft:normal_stone_stairs", - "blockRuntimeId" : 5709 - }, - { - "id" : "minecraft:stone_stairs", - "blockRuntimeId" : 7278 - }, - { - "id" : "minecraft:mossy_cobblestone_stairs", - "blockRuntimeId" : 5669 - }, - { - "id" : "minecraft:oak_stairs", - "blockRuntimeId" : 5718 - }, - { - "id" : "minecraft:spruce_stairs", - "blockRuntimeId" : 7039 - }, - { - "id" : "minecraft:birch_stairs", - "blockRuntimeId" : 432 - }, - { - "id" : "minecraft:jungle_stairs", - "blockRuntimeId" : 5286 - }, - { - "id" : "minecraft:acacia_stairs", - "blockRuntimeId" : 76 - }, - { - "id" : "minecraft:dark_oak_stairs", - "blockRuntimeId" : 4013 - }, - { - "id" : "minecraft:stone_brick_stairs", - "blockRuntimeId" : 7184 - }, - { - "id" : "minecraft:mossy_stone_brick_stairs", - "blockRuntimeId" : 5677 - }, - { - "id" : "minecraft:sandstone_stairs", - "blockRuntimeId" : 6713 - }, - { - "id" : "minecraft:smooth_sandstone_stairs", - "blockRuntimeId" : 6900 - }, - { - "id" : "minecraft:red_sandstone_stairs", - "blockRuntimeId" : 6640 - }, - { - "id" : "minecraft:smooth_red_sandstone_stairs", - "blockRuntimeId" : 6892 - }, - { - "id" : "minecraft:granite_stairs", - "blockRuntimeId" : 4990 - }, - { - "id" : "minecraft:polished_granite_stairs", - "blockRuntimeId" : 6389 - }, - { - "id" : "minecraft:diorite_stairs", - "blockRuntimeId" : 4476 - }, - { - "id" : "minecraft:polished_diorite_stairs", - "blockRuntimeId" : 6381 - }, - { - "id" : "minecraft:andesite_stairs", - "blockRuntimeId" : 144 - }, - { - "id" : "minecraft:polished_andesite_stairs", - "blockRuntimeId" : 5817 - }, - { - "id" : "minecraft:brick_stairs", - "blockRuntimeId" : 876 - }, - { - "id" : "minecraft:nether_brick_stairs", - "blockRuntimeId" : 5691 - }, - { - "id" : "minecraft:red_nether_brick_stairs", - "blockRuntimeId" : 6628 - }, - { - "id" : "minecraft:end_brick_stairs", - "blockRuntimeId" : 4720 - }, - { - "id" : "minecraft:quartz_stairs", - "blockRuntimeId" : 6562 - }, - { - "id" : "minecraft:smooth_quartz_stairs", - "blockRuntimeId" : 6884 - }, - { - "id" : "minecraft:purpur_stairs", - "blockRuntimeId" : 6540 - }, - { - "id" : "minecraft:prismarine_stairs", - "blockRuntimeId" : 6452 - }, - { - "id" : "minecraft:dark_prismarine_stairs", - "blockRuntimeId" : 4037 - }, - { - "id" : "minecraft:prismarine_bricks_stairs", - "blockRuntimeId" : 6444 - }, - { - "id" : "minecraft:crimson_stairs", - "blockRuntimeId" : 3860 - }, - { - "id" : "minecraft:warped_stairs", - "blockRuntimeId" : 7616 - }, - { - "id" : "minecraft:blackstone_stairs", - "blockRuntimeId" : 499 - }, - { - "id" : "minecraft:polished_blackstone_stairs", - "blockRuntimeId" : 6036 - }, - { - "id" : "minecraft:polished_blackstone_brick_stairs", - "blockRuntimeId" : 5833 - }, - { - "id" : "minecraft:cut_copper_stairs", - "blockRuntimeId" : 3913 - }, - { - "id" : "minecraft:exposed_cut_copper_stairs", - "blockRuntimeId" : 4756 - }, - { - "id" : "minecraft:weathered_cut_copper_stairs", - "blockRuntimeId" : 7743 - }, - { - "id" : "minecraft:oxidized_cut_copper_stairs", - "blockRuntimeId" : 5760 - }, - { - "id" : "minecraft:waxed_cut_copper_stairs", - "blockRuntimeId" : 7687 - }, - { - "id" : "minecraft:waxed_exposed_cut_copper_stairs", - "blockRuntimeId" : 7701 - }, - { - "id" : "minecraft:waxed_weathered_cut_copper_stairs", - "blockRuntimeId" : 7729 - }, - { - "id" : "minecraft:waxed_oxidized_cut_copper_stairs", - "blockRuntimeId" : 7715 - }, - { - "id" : "minecraft:cobbled_deepslate_stairs", - "blockRuntimeId" : 1148 - }, - { - "id" : "minecraft:deepslate_tile_stairs", - "blockRuntimeId" : 4290 - }, - { - "id" : "minecraft:polished_deepslate_stairs", - "blockRuntimeId" : 6211 - }, - { - "id" : "minecraft:deepslate_brick_stairs", - "blockRuntimeId" : 4107 - }, - { - "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:iron_door" - }, - { - "id" : "minecraft:crimson_door" - }, - { - "id" : "minecraft:warped_door" - }, - { - "id" : "minecraft:trapdoor", - "blockRuntimeId" : 7360 - }, - { - "id" : "minecraft:spruce_trapdoor", - "blockRuntimeId" : 7063 - }, - { - "id" : "minecraft:birch_trapdoor", - "blockRuntimeId" : 456 - }, - { - "id" : "minecraft:jungle_trapdoor", - "blockRuntimeId" : 5310 - }, - { - "id" : "minecraft:acacia_trapdoor", - "blockRuntimeId" : 100 - }, - { - "id" : "minecraft:dark_oak_trapdoor", - "blockRuntimeId" : 4021 - }, - { - "id" : "minecraft:iron_trapdoor", - "blockRuntimeId" : 5169 - }, - { - "id" : "minecraft:crimson_trapdoor", - "blockRuntimeId" : 3887 - }, - { - "id" : "minecraft:warped_trapdoor", - "blockRuntimeId" : 7643 - }, - { - "id" : "minecraft:iron_bars", - "blockRuntimeId" : 5134 - }, - { - "id" : "minecraft:glass", - "blockRuntimeId" : 4884 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7085 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7093 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7092 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7100 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7097 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7099 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7086 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7089 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7090 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7098 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7094 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7088 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7096 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7095 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7087 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 7091 - }, - { - "id" : "minecraft:tinted_glass", - "blockRuntimeId" : 7349 - }, - { - "id" : "minecraft:glass_pane", - "blockRuntimeId" : 4885 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7101 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7109 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7108 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7116 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7113 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7115 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7102 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7105 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7106 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7114 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7110 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7104 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7112 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7111 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7103 - }, - { - "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 7107 - }, - { - "id" : "minecraft:ladder", - "blockRuntimeId" : 5358 - }, - { - "id" : "minecraft:scaffolding", - "blockRuntimeId" : 6733 - }, - { - "id" : "minecraft:double_stone_slab", - "blockRuntimeId" : 7220 - }, - { - "id" : "minecraft:double_stone_slab4", - "blockRuntimeId" : 7270 - }, - { - "id" : "minecraft:double_stone_slab", - "blockRuntimeId" : 7223 - }, - { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 7241 - }, - { - "id" : "minecraft:wooden_slab", - "blockRuntimeId" : 7901 - }, - { - "id" : "minecraft:wooden_slab", - "blockRuntimeId" : 7902 - }, - { - "id" : "minecraft:wooden_slab", - "blockRuntimeId" : 7903 - }, - { - "id" : "minecraft:wooden_slab", - "blockRuntimeId" : 7904 - }, - { - "id" : "minecraft:wooden_slab", - "blockRuntimeId" : 7905 - }, - { - "id" : "minecraft:wooden_slab", - "blockRuntimeId" : 7906 - }, - { - "id" : "minecraft:double_stone_slab", - "blockRuntimeId" : 7225 - }, - { - "id" : "minecraft:double_stone_slab4", - "blockRuntimeId" : 7268 - }, - { - "id" : "minecraft:double_stone_slab", - "blockRuntimeId" : 7221 - }, - { - "id" : "minecraft:double_stone_slab4", - "blockRuntimeId" : 7271 - }, - { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 7242 - }, - { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 7236 - }, - { - "id" : "minecraft:double_stone_slab4", - "blockRuntimeId" : 7272 - }, - { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 7253 - }, - { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 7258 - }, - { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 7259 - }, - { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 7256 - }, - { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 7257 - }, - { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 7255 - }, - { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 7254 - }, - { - "id" : "minecraft:double_stone_slab", - "blockRuntimeId" : 7224 - }, - { - "id" : "minecraft:double_stone_slab", - "blockRuntimeId" : 7227 - }, - { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 7243 - }, - { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 7252 - }, - { - "id" : "minecraft:double_stone_slab", - "blockRuntimeId" : 7226 - }, - { - "id" : "minecraft:double_stone_slab4", - "blockRuntimeId" : 7269 - }, - { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 7237 - }, - { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 7238 - }, - { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 7239 - }, - { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 7240 - }, - { - "id" : "minecraft:crimson_slab", - "blockRuntimeId" : 3858 - }, - { - "id" : "minecraft:warped_slab", - "blockRuntimeId" : 7614 - }, - { - "id" : "minecraft:blackstone_slab", - "blockRuntimeId" : 497 - }, - { - "id" : "minecraft:polished_blackstone_slab", - "blockRuntimeId" : 6034 - }, - { - "id" : "minecraft:polished_blackstone_brick_slab", - "blockRuntimeId" : 5831 - }, - { - "id" : "minecraft:cut_copper_slab", - "blockRuntimeId" : 3911 - }, - { - "id" : "minecraft:exposed_cut_copper_slab", - "blockRuntimeId" : 4754 - }, - { - "id" : "minecraft:weathered_cut_copper_slab", - "blockRuntimeId" : 7741 - }, - { - "id" : "minecraft:oxidized_cut_copper_slab", - "blockRuntimeId" : 5758 - }, - { - "id" : "minecraft:waxed_cut_copper_slab", - "blockRuntimeId" : 7685 - }, - { - "id" : "minecraft:waxed_exposed_cut_copper_slab", - "blockRuntimeId" : 7699 - }, - { - "id" : "minecraft:waxed_weathered_cut_copper_slab", - "blockRuntimeId" : 7727 - }, - { - "id" : "minecraft:waxed_oxidized_cut_copper_slab", - "blockRuntimeId" : 7713 - }, - { - "id" : "minecraft:cobbled_deepslate_slab", - "blockRuntimeId" : 1146 - }, - { - "id" : "minecraft:polished_deepslate_slab", - "blockRuntimeId" : 6209 - }, - { - "id" : "minecraft:deepslate_tile_slab", - "blockRuntimeId" : 4288 - }, - { - "id" : "minecraft:deepslate_brick_slab", - "blockRuntimeId" : 4105 - }, - { - "id" : "minecraft:brick_block", - "blockRuntimeId" : 875 - }, - { - "id" : "minecraft:chiseled_nether_bricks", - "blockRuntimeId" : 1130 - }, - { - "id" : "minecraft:cracked_nether_bricks", - "blockRuntimeId" : 3769 - }, - { - "id" : "minecraft:quartz_bricks", - "blockRuntimeId" : 6560 - }, - { - "id" : "minecraft:stonebrick", - "blockRuntimeId" : 7286 - }, - { - "id" : "minecraft:stonebrick", - "blockRuntimeId" : 7287 - }, - { - "id" : "minecraft:stonebrick", - "blockRuntimeId" : 7288 - }, - { - "id" : "minecraft:stonebrick", - "blockRuntimeId" : 7289 - }, - { - "id" : "minecraft:end_bricks", - "blockRuntimeId" : 4728 - }, - { - "id" : "minecraft:prismarine", - "blockRuntimeId" : 6443 - }, - { - "id" : "minecraft:polished_blackstone_bricks", - "blockRuntimeId" : 6003 - }, - { - "id" : "minecraft:cracked_polished_blackstone_bricks", - "blockRuntimeId" : 3770 - }, - { - "id" : "minecraft:gilded_blackstone", - "blockRuntimeId" : 4883 - }, - { - "id" : "minecraft:chiseled_polished_blackstone", - "blockRuntimeId" : 1131 - }, - { - "id" : "minecraft:deepslate_tiles", - "blockRuntimeId" : 4460 - }, - { - "id" : "minecraft:cracked_deepslate_tiles", - "blockRuntimeId" : 3768 - }, - { - "id" : "minecraft:deepslate_bricks", - "blockRuntimeId" : 4277 - }, - { - "id" : "minecraft:cracked_deepslate_bricks", - "blockRuntimeId" : 3767 - }, - { - "id" : "minecraft:chiseled_deepslate", - "blockRuntimeId" : 1129 - }, - { - "id" : "minecraft:cobblestone", - "blockRuntimeId" : 1318 - }, - { - "id" : "minecraft:mossy_cobblestone", - "blockRuntimeId" : 5668 - }, - { - "id" : "minecraft:cobbled_deepslate", - "blockRuntimeId" : 1143 - }, - { - "id" : "minecraft:smooth_stone", - "blockRuntimeId" : 6908 - }, - { - "id" : "minecraft:sandstone", - "blockRuntimeId" : 6709 - }, - { - "id" : "minecraft:sandstone", - "blockRuntimeId" : 6710 - }, - { - "id" : "minecraft:sandstone", - "blockRuntimeId" : 6711 - }, - { - "id" : "minecraft:sandstone", - "blockRuntimeId" : 6712 - }, - { - "id" : "minecraft:red_sandstone", - "blockRuntimeId" : 6636 - }, - { - "id" : "minecraft:red_sandstone", - "blockRuntimeId" : 6637 - }, - { - "id" : "minecraft:red_sandstone", - "blockRuntimeId" : 6638 - }, - { - "id" : "minecraft:red_sandstone", - "blockRuntimeId" : 6639 - }, - { - "id" : "minecraft:coal_block", - "blockRuntimeId" : 1141 - }, - { - "id" : "minecraft:dried_kelp_block", - "blockRuntimeId" : 4584 - }, - { - "id" : "minecraft:gold_block", - "blockRuntimeId" : 4976 - }, - { - "id" : "minecraft:iron_block", - "blockRuntimeId" : 5135 - }, - { - "id" : "minecraft:copper_block", - "blockRuntimeId" : 3677 - }, - { - "id" : "minecraft:exposed_copper", - "blockRuntimeId" : 4752 - }, - { - "id" : "minecraft:weathered_copper", - "blockRuntimeId" : 7739 - }, - { - "id" : "minecraft:oxidized_copper", - "blockRuntimeId" : 5756 - }, - { - "id" : "minecraft:waxed_copper", - "blockRuntimeId" : 7683 - }, - { - "id" : "minecraft:waxed_exposed_copper", - "blockRuntimeId" : 7697 - }, - { - "id" : "minecraft:waxed_weathered_copper", - "blockRuntimeId" : 7725 - }, - { - "id" : "minecraft:waxed_oxidized_copper", - "blockRuntimeId" : 7711 - }, - { - "id" : "minecraft:cut_copper", - "blockRuntimeId" : 3910 - }, - { - "id" : "minecraft:exposed_cut_copper", - "blockRuntimeId" : 4753 - }, - { - "id" : "minecraft:weathered_cut_copper", - "blockRuntimeId" : 7740 - }, - { - "id" : "minecraft:oxidized_cut_copper", - "blockRuntimeId" : 5757 - }, - { - "id" : "minecraft:waxed_cut_copper", - "blockRuntimeId" : 7684 - }, - { - "id" : "minecraft:waxed_exposed_cut_copper", - "blockRuntimeId" : 7698 - }, - { - "id" : "minecraft:waxed_weathered_cut_copper", - "blockRuntimeId" : 7726 - }, - { - "id" : "minecraft:waxed_oxidized_cut_copper", - "blockRuntimeId" : 7712 - }, - { - "id" : "minecraft:emerald_block", - "blockRuntimeId" : 4717 - }, - { - "id" : "minecraft:diamond_block", - "blockRuntimeId" : 4474 - }, - { - "id" : "minecraft:lapis_block", - "blockRuntimeId" : 5366 - }, - { - "id" : "minecraft:raw_iron_block", - "blockRuntimeId" : 6582 - }, - { - "id" : "minecraft:raw_copper_block", - "blockRuntimeId" : 6580 - }, - { - "id" : "minecraft:raw_gold_block", - "blockRuntimeId" : 6581 - }, - { - "id" : "minecraft:quartz_block", - "blockRuntimeId" : 6548 - }, - { - "id" : "minecraft:quartz_block", - "blockRuntimeId" : 6550 - }, - { - "id" : "minecraft:quartz_block", - "blockRuntimeId" : 6549 - }, - { - "id" : "minecraft:quartz_block", - "blockRuntimeId" : 6551 - }, - { - "id" : "minecraft:prismarine", - "blockRuntimeId" : 6441 - }, - { - "id" : "minecraft:prismarine", - "blockRuntimeId" : 6442 - }, - { - "id" : "minecraft:slime", - "blockRuntimeId" : 6861 - }, - { - "id" : "minecraft:honey_block", - "blockRuntimeId" : 5113 - }, - { - "id" : "minecraft:honeycomb_block", - "blockRuntimeId" : 5114 - }, - { - "id" : "minecraft:hay_block", - "blockRuntimeId" : 5085 - }, - { - "id" : "minecraft:bone_block", - "blockRuntimeId" : 692 - }, - { - "id" : "minecraft:nether_brick", - "blockRuntimeId" : 5689 - }, - { - "id" : "minecraft:red_nether_brick", - "blockRuntimeId" : 6627 - }, - { - "id" : "minecraft:netherite_block", - "blockRuntimeId" : 5706 - }, - { - "id" : "minecraft:lodestone", - "blockRuntimeId" : 5564 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7913 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7921 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7920 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7928 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7925 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7927 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7914 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7917 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7918 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7926 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7922 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7916 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7924 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7923 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7915 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 7919 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 963 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 971 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 970 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 978 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 975 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 977 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 964 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 967 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 968 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 976 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 972 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 966 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 974 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 973 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 965 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 969 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3660 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3668 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3667 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3675 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3672 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3674 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3661 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3664 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3665 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3673 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3669 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3663 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3671 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3670 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3662 - }, - { - "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 3666 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3644 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3652 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3651 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3659 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3656 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3658 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3645 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3648 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3649 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3657 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3653 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3647 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3655 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3654 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3646 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 3650 - }, - { - "id" : "minecraft:clay", - "blockRuntimeId" : 1139 - }, - { - "id" : "minecraft:hardened_clay", - "blockRuntimeId" : 5084 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7117 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7125 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7124 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7132 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7129 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7131 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7118 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7121 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7122 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7130 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7126 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7120 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7128 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7127 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7119 - }, - { - "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 7123 - }, - { - "id" : "minecraft:white_glazed_terracotta", - "blockRuntimeId" : 7798 - }, - { - "id" : "minecraft:silver_glazed_terracotta", - "blockRuntimeId" : 6849 - }, - { - "id" : "minecraft:gray_glazed_terracotta", - "blockRuntimeId" : 5011 - }, - { - "id" : "minecraft:black_glazed_terracotta", - "blockRuntimeId" : 488 - }, - { - "id" : "minecraft:brown_glazed_terracotta", - "blockRuntimeId" : 894 - }, - { - "id" : "minecraft:red_glazed_terracotta", - "blockRuntimeId" : 6604 - }, - { - "id" : "minecraft:orange_glazed_terracotta", - "blockRuntimeId" : 5750 - }, - { - "id" : "minecraft:yellow_glazed_terracotta", - "blockRuntimeId" : 7940 - }, - { - "id" : "minecraft:lime_glazed_terracotta", - "blockRuntimeId" : 5533 - }, - { - "id" : "minecraft:green_glazed_terracotta", - "blockRuntimeId" : 5027 - }, - { - "id" : "minecraft:cyan_glazed_terracotta", - "blockRuntimeId" : 3931 - }, - { - "id" : "minecraft:light_blue_glazed_terracotta", - "blockRuntimeId" : 5485 - }, - { - "id" : "minecraft:blue_glazed_terracotta", - "blockRuntimeId" : 685 - }, - { - "id" : "minecraft:purple_glazed_terracotta", - "blockRuntimeId" : 6522 - }, - { - "id" : "minecraft:magenta_glazed_terracotta", - "blockRuntimeId" : 5597 - }, - { - "id" : "minecraft:pink_glazed_terracotta", - "blockRuntimeId" : 5782 - }, - { - "id" : "minecraft:purpur_block", - "blockRuntimeId" : 6528 - }, - { - "id" : "minecraft:purpur_block", - "blockRuntimeId" : 6530 - }, - { - "id" : "minecraft:nether_wart_block", - "blockRuntimeId" : 5705 - }, - { - "id" : "minecraft:warped_wart_block", - "blockRuntimeId" : 7665 - }, - { - "id" : "minecraft:shroomlight", - "blockRuntimeId" : 6832 - }, - { - "id" : "minecraft:crimson_nylium", - "blockRuntimeId" : 3839 - }, - { - "id" : "minecraft:warped_nylium", - "blockRuntimeId" : 7595 - }, - { - "id" : "minecraft:basalt", - "blockRuntimeId" : 214 - }, - { - "id" : "minecraft:polished_basalt", - "blockRuntimeId" : 5825 - }, - { - "id" : "minecraft:smooth_basalt", - "blockRuntimeId" : 6883 - }, - { - "id" : "minecraft:soul_soil", - "blockRuntimeId" : 6953 - }, - { - "id" : "minecraft:dirt", - "blockRuntimeId" : 4484 - }, - { - "id" : "minecraft:dirt", - "blockRuntimeId" : 4485 - }, - { - "id" : "minecraft:farmland", - "blockRuntimeId" : 4766 - }, - { - "id" : "minecraft:grass", - "blockRuntimeId" : 4998 - }, - { - "id" : "minecraft:grass_path", - "blockRuntimeId" : 4999 - }, - { - "id" : "minecraft:podzol", - "blockRuntimeId" : 5806 - }, - { - "id" : "minecraft:mycelium", - "blockRuntimeId" : 5686 - }, - { - "id" : "minecraft:stone", - "blockRuntimeId" : 7177 - }, - { - "id" : "minecraft:iron_ore", - "blockRuntimeId" : 5168 - }, - { - "id" : "minecraft:gold_ore", - "blockRuntimeId" : 4977 - }, - { - "id" : "minecraft:diamond_ore", - "blockRuntimeId" : 4475 - }, - { - "id" : "minecraft:lapis_ore", - "blockRuntimeId" : 5367 - }, - { - "id" : "minecraft:redstone_ore", - "blockRuntimeId" : 6650 - }, - { - "id" : "minecraft:coal_ore", - "blockRuntimeId" : 1142 - }, - { - "id" : "minecraft:copper_ore", - "blockRuntimeId" : 3678 - }, - { - "id" : "minecraft:emerald_ore", - "blockRuntimeId" : 4718 - }, - { - "id" : "minecraft:quartz_ore", - "blockRuntimeId" : 6561 - }, - { - "id" : "minecraft:nether_gold_ore", - "blockRuntimeId" : 5699 - }, - { - "id" : "minecraft:ancient_debris", - "blockRuntimeId" : 143 - }, - { - "id" : "minecraft:deepslate_iron_ore", - "blockRuntimeId" : 4283 - }, - { - "id" : "minecraft:deepslate_gold_ore", - "blockRuntimeId" : 4282 - }, - { - "id" : "minecraft:deepslate_diamond_ore", - "blockRuntimeId" : 4280 - }, - { - "id" : "minecraft:deepslate_lapis_ore", - "blockRuntimeId" : 4284 - }, - { - "id" : "minecraft:deepslate_redstone_ore", - "blockRuntimeId" : 4285 - }, - { - "id" : "minecraft:deepslate_emerald_ore", - "blockRuntimeId" : 4281 - }, - { - "id" : "minecraft:deepslate_coal_ore", - "blockRuntimeId" : 4278 - }, - { - "id" : "minecraft:deepslate_copper_ore", - "blockRuntimeId" : 4279 - }, - { - "id" : "minecraft:gravel", - "blockRuntimeId" : 5000 - }, - { - "id" : "minecraft:stone", - "blockRuntimeId" : 7178 - }, - { - "id" : "minecraft:stone", - "blockRuntimeId" : 7180 - }, - { - "id" : "minecraft:stone", - "blockRuntimeId" : 7182 - }, - { - "id" : "minecraft:blackstone", - "blockRuntimeId" : 494 - }, - { - "id" : "minecraft:deepslate", - "blockRuntimeId" : 4100 - }, - { - "id" : "minecraft:stone", - "blockRuntimeId" : 7179 - }, - { - "id" : "minecraft:stone", - "blockRuntimeId" : 7181 - }, - { - "id" : "minecraft:stone", - "blockRuntimeId" : 7183 - }, - { - "id" : "minecraft:polished_blackstone", - "blockRuntimeId" : 5828 - }, - { - "id" : "minecraft:polished_deepslate", - "blockRuntimeId" : 6206 - }, - { - "id" : "minecraft:sand", - "blockRuntimeId" : 6707 - }, - { - "id" : "minecraft:sand", - "blockRuntimeId" : 6708 - }, - { - "id" : "minecraft:cactus", - "blockRuntimeId" : 920 - }, - { - "id" : "minecraft:log", - "blockRuntimeId" : 5565 - }, - { - "id" : "minecraft:stripped_oak_log", - "blockRuntimeId" : 7316 - }, - { - "id" : "minecraft:log", - "blockRuntimeId" : 5566 - }, - { - "id" : "minecraft:stripped_spruce_log", - "blockRuntimeId" : 7319 - }, - { - "id" : "minecraft:log", - "blockRuntimeId" : 5567 - }, - { - "id" : "minecraft:stripped_birch_log", - "blockRuntimeId" : 7301 - }, - { - "id" : "minecraft:log", - "blockRuntimeId" : 5568 - }, - { - "id" : "minecraft:stripped_jungle_log", - "blockRuntimeId" : 7313 - }, - { - "id" : "minecraft:log2", - "blockRuntimeId" : 5577 - }, - { - "id" : "minecraft:stripped_acacia_log", - "blockRuntimeId" : 7298 - }, - { - "id" : "minecraft:log2", - "blockRuntimeId" : 5578 - }, - { - "id" : "minecraft:stripped_dark_oak_log", - "blockRuntimeId" : 7310 - }, - { - "id" : "minecraft:crimson_stem", - "blockRuntimeId" : 3884 - }, - { - "id" : "minecraft:stripped_crimson_stem", - "blockRuntimeId" : 7307 - }, - { - "id" : "minecraft:warped_stem", - "blockRuntimeId" : 7640 - }, - { - "id" : "minecraft:stripped_warped_stem", - "blockRuntimeId" : 7325 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7805 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7811 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7806 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7812 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7807 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7813 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7808 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7814 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7809 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7815 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7810 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 7816 - }, - { - "id" : "minecraft:crimson_hyphae", - "blockRuntimeId" : 3836 - }, - { - "id" : "minecraft:stripped_crimson_hyphae", - "blockRuntimeId" : 7304 - }, - { - "id" : "minecraft:warped_hyphae", - "blockRuntimeId" : 7592 - }, - { - "id" : "minecraft:stripped_warped_hyphae", - "blockRuntimeId" : 7322 - }, - { - "id" : "minecraft:leaves", - "blockRuntimeId" : 5411 - }, - { - "id" : "minecraft:leaves", - "blockRuntimeId" : 5412 - }, - { - "id" : "minecraft:leaves", - "blockRuntimeId" : 5413 - }, - { - "id" : "minecraft:leaves", - "blockRuntimeId" : 5414 - }, - { - "id" : "minecraft:leaves2", - "blockRuntimeId" : 5427 - }, - { - "id" : "minecraft:leaves2", - "blockRuntimeId" : 5428 - }, - { - "id" : "minecraft:azalea_leaves", - "blockRuntimeId" : 169 - }, - { - "id" : "minecraft:azalea_leaves_flowered", - "blockRuntimeId" : 173 - }, - { - "id" : "minecraft:sapling", - "blockRuntimeId" : 6721 - }, - { - "id" : "minecraft:sapling", - "blockRuntimeId" : 6722 - }, - { - "id" : "minecraft:sapling", - "blockRuntimeId" : 6723 - }, - { - "id" : "minecraft:sapling", - "blockRuntimeId" : 6724 - }, - { - "id" : "minecraft:sapling", - "blockRuntimeId" : 6725 - }, - { - "id" : "minecraft:sapling", - "blockRuntimeId" : 6726 - }, - { - "id" : "minecraft:bee_nest", - "blockRuntimeId" : 236 - }, - { - "id" : "minecraft:wheat_seeds" - }, - { - "id" : "minecraft:pumpkin_seeds" - }, - { - "id" : "minecraft:melon_seeds" - }, - { - "id" : "minecraft:beetroot_seeds" - }, - { - "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", - "blockRuntimeId" : 5610 - }, - { - "id" : "minecraft:melon_slice" - }, - { - "id" : "minecraft:glistering_melon_slice" - }, - { - "id" : "minecraft:sweet_berries" - }, - { - "id" : "minecraft:glow_berries" - }, - { - "id" : "minecraft:pumpkin", - "blockRuntimeId" : 6460 - }, - { - "id" : "minecraft:carved_pumpkin", - "blockRuntimeId" : 988 - }, - { - "id" : "minecraft:lit_pumpkin", - "blockRuntimeId" : 5552 - }, - { - "id" : "minecraft:honeycomb" - }, - { - "id" : "minecraft:tallgrass", - "blockRuntimeId" : 7346 - }, - { - "id" : "minecraft:double_plant", - "blockRuntimeId" : 4504 - }, - { - "id" : "minecraft:tallgrass", - "blockRuntimeId" : 7345 - }, - { - "id" : "minecraft:double_plant", - "blockRuntimeId" : 4503 - }, - { - "id" : "minecraft:nether_sprouts" - }, - { - "id" : "minecraft:coral", - "blockRuntimeId" : 3682 - }, - { - "id" : "minecraft:coral", - "blockRuntimeId" : 3680 - }, - { - "id" : "minecraft:coral", - "blockRuntimeId" : 3681 - }, - { - "id" : "minecraft:coral", - "blockRuntimeId" : 3679 - }, - { - "id" : "minecraft:coral", - "blockRuntimeId" : 3683 - }, - { - "id" : "minecraft:coral", - "blockRuntimeId" : 3687 - }, - { - "id" : "minecraft:coral", - "blockRuntimeId" : 3685 - }, - { - "id" : "minecraft:coral", - "blockRuntimeId" : 3686 - }, - { - "id" : "minecraft:coral", - "blockRuntimeId" : 3684 - }, - { - "id" : "minecraft:coral", - "blockRuntimeId" : 3688 - }, - { - "id" : "minecraft:coral_fan", - "blockRuntimeId" : 3702 - }, - { - "id" : "minecraft:coral_fan", - "blockRuntimeId" : 3700 - }, - { - "id" : "minecraft:coral_fan", - "blockRuntimeId" : 3701 - }, - { - "id" : "minecraft:coral_fan", - "blockRuntimeId" : 3699 - }, - { - "id" : "minecraft:coral_fan", - "blockRuntimeId" : 3703 - }, - { - "id" : "minecraft:coral_fan_dead", - "blockRuntimeId" : 3712 - }, - { - "id" : "minecraft:coral_fan_dead", - "blockRuntimeId" : 3710 - }, - { - "id" : "minecraft:coral_fan_dead", - "blockRuntimeId" : 3711 - }, - { - "id" : "minecraft:coral_fan_dead", - "blockRuntimeId" : 3709 - }, - { - "id" : "minecraft:coral_fan_dead", - "blockRuntimeId" : 3713 - }, - { - "id" : "minecraft:kelp" - }, - { - "id" : "minecraft:seagrass", - "blockRuntimeId" : 6828 - }, - { - "id" : "minecraft:crimson_roots", - "blockRuntimeId" : 3857 - }, - { - "id" : "minecraft:warped_roots", - "blockRuntimeId" : 7613 - }, - { - "id" : "minecraft:yellow_flower", - "blockRuntimeId" : 7939 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 6593 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 6594 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 6595 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 6596 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 6597 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 6598 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 6599 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 6600 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 6601 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 6602 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 6603 - }, - { - "id" : "minecraft:double_plant", - "blockRuntimeId" : 4501 - }, - { - "id" : "minecraft:double_plant", - "blockRuntimeId" : 4502 - }, - { - "id" : "minecraft:double_plant", - "blockRuntimeId" : 4505 - }, - { - "id" : "minecraft:double_plant", - "blockRuntimeId" : 4506 - }, - { - "id" : "minecraft:wither_rose", - "blockRuntimeId" : 7804 - }, - { - "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", - "blockRuntimeId" : 7500 - }, - { - "id" : "minecraft:weeping_vines", - "blockRuntimeId" : 7754 - }, - { - "id" : "minecraft:twisting_vines", - "blockRuntimeId" : 7427 - }, - { - "id" : "minecraft:waterlily", - "blockRuntimeId" : 7682 - }, - { - "id" : "minecraft:deadbush", - "blockRuntimeId" : 4099 - }, - { - "id" : "minecraft:bamboo", - "blockRuntimeId" : 177 - }, - { - "id" : "minecraft:snow", - "blockRuntimeId" : 6909 - }, - { - "id" : "minecraft:ice", - "blockRuntimeId" : 5127 - }, - { - "id" : "minecraft:packed_ice", - "blockRuntimeId" : 5770 - }, - { - "id" : "minecraft:blue_ice", - "blockRuntimeId" : 691 - }, - { - "id" : "minecraft:snow_layer", - "blockRuntimeId" : 6910 - }, - { - "id" : "minecraft:pointed_dripstone", - "blockRuntimeId" : 5812 - }, - { - "id" : "minecraft:dripstone_block", - "blockRuntimeId" : 4585 - }, - { - "id" : "minecraft:moss_carpet", - "blockRuntimeId" : 5667 - }, - { - "id" : "minecraft:moss_block", - "blockRuntimeId" : 5666 - }, - { - "id" : "minecraft:dirt_with_roots", - "blockRuntimeId" : 4486 - }, - { - "id" : "minecraft:hanging_roots", - "blockRuntimeId" : 5049 - }, - { - "id" : "minecraft:big_dripleaf", - "blockRuntimeId" : 328 - }, - { - "id" : "minecraft:small_dripleaf_block", - "blockRuntimeId" : 6875 - }, - { - "id" : "minecraft:spore_blossom", - "blockRuntimeId" : 6962 - }, - { - "id" : "minecraft:azalea", - "blockRuntimeId" : 168 - }, - { - "id" : "minecraft:flowering_azalea", - "blockRuntimeId" : 4815 - }, - { - "id" : "minecraft:glow_lichen", - "blockRuntimeId" : 4973 - }, - { - "id" : "minecraft:amethyst_block", - "blockRuntimeId" : 136 - }, - { - "id" : "minecraft:budding_amethyst", - "blockRuntimeId" : 919 - }, - { - "id" : "minecraft:amethyst_cluster", - "blockRuntimeId" : 138 - }, - { - "id" : "minecraft:large_amethyst_bud", - "blockRuntimeId" : 5369 - }, - { - "id" : "minecraft:medium_amethyst_bud", - "blockRuntimeId" : 5605 - }, - { - "id" : "minecraft:small_amethyst_bud", - "blockRuntimeId" : 6863 - }, - { - "id" : "minecraft:tuff", - "blockRuntimeId" : 7414 - }, - { - "id" : "minecraft:calcite", - "blockRuntimeId" : 943 - }, - { - "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", - "blockRuntimeId" : 900 - }, - { - "id" : "minecraft:red_mushroom", - "blockRuntimeId" : 6610 - }, - { - "id" : "minecraft:crimson_fungus", - "blockRuntimeId" : 3835 - }, - { - "id" : "minecraft:warped_fungus", - "blockRuntimeId" : 7591 - }, - { - "id" : "minecraft:brown_mushroom_block", - "blockRuntimeId" : 915 - }, - { - "id" : "minecraft:red_mushroom_block", - "blockRuntimeId" : 6625 - }, - { - "id" : "minecraft:brown_mushroom_block", - "blockRuntimeId" : 916 - }, - { - "id" : "minecraft:brown_mushroom_block", - "blockRuntimeId" : 901 - }, - { - "id" : "minecraft:egg" - }, - { - "id" : "minecraft:sugar_cane" - }, - { - "id" : "minecraft:sugar" - }, - { - "id" : "minecraft:rotten_flesh" - }, - { - "id" : "minecraft:bone" - }, - { - "id" : "minecraft:web", - "blockRuntimeId" : 7753 - }, - { - "id" : "minecraft:spider_eye" - }, - { - "id" : "minecraft:mob_spawner", - "blockRuntimeId" : 5659 - }, - { - "id" : "minecraft:monster_egg", - "blockRuntimeId" : 5660 - }, - { - "id" : "minecraft:monster_egg", - "blockRuntimeId" : 5661 - }, - { - "id" : "minecraft:monster_egg", - "blockRuntimeId" : 5662 - }, - { - "id" : "minecraft:monster_egg", - "blockRuntimeId" : 5663 - }, - { - "id" : "minecraft:monster_egg", - "blockRuntimeId" : 5664 - }, - { - "id" : "minecraft:monster_egg", - "blockRuntimeId" : 5665 - }, - { - "id" : "minecraft:infested_deepslate", - "blockRuntimeId" : 5128 - }, - { - "id" : "minecraft:dragon_egg", - "blockRuntimeId" : 4583 - }, - { - "id" : "minecraft:turtle_egg", - "blockRuntimeId" : 7415 - }, - { - "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: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:obsidian", - "blockRuntimeId" : 5738 - }, - { - "id" : "minecraft:crying_obsidian", - "blockRuntimeId" : 3909 - }, - { - "id" : "minecraft:bedrock", - "blockRuntimeId" : 234 - }, - { - "id" : "minecraft:soul_sand", - "blockRuntimeId" : 6952 - }, - { - "id" : "minecraft:netherrack", - "blockRuntimeId" : 5707 - }, - { - "id" : "minecraft:magma", - "blockRuntimeId" : 5603 - }, - { - "id" : "minecraft:nether_wart" - }, - { - "id" : "minecraft:end_stone", - "blockRuntimeId" : 4745 - }, - { - "id" : "minecraft:chorus_flower", - "blockRuntimeId" : 1132 - }, - { - "id" : "minecraft:chorus_plant", - "blockRuntimeId" : 1138 - }, - { - "id" : "minecraft:chorus_fruit" - }, - { - "id" : "minecraft:popped_chorus_fruit" - }, - { - "id" : "minecraft:sponge", - "blockRuntimeId" : 6960 - }, - { - "id" : "minecraft:sponge", - "blockRuntimeId" : 6961 - }, - { - "id" : "minecraft:coral_block", - "blockRuntimeId" : 3689 - }, - { - "id" : "minecraft:coral_block", - "blockRuntimeId" : 3690 - }, - { - "id" : "minecraft:coral_block", - "blockRuntimeId" : 3691 - }, - { - "id" : "minecraft:coral_block", - "blockRuntimeId" : 3692 - }, - { - "id" : "minecraft:coral_block", - "blockRuntimeId" : 3693 - }, - { - "id" : "minecraft:coral_block", - "blockRuntimeId" : 3694 - }, - { - "id" : "minecraft:coral_block", - "blockRuntimeId" : 3695 - }, - { - "id" : "minecraft:coral_block", - "blockRuntimeId" : 3696 - }, - { - "id" : "minecraft:coral_block", - "blockRuntimeId" : 3697 - }, - { - "id" : "minecraft:coral_block", - "blockRuntimeId" : 3698 - }, - { - "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:empty_map" - }, - { - "id" : "minecraft:empty_map", - "damage" : 2 - }, - { - "id" : "minecraft:saddle" - }, - { - "id" : "minecraft:leather_horse_armor" - }, - { - "id" : "minecraft:iron_horse_armor" - }, - { - "id" : "minecraft:golden_horse_armor" - }, - { - "id" : "minecraft:diamond_horse_armor" - }, - { - "id" : "minecraft:trident" - }, - { - "id" : "minecraft:turtle_helmet" - }, - { - "id" : "minecraft:elytra" - }, - { - "id" : "minecraft:totem_of_undying" - }, - { - "id" : "minecraft:glass_bottle" - }, - { - "id" : "minecraft:experience_bottle" - }, - { - "id" : "minecraft:potion" - }, - { - "id" : "minecraft:potion", - "damage" : 1 - }, - { - "id" : "minecraft:potion", - "damage" : 2 - }, - { - "id" : "minecraft:potion", - "damage" : 3 - }, - { - "id" : "minecraft:potion", - "damage" : 4 - }, - { - "id" : "minecraft:potion", - "damage" : 5 - }, - { - "id" : "minecraft:potion", - "damage" : 6 - }, - { - "id" : "minecraft:potion", - "damage" : 7 - }, - { - "id" : "minecraft:potion", - "damage" : 8 - }, - { - "id" : "minecraft:potion", - "damage" : 9 - }, - { - "id" : "minecraft:potion", - "damage" : 10 - }, - { - "id" : "minecraft:potion", - "damage" : 11 - }, - { - "id" : "minecraft:potion", - "damage" : 12 - }, - { - "id" : "minecraft:potion", - "damage" : 13 - }, - { - "id" : "minecraft:potion", - "damage" : 14 - }, - { - "id" : "minecraft:potion", - "damage" : 15 - }, - { - "id" : "minecraft:potion", - "damage" : 16 - }, - { - "id" : "minecraft:potion", - "damage" : 17 - }, - { - "id" : "minecraft:potion", - "damage" : 18 - }, - { - "id" : "minecraft:potion", - "damage" : 19 - }, - { - "id" : "minecraft:potion", - "damage" : 20 - }, - { - "id" : "minecraft:potion", - "damage" : 21 - }, - { - "id" : "minecraft:potion", - "damage" : 22 - }, - { - "id" : "minecraft:potion", - "damage" : 23 - }, - { - "id" : "minecraft:potion", - "damage" : 24 - }, - { - "id" : "minecraft:potion", - "damage" : 25 - }, - { - "id" : "minecraft:potion", - "damage" : 26 - }, - { - "id" : "minecraft:potion", - "damage" : 27 - }, - { - "id" : "minecraft:potion", - "damage" : 28 - }, - { - "id" : "minecraft:potion", - "damage" : 29 - }, - { - "id" : "minecraft:potion", - "damage" : 30 - }, - { - "id" : "minecraft:potion", - "damage" : 31 - }, - { - "id" : "minecraft:potion", - "damage" : 32 - }, - { - "id" : "minecraft:potion", - "damage" : 33 - }, - { - "id" : "minecraft:potion", - "damage" : 34 - }, - { - "id" : "minecraft:potion", - "damage" : 35 - }, - { - "id" : "minecraft:potion", - "damage" : 36 - }, - { - "id" : "minecraft:potion", - "damage" : 37 - }, - { - "id" : "minecraft:potion", - "damage" : 38 - }, - { - "id" : "minecraft:potion", - "damage" : 39 - }, - { - "id" : "minecraft:potion", - "damage" : 40 - }, - { - "id" : "minecraft:potion", - "damage" : 41 - }, - { - "id" : "minecraft:potion", - "damage" : 42 - }, - { - "id" : "minecraft:splash_potion" - }, - { - "id" : "minecraft:splash_potion", - "damage" : 1 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 2 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 3 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 4 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 5 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 6 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 7 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 8 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 9 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 10 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 11 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 12 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 13 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 14 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 15 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 16 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 17 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 18 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 19 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 20 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 21 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 22 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 23 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 24 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 25 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 26 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 27 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 28 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 29 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 30 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 31 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 32 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 33 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 34 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 35 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 36 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 37 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 38 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 39 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 40 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 41 - }, - { - "id" : "minecraft:splash_potion", - "damage" : 42 - }, - { - "id" : "minecraft:lingering_potion" - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 1 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 2 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 3 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 4 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 5 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 6 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 7 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 8 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 9 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 10 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 11 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 12 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 13 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 14 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 15 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 16 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 17 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 18 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 19 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 20 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 21 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 22 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 23 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 24 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 25 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 26 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 27 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 28 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 29 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 30 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 31 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 32 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 33 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 34 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 35 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 36 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 37 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 38 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 39 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 40 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 41 - }, - { - "id" : "minecraft:lingering_potion", - "damage" : 42 - }, - { - "id" : "minecraft:spyglass" - }, - { - "id" : "minecraft: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", - "blockRuntimeId" : 7354 - }, - { - "id" : "minecraft:soul_torch", - "blockRuntimeId" : 6954 - }, - { - "id" : "minecraft:sea_pickle", - "blockRuntimeId" : 6820 - }, - { - "id" : "minecraft:lantern", - "blockRuntimeId" : 5364 - }, - { - "id" : "minecraft:soul_lantern", - "blockRuntimeId" : 6950 - }, - { - "id" : "minecraft:candle", - "blockRuntimeId" : 953 - }, - { - "id" : "minecraft:white_candle", - "blockRuntimeId" : 7788 - }, - { - "id" : "minecraft:orange_candle", - "blockRuntimeId" : 5740 - }, - { - "id" : "minecraft:magenta_candle", - "blockRuntimeId" : 5587 - }, - { - "id" : "minecraft:light_blue_candle", - "blockRuntimeId" : 5475 - }, - { - "id" : "minecraft:yellow_candle", - "blockRuntimeId" : 7929 - }, - { - "id" : "minecraft:lime_candle", - "blockRuntimeId" : 5523 - }, - { - "id" : "minecraft:pink_candle", - "blockRuntimeId" : 5772 - }, - { - "id" : "minecraft:gray_candle", - "blockRuntimeId" : 5001 - }, - { - "id" : "minecraft:light_gray_candle", - "blockRuntimeId" : 5491 - }, - { - "id" : "minecraft:cyan_candle", - "blockRuntimeId" : 3921 - }, - { - "id" : "minecraft:purple_candle", - "blockRuntimeId" : 6512 - }, - { - "id" : "minecraft:blue_candle", - "blockRuntimeId" : 675 - }, - { - "id" : "minecraft:brown_candle", - "blockRuntimeId" : 884 - }, - { - "id" : "minecraft:green_candle", - "blockRuntimeId" : 5017 - }, - { - "id" : "minecraft:red_candle", - "blockRuntimeId" : 6583 - }, - { - "id" : "minecraft:black_candle", - "blockRuntimeId" : 478 - }, - { - "id" : "minecraft:crafting_table", - "blockRuntimeId" : 3771 - }, - { - "id" : "minecraft:cartography_table", - "blockRuntimeId" : 987 - }, - { - "id" : "minecraft:fletching_table", - "blockRuntimeId" : 4812 - }, - { - "id" : "minecraft:smithing_table", - "blockRuntimeId" : 6876 - }, - { - "id" : "minecraft:beehive", - "blockRuntimeId" : 260 - }, - { - "id" : "minecraft:campfire" - }, - { - "id" : "minecraft:soul_campfire" - }, - { - "id" : "minecraft:furnace", - "blockRuntimeId" : 4877 - }, - { - "id" : "minecraft:blast_furnace", - "blockRuntimeId" : 669 - }, - { - "id" : "minecraft:smoker", - "blockRuntimeId" : 6877 - }, - { - "id" : "minecraft:respawn_anchor", - "blockRuntimeId" : 6702 - }, - { - "id" : "minecraft:brewing_stand" - }, - { - "id" : "minecraft:anvil", - "blockRuntimeId" : 152 - }, - { - "id" : "minecraft:anvil", - "blockRuntimeId" : 156 - }, - { - "id" : "minecraft:anvil", - "blockRuntimeId" : 160 - }, - { - "id" : "minecraft:grindstone", - "blockRuntimeId" : 5033 - }, - { - "id" : "minecraft:enchanting_table", - "blockRuntimeId" : 4719 - }, - { - "id" : "minecraft:bookshelf", - "blockRuntimeId" : 704 - }, - { - "id" : "minecraft:lectern", - "blockRuntimeId" : 5435 - }, - { - "id" : "minecraft:cauldron" - }, - { - "id" : "minecraft:composter", - "blockRuntimeId" : 3635 - }, - { - "id" : "minecraft:chest", - "blockRuntimeId" : 1123 - }, - { - "id" : "minecraft:trapped_chest", - "blockRuntimeId" : 7376 - }, - { - "id" : "minecraft:ender_chest", - "blockRuntimeId" : 4746 - }, - { - "id" : "minecraft:barrel", - "blockRuntimeId" : 201 - }, - { - "id" : "minecraft:undyed_shulker_box", - "blockRuntimeId" : 7459 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6833 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6841 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6840 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6848 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6845 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6847 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6834 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6837 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6838 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6846 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6842 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6836 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6844 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6843 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6835 - }, - { - "id" : "minecraft:shulker_box", - "blockRuntimeId" : 6839 - }, - { - "id" : "minecraft:armor_stand" - }, - { - "id" : "minecraft:noteblock", - "blockRuntimeId" : 5717 - }, - { - "id" : "minecraft:jukebox", - "blockRuntimeId" : 5209 - }, - { - "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_pigstep" - }, - { - "id" : "minecraft:glowstone_dust" - }, - { - "id" : "minecraft:glowstone", - "blockRuntimeId" : 4975 - }, - { - "id" : "minecraft:redstone_lamp", - "blockRuntimeId" : 6649 - }, - { - "id" : "minecraft:sealantern", - "blockRuntimeId" : 6831 - }, - { - "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:crimson_sign" - }, - { - "id" : "minecraft:warped_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: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:beacon", - "blockRuntimeId" : 217 - }, - { - "id" : "minecraft:bell", - "blockRuntimeId" : 292 - }, - { - "id" : "minecraft:conduit", - "blockRuntimeId" : 3676 - }, - { - "id" : "minecraft:stonecutter_block", - "blockRuntimeId" : 7292 - }, - { - "id" : "minecraft:end_portal_frame", - "blockRuntimeId" : 4731 - }, - { - "id" : "minecraft:coal" - }, - { - "id" : "minecraft:charcoal" - }, - { - "id" : "minecraft:diamond" - }, - { - "id" : "minecraft:iron_nugget" - }, - { - "id" : "minecraft:raw_iron" - }, - { - "id" : "minecraft:raw_gold" - }, - { - "id" : "minecraft:raw_copper" - }, - { - "id" : "minecraft:copper_ingot" - }, - { - "id" : "minecraft:iron_ingot" - }, - { - "id" : "minecraft:netherite_scrap" - }, - { - "id" : "minecraft:netherite_ingot" - }, - { - "id" : "minecraft:gold_nugget" - }, - { - "id" : "minecraft:gold_ingot" - }, - { - "id" : "minecraft:emerald" - }, - { - "id" : "minecraft:quartz" - }, - { - "id" : "minecraft:clay_ball" - }, - { - "id" : "minecraft:brick" - }, - { - "id" : "minecraft:netherbrick" - }, - { - "id" : "minecraft:prismarine_shard" - }, - { - "id" : "minecraft:amethyst_shard" - }, - { - "id" : "minecraft:prismarine_crystals" - }, - { - "id" : "minecraft:nautilus_shell" - }, - { - "id" : "minecraft:heart_of_the_sea" - }, - { - "id" : "minecraft:scute" - }, - { - "id" : "minecraft:phantom_membrane" - }, - { - "id" : "minecraft:string" - }, - { - "id" : "minecraft:feather" - }, - { - "id" : "minecraft:flint" - }, - { - "id" : "minecraft:gunpowder" - }, - { - "id" : "minecraft:leather" - }, - { - "id" : "minecraft:rabbit_hide" - }, - { - "id" : "minecraft:rabbit_foot" - }, - { - "id" : "minecraft:fire_charge" - }, - { - "id" : "minecraft:blaze_rod" - }, - { - "id" : "minecraft:blaze_powder" - }, - { - "id" : "minecraft:magma_cream" - }, - { - "id" : "minecraft:fermented_spider_eye" - }, - { - "id" : "minecraft: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", - "blockRuntimeId" : 4739 - }, - { - "id" : "minecraft:lightning_rod", - "blockRuntimeId" : 5517 - }, - { - "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: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:rail", - "blockRuntimeId" : 6570 - }, - { - "id" : "minecraft:golden_rail", - "blockRuntimeId" : 4978 - }, - { - "id" : "minecraft:detector_rail", - "blockRuntimeId" : 4462 - }, - { - "id" : "minecraft:activator_rail", - "blockRuntimeId" : 122 - }, - { - "id" : "minecraft:minecart" - }, - { - "id" : "minecraft:chest_minecart" - }, - { - "id" : "minecraft:hopper_minecart" - }, - { - "id" : "minecraft:tnt_minecart" - }, - { - "id" : "minecraft:redstone" - }, - { - "id" : "minecraft:redstone_block", - "blockRuntimeId" : 6648 - }, - { - "id" : "minecraft:redstone_torch", - "blockRuntimeId" : 6651 - }, - { - "id" : "minecraft:lever", - "blockRuntimeId" : 5443 - }, - { - "id" : "minecraft:wooden_button", - "blockRuntimeId" : 7841 - }, - { - "id" : "minecraft:spruce_button", - "blockRuntimeId" : 6963 - }, - { - "id" : "minecraft:birch_button", - "blockRuntimeId" : 356 - }, - { - "id" : "minecraft:jungle_button", - "blockRuntimeId" : 5210 - }, - { - "id" : "minecraft:acacia_button" - }, - { - "id" : "minecraft:dark_oak_button", - "blockRuntimeId" : 3937 - }, - { - "id" : "minecraft:stone_button", - "blockRuntimeId" : 7192 - }, - { - "id" : "minecraft:crimson_button", - "blockRuntimeId" : 3772 - }, - { - "id" : "minecraft:warped_button", - "blockRuntimeId" : 7528 - }, - { - "id" : "minecraft:polished_blackstone_button", - "blockRuntimeId" : 6004 - }, - { - "id" : "minecraft:tripwire_hook", - "blockRuntimeId" : 7398 - }, - { - "id" : "minecraft:wooden_pressure_plate", - "blockRuntimeId" : 7885 - }, - { - "id" : "minecraft:spruce_pressure_plate", - "blockRuntimeId" : 7023 - }, - { - "id" : "minecraft:birch_pressure_plate", - "blockRuntimeId" : 416 - }, - { - "id" : "minecraft:jungle_pressure_plate", - "blockRuntimeId" : 5270 - }, - { - "id" : "minecraft:acacia_pressure_plate", - "blockRuntimeId" : 60 - }, - { - "id" : "minecraft:dark_oak_pressure_plate", - "blockRuntimeId" : 3997 - }, - { - "id" : "minecraft:crimson_pressure_plate", - "blockRuntimeId" : 3841 - }, - { - "id" : "minecraft:warped_pressure_plate", - "blockRuntimeId" : 7597 - }, - { - "id" : "minecraft:stone_pressure_plate", - "blockRuntimeId" : 7204 - }, - { - "id" : "minecraft:light_weighted_pressure_plate", - "blockRuntimeId" : 5501 - }, - { - "id" : "minecraft:heavy_weighted_pressure_plate", - "blockRuntimeId" : 5097 - }, - { - "id" : "minecraft:polished_blackstone_pressure_plate", - "blockRuntimeId" : 6018 - }, - { - "id" : "minecraft:observer", - "blockRuntimeId" : 5726 - }, - { - "id" : "minecraft:daylight_detector", - "blockRuntimeId" : 4067 - }, - { - "id" : "minecraft:repeater" - }, - { - "id" : "minecraft:comparator" - }, - { - "id" : "minecraft:hopper" - }, - { - "id" : "minecraft:dropper", - "blockRuntimeId" : 4589 - }, - { - "id" : "minecraft:dispenser", - "blockRuntimeId" : 4490 - }, - { - "id" : "minecraft:piston", - "blockRuntimeId" : 5789 - }, - { - "id" : "minecraft:sticky_piston", - "blockRuntimeId" : 7166 - }, - { - "id" : "minecraft:tnt", - "blockRuntimeId" : 7350 - }, - { - "id" : "minecraft:name_tag" - }, - { - "id" : "minecraft:loom", - "blockRuntimeId" : 5583 - }, - { - "id" : "minecraft:banner" - }, - { - "id" : "minecraft:banner", - "damage" : 8 - }, - { - "id" : "minecraft:banner", - "damage" : 7 - }, - { - "id" : "minecraft:banner", - "damage" : 15 - }, - { - "id" : "minecraft:banner", - "damage" : 12 - }, - { - "id" : "minecraft:banner", - "damage" : 14 - }, - { - "id" : "minecraft:banner", - "damage" : 1 - }, - { - "id" : "minecraft:banner", - "damage" : 4 - }, - { - "id" : "minecraft:banner", - "damage" : 5 - }, - { - "id" : "minecraft:banner", - "damage" : 13 - }, - { - "id" : "minecraft:banner", - "damage" : 9 - }, - { - "id" : "minecraft:banner", - "damage" : 3 - }, - { - "id" : "minecraft:banner", - "damage" : 11 - }, - { - "id" : "minecraft:banner", - "damage" : 10 - }, - { - "id" : "minecraft:banner", - "damage" : 2 - }, - { - "id" : "minecraft:banner", - "damage" : 6 - }, - { - "id" : "minecraft:banner", - "damage" : 15, - "nbt_b64" : "CgAAAwQAVHlwZQEAAAAA" - }, - { - "id" : "minecraft:creeper_banner_pattern" - }, - { - "id" : "minecraft:skull_banner_pattern" - }, - { - "id" : "minecraft:flower_banner_pattern" - }, - { - "id" : "minecraft:mojang_banner_pattern" - }, - { - "id" : "minecraft:field_masoned_banner_pattern" - }, - { - "id" : "minecraft:bordure_indented_banner_pattern" - }, - { - "id" : "minecraft:piglin_banner_pattern" - }, - { - "id" : "minecraft:globe_banner_pattern" - }, - { - "id" : "minecraft: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", - "blockRuntimeId" : 7348 - }, - { - "id" : "minecraft:lodestone_compass" - } - ] -} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/creative_items.1_18_30.json b/core/src/main/resources/bedrock/creative_items.1_19_0.json similarity index 82% rename from core/src/main/resources/bedrock/creative_items.1_18_30.json rename to core/src/main/resources/bedrock/creative_items.1_19_0.json index 3cfb5cfc1..3a356a802 100644 --- a/core/src/main/resources/bedrock/creative_items.1_18_30.json +++ b/core/src/main/resources/bedrock/creative_items.1_19_0.json @@ -2,35 +2,59 @@ "items" : [ { "id" : "minecraft:planks", - "blockRuntimeId" : 5995 + "blockRuntimeId" : 6071 }, { "id" : "minecraft:planks", - "blockRuntimeId" : 5996 + "blockRuntimeId" : 6072 }, { "id" : "minecraft:planks", - "blockRuntimeId" : 5997 + "blockRuntimeId" : 6073 }, { "id" : "minecraft:planks", - "blockRuntimeId" : 5998 + "blockRuntimeId" : 6074 }, { "id" : "minecraft:planks", - "blockRuntimeId" : 5999 + "blockRuntimeId" : 6075 }, { "id" : "minecraft:planks", - "blockRuntimeId" : 6000 + "blockRuntimeId" : 6076 + }, + { + "id" : "minecraft:mangrove_planks", + "blockRuntimeId" : 947 }, { "id" : "minecraft:crimson_planks", - "blockRuntimeId" : 4806 + "blockRuntimeId" : 4850 }, { "id" : "minecraft:warped_planks", - "blockRuntimeId" : 928 + "blockRuntimeId" : 920 + }, + { + "id" : "minecraft:cobblestone_wall", + "blockRuntimeId" : 1182 + }, + { + "id" : "minecraft:cobblestone_wall", + "blockRuntimeId" : 1183 + }, + { + "id" : "minecraft:cobblestone_wall", + "blockRuntimeId" : 1184 + }, + { + "id" : "minecraft:cobblestone_wall", + "blockRuntimeId" : 1185 + }, + { + "id" : "minecraft:cobblestone_wall", + "blockRuntimeId" : 1186 }, { "id" : "minecraft:cobblestone_wall", @@ -38,7 +62,7 @@ }, { "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1188 + "blockRuntimeId" : 1194 }, { "id" : "minecraft:cobblestone_wall", @@ -48,109 +72,97 @@ "id" : "minecraft:cobblestone_wall", "blockRuntimeId" : 1190 }, + { + "id" : "minecraft:cobblestone_wall", + "blockRuntimeId" : 1188 + }, { "id" : "minecraft:cobblestone_wall", "blockRuntimeId" : 1191 }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1192 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1199 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1194 - }, { "id" : "minecraft:cobblestone_wall", "blockRuntimeId" : 1195 }, + { + "id" : "minecraft:cobblestone_wall", + "blockRuntimeId" : 1192 + }, { "id" : "minecraft:cobblestone_wall", "blockRuntimeId" : 1193 }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1196 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1200 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1197 - }, - { - "id" : "minecraft:cobblestone_wall", - "blockRuntimeId" : 1198 - }, { "id" : "minecraft:blackstone_wall", - "blockRuntimeId" : 3919 + "blockRuntimeId" : 3930 }, { "id" : "minecraft:polished_blackstone_wall", - "blockRuntimeId" : 6640 + "blockRuntimeId" : 6724 }, { "id" : "minecraft:polished_blackstone_brick_wall", - "blockRuntimeId" : 978 + "blockRuntimeId" : 971 }, { "id" : "minecraft:cobbled_deepslate_wall", - "blockRuntimeId" : 8024 + "blockRuntimeId" : 8082 }, { "id" : "minecraft:deepslate_tile_wall", - "blockRuntimeId" : 5027 + "blockRuntimeId" : 5071 }, { "id" : "minecraft:polished_deepslate_wall", - "blockRuntimeId" : 7759 + "blockRuntimeId" : 7817 }, { "id" : "minecraft:deepslate_brick_wall", - "blockRuntimeId" : 437 + "blockRuntimeId" : 429 + }, + { + "id" : "minecraft:mud_brick_wall", + "blockRuntimeId" : 730 }, { "id" : "minecraft:fence", - "blockRuntimeId" : 7306 + "blockRuntimeId" : 7364 }, { "id" : "minecraft:fence", - "blockRuntimeId" : 7307 + "blockRuntimeId" : 7365 }, { "id" : "minecraft:fence", - "blockRuntimeId" : 7308 + "blockRuntimeId" : 7366 }, { "id" : "minecraft:fence", - "blockRuntimeId" : 7309 + "blockRuntimeId" : 7367 }, { "id" : "minecraft:fence", - "blockRuntimeId" : 7310 + "blockRuntimeId" : 7368 }, { "id" : "minecraft:fence", - "blockRuntimeId" : 7311 + "blockRuntimeId" : 7369 + }, + { + "id" : "minecraft:mangrove_fence", + "blockRuntimeId" : 6633 }, { "id" : "minecraft:nether_brick_fence", - "blockRuntimeId" : 4238 + "blockRuntimeId" : 4290 }, { "id" : "minecraft:crimson_fence", - "blockRuntimeId" : 7938 + "blockRuntimeId" : 7996 }, { "id" : "minecraft:warped_fence", - "blockRuntimeId" : 5777 + "blockRuntimeId" : 5853 }, { "id" : "minecraft:fence_gate", @@ -158,47 +170,51 @@ }, { "id" : "minecraft:spruce_fence_gate", - "blockRuntimeId" : 6475 + "blockRuntimeId" : 6584 }, { "id" : "minecraft:birch_fence_gate", - "blockRuntimeId" : 3782 + "blockRuntimeId" : 3777 }, { "id" : "minecraft:jungle_fence_gate", - "blockRuntimeId" : 5315 + "blockRuntimeId" : 5365 }, { "id" : "minecraft:acacia_fence_gate", - "blockRuntimeId" : 7528 + "blockRuntimeId" : 7586 }, { "id" : "minecraft:dark_oak_fence_gate", - "blockRuntimeId" : 4156 + "blockRuntimeId" : 4173 + }, + { + "id" : "minecraft:mangrove_fence_gate", + "blockRuntimeId" : 4625 }, { "id" : "minecraft:crimson_fence_gate", - "blockRuntimeId" : 4617 + "blockRuntimeId" : 4661 }, { "id" : "minecraft:warped_fence_gate", - "blockRuntimeId" : 5349 + "blockRuntimeId" : 5399 }, { "id" : "minecraft:normal_stone_stairs", - "blockRuntimeId" : 641 + "blockRuntimeId" : 633 }, { "id" : "minecraft:stone_stairs", - "blockRuntimeId" : 3713 + "blockRuntimeId" : 3708 }, { "id" : "minecraft:mossy_cobblestone_stairs", - "blockRuntimeId" : 4081 + "blockRuntimeId" : 4092 }, { "id" : "minecraft:oak_stairs", - "blockRuntimeId" : 287 + "blockRuntimeId" : 273 }, { "id" : "minecraft:spruce_stairs", @@ -206,71 +222,75 @@ }, { "id" : "minecraft:birch_stairs", - "blockRuntimeId" : 6957 + "blockRuntimeId" : 7003 }, { "id" : "minecraft:jungle_stairs", - "blockRuntimeId" : 6883 + "blockRuntimeId" : 6967 }, { "id" : "minecraft:acacia_stairs", - "blockRuntimeId" : 6123 + "blockRuntimeId" : 6200 }, { "id" : "minecraft:dark_oak_stairs", - "blockRuntimeId" : 5019 + "blockRuntimeId" : 5063 + }, + { + "id" : "minecraft:mangrove_stairs", + "blockRuntimeId" : 4595 }, { "id" : "minecraft:stone_brick_stairs", - "blockRuntimeId" : 939 + "blockRuntimeId" : 931 }, { "id" : "minecraft:mossy_stone_brick_stairs", - "blockRuntimeId" : 5807 + "blockRuntimeId" : 5883 }, { "id" : "minecraft:sandstone_stairs", - "blockRuntimeId" : 3592 + "blockRuntimeId" : 3587 }, { "id" : "minecraft:smooth_sandstone_stairs", - "blockRuntimeId" : 3632 + "blockRuntimeId" : 3627 }, { "id" : "minecraft:red_sandstone_stairs", - "blockRuntimeId" : 5300 + "blockRuntimeId" : 5350 }, { "id" : "minecraft:smooth_red_sandstone_stairs", - "blockRuntimeId" : 5496 + "blockRuntimeId" : 5546 }, { "id" : "minecraft:granite_stairs", - "blockRuntimeId" : 3542 + "blockRuntimeId" : 3537 }, { "id" : "minecraft:polished_granite_stairs", - "blockRuntimeId" : 4139 + "blockRuntimeId" : 4150 }, { "id" : "minecraft:diorite_stairs", - "blockRuntimeId" : 4339 + "blockRuntimeId" : 4391 }, { "id" : "minecraft:polished_diorite_stairs", - "blockRuntimeId" : 6588 + "blockRuntimeId" : 6714 }, { "id" : "minecraft:andesite_stairs", - "blockRuntimeId" : 5258 + "blockRuntimeId" : 5308 }, { "id" : "minecraft:polished_andesite_stairs", - "blockRuntimeId" : 6982 + "blockRuntimeId" : 7028 }, { "id" : "minecraft:brick_stairs", - "blockRuntimeId" : 6421 + "blockRuntimeId" : 6530 }, { "id" : "minecraft:nether_brick_stairs", @@ -278,31 +298,31 @@ }, { "id" : "minecraft:red_nether_brick_stairs", - "blockRuntimeId" : 6493 + "blockRuntimeId" : 6602 }, { "id" : "minecraft:end_brick_stairs", - "blockRuntimeId" : 6347 + "blockRuntimeId" : 6382 }, { "id" : "minecraft:quartz_stairs", - "blockRuntimeId" : 4723 + "blockRuntimeId" : 4767 }, { "id" : "minecraft:smooth_quartz_stairs", - "blockRuntimeId" : 7642 + "blockRuntimeId" : 7700 }, { "id" : "minecraft:purpur_stairs", - "blockRuntimeId" : 7697 + "blockRuntimeId" : 7755 }, { "id" : "minecraft:prismarine_stairs", - "blockRuntimeId" : 7205 + "blockRuntimeId" : 7263 }, { "id" : "minecraft:dark_prismarine_stairs", - "blockRuntimeId" : 7372 + "blockRuntimeId" : 7430 }, { "id" : "minecraft:prismarine_bricks_stairs", @@ -310,55 +330,55 @@ }, { "id" : "minecraft:crimson_stairs", - "blockRuntimeId" : 6245 + "blockRuntimeId" : 6280 }, { "id" : "minecraft:warped_stairs", - "blockRuntimeId" : 3723 + "blockRuntimeId" : 3718 }, { "id" : "minecraft:blackstone_stairs", - "blockRuntimeId" : 6973 + "blockRuntimeId" : 7019 }, { "id" : "minecraft:polished_blackstone_stairs", - "blockRuntimeId" : 4245 + "blockRuntimeId" : 4297 }, { "id" : "minecraft:polished_blackstone_brick_stairs", - "blockRuntimeId" : 4425 + "blockRuntimeId" : 4477 }, { "id" : "minecraft:cut_copper_stairs", - "blockRuntimeId" : 4528 + "blockRuntimeId" : 4604 }, { "id" : "minecraft:exposed_cut_copper_stairs", - "blockRuntimeId" : 4519 + "blockRuntimeId" : 4587 }, { "id" : "minecraft:weathered_cut_copper_stairs", - "blockRuntimeId" : 4253 + "blockRuntimeId" : 4305 }, { "id" : "minecraft:oxidized_cut_copper_stairs", - "blockRuntimeId" : 361 + "blockRuntimeId" : 351 }, { "id" : "minecraft:waxed_cut_copper_stairs", - "blockRuntimeId" : 403 + "blockRuntimeId" : 393 }, { "id" : "minecraft:waxed_exposed_cut_copper_stairs", - "blockRuntimeId" : 3891 + "blockRuntimeId" : 3902 }, { "id" : "minecraft:waxed_weathered_cut_copper_stairs", - "blockRuntimeId" : 6091 + "blockRuntimeId" : 6167 }, { "id" : "minecraft:waxed_oxidized_cut_copper_stairs", - "blockRuntimeId" : 5764 + "blockRuntimeId" : 5840 }, { "id" : "minecraft:cobbled_deepslate_stairs", @@ -366,15 +386,19 @@ }, { "id" : "minecraft:deepslate_tile_stairs", - "blockRuntimeId" : 4609 + "blockRuntimeId" : 4653 }, { "id" : "minecraft:polished_deepslate_stairs", - "blockRuntimeId" : 308 + "blockRuntimeId" : 294 }, { "id" : "minecraft:deepslate_brick_stairs", - "blockRuntimeId" : 7364 + "blockRuntimeId" : 7422 + }, + { + "id" : "minecraft:mud_brick_stairs", + "blockRuntimeId" : 5522 }, { "id" : "minecraft:wooden_door" @@ -394,6 +418,9 @@ { "id" : "minecraft:dark_oak_door" }, + { + "id" : "minecraft:mangrove_door" + }, { "id" : "minecraft:iron_door" }, @@ -405,47 +432,59 @@ }, { "id" : "minecraft:trapdoor", - "blockRuntimeId" : 227 + "blockRuntimeId" : 229 }, { "id" : "minecraft:spruce_trapdoor", - "blockRuntimeId" : 6443 + "blockRuntimeId" : 6552 }, { "id" : "minecraft:birch_trapdoor", - "blockRuntimeId" : 6524 + "blockRuntimeId" : 6650 }, { "id" : "minecraft:jungle_trapdoor", - "blockRuntimeId" : 5331 + "blockRuntimeId" : 5381 }, { "id" : "minecraft:acacia_trapdoor", - "blockRuntimeId" : 5539 + "blockRuntimeId" : 5589 }, { "id" : "minecraft:dark_oak_trapdoor", - "blockRuntimeId" : 7444 + "blockRuntimeId" : 7502 + }, + { + "id" : "minecraft:mangrove_trapdoor", + "blockRuntimeId" : 4485 }, { "id" : "minecraft:iron_trapdoor", - "blockRuntimeId" : 335 + "blockRuntimeId" : 321 }, { "id" : "minecraft:crimson_trapdoor", - "blockRuntimeId" : 4281 + "blockRuntimeId" : 4333 }, { "id" : "minecraft:warped_trapdoor", - "blockRuntimeId" : 4689 + "blockRuntimeId" : 4733 }, { "id" : "minecraft:iron_bars", - "blockRuntimeId" : 4757 + "blockRuntimeId" : 4801 }, { "id" : "minecraft:glass", - "blockRuntimeId" : 6088 + "blockRuntimeId" : 6164 + }, + { + "id" : "minecraft:stained_glass", + "blockRuntimeId" : 1133 + }, + { + "id" : "minecraft:stained_glass", + "blockRuntimeId" : 1141 }, { "id" : "minecraft:stained_glass", @@ -455,53 +494,29 @@ "id" : "minecraft:stained_glass", "blockRuntimeId" : 1148 }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 1147 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 1155 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 1152 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 1154 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 1141 - }, - { - "id" : "minecraft:stained_glass", - "blockRuntimeId" : 1144 - }, { "id" : "minecraft:stained_glass", "blockRuntimeId" : 1145 }, { "id" : "minecraft:stained_glass", - "blockRuntimeId" : 1153 + "blockRuntimeId" : 1147 }, { "id" : "minecraft:stained_glass", - "blockRuntimeId" : 1149 + "blockRuntimeId" : 1134 }, { "id" : "minecraft:stained_glass", - "blockRuntimeId" : 1143 + "blockRuntimeId" : 1137 }, { "id" : "minecraft:stained_glass", - "blockRuntimeId" : 1151 + "blockRuntimeId" : 1138 }, { "id" : "minecraft:stained_glass", - "blockRuntimeId" : 1150 + "blockRuntimeId" : 1146 }, { "id" : "minecraft:stained_glass", @@ -509,491 +524,515 @@ }, { "id" : "minecraft:stained_glass", - "blockRuntimeId" : 1146 + "blockRuntimeId" : 1136 + }, + { + "id" : "minecraft:stained_glass", + "blockRuntimeId" : 1144 + }, + { + "id" : "minecraft:stained_glass", + "blockRuntimeId" : 1143 + }, + { + "id" : "minecraft:stained_glass", + "blockRuntimeId" : 1135 + }, + { + "id" : "minecraft:stained_glass", + "blockRuntimeId" : 1139 }, { "id" : "minecraft:tinted_glass", - "blockRuntimeId" : 5899 + "blockRuntimeId" : 5975 }, { "id" : "minecraft:glass_pane", - "blockRuntimeId" : 5189 + "blockRuntimeId" : 5233 }, { "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 4808 + "blockRuntimeId" : 4852 }, { "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 4816 + "blockRuntimeId" : 4860 }, { "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 4815 + "blockRuntimeId" : 4859 }, { "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 4823 + "blockRuntimeId" : 4867 }, { "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 4820 + "blockRuntimeId" : 4864 }, { "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 4822 + "blockRuntimeId" : 4866 }, { "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 4809 + "blockRuntimeId" : 4853 }, { "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 4812 + "blockRuntimeId" : 4856 }, { "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 4813 + "blockRuntimeId" : 4857 }, { "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 4821 + "blockRuntimeId" : 4865 }, { "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 4817 + "blockRuntimeId" : 4861 }, { "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 4811 + "blockRuntimeId" : 4855 }, { "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 4819 + "blockRuntimeId" : 4863 }, { "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 4818 + "blockRuntimeId" : 4862 }, { "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 4810 + "blockRuntimeId" : 4854 }, { "id" : "minecraft:stained_glass_pane", - "blockRuntimeId" : 4814 + "blockRuntimeId" : 4858 }, { "id" : "minecraft:ladder", - "blockRuntimeId" : 8204 + "blockRuntimeId" : 8262 }, { "id" : "minecraft:scaffolding", - "blockRuntimeId" : 3576 + "blockRuntimeId" : 3571 }, { - "id" : "minecraft:double_stone_slab", - "blockRuntimeId" : 249 + "id" : "minecraft:stone_block_slab", + "blockRuntimeId" : 4270 }, { - "id" : "minecraft:double_stone_slab4", - "blockRuntimeId" : 6632 + "id" : "minecraft:stone_block_slab4", + "blockRuntimeId" : 5822 }, { - "id" : "minecraft:double_stone_slab", - "blockRuntimeId" : 252 + "id" : "minecraft:stone_block_slab", + "blockRuntimeId" : 4273 }, { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 6603 + "id" : "minecraft:stone_block_slab2", + "blockRuntimeId" : 5793 }, { "id" : "minecraft:wooden_slab", - "blockRuntimeId" : 5220 + "blockRuntimeId" : 5270 }, { "id" : "minecraft:wooden_slab", - "blockRuntimeId" : 5221 + "blockRuntimeId" : 5271 }, { "id" : "minecraft:wooden_slab", - "blockRuntimeId" : 5222 + "blockRuntimeId" : 5272 }, { "id" : "minecraft:wooden_slab", - "blockRuntimeId" : 5223 + "blockRuntimeId" : 5273 }, { "id" : "minecraft:wooden_slab", - "blockRuntimeId" : 5224 + "blockRuntimeId" : 5274 }, { "id" : "minecraft:wooden_slab", - "blockRuntimeId" : 5225 + "blockRuntimeId" : 5275 }, { - "id" : "minecraft:double_stone_slab", - "blockRuntimeId" : 254 + "id" : "minecraft:mangrove_slab", + "blockRuntimeId" : 1149 }, { - "id" : "minecraft:double_stone_slab4", - "blockRuntimeId" : 6630 + "id" : "minecraft:stone_block_slab", + "blockRuntimeId" : 4275 }, { - "id" : "minecraft:double_stone_slab", - "blockRuntimeId" : 250 + "id" : "minecraft:stone_block_slab4", + "blockRuntimeId" : 5820 }, { - "id" : "minecraft:double_stone_slab4", - "blockRuntimeId" : 6633 + "id" : "minecraft:stone_block_slab", + "blockRuntimeId" : 4271 }, { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 6604 + "id" : "minecraft:stone_block_slab4", + "blockRuntimeId" : 5823 }, { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 6598 + "id" : "minecraft:stone_block_slab2", + "blockRuntimeId" : 5794 }, { - "id" : "minecraft:double_stone_slab4", - "blockRuntimeId" : 6634 + "id" : "minecraft:stone_block_slab2", + "blockRuntimeId" : 5788 }, { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 6615 - }, - { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 6620 - }, - { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 6621 - }, - { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 6618 - }, - { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 6619 - }, - { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 6617 - }, - { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 6616 - }, - { - "id" : "minecraft:double_stone_slab", - "blockRuntimeId" : 253 - }, - { - "id" : "minecraft:double_stone_slab", - "blockRuntimeId" : 256 - }, - { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 6605 - }, - { - "id" : "minecraft:double_stone_slab3", - "blockRuntimeId" : 6614 - }, - { - "id" : "minecraft:double_stone_slab", - "blockRuntimeId" : 255 - }, - { - "id" : "minecraft:double_stone_slab4", - "blockRuntimeId" : 6631 - }, - { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 6599 - }, - { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 6600 - }, - { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 6601 - }, - { - "id" : "minecraft:double_stone_slab2", - "blockRuntimeId" : 6602 - }, - { - "id" : "minecraft:crimson_slab", + "id" : "minecraft:stone_block_slab4", "blockRuntimeId" : 5824 }, + { + "id" : "minecraft:stone_block_slab3", + "blockRuntimeId" : 5805 + }, + { + "id" : "minecraft:stone_block_slab3", + "blockRuntimeId" : 5810 + }, + { + "id" : "minecraft:stone_block_slab3", + "blockRuntimeId" : 5811 + }, + { + "id" : "minecraft:stone_block_slab3", + "blockRuntimeId" : 5808 + }, + { + "id" : "minecraft:stone_block_slab3", + "blockRuntimeId" : 5809 + }, + { + "id" : "minecraft:stone_block_slab3", + "blockRuntimeId" : 5807 + }, + { + "id" : "minecraft:stone_block_slab3", + "blockRuntimeId" : 5806 + }, + { + "id" : "minecraft:stone_block_slab", + "blockRuntimeId" : 4274 + }, + { + "id" : "minecraft:stone_block_slab", + "blockRuntimeId" : 4277 + }, + { + "id" : "minecraft:stone_block_slab2", + "blockRuntimeId" : 5795 + }, + { + "id" : "minecraft:stone_block_slab3", + "blockRuntimeId" : 5804 + }, + { + "id" : "minecraft:stone_block_slab", + "blockRuntimeId" : 4276 + }, + { + "id" : "minecraft:stone_block_slab4", + "blockRuntimeId" : 5821 + }, + { + "id" : "minecraft:stone_block_slab2", + "blockRuntimeId" : 5789 + }, + { + "id" : "minecraft:stone_block_slab2", + "blockRuntimeId" : 5790 + }, + { + "id" : "minecraft:stone_block_slab2", + "blockRuntimeId" : 5791 + }, + { + "id" : "minecraft:stone_block_slab2", + "blockRuntimeId" : 5792 + }, + { + "id" : "minecraft:crimson_slab", + "blockRuntimeId" : 5900 + }, { "id" : "minecraft:warped_slab", - "blockRuntimeId" : 6375 + "blockRuntimeId" : 6484 }, { "id" : "minecraft:blackstone_slab", - "blockRuntimeId" : 918 + "blockRuntimeId" : 910 }, { "id" : "minecraft:polished_blackstone_slab", - "blockRuntimeId" : 5942 + "blockRuntimeId" : 6018 }, { "id" : "minecraft:polished_blackstone_brick_slab", - "blockRuntimeId" : 4175 + "blockRuntimeId" : 4192 }, { "id" : "minecraft:cut_copper_slab", - "blockRuntimeId" : 5191 + "blockRuntimeId" : 5235 }, { "id" : "minecraft:exposed_cut_copper_slab", - "blockRuntimeId" : 6491 + "blockRuntimeId" : 6600 }, { "id" : "minecraft:weathered_cut_copper_slab", - "blockRuntimeId" : 5977 + "blockRuntimeId" : 6053 }, { "id" : "minecraft:oxidized_cut_copper_slab", - "blockRuntimeId" : 5232 + "blockRuntimeId" : 5282 }, { "id" : "minecraft:waxed_cut_copper_slab", - "blockRuntimeId" : 7757 + "blockRuntimeId" : 7815 }, { "id" : "minecraft:waxed_exposed_cut_copper_slab", - "blockRuntimeId" : 247 + "blockRuntimeId" : 249 }, { "id" : "minecraft:waxed_weathered_cut_copper_slab", - "blockRuntimeId" : 6436 + "blockRuntimeId" : 6545 }, { "id" : "minecraft:waxed_oxidized_cut_copper_slab", - "blockRuntimeId" : 716 + "blockRuntimeId" : 708 }, { "id" : "minecraft:cobbled_deepslate_slab", - "blockRuntimeId" : 7252 + "blockRuntimeId" : 7310 }, { "id" : "minecraft:polished_deepslate_slab", - "blockRuntimeId" : 302 + "blockRuntimeId" : 288 }, { "id" : "minecraft:deepslate_tile_slab", - "blockRuntimeId" : 4239 + "blockRuntimeId" : 4291 }, { "id" : "minecraft:deepslate_brick_slab", - "blockRuntimeId" : 3721 + "blockRuntimeId" : 3716 + }, + { + "id" : "minecraft:mud_brick_slab", + "blockRuntimeId" : 3910 }, { "id" : "minecraft:brick_block", - "blockRuntimeId" : 4721 + "blockRuntimeId" : 4765 }, { "id" : "minecraft:chiseled_nether_bricks", - "blockRuntimeId" : 7191 + "blockRuntimeId" : 7249 }, { "id" : "minecraft:cracked_nether_bricks", - "blockRuntimeId" : 4484 + "blockRuntimeId" : 4552 }, { "id" : "minecraft:quartz_bricks", - "blockRuntimeId" : 6316 + "blockRuntimeId" : 6351 }, { "id" : "minecraft:stonebrick", - "blockRuntimeId" : 6438 + "blockRuntimeId" : 6547 }, { "id" : "minecraft:stonebrick", - "blockRuntimeId" : 6439 + "blockRuntimeId" : 6548 }, { "id" : "minecraft:stonebrick", - "blockRuntimeId" : 6440 + "blockRuntimeId" : 6549 }, { "id" : "minecraft:stonebrick", - "blockRuntimeId" : 6441 + "blockRuntimeId" : 6550 }, { "id" : "minecraft:end_bricks", - "blockRuntimeId" : 295 + "blockRuntimeId" : 281 }, { "id" : "minecraft:prismarine", - "blockRuntimeId" : 6011 + "blockRuntimeId" : 6087 }, { "id" : "minecraft:polished_blackstone_bricks", - "blockRuntimeId" : 4636 + "blockRuntimeId" : 4680 }, { "id" : "minecraft:cracked_polished_blackstone_bricks", - "blockRuntimeId" : 7156 + "blockRuntimeId" : 7214 }, { "id" : "minecraft:gilded_blackstone", - "blockRuntimeId" : 4518 + "blockRuntimeId" : 4586 }, { "id" : "minecraft:chiseled_polished_blackstone", - "blockRuntimeId" : 5018 + "blockRuntimeId" : 5062 }, { "id" : "minecraft:deepslate_tiles", - "blockRuntimeId" : 4513 + "blockRuntimeId" : 4581 }, { "id" : "minecraft:cracked_deepslate_tiles", - "blockRuntimeId" : 4149 + "blockRuntimeId" : 4160 }, { "id" : "minecraft:deepslate_bricks", - "blockRuntimeId" : 5414 + "blockRuntimeId" : 5464 }, { "id" : "minecraft:cracked_deepslate_bricks", - "blockRuntimeId" : 5314 + "blockRuntimeId" : 5364 }, { "id" : "minecraft:chiseled_deepslate", - "blockRuntimeId" : 5190 + "blockRuntimeId" : 5234 }, { "id" : "minecraft:cobblestone", - "blockRuntimeId" : 3620 + "blockRuntimeId" : 3615 }, { "id" : "minecraft:mossy_cobblestone", - "blockRuntimeId" : 266 + "blockRuntimeId" : 252 }, { "id" : "minecraft:cobbled_deepslate", - "blockRuntimeId" : 6544 + "blockRuntimeId" : 6670 }, { "id" : "minecraft:smooth_stone", - "blockRuntimeId" : 4514 + "blockRuntimeId" : 4582 }, { "id" : "minecraft:sandstone", - "blockRuntimeId" : 3658 + "blockRuntimeId" : 3653 }, { "id" : "minecraft:sandstone", - "blockRuntimeId" : 3659 + "blockRuntimeId" : 3654 }, { "id" : "minecraft:sandstone", - "blockRuntimeId" : 3660 + "blockRuntimeId" : 3655 }, { "id" : "minecraft:sandstone", - "blockRuntimeId" : 3661 + "blockRuntimeId" : 3656 }, { "id" : "minecraft:red_sandstone", - "blockRuntimeId" : 6471 + "blockRuntimeId" : 6580 }, { "id" : "minecraft:red_sandstone", - "blockRuntimeId" : 6472 + "blockRuntimeId" : 6581 }, { "id" : "minecraft:red_sandstone", - "blockRuntimeId" : 6473 + "blockRuntimeId" : 6582 }, { "id" : "minecraft:red_sandstone", - "blockRuntimeId" : 6474 + "blockRuntimeId" : 6583 }, { "id" : "minecraft:coal_block", - "blockRuntimeId" : 5348 + "blockRuntimeId" : 5398 }, { "id" : "minecraft:dried_kelp_block", - "blockRuntimeId" : 7921 + "blockRuntimeId" : 7979 }, { "id" : "minecraft:gold_block", - "blockRuntimeId" : 305 + "blockRuntimeId" : 291 }, { "id" : "minecraft:iron_block", - "blockRuntimeId" : 8203 + "blockRuntimeId" : 8261 }, { "id" : "minecraft:copper_block", - "blockRuntimeId" : 4607 + "blockRuntimeId" : 4651 }, { "id" : "minecraft:exposed_copper", - "blockRuntimeId" : 601 + "blockRuntimeId" : 593 }, { "id" : "minecraft:weathered_copper", - "blockRuntimeId" : 8188 + "blockRuntimeId" : 8246 }, { "id" : "minecraft:oxidized_copper", - "blockRuntimeId" : 3558 + "blockRuntimeId" : 3553 }, { "id" : "minecraft:waxed_copper", - "blockRuntimeId" : 7676 + "blockRuntimeId" : 7734 }, { "id" : "minecraft:waxed_exposed_copper", - "blockRuntimeId" : 702 + "blockRuntimeId" : 694 }, { "id" : "minecraft:waxed_weathered_copper", - "blockRuntimeId" : 715 + "blockRuntimeId" : 707 }, { "id" : "minecraft:waxed_oxidized_copper", - "blockRuntimeId" : 7484 + "blockRuntimeId" : 7542 }, { "id" : "minecraft:cut_copper", - "blockRuntimeId" : 4645 + "blockRuntimeId" : 4689 }, { "id" : "minecraft:exposed_cut_copper", - "blockRuntimeId" : 6090 + "blockRuntimeId" : 6166 }, { "id" : "minecraft:weathered_cut_copper", - "blockRuntimeId" : 7139 + "blockRuntimeId" : 7197 }, { "id" : "minecraft:oxidized_cut_copper", - "blockRuntimeId" : 5428 + "blockRuntimeId" : 5478 }, { "id" : "minecraft:waxed_cut_copper", - "blockRuntimeId" : 7235 + "blockRuntimeId" : 7293 }, { "id" : "minecraft:waxed_exposed_cut_copper", - "blockRuntimeId" : 3814 + "blockRuntimeId" : 3809 }, { "id" : "minecraft:waxed_weathered_cut_copper", - "blockRuntimeId" : 4807 + "blockRuntimeId" : 4851 }, { "id" : "minecraft:waxed_oxidized_cut_copper", @@ -1001,75 +1040,75 @@ }, { "id" : "minecraft:emerald_block", - "blockRuntimeId" : 1164 + "blockRuntimeId" : 1159 }, { "id" : "minecraft:diamond_block", - "blockRuntimeId" : 286 + "blockRuntimeId" : 272 }, { "id" : "minecraft:lapis_block", - "blockRuntimeId" : 4234 + "blockRuntimeId" : 4286 }, { "id" : "minecraft:raw_iron_block", - "blockRuntimeId" : 8202 + "blockRuntimeId" : 8260 }, { "id" : "minecraft:raw_copper_block", - "blockRuntimeId" : 5219 + "blockRuntimeId" : 5269 }, { "id" : "minecraft:raw_gold_block", - "blockRuntimeId" : 371 + "blockRuntimeId" : 361 }, { "id" : "minecraft:quartz_block", - "blockRuntimeId" : 3701 + "blockRuntimeId" : 3696 }, { "id" : "minecraft:quartz_block", - "blockRuntimeId" : 3703 + "blockRuntimeId" : 3698 }, { "id" : "minecraft:quartz_block", - "blockRuntimeId" : 3702 + "blockRuntimeId" : 3697 }, { "id" : "minecraft:quartz_block", - "blockRuntimeId" : 3704 + "blockRuntimeId" : 3699 }, { "id" : "minecraft:prismarine", - "blockRuntimeId" : 6009 + "blockRuntimeId" : 6085 }, { "id" : "minecraft:prismarine", - "blockRuntimeId" : 6010 + "blockRuntimeId" : 6086 }, { "id" : "minecraft:slime", - "blockRuntimeId" : 4197 + "blockRuntimeId" : 4233 }, { "id" : "minecraft:honey_block", - "blockRuntimeId" : 900 + "blockRuntimeId" : 892 }, { "id" : "minecraft:honeycomb_block", - "blockRuntimeId" : 4424 + "blockRuntimeId" : 4476 }, { "id" : "minecraft:hay_block", - "blockRuntimeId" : 703 + "blockRuntimeId" : 695 }, { "id" : "minecraft:bone_block", - "blockRuntimeId" : 4198 + "blockRuntimeId" : 4234 }, { "id" : "minecraft:nether_brick", - "blockRuntimeId" : 7214 + "blockRuntimeId" : 7272 }, { "id" : "minecraft:red_nether_brick", @@ -1077,11 +1116,43 @@ }, { "id" : "minecraft:netherite_block", - "blockRuntimeId" : 3780 + "blockRuntimeId" : 3775 }, { "id" : "minecraft:lodestone", - "blockRuntimeId" : 8201 + "blockRuntimeId" : 8259 + }, + { + "id" : "minecraft:wool", + "blockRuntimeId" : 3458 + }, + { + "id" : "minecraft:wool", + "blockRuntimeId" : 3466 + }, + { + "id" : "minecraft:wool", + "blockRuntimeId" : 3465 + }, + { + "id" : "minecraft:wool", + "blockRuntimeId" : 3473 + }, + { + "id" : "minecraft:wool", + "blockRuntimeId" : 3470 + }, + { + "id" : "minecraft:wool", + "blockRuntimeId" : 3472 + }, + { + "id" : "minecraft:wool", + "blockRuntimeId" : 3459 + }, + { + "id" : "minecraft:wool", + "blockRuntimeId" : 3462 }, { "id" : "minecraft:wool", @@ -1091,61 +1162,37 @@ "id" : "minecraft:wool", "blockRuntimeId" : 3471 }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 3470 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 3478 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 3475 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 3477 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 3464 - }, { "id" : "minecraft:wool", "blockRuntimeId" : 3467 }, + { + "id" : "minecraft:wool", + "blockRuntimeId" : 3461 + }, + { + "id" : "minecraft:wool", + "blockRuntimeId" : 3469 + }, { "id" : "minecraft:wool", "blockRuntimeId" : 3468 }, { "id" : "minecraft:wool", - "blockRuntimeId" : 3476 + "blockRuntimeId" : 3460 }, { "id" : "minecraft:wool", - "blockRuntimeId" : 3472 + "blockRuntimeId" : 3464 }, { - "id" : "minecraft:wool", - "blockRuntimeId" : 3466 + "id" : "minecraft:carpet", + "blockRuntimeId" : 949 }, { - "id" : "minecraft:wool", - "blockRuntimeId" : 3474 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 3473 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 3465 - }, - { - "id" : "minecraft:wool", - "blockRuntimeId" : 3469 + "id" : "minecraft:carpet", + "blockRuntimeId" : 957 }, { "id" : "minecraft:carpet", @@ -1155,53 +1202,29 @@ "id" : "minecraft:carpet", "blockRuntimeId" : 964 }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 963 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 971 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 968 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 970 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 957 - }, - { - "id" : "minecraft:carpet", - "blockRuntimeId" : 960 - }, { "id" : "minecraft:carpet", "blockRuntimeId" : 961 }, { "id" : "minecraft:carpet", - "blockRuntimeId" : 969 + "blockRuntimeId" : 963 }, { "id" : "minecraft:carpet", - "blockRuntimeId" : 965 + "blockRuntimeId" : 950 }, { "id" : "minecraft:carpet", - "blockRuntimeId" : 959 + "blockRuntimeId" : 953 }, { "id" : "minecraft:carpet", - "blockRuntimeId" : 967 + "blockRuntimeId" : 954 }, { "id" : "minecraft:carpet", - "blockRuntimeId" : 966 + "blockRuntimeId" : 962 }, { "id" : "minecraft:carpet", @@ -1209,71 +1232,91 @@ }, { "id" : "minecraft:carpet", - "blockRuntimeId" : 962 + "blockRuntimeId" : 952 + }, + { + "id" : "minecraft:carpet", + "blockRuntimeId" : 960 + }, + { + "id" : "minecraft:carpet", + "blockRuntimeId" : 959 + }, + { + "id" : "minecraft:carpet", + "blockRuntimeId" : 951 + }, + { + "id" : "minecraft:carpet", + "blockRuntimeId" : 955 }, { "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 6229 + "blockRuntimeId" : 6264 }, { "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 6237 + "blockRuntimeId" : 6272 }, { "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 6236 + "blockRuntimeId" : 6271 }, { "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 6244 + "blockRuntimeId" : 6279 }, { "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 6241 + "blockRuntimeId" : 6276 }, { "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 6243 + "blockRuntimeId" : 6278 }, { "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 6230 + "blockRuntimeId" : 6265 }, { "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 6233 + "blockRuntimeId" : 6268 }, { "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 6234 + "blockRuntimeId" : 6269 }, { "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 6242 + "blockRuntimeId" : 6277 }, { "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 6238 + "blockRuntimeId" : 6273 }, { "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 6232 + "blockRuntimeId" : 6267 }, { "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 6240 + "blockRuntimeId" : 6275 }, { "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 6239 + "blockRuntimeId" : 6274 }, { "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 6231 + "blockRuntimeId" : 6266 }, { "id" : "minecraft:concrete_powder", - "blockRuntimeId" : 6235 + "blockRuntimeId" : 6270 + }, + { + "id" : "minecraft:concrete", + "blockRuntimeId" : 660 }, { "id" : "minecraft:concrete", @@ -1281,231 +1324,235 @@ }, { "id" : "minecraft:concrete", - "blockRuntimeId" : 676 + "blockRuntimeId" : 667 }, { "id" : "minecraft:concrete", "blockRuntimeId" : 675 }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 683 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 680 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 682 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 669 - }, { "id" : "minecraft:concrete", "blockRuntimeId" : 672 }, + { + "id" : "minecraft:concrete", + "blockRuntimeId" : 674 + }, + { + "id" : "minecraft:concrete", + "blockRuntimeId" : 661 + }, + { + "id" : "minecraft:concrete", + "blockRuntimeId" : 664 + }, + { + "id" : "minecraft:concrete", + "blockRuntimeId" : 665 + }, { "id" : "minecraft:concrete", "blockRuntimeId" : 673 }, { "id" : "minecraft:concrete", - "blockRuntimeId" : 681 + "blockRuntimeId" : 669 }, { "id" : "minecraft:concrete", - "blockRuntimeId" : 677 + "blockRuntimeId" : 663 }, { "id" : "minecraft:concrete", "blockRuntimeId" : 671 }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 679 - }, - { - "id" : "minecraft:concrete", - "blockRuntimeId" : 678 - }, { "id" : "minecraft:concrete", "blockRuntimeId" : 670 }, { "id" : "minecraft:concrete", - "blockRuntimeId" : 674 + "blockRuntimeId" : 662 + }, + { + "id" : "minecraft:concrete", + "blockRuntimeId" : 666 }, { "id" : "minecraft:clay", - "blockRuntimeId" : 7066 + "blockRuntimeId" : 7124 }, { "id" : "minecraft:hardened_clay", - "blockRuntimeId" : 649 + "blockRuntimeId" : 641 }, { "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 6099 + "blockRuntimeId" : 6176 }, { "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 6107 + "blockRuntimeId" : 6184 }, { "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 6106 + "blockRuntimeId" : 6183 }, { "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 6114 + "blockRuntimeId" : 6191 }, { "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 6111 + "blockRuntimeId" : 6188 }, { "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 6113 + "blockRuntimeId" : 6190 }, { "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 6100 + "blockRuntimeId" : 6177 }, { "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 6103 + "blockRuntimeId" : 6180 }, { "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 6104 + "blockRuntimeId" : 6181 }, { "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 6112 + "blockRuntimeId" : 6189 }, { "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 6108 + "blockRuntimeId" : 6185 }, { "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 6102 + "blockRuntimeId" : 6179 }, { "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 6110 + "blockRuntimeId" : 6187 }, { "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 6109 + "blockRuntimeId" : 6186 }, { "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 6101 + "blockRuntimeId" : 6178 }, { "id" : "minecraft:stained_hardened_clay", - "blockRuntimeId" : 6105 + "blockRuntimeId" : 6182 }, { "id" : "minecraft:white_glazed_terracotta", - "blockRuntimeId" : 5523 + "blockRuntimeId" : 5573 }, { "id" : "minecraft:silver_glazed_terracotta", - "blockRuntimeId" : 3536 + "blockRuntimeId" : 3531 }, { "id" : "minecraft:gray_glazed_terracotta", - "blockRuntimeId" : 8195 + "blockRuntimeId" : 8253 }, { "id" : "minecraft:black_glazed_terracotta", - "blockRuntimeId" : 5758 + "blockRuntimeId" : 5834 }, { "id" : "minecraft:brown_glazed_terracotta", - "blockRuntimeId" : 3552 + "blockRuntimeId" : 3547 }, { "id" : "minecraft:red_glazed_terracotta", - "blockRuntimeId" : 4150 + "blockRuntimeId" : 4167 }, { "id" : "minecraft:orange_glazed_terracotta", - "blockRuntimeId" : 1156 + "blockRuntimeId" : 1151 }, { "id" : "minecraft:yellow_glazed_terracotta", - "blockRuntimeId" : 921 + "blockRuntimeId" : 913 }, { "id" : "minecraft:lime_glazed_terracotta", - "blockRuntimeId" : 221 + "blockRuntimeId" : 223 }, { "id" : "minecraft:green_glazed_terracotta", - "blockRuntimeId" : 6501 + "blockRuntimeId" : 6610 }, { "id" : "minecraft:cyan_glazed_terracotta", - "blockRuntimeId" : 5308 + "blockRuntimeId" : 5358 }, { "id" : "minecraft:light_blue_glazed_terracotta", - "blockRuntimeId" : 5421 + "blockRuntimeId" : 5471 }, { "id" : "minecraft:blue_glazed_terracotta", - "blockRuntimeId" : 5415 + "blockRuntimeId" : 5465 }, { "id" : "minecraft:purple_glazed_terracotta", - "blockRuntimeId" : 6965 + "blockRuntimeId" : 7011 }, { "id" : "minecraft:magenta_glazed_terracotta", - "blockRuntimeId" : 972 + "blockRuntimeId" : 965 }, { "id" : "minecraft:pink_glazed_terracotta", - "blockRuntimeId" : 6430 + "blockRuntimeId" : 6539 }, { "id" : "minecraft:purpur_block", - "blockRuntimeId" : 7656 + "blockRuntimeId" : 7714 }, { "id" : "minecraft:purpur_block", - "blockRuntimeId" : 7658 + "blockRuntimeId" : 7716 + }, + { + "id" : "minecraft:packed_mud", + "blockRuntimeId" : 283 + }, + { + "id" : "minecraft:mud_bricks", + "blockRuntimeId" : 6889 }, { "id" : "minecraft:nether_wart_block", - "blockRuntimeId" : 4241 + "blockRuntimeId" : 4293 }, { "id" : "minecraft:warped_wart_block", - "blockRuntimeId" : 5829 + "blockRuntimeId" : 5905 }, { "id" : "minecraft:shroomlight", - "blockRuntimeId" : 5017 + "blockRuntimeId" : 5061 }, { "id" : "minecraft:crimson_nylium", - "blockRuntimeId" : 4172 + "blockRuntimeId" : 4189 }, { "id" : "minecraft:warped_nylium", - "blockRuntimeId" : 6314 + "blockRuntimeId" : 6349 }, { "id" : "minecraft:basalt", - "blockRuntimeId" : 4297 + "blockRuntimeId" : 4349 }, { "id" : "minecraft:polished_basalt", @@ -1513,79 +1560,83 @@ }, { "id" : "minecraft:smooth_basalt", - "blockRuntimeId" : 1162 + "blockRuntimeId" : 1157 }, { "id" : "minecraft:soul_soil", - "blockRuntimeId" : 5738 + "blockRuntimeId" : 5830 }, { "id" : "minecraft:dirt", - "blockRuntimeId" : 5701 + "blockRuntimeId" : 5751 }, { "id" : "minecraft:dirt", - "blockRuntimeId" : 5702 + "blockRuntimeId" : 5752 }, { "id" : "minecraft:farmland", - "blockRuntimeId" : 3901 + "blockRuntimeId" : 3912 }, { "id" : "minecraft:grass", - "blockRuntimeId" : 6891 + "blockRuntimeId" : 6975 }, { "id" : "minecraft:grass_path", - "blockRuntimeId" : 8023 + "blockRuntimeId" : 8081 }, { "id" : "minecraft:podzol", - "blockRuntimeId" : 4606 + "blockRuntimeId" : 4650 }, { "id" : "minecraft:mycelium", - "blockRuntimeId" : 3688 + "blockRuntimeId" : 3683 + }, + { + "id" : "minecraft:mud", + "blockRuntimeId" : 6684 }, { "id" : "minecraft:stone", - "blockRuntimeId" : 661 + "blockRuntimeId" : 653 }, { "id" : "minecraft:iron_ore", - "blockRuntimeId" : 4646 + "blockRuntimeId" : 4690 }, { "id" : "minecraft:gold_ore", - "blockRuntimeId" : 920 + "blockRuntimeId" : 912 }, { "id" : "minecraft:diamond_ore", - "blockRuntimeId" : 4309 + "blockRuntimeId" : 4361 }, { "id" : "minecraft:lapis_ore", - "blockRuntimeId" : 7641 + "blockRuntimeId" : 7699 }, { "id" : "minecraft:redstone_ore", - "blockRuntimeId" : 4237 + "blockRuntimeId" : 4289 }, { "id" : "minecraft:coal_ore", - "blockRuntimeId" : 4235 + "blockRuntimeId" : 4287 }, { "id" : "minecraft:copper_ore", - "blockRuntimeId" : 3559 + "blockRuntimeId" : 3554 }, { "id" : "minecraft:emerald_ore", - "blockRuntimeId" : 7289 + "blockRuntimeId" : 7347 }, { "id" : "minecraft:quartz_ore", - "blockRuntimeId" : 4433 + "blockRuntimeId" : 4501 }, { "id" : "minecraft:nether_gold_ore", @@ -1593,35 +1644,35 @@ }, { "id" : "minecraft:ancient_debris", - "blockRuntimeId" : 6031 + "blockRuntimeId" : 6107 }, { "id" : "minecraft:deepslate_iron_ore", - "blockRuntimeId" : 7215 + "blockRuntimeId" : 7273 }, { "id" : "minecraft:deepslate_gold_ore", - "blockRuntimeId" : 6030 + "blockRuntimeId" : 6106 }, { "id" : "minecraft:deepslate_diamond_ore", - "blockRuntimeId" : 7980 + "blockRuntimeId" : 8038 }, { "id" : "minecraft:deepslate_lapis_ore", - "blockRuntimeId" : 7204 + "blockRuntimeId" : 7262 }, { "id" : "minecraft:deepslate_redstone_ore", - "blockRuntimeId" : 6507 + "blockRuntimeId" : 6616 }, { "id" : "minecraft:deepslate_emerald_ore", - "blockRuntimeId" : 6315 + "blockRuntimeId" : 6350 }, { "id" : "minecraft:deepslate_coal_ore", - "blockRuntimeId" : 7138 + "blockRuntimeId" : 7196 }, { "id" : "minecraft:deepslate_copper_ore", @@ -1629,123 +1680,171 @@ }, { "id" : "minecraft:gravel", - "blockRuntimeId" : 8226 + "blockRuntimeId" : 8287 }, { "id" : "minecraft:stone", - "blockRuntimeId" : 662 + "blockRuntimeId" : 654 }, { "id" : "minecraft:stone", - "blockRuntimeId" : 664 + "blockRuntimeId" : 656 }, { "id" : "minecraft:stone", - "blockRuntimeId" : 666 + "blockRuntimeId" : 658 }, { "id" : "minecraft:blackstone", - "blockRuntimeId" : 7527 + "blockRuntimeId" : 7585 }, { "id" : "minecraft:deepslate", - "blockRuntimeId" : 267 + "blockRuntimeId" : 253 }, { "id" : "minecraft:stone", - "blockRuntimeId" : 663 + "blockRuntimeId" : 655 }, { "id" : "minecraft:stone", - "blockRuntimeId" : 665 + "blockRuntimeId" : 657 }, { "id" : "minecraft:stone", - "blockRuntimeId" : 667 + "blockRuntimeId" : 659 }, { "id" : "minecraft:polished_blackstone", - "blockRuntimeId" : 3687 + "blockRuntimeId" : 3682 }, { "id" : "minecraft:polished_deepslate", - "blockRuntimeId" : 7696 + "blockRuntimeId" : 7754 }, { "id" : "minecraft:sand", - "blockRuntimeId" : 4178 + "blockRuntimeId" : 4195 }, { "id" : "minecraft:sand", - "blockRuntimeId" : 4179 + "blockRuntimeId" : 4196 }, { "id" : "minecraft:cactus", - "blockRuntimeId" : 6940 + "blockRuntimeId" : 6986 }, { "id" : "minecraft:log", - "blockRuntimeId" : 6546 + "blockRuntimeId" : 6672 }, { "id" : "minecraft:stripped_oak_log", - "blockRuntimeId" : 7485 + "blockRuntimeId" : 7543 }, { "id" : "minecraft:log", - "blockRuntimeId" : 6547 + "blockRuntimeId" : 6673 }, { "id" : "minecraft:stripped_spruce_log", - "blockRuntimeId" : 6253 + "blockRuntimeId" : 6288 }, { "id" : "minecraft:log", - "blockRuntimeId" : 6548 + "blockRuntimeId" : 6674 }, { "id" : "minecraft:stripped_birch_log", - "blockRuntimeId" : 5896 + "blockRuntimeId" : 5972 }, { "id" : "minecraft:log", - "blockRuntimeId" : 6549 + "blockRuntimeId" : 6675 }, { "id" : "minecraft:stripped_jungle_log", - "blockRuntimeId" : 650 + "blockRuntimeId" : 642 }, { "id" : "minecraft:log2", - "blockRuntimeId" : 3835 + "blockRuntimeId" : 3830 }, { "id" : "minecraft:stripped_acacia_log", - "blockRuntimeId" : 5772 + "blockRuntimeId" : 5848 }, { "id" : "minecraft:log2", - "blockRuntimeId" : 3836 + "blockRuntimeId" : 3831 }, { "id" : "minecraft:stripped_dark_oak_log", "blockRuntimeId" : 216 }, + { + "id" : "minecraft:mangrove_log", + "blockRuntimeId" : 348 + }, + { + "id" : "minecraft:stripped_mangrove_log", + "blockRuntimeId" : 8284 + }, { "id" : "minecraft:crimson_stem", - "blockRuntimeId" : 5821 + "blockRuntimeId" : 5897 }, { "id" : "minecraft:stripped_crimson_stem", - "blockRuntimeId" : 6864 + "blockRuntimeId" : 6948 }, { "id" : "minecraft:warped_stem", - "blockRuntimeId" : 6377 + "blockRuntimeId" : 6486 }, { "id" : "minecraft:stripped_warped_stem", - "blockRuntimeId" : 7342 + "blockRuntimeId" : 7400 + }, + { + "id" : "minecraft:wood", + "blockRuntimeId" : 3474 + }, + { + "id" : "minecraft:wood", + "blockRuntimeId" : 3480 + }, + { + "id" : "minecraft:wood", + "blockRuntimeId" : 3475 + }, + { + "id" : "minecraft:wood", + "blockRuntimeId" : 3481 + }, + { + "id" : "minecraft:wood", + "blockRuntimeId" : 3476 + }, + { + "id" : "minecraft:wood", + "blockRuntimeId" : 3482 + }, + { + "id" : "minecraft:wood", + "blockRuntimeId" : 3477 + }, + { + "id" : "minecraft:wood", + "blockRuntimeId" : 3483 + }, + { + "id" : "minecraft:wood", + "blockRuntimeId" : 3478 + }, + { + "id" : "minecraft:wood", + "blockRuntimeId" : 3484 }, { "id" : "minecraft:wood", @@ -1756,120 +1855,96 @@ "blockRuntimeId" : 3485 }, { - "id" : "minecraft:wood", - "blockRuntimeId" : 3480 + "id" : "minecraft:mangrove_wood", + "blockRuntimeId" : 4161 }, { - "id" : "minecraft:wood", - "blockRuntimeId" : 3486 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 3481 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 3487 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 3482 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 3488 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 3483 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 3489 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 3484 - }, - { - "id" : "minecraft:wood", - "blockRuntimeId" : 3490 + "id" : "minecraft:stripped_mangrove_wood", + "blockRuntimeId" : 4229 }, { "id" : "minecraft:crimson_hyphae", - "blockRuntimeId" : 4242 + "blockRuntimeId" : 4294 }, { "id" : "minecraft:stripped_crimson_hyphae", - "blockRuntimeId" : 6390 + "blockRuntimeId" : 6499 }, { "id" : "minecraft:warped_hyphae", - "blockRuntimeId" : 5826 + "blockRuntimeId" : 5902 }, { "id" : "minecraft:stripped_warped_hyphae", - "blockRuntimeId" : 5529 + "blockRuntimeId" : 5579 }, { "id" : "minecraft:leaves", - "blockRuntimeId" : 6014 + "blockRuntimeId" : 6090 }, { "id" : "minecraft:leaves", - "blockRuntimeId" : 6015 + "blockRuntimeId" : 6091 }, { "id" : "minecraft:leaves", - "blockRuntimeId" : 6016 + "blockRuntimeId" : 6092 }, { "id" : "minecraft:leaves", - "blockRuntimeId" : 6017 + "blockRuntimeId" : 6093 }, { "id" : "minecraft:leaves2", - "blockRuntimeId" : 4301 + "blockRuntimeId" : 4353 }, { "id" : "minecraft:leaves2", - "blockRuntimeId" : 4302 + "blockRuntimeId" : 4354 + }, + { + "id" : "minecraft:mangrove_leaves", + "blockRuntimeId" : 6666 }, { "id" : "minecraft:azalea_leaves", - "blockRuntimeId" : 7652 + "blockRuntimeId" : 7710 }, { "id" : "minecraft:azalea_leaves_flowered", - "blockRuntimeId" : 6304 + "blockRuntimeId" : 6339 }, { "id" : "minecraft:sapling", - "blockRuntimeId" : 720 + "blockRuntimeId" : 712 }, { "id" : "minecraft:sapling", - "blockRuntimeId" : 721 + "blockRuntimeId" : 713 }, { "id" : "minecraft:sapling", - "blockRuntimeId" : 722 + "blockRuntimeId" : 714 }, { "id" : "minecraft:sapling", - "blockRuntimeId" : 723 + "blockRuntimeId" : 715 }, { "id" : "minecraft:sapling", - "blockRuntimeId" : 724 + "blockRuntimeId" : 716 }, { "id" : "minecraft:sapling", - "blockRuntimeId" : 725 + "blockRuntimeId" : 717 + }, + { + "id" : "minecraft:mangrove_propagule", + "blockRuntimeId" : 6976 }, { "id" : "minecraft:bee_nest", - "blockRuntimeId" : 5704 + "blockRuntimeId" : 5754 }, { "id" : "minecraft:wheat_seeds" @@ -1912,7 +1987,7 @@ }, { "id" : "minecraft:melon_block", - "blockRuntimeId" : 402 + "blockRuntimeId" : 392 }, { "id" : "minecraft:melon_slice" @@ -1928,97 +2003,97 @@ }, { "id" : "minecraft:pumpkin", - "blockRuntimeId" : 4509 + "blockRuntimeId" : 4577 }, { "id" : "minecraft:carved_pumpkin", - "blockRuntimeId" : 7320 + "blockRuntimeId" : 7378 }, { "id" : "minecraft:lit_pumpkin", - "blockRuntimeId" : 6559 + "blockRuntimeId" : 6685 }, { "id" : "minecraft:honeycomb" }, { "id" : "minecraft:tallgrass", - "blockRuntimeId" : 937 + "blockRuntimeId" : 929 }, { "id" : "minecraft:double_plant", - "blockRuntimeId" : 5405 + "blockRuntimeId" : 5455 }, { "id" : "minecraft:tallgrass", - "blockRuntimeId" : 936 + "blockRuntimeId" : 928 }, { "id" : "minecraft:double_plant", - "blockRuntimeId" : 5404 + "blockRuntimeId" : 5454 }, { "id" : "minecraft:nether_sprouts" }, { "id" : "minecraft:coral", - "blockRuntimeId" : 6383 + "blockRuntimeId" : 6492 }, { "id" : "minecraft:coral", - "blockRuntimeId" : 6381 + "blockRuntimeId" : 6490 }, { "id" : "minecraft:coral", - "blockRuntimeId" : 6382 + "blockRuntimeId" : 6491 }, { "id" : "minecraft:coral", - "blockRuntimeId" : 6380 + "blockRuntimeId" : 6489 }, { "id" : "minecraft:coral", - "blockRuntimeId" : 6384 + "blockRuntimeId" : 6493 }, { "id" : "minecraft:coral", - "blockRuntimeId" : 6388 + "blockRuntimeId" : 6497 }, { "id" : "minecraft:coral", - "blockRuntimeId" : 6386 + "blockRuntimeId" : 6495 }, { "id" : "minecraft:coral", - "blockRuntimeId" : 6387 + "blockRuntimeId" : 6496 }, { "id" : "minecraft:coral", - "blockRuntimeId" : 6385 + "blockRuntimeId" : 6494 }, { "id" : "minecraft:coral", - "blockRuntimeId" : 6389 + "blockRuntimeId" : 6498 }, { "id" : "minecraft:coral_fan", - "blockRuntimeId" : 4540 + "blockRuntimeId" : 4616 }, { "id" : "minecraft:coral_fan", - "blockRuntimeId" : 4538 + "blockRuntimeId" : 4614 }, { "id" : "minecraft:coral_fan", - "blockRuntimeId" : 4539 + "blockRuntimeId" : 4615 }, { "id" : "minecraft:coral_fan", - "blockRuntimeId" : 4537 + "blockRuntimeId" : 4613 }, { "id" : "minecraft:coral_fan", - "blockRuntimeId" : 4541 + "blockRuntimeId" : 4617 }, { "id" : "minecraft:coral_fan_dead", @@ -2045,19 +2120,39 @@ }, { "id" : "minecraft:seagrass", - "blockRuntimeId" : 244 + "blockRuntimeId" : 246 }, { "id" : "minecraft:crimson_roots", - "blockRuntimeId" : 7515 + "blockRuntimeId" : 7573 }, { "id" : "minecraft:warped_roots", - "blockRuntimeId" : 4310 + "blockRuntimeId" : 4362 }, { "id" : "minecraft:yellow_flower", - "blockRuntimeId" : 316 + "blockRuntimeId" : 302 + }, + { + "id" : "minecraft:red_flower", + "blockRuntimeId" : 3616 + }, + { + "id" : "minecraft:red_flower", + "blockRuntimeId" : 3617 + }, + { + "id" : "minecraft:red_flower", + "blockRuntimeId" : 3618 + }, + { + "id" : "minecraft:red_flower", + "blockRuntimeId" : 3619 + }, + { + "id" : "minecraft:red_flower", + "blockRuntimeId" : 3620 }, { "id" : "minecraft:red_flower", @@ -2084,44 +2179,24 @@ "blockRuntimeId" : 3626 }, { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 3627 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 3628 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 3629 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 3630 - }, - { - "id" : "minecraft:red_flower", - "blockRuntimeId" : 3631 + "id" : "minecraft:double_plant", + "blockRuntimeId" : 5452 }, { "id" : "minecraft:double_plant", - "blockRuntimeId" : 5402 + "blockRuntimeId" : 5453 }, { "id" : "minecraft:double_plant", - "blockRuntimeId" : 5403 + "blockRuntimeId" : 5456 }, { "id" : "minecraft:double_plant", - "blockRuntimeId" : 5406 - }, - { - "id" : "minecraft:double_plant", - "blockRuntimeId" : 5407 + "blockRuntimeId" : 5457 }, { "id" : "minecraft:wither_rose", - "blockRuntimeId" : 6089 + "blockRuntimeId" : 6165 }, { "id" : "minecraft:white_dye" @@ -2188,43 +2263,43 @@ }, { "id" : "minecraft:vine", - "blockRuntimeId" : 902 + "blockRuntimeId" : 894 }, { "id" : "minecraft:weeping_vines", - "blockRuntimeId" : 5429 + "blockRuntimeId" : 5479 }, { "id" : "minecraft:twisting_vines", - "blockRuntimeId" : 5641 + "blockRuntimeId" : 5691 }, { "id" : "minecraft:waterlily", - "blockRuntimeId" : 1163 + "blockRuntimeId" : 1158 }, { "id" : "minecraft:deadbush", - "blockRuntimeId" : 4633 + "blockRuntimeId" : 4677 }, { "id" : "minecraft:bamboo", - "blockRuntimeId" : 3689 + "blockRuntimeId" : 3684 }, { "id" : "minecraft:snow", - "blockRuntimeId" : 4177 + "blockRuntimeId" : 4194 }, { "id" : "minecraft:ice", - "blockRuntimeId" : 6563 + "blockRuntimeId" : 6689 }, { "id" : "minecraft:packed_ice", - "blockRuntimeId" : 296 + "blockRuntimeId" : 282 }, { "id" : "minecraft:blue_ice", - "blockRuntimeId" : 6981 + "blockRuntimeId" : 7027 }, { "id" : "minecraft:snow_layer", @@ -2232,79 +2307,87 @@ }, { "id" : "minecraft:pointed_dripstone", - "blockRuntimeId" : 7358 + "blockRuntimeId" : 7416 }, { "id" : "minecraft:dripstone_block", - "blockRuntimeId" : 901 + "blockRuntimeId" : 893 }, { "id" : "minecraft:moss_carpet", - "blockRuntimeId" : 300 + "blockRuntimeId" : 286 }, { "id" : "minecraft:moss_block", - "blockRuntimeId" : 6429 + "blockRuntimeId" : 6538 }, { "id" : "minecraft:dirt_with_roots", - "blockRuntimeId" : 5347 + "blockRuntimeId" : 5397 }, { "id" : "minecraft:hanging_roots", "blockRuntimeId" : 205 }, + { + "id" : "minecraft:mangrove_roots", + "blockRuntimeId" : 6175 + }, + { + "id" : "minecraft:muddy_mangrove_roots", + "blockRuntimeId" : 345 + }, { "id" : "minecraft:big_dripleaf", - "blockRuntimeId" : 5904 + "blockRuntimeId" : 5980 }, { "id" : "minecraft:small_dripleaf_block", - "blockRuntimeId" : 4268 + "blockRuntimeId" : 4320 }, { "id" : "minecraft:spore_blossom", - "blockRuntimeId" : 7254 + "blockRuntimeId" : 7312 }, { "id" : "minecraft:azalea", - "blockRuntimeId" : 6804 + "blockRuntimeId" : 6888 }, { "id" : "minecraft:flowering_azalea", - "blockRuntimeId" : 5427 + "blockRuntimeId" : 5477 }, { "id" : "minecraft:glow_lichen", - "blockRuntimeId" : 5634 + "blockRuntimeId" : 5684 }, { "id" : "minecraft:amethyst_block", - "blockRuntimeId" : 304 + "blockRuntimeId" : 290 }, { "id" : "minecraft:budding_amethyst", - "blockRuntimeId" : 6956 + "blockRuntimeId" : 7002 }, { "id" : "minecraft:amethyst_cluster", - "blockRuntimeId" : 7752 + "blockRuntimeId" : 7810 }, { "id" : "minecraft:large_amethyst_bud", - "blockRuntimeId" : 4684 + "blockRuntimeId" : 4728 }, { "id" : "minecraft:medium_amethyst_bud", - "blockRuntimeId" : 4324 + "blockRuntimeId" : 4376 }, { "id" : "minecraft:small_amethyst_bud", - "blockRuntimeId" : 318 + "blockRuntimeId" : 304 }, { "id" : "minecraft:tuff", - "blockRuntimeId" : 360 + "blockRuntimeId" : 347 }, { "id" : "minecraft:calcite", @@ -2339,35 +2422,35 @@ }, { "id" : "minecraft:brown_mushroom", - "blockRuntimeId" : 3551 + "blockRuntimeId" : 3546 }, { "id" : "minecraft:red_mushroom", - "blockRuntimeId" : 4517 + "blockRuntimeId" : 4585 }, { "id" : "minecraft:crimson_fungus", - "blockRuntimeId" : 7695 + "blockRuntimeId" : 7753 }, { "id" : "minecraft:warped_fungus", - "blockRuntimeId" : 301 + "blockRuntimeId" : 287 }, { "id" : "minecraft:brown_mushroom_block", - "blockRuntimeId" : 7304 + "blockRuntimeId" : 7362 }, { "id" : "minecraft:red_mushroom_block", - "blockRuntimeId" : 3616 + "blockRuntimeId" : 3611 }, { "id" : "minecraft:brown_mushroom_block", - "blockRuntimeId" : 7305 + "blockRuntimeId" : 7363 }, { "id" : "minecraft:brown_mushroom_block", - "blockRuntimeId" : 7290 + "blockRuntimeId" : 7348 }, { "id" : "minecraft:egg" @@ -2386,50 +2469,66 @@ }, { "id" : "minecraft:web", - "blockRuntimeId" : 6587 + "blockRuntimeId" : 6713 }, { "id" : "minecraft:spider_eye" }, { "id" : "minecraft:mob_spawner", - "blockRuntimeId" : 411 + "blockRuntimeId" : 401 }, { "id" : "minecraft:monster_egg", - "blockRuntimeId" : 4133 + "blockRuntimeId" : 4144 }, { "id" : "minecraft:monster_egg", - "blockRuntimeId" : 4134 + "blockRuntimeId" : 4145 }, { "id" : "minecraft:monster_egg", - "blockRuntimeId" : 4135 + "blockRuntimeId" : 4146 }, { "id" : "minecraft:monster_egg", - "blockRuntimeId" : 4136 + "blockRuntimeId" : 4147 }, { "id" : "minecraft:monster_egg", - "blockRuntimeId" : 4137 + "blockRuntimeId" : 4148 }, { "id" : "minecraft:monster_egg", - "blockRuntimeId" : 4138 + "blockRuntimeId" : 4149 }, { "id" : "minecraft:infested_deepslate", - "blockRuntimeId" : 4597 + "blockRuntimeId" : 4641 }, { "id" : "minecraft:dragon_egg", - "blockRuntimeId" : 7213 + "blockRuntimeId" : 7271 }, { "id" : "minecraft:turtle_egg", - "blockRuntimeId" : 7939 + "blockRuntimeId" : 7997 + }, + { + "id" : "minecraft:frog_spawn", + "blockRuntimeId" : 4399 + }, + { + "id" : "minecraft:pearlescent_froglight", + "blockRuntimeId" : 6435 + }, + { + "id" : "minecraft:verdant_froglight", + "blockRuntimeId" : 6481 + }, + { + "id" : "minecraft:ochre_froglight", + "blockRuntimeId" : 3510 }, { "id" : "minecraft:chicken_spawn_egg" @@ -2593,6 +2692,18 @@ { "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:ghast_spawn_egg" }, @@ -2631,42 +2742,42 @@ }, { "id" : "minecraft:obsidian", - "blockRuntimeId" : 436 + "blockRuntimeId" : 428 }, { "id" : "minecraft:crying_obsidian", - "blockRuntimeId" : 6596 + "blockRuntimeId" : 6722 }, { "id" : "minecraft:bedrock", - "blockRuntimeId" : 6971 + "blockRuntimeId" : 7017 }, { "id" : "minecraft:soul_sand", - "blockRuntimeId" : 5739 + "blockRuntimeId" : 5831 }, { "id" : "minecraft:netherrack", - "blockRuntimeId" : 6991 + "blockRuntimeId" : 7037 }, { "id" : "minecraft:magma", - "blockRuntimeId" : 7951 + "blockRuntimeId" : 8009 }, { "id" : "minecraft:nether_wart" }, { "id" : "minecraft:end_stone", - "blockRuntimeId" : 3841 + "blockRuntimeId" : 3836 }, { "id" : "minecraft:chorus_flower", - "blockRuntimeId" : 4462 + "blockRuntimeId" : 4530 }, { "id" : "minecraft:chorus_plant", - "blockRuntimeId" : 5455 + "blockRuntimeId" : 5505 }, { "id" : "minecraft:chorus_fruit" @@ -2676,51 +2787,75 @@ }, { "id" : "minecraft:sponge", - "blockRuntimeId" : 637 + "blockRuntimeId" : 629 }, { "id" : "minecraft:sponge", - "blockRuntimeId" : 638 + "blockRuntimeId" : 630 }, { "id" : "minecraft:coral_block", - "blockRuntimeId" : 5193 + "blockRuntimeId" : 5237 }, { "id" : "minecraft:coral_block", - "blockRuntimeId" : 5194 + "blockRuntimeId" : 5238 }, { "id" : "minecraft:coral_block", - "blockRuntimeId" : 5195 + "blockRuntimeId" : 5239 }, { "id" : "minecraft:coral_block", - "blockRuntimeId" : 5196 + "blockRuntimeId" : 5240 }, { "id" : "minecraft:coral_block", - "blockRuntimeId" : 5197 + "blockRuntimeId" : 5241 }, { "id" : "minecraft:coral_block", - "blockRuntimeId" : 5198 + "blockRuntimeId" : 5242 }, { "id" : "minecraft:coral_block", - "blockRuntimeId" : 5199 + "blockRuntimeId" : 5243 }, { "id" : "minecraft:coral_block", - "blockRuntimeId" : 5200 + "blockRuntimeId" : 5244 }, { "id" : "minecraft:coral_block", - "blockRuntimeId" : 5201 + "blockRuntimeId" : 5245 }, { "id" : "minecraft:coral_block", - "blockRuntimeId" : 5202 + "blockRuntimeId" : 5246 + }, + { + "id" : "minecraft:sculk", + "blockRuntimeId" : 7036 + }, + { + "id" : "minecraft:sculk_vein", + "blockRuntimeId" : 7132 + }, + { + "id" : "minecraft:sculk_catalyst", + "blockRuntimeId" : 3613 + }, + { + "id" : "minecraft:sculk_shrieker", + "blockRuntimeId" : 219 + }, + { + "id" : "minecraft:sculk_sensor", + "blockRuntimeId" : 4389 + }, + { + "id" : "minecraft:reinforced_deepslate", + "blockRuntimeId" : 5832 }, { "id" : "minecraft:leather_helmet" @@ -3123,6 +3258,40 @@ { "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" }, @@ -3747,86 +3916,86 @@ }, { "id" : "minecraft:torch", - "blockRuntimeId" : 732 + "blockRuntimeId" : 724 }, { "id" : "minecraft:soul_torch", - "blockRuntimeId" : 4600 + "blockRuntimeId" : 4644 }, { "id" : "minecraft:sea_pickle", - "blockRuntimeId" : 5779 + "blockRuntimeId" : 5855 }, { "id" : "minecraft:lantern", - "blockRuntimeId" : 7016 + "blockRuntimeId" : 7074 }, { "id" : "minecraft:soul_lantern", - "blockRuntimeId" : 5699 + "blockRuntimeId" : 5749 }, { "id" : "minecraft:candle", - "blockRuntimeId" : 7345 + "blockRuntimeId" : 7403 }, { "id" : "minecraft:white_candle", - "blockRuntimeId" : 5250 + "blockRuntimeId" : 5300 }, { "id" : "minecraft:orange_candle", - "blockRuntimeId" : 372 + "blockRuntimeId" : 362 }, { "id" : "minecraft:magenta_candle", - "blockRuntimeId" : 428 + "blockRuntimeId" : 418 }, { "id" : "minecraft:light_blue_candle", - "blockRuntimeId" : 4501 + "blockRuntimeId" : 4569 }, { "id" : "minecraft:yellow_candle", - "blockRuntimeId" : 6115 + "blockRuntimeId" : 6192 }, { "id" : "minecraft:lime_candle", - "blockRuntimeId" : 6333 + "blockRuntimeId" : 6368 }, { "id" : "minecraft:pink_candle", - "blockRuntimeId" : 7312 + "blockRuntimeId" : 7370 }, { "id" : "minecraft:gray_candle", - "blockRuntimeId" : 947 + "blockRuntimeId" : 939 }, { "id" : "minecraft:light_gray_candle", - "blockRuntimeId" : 6147 + "blockRuntimeId" : 6224 }, { "id" : "minecraft:cyan_candle", - "blockRuntimeId" : 7668 + "blockRuntimeId" : 7726 }, { "id" : "minecraft:purple_candle", - "blockRuntimeId" : 6992 + "blockRuntimeId" : 7038 }, { "id" : "minecraft:blue_candle" }, { "id" : "minecraft:brown_candle", - "blockRuntimeId" : 5799 + "blockRuntimeId" : 5875 }, { "id" : "minecraft:green_candle", - "blockRuntimeId" : 694 + "blockRuntimeId" : 686 }, { "id" : "minecraft:red_candle", - "blockRuntimeId" : 4637 + "blockRuntimeId" : 4681 }, { "id" : "minecraft:black_candle", @@ -3834,23 +4003,23 @@ }, { "id" : "minecraft:crafting_table", - "blockRuntimeId" : 5778 + "blockRuntimeId" : 5854 }, { "id" : "minecraft:cartography_table", - "blockRuntimeId" : 8227 + "blockRuntimeId" : 8288 }, { "id" : "minecraft:fletching_table", - "blockRuntimeId" : 5757 + "blockRuntimeId" : 5833 }, { "id" : "minecraft:smithing_table", - "blockRuntimeId" : 3731 + "blockRuntimeId" : 3726 }, { "id" : "minecraft:beehive", - "blockRuntimeId" : 6032 + "blockRuntimeId" : 6108 }, { "id" : "minecraft:campfire" @@ -3860,152 +4029,152 @@ }, { "id" : "minecraft:furnace", - "blockRuntimeId" : 7744 + "blockRuntimeId" : 7802 }, { "id" : "minecraft:blast_furnace", - "blockRuntimeId" : 7509 + "blockRuntimeId" : 7567 }, { "id" : "minecraft:smoker", - "blockRuntimeId" : 655 + "blockRuntimeId" : 647 }, { "id" : "minecraft:respawn_anchor", - "blockRuntimeId" : 689 + "blockRuntimeId" : 681 }, { "id" : "minecraft:brewing_stand" }, { "id" : "minecraft:anvil", - "blockRuntimeId" : 6508 + "blockRuntimeId" : 6634 }, { "id" : "minecraft:anvil", - "blockRuntimeId" : 6512 + "blockRuntimeId" : 6638 }, { "id" : "minecraft:anvil", - "blockRuntimeId" : 6516 + "blockRuntimeId" : 6642 }, { "id" : "minecraft:grindstone", - "blockRuntimeId" : 7981 + "blockRuntimeId" : 8039 }, { "id" : "minecraft:enchanting_table", - "blockRuntimeId" : 6597 + "blockRuntimeId" : 6723 }, { "id" : "minecraft:bookshelf", - "blockRuntimeId" : 6545 + "blockRuntimeId" : 6671 }, { "id" : "minecraft:lectern", - "blockRuntimeId" : 6856 + "blockRuntimeId" : 6940 }, { "id" : "minecraft:cauldron" }, { "id" : "minecraft:composter", - "blockRuntimeId" : 5365 + "blockRuntimeId" : 5415 }, { "id" : "minecraft:chest", - "blockRuntimeId" : 7057 + "blockRuntimeId" : 7115 }, { "id" : "minecraft:trapped_chest", - "blockRuntimeId" : 5533 + "blockRuntimeId" : 5583 }, { "id" : "minecraft:ender_chest", - "blockRuntimeId" : 4317 + "blockRuntimeId" : 4369 }, { "id" : "minecraft:barrel", - "blockRuntimeId" : 4450 + "blockRuntimeId" : 4518 }, { "id" : "minecraft:undyed_shulker_box", - "blockRuntimeId" : 3686 + "blockRuntimeId" : 3681 }, { "id" : "minecraft:shulker_box", - "blockRuntimeId" : 5266 + "blockRuntimeId" : 5316 }, { "id" : "minecraft:shulker_box", - "blockRuntimeId" : 5274 + "blockRuntimeId" : 5324 }, { "id" : "minecraft:shulker_box", - "blockRuntimeId" : 5273 + "blockRuntimeId" : 5323 }, { "id" : "minecraft:shulker_box", - "blockRuntimeId" : 5281 + "blockRuntimeId" : 5331 }, { "id" : "minecraft:shulker_box", - "blockRuntimeId" : 5278 + "blockRuntimeId" : 5328 }, { "id" : "minecraft:shulker_box", - "blockRuntimeId" : 5280 + "blockRuntimeId" : 5330 }, { "id" : "minecraft:shulker_box", - "blockRuntimeId" : 5267 + "blockRuntimeId" : 5317 }, { "id" : "minecraft:shulker_box", - "blockRuntimeId" : 5270 + "blockRuntimeId" : 5320 }, { "id" : "minecraft:shulker_box", - "blockRuntimeId" : 5271 + "blockRuntimeId" : 5321 }, { "id" : "minecraft:shulker_box", - "blockRuntimeId" : 5279 + "blockRuntimeId" : 5329 }, { "id" : "minecraft:shulker_box", - "blockRuntimeId" : 5275 + "blockRuntimeId" : 5325 }, { "id" : "minecraft:shulker_box", - "blockRuntimeId" : 5269 + "blockRuntimeId" : 5319 }, { "id" : "minecraft:shulker_box", - "blockRuntimeId" : 5277 + "blockRuntimeId" : 5327 }, { "id" : "minecraft:shulker_box", - "blockRuntimeId" : 5276 + "blockRuntimeId" : 5326 }, { "id" : "minecraft:shulker_box", - "blockRuntimeId" : 5268 + "blockRuntimeId" : 5318 }, { "id" : "minecraft:shulker_box", - "blockRuntimeId" : 5272 + "blockRuntimeId" : 5322 }, { "id" : "minecraft:armor_stand" }, { "id" : "minecraft:noteblock", - "blockRuntimeId" : 359 + "blockRuntimeId" : 346 }, { "id" : "minecraft:jukebox", - "blockRuntimeId" : 4830 + "blockRuntimeId" : 4874 }, { "id" : "minecraft:music_disc_13" @@ -4046,23 +4215,29 @@ { "id" : "minecraft:music_disc_otherside" }, + { + "id" : "minecraft:music_disc_5" + }, { "id" : "minecraft:music_disc_pigstep" }, + { + "id" : "minecraft:disc_fragment_5" + }, { "id" : "minecraft:glowstone_dust" }, { "id" : "minecraft:glowstone", - "blockRuntimeId" : 3874 + "blockRuntimeId" : 3885 }, { "id" : "minecraft:redstone_lamp", - "blockRuntimeId" : 265 + "blockRuntimeId" : 251 }, { "id" : "minecraft:sea_lantern", - "blockRuntimeId" : 7488 + "blockRuntimeId" : 7546 }, { "id" : "minecraft:oak_sign" @@ -4082,6 +4257,9 @@ { "id" : "minecraft:dark_oak_sign" }, + { + "id" : "minecraft:mangrove_sign" + }, { "id" : "minecraft:crimson_sign" }, @@ -4136,6 +4314,9 @@ { "id" : "minecraft:axolotl_bucket" }, + { + "id" : "minecraft:tadpole_bucket" + }, { "id" : "minecraft:skull", "damage" : 3 @@ -4165,19 +4346,19 @@ }, { "id" : "minecraft:bell", - "blockRuntimeId" : 6824 + "blockRuntimeId" : 6908 }, { "id" : "minecraft:conduit", - "blockRuntimeId" : 4196 + "blockRuntimeId" : 4232 }, { "id" : "minecraft:stonecutter_block", - "blockRuntimeId" : 7516 + "blockRuntimeId" : 7574 }, { "id" : "minecraft:end_portal_frame", - "blockRuntimeId" : 6001 + "blockRuntimeId" : 6077 }, { "id" : "minecraft:coal" @@ -4290,6 +4471,9 @@ { "id" : "minecraft:fermented_spider_eye" }, + { + "id" : "minecraft:echo_shard" + }, { "id" : "minecraft:dragon_breath" }, @@ -4313,11 +4497,11 @@ }, { "id" : "minecraft:end_rod", - "blockRuntimeId" : 5815 + "blockRuntimeId" : 5891 }, { "id" : "minecraft:lightning_rod", - "blockRuntimeId" : 1181 + "blockRuntimeId" : 1176 }, { "id" : "minecraft:end_crystal" @@ -4759,6 +4943,18 @@ "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" }, @@ -4777,21 +4973,45 @@ { "id" : "minecraft:dark_oak_boat" }, + { + "id" : "minecraft:mangrove_boat" + }, + { + "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:rail", - "blockRuntimeId" : 3909 + "blockRuntimeId" : 3920 }, { "id" : "minecraft:golden_rail", - "blockRuntimeId" : 5282 + "blockRuntimeId" : 5332 }, { "id" : "minecraft:detector_rail", - "blockRuntimeId" : 4121 + "blockRuntimeId" : 4132 }, { "id" : "minecraft:activator_rail", - "blockRuntimeId" : 323 + "blockRuntimeId" : 309 }, { "id" : "minecraft:minecart" @@ -4810,27 +5030,27 @@ }, { "id" : "minecraft:redstone_block", - "blockRuntimeId" : 3781 + "blockRuntimeId" : 3776 }, { "id" : "minecraft:redstone_torch", - "blockRuntimeId" : 3530 + "blockRuntimeId" : 3525 }, { "id" : "minecraft:lever", - "blockRuntimeId" : 6405 + "blockRuntimeId" : 6514 }, { "id" : "minecraft:wooden_button", - "blockRuntimeId" : 6356 + "blockRuntimeId" : 6391 }, { "id" : "minecraft:spruce_button", - "blockRuntimeId" : 4269 + "blockRuntimeId" : 4321 }, { "id" : "minecraft:birch_button", - "blockRuntimeId" : 7708 + "blockRuntimeId" : 7766 }, { "id" : "minecraft:jungle_button", @@ -4838,87 +5058,95 @@ }, { "id" : "minecraft:acacia_button", - "blockRuntimeId" : 7173 + "blockRuntimeId" : 7231 }, { "id" : "minecraft:dark_oak_button", "blockRuntimeId" : 93 }, + { + "id" : "minecraft:mangrove_button", + "blockRuntimeId" : 7062 + }, { "id" : "minecraft:stone_button", - "blockRuntimeId" : 604 + "blockRuntimeId" : 596 }, { "id" : "minecraft:crimson_button", - "blockRuntimeId" : 4380 + "blockRuntimeId" : 4432 }, { "id" : "minecraft:warped_button", - "blockRuntimeId" : 7192 + "blockRuntimeId" : 7250 }, { "id" : "minecraft:polished_blackstone_button", - "blockRuntimeId" : 7732 + "blockRuntimeId" : 7790 }, { "id" : "minecraft:tripwire_hook", - "blockRuntimeId" : 5838 + "blockRuntimeId" : 5914 }, { "id" : "minecraft:wooden_pressure_plate", - "blockRuntimeId" : 8005 + "blockRuntimeId" : 8063 }, { "id" : "minecraft:spruce_pressure_plate", - "blockRuntimeId" : 3764 + "blockRuntimeId" : 3759 }, { "id" : "minecraft:birch_pressure_plate", - "blockRuntimeId" : 3560 + "blockRuntimeId" : 3555 }, { "id" : "minecraft:jungle_pressure_plate", - "blockRuntimeId" : 3640 + "blockRuntimeId" : 3635 }, { "id" : "minecraft:acacia_pressure_plate", - "blockRuntimeId" : 5203 + "blockRuntimeId" : 5247 }, { "id" : "minecraft:dark_oak_pressure_plate", - "blockRuntimeId" : 5880 + "blockRuntimeId" : 5956 + }, + { + "id" : "minecraft:mangrove_pressure_plate", + "blockRuntimeId" : 3869 }, { "id" : "minecraft:crimson_pressure_plate", - "blockRuntimeId" : 8210 + "blockRuntimeId" : 8268 }, { "id" : "minecraft:warped_pressure_plate", - "blockRuntimeId" : 270 + "blockRuntimeId" : 256 }, { "id" : "minecraft:stone_pressure_plate", - "blockRuntimeId" : 3875 + "blockRuntimeId" : 3886 }, { "id" : "minecraft:light_weighted_pressure_plate", - "blockRuntimeId" : 3670 + "blockRuntimeId" : 3665 }, { "id" : "minecraft:heavy_weighted_pressure_plate", - "blockRuntimeId" : 1165 + "blockRuntimeId" : 1160 }, { "id" : "minecraft:polished_blackstone_pressure_plate", - "blockRuntimeId" : 6197 + "blockRuntimeId" : 6232 }, { "id" : "minecraft:observer", - "blockRuntimeId" : 3518 + "blockRuntimeId" : 3513 }, { "id" : "minecraft:daylight_detector", - "blockRuntimeId" : 4180 + "blockRuntimeId" : 4197 }, { "id" : "minecraft:repeater" @@ -4931,30 +5159,30 @@ }, { "id" : "minecraft:dropper", - "blockRuntimeId" : 7327 + "blockRuntimeId" : 7385 }, { "id" : "minecraft:dispenser", - "blockRuntimeId" : 7955 + "blockRuntimeId" : 8013 }, { "id" : "minecraft:piston", - "blockRuntimeId" : 930 + "blockRuntimeId" : 922 }, { "id" : "minecraft:sticky_piston", - "blockRuntimeId" : 4312 + "blockRuntimeId" : 4364 }, { "id" : "minecraft:tnt", - "blockRuntimeId" : 6581 + "blockRuntimeId" : 6707 }, { "id" : "minecraft:name_tag" }, { "id" : "minecraft:loom", - "blockRuntimeId" : 3831 + "blockRuntimeId" : 3826 }, { "id" : "minecraft:banner" @@ -5200,7 +5428,7 @@ }, { "id" : "minecraft:target", - "blockRuntimeId" : 6355 + "blockRuntimeId" : 6390 }, { "id" : "minecraft:lodestone_compass" diff --git a/core/src/main/resources/bedrock/entity_identifiers.dat b/core/src/main/resources/bedrock/entity_identifiers.dat index b9da310f5..2e3733aa6 100644 Binary files a/core/src/main/resources/bedrock/entity_identifiers.dat and b/core/src/main/resources/bedrock/entity_identifiers.dat differ diff --git a/core/src/main/resources/bedrock/runtime_item_states.1_18_0.json b/core/src/main/resources/bedrock/runtime_item_states.1_18_0.json deleted file mode 100644 index 315547438..000000000 --- a/core/src/main/resources/bedrock/runtime_item_states.1_18_0.json +++ /dev/null @@ -1,4322 +0,0 @@ -[ - { - "name" : "minecraft:acacia_boat", - "id" : 379 - }, - { - "name" : "minecraft:acacia_button", - "id" : -140 - }, - { - "name" : "minecraft:acacia_door", - "id" : 556 - }, - { - "name" : "minecraft:acacia_fence_gate", - "id" : 187 - }, - { - "name" : "minecraft:acacia_pressure_plate", - "id" : -150 - }, - { - "name" : "minecraft:acacia_sign", - "id" : 579 - }, - { - "name" : "minecraft:acacia_stairs", - "id" : 163 - }, - { - "name" : "minecraft:acacia_standing_sign", - "id" : -190 - }, - { - "name" : "minecraft:acacia_trapdoor", - "id" : -145 - }, - { - "name" : "minecraft:acacia_wall_sign", - "id" : -191 - }, - { - "name" : "minecraft:activator_rail", - "id" : 126 - }, - { - "name" : "minecraft:agent_spawn_egg", - "id" : 487 - }, - { - "name" : "minecraft:air", - "id" : -158 - }, - { - "name" : "minecraft:allow", - "id" : 210 - }, - { - "name" : "minecraft:amethyst_block", - "id" : -327 - }, - { - "name" : "minecraft:amethyst_cluster", - "id" : -329 - }, - { - "name" : "minecraft:amethyst_shard", - "id" : 624 - }, - { - "name" : "minecraft:ancient_debris", - "id" : -271 - }, - { - "name" : "minecraft:andesite_stairs", - "id" : -171 - }, - { - "name" : "minecraft:anvil", - "id" : 145 - }, - { - "name" : "minecraft:apple", - "id" : 257 - }, - { - "name" : "minecraft:armor_stand", - "id" : 552 - }, - { - "name" : "minecraft:arrow", - "id" : 301 - }, - { - "name" : "minecraft:axolotl_bucket", - "id" : 369 - }, - { - "name" : "minecraft:axolotl_spawn_egg", - "id" : 500 - }, - { - "name" : "minecraft:azalea", - "id" : -337 - }, - { - "name" : "minecraft:azalea_leaves", - "id" : -324 - }, - { - "name" : "minecraft:azalea_leaves_flowered", - "id" : -325 - }, - { - "name" : "minecraft:baked_potato", - "id" : 281 - }, - { - "name" : "minecraft:balloon", - "id" : 597 - }, - { - "name" : "minecraft:bamboo", - "id" : -163 - }, - { - "name" : "minecraft:bamboo_sapling", - "id" : -164 - }, - { - "name" : "minecraft:banner", - "id" : 567 - }, - { - "name" : "minecraft:banner_pattern", - "id" : 629 - }, - { - "name" : "minecraft:barrel", - "id" : -203 - }, - { - "name" : "minecraft:barrier", - "id" : -161 - }, - { - "name" : "minecraft:basalt", - "id" : -234 - }, - { - "name" : "minecraft:bat_spawn_egg", - "id" : 453 - }, - { - "name" : "minecraft:beacon", - "id" : 138 - }, - { - "name" : "minecraft:bed", - "id" : 418 - }, - { - "name" : "minecraft:bedrock", - "id" : 7 - }, - { - "name" : "minecraft:bee_nest", - "id" : -218 - }, - { - "name" : "minecraft:bee_spawn_egg", - "id" : 494 - }, - { - "name" : "minecraft:beef", - "id" : 273 - }, - { - "name" : "minecraft:beehive", - "id" : -219 - }, - { - "name" : "minecraft:beetroot", - "id" : 285 - }, - { - "name" : "minecraft:beetroot_seeds", - "id" : 295 - }, - { - "name" : "minecraft:beetroot_soup", - "id" : 286 - }, - { - "name" : "minecraft:bell", - "id" : -206 - }, - { - "name" : "minecraft:big_dripleaf", - "id" : -323 - }, - { - "name" : "minecraft:birch_boat", - "id" : 376 - }, - { - "name" : "minecraft:birch_button", - "id" : -141 - }, - { - "name" : "minecraft:birch_door", - "id" : 554 - }, - { - "name" : "minecraft:birch_fence_gate", - "id" : 184 - }, - { - "name" : "minecraft:birch_pressure_plate", - "id" : -151 - }, - { - "name" : "minecraft:birch_sign", - "id" : 577 - }, - { - "name" : "minecraft:birch_stairs", - "id" : 135 - }, - { - "name" : "minecraft:birch_standing_sign", - "id" : -186 - }, - { - "name" : "minecraft:birch_trapdoor", - "id" : -146 - }, - { - "name" : "minecraft:birch_wall_sign", - "id" : -187 - }, - { - "name" : "minecraft:black_candle", - "id" : -428 - }, - { - "name" : "minecraft:black_candle_cake", - "id" : -445 - }, - { - "name" : "minecraft:black_dye", - "id" : 395 - }, - { - "name" : "minecraft:black_glazed_terracotta", - "id" : 235 - }, - { - "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:blast_furnace", - "id" : -196 - }, - { - "name" : "minecraft:blaze_powder", - "id" : 429 - }, - { - "name" : "minecraft:blaze_rod", - "id" : 423 - }, - { - "name" : "minecraft:blaze_spawn_egg", - "id" : 456 - }, - { - "name" : "minecraft:bleach", - "id" : 595 - }, - { - "name" : "minecraft:blue_candle", - "id" : -424 - }, - { - "name" : "minecraft:blue_candle_cake", - "id" : -441 - }, - { - "name" : "minecraft:blue_dye", - "id" : 399 - }, - { - "name" : "minecraft:blue_glazed_terracotta", - "id" : 231 - }, - { - "name" : "minecraft:blue_ice", - "id" : -11 - }, - { - "name" : "minecraft:boat", - "id" : 627 - }, - { - "name" : "minecraft:bone", - "id" : 415 - }, - { - "name" : "minecraft:bone_block", - "id" : 216 - }, - { - "name" : "minecraft:bone_meal", - "id" : 411 - }, - { - "name" : "minecraft:book", - "id" : 387 - }, - { - "name" : "minecraft:bookshelf", - "id" : 47 - }, - { - "name" : "minecraft:border_block", - "id" : 212 - }, - { - "name" : "minecraft:bordure_indented_banner_pattern", - "id" : 586 - }, - { - "name" : "minecraft:bow", - "id" : 300 - }, - { - "name" : "minecraft:bowl", - "id" : 321 - }, - { - "name" : "minecraft:bread", - "id" : 261 - }, - { - "name" : "minecraft:brewing_stand", - "id" : 431 - }, - { - "name" : "minecraft:brewingstandblock", - "id" : 117 - }, - { - "name" : "minecraft:brick", - "id" : 383 - }, - { - "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_dye", - "id" : 398 - }, - { - "name" : "minecraft:brown_glazed_terracotta", - "id" : 232 - }, - { - "name" : "minecraft:brown_mushroom", - "id" : 39 - }, - { - "name" : "minecraft:brown_mushroom_block", - "id" : 99 - }, - { - "name" : "minecraft:bubble_column", - "id" : -160 - }, - { - "name" : "minecraft:bucket", - "id" : 360 - }, - { - "name" : "minecraft:budding_amethyst", - "id" : -328 - }, - { - "name" : "minecraft:cactus", - "id" : 81 - }, - { - "name" : "minecraft:cake", - "id" : 417 - }, - { - "name" : "minecraft:calcite", - "id" : -326 - }, - { - "name" : "minecraft:camera", - "id" : 592 - }, - { - "name" : "minecraft:campfire", - "id" : 588 - }, - { - "name" : "minecraft:candle", - "id" : -412 - }, - { - "name" : "minecraft:candle_cake", - "id" : -429 - }, - { - "name" : "minecraft:carpet", - "id" : 171 - }, - { - "name" : "minecraft:carrot", - "id" : 279 - }, - { - "name" : "minecraft:carrot_on_a_stick", - "id" : 517 - }, - { - "name" : "minecraft:carrots", - "id" : 141 - }, - { - "name" : "minecraft:cartography_table", - "id" : -200 - }, - { - "name" : "minecraft:carved_pumpkin", - "id" : -155 - }, - { - "name" : "minecraft:cat_spawn_egg", - "id" : 488 - }, - { - "name" : "minecraft:cauldron", - "id" : 432 - }, - { - "name" : "minecraft:cave_spider_spawn_egg", - "id" : 457 - }, - { - "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" : 618 - }, - { - "name" : "minecraft:chain_command_block", - "id" : 189 - }, - { - "name" : "minecraft:chainmail_boots", - "id" : 342 - }, - { - "name" : "minecraft:chainmail_chestplate", - "id" : 340 - }, - { - "name" : "minecraft:chainmail_helmet", - "id" : 339 - }, - { - "name" : "minecraft:chainmail_leggings", - "id" : 341 - }, - { - "name" : "minecraft:charcoal", - "id" : 303 - }, - { - "name" : "minecraft:chemical_heat", - "id" : 192 - }, - { - "name" : "minecraft:chemistry_table", - "id" : 238 - }, - { - "name" : "minecraft:chest", - "id" : 54 - }, - { - "name" : "minecraft:chest_minecart", - "id" : 389 - }, - { - "name" : "minecraft:chicken", - "id" : 275 - }, - { - "name" : "minecraft:chicken_spawn_egg", - "id" : 435 - }, - { - "name" : "minecraft:chiseled_deepslate", - "id" : -395 - }, - { - "name" : "minecraft:chiseled_nether_bricks", - "id" : -302 - }, - { - "name" : "minecraft:chiseled_polished_blackstone", - "id" : -279 - }, - { - "name" : "minecraft:chorus_flower", - "id" : 200 - }, - { - "name" : "minecraft:chorus_fruit", - "id" : 558 - }, - { - "name" : "minecraft:chorus_plant", - "id" : 240 - }, - { - "name" : "minecraft:clay", - "id" : 82 - }, - { - "name" : "minecraft:clay_ball", - "id" : 384 - }, - { - "name" : "minecraft:client_request_placeholder_block", - "id" : -465 - }, - { - "name" : "minecraft:clock", - "id" : 393 - }, - { - "name" : "minecraft:coal", - "id" : 302 - }, - { - "name" : "minecraft:coal_block", - "id" : 173 - }, - { - "name" : "minecraft:coal_ore", - "id" : 16 - }, - { - "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" : 412 - }, - { - "name" : "minecraft:cod", - "id" : 264 - }, - { - "name" : "minecraft:cod_bucket", - "id" : 364 - }, - { - "name" : "minecraft:cod_spawn_egg", - "id" : 480 - }, - { - "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" : 563 - }, - { - "name" : "minecraft:comparator", - "id" : 522 - }, - { - "name" : "minecraft:compass", - "id" : 391 - }, - { - "name" : "minecraft:composter", - "id" : -213 - }, - { - "name" : "minecraft:compound", - "id" : 593 - }, - { - "name" : "minecraft:concrete", - "id" : 236 - }, - { - "name" : "minecraft:concrete_powder", - "id" : 237 - }, - { - "name" : "minecraft:conduit", - "id" : -157 - }, - { - "name" : "minecraft:cooked_beef", - "id" : 274 - }, - { - "name" : "minecraft:cooked_chicken", - "id" : 276 - }, - { - "name" : "minecraft:cooked_cod", - "id" : 268 - }, - { - "name" : "minecraft:cooked_mutton", - "id" : 551 - }, - { - "name" : "minecraft:cooked_porkchop", - "id" : 263 - }, - { - "name" : "minecraft:cooked_rabbit", - "id" : 289 - }, - { - "name" : "minecraft:cooked_salmon", - "id" : 269 - }, - { - "name" : "minecraft:cookie", - "id" : 271 - }, - { - "name" : "minecraft:copper_block", - "id" : -340 - }, - { - "name" : "minecraft:copper_ingot", - "id" : 504 - }, - { - "name" : "minecraft:copper_ore", - "id" : -311 - }, - { - "name" : "minecraft:coral", - "id" : -131 - }, - { - "name" : "minecraft:coral_block", - "id" : -132 - }, - { - "name" : "minecraft:coral_fan", - "id" : -133 - }, - { - "name" : "minecraft:coral_fan_dead", - "id" : -134 - }, - { - "name" : "minecraft:coral_fan_hang", - "id" : -135 - }, - { - "name" : "minecraft:coral_fan_hang2", - "id" : -136 - }, - { - "name" : "minecraft:coral_fan_hang3", - "id" : -137 - }, - { - "name" : "minecraft:cow_spawn_egg", - "id" : 436 - }, - { - "name" : "minecraft:cracked_deepslate_bricks", - "id" : -410 - }, - { - "name" : "minecraft:cracked_deepslate_tiles", - "id" : -409 - }, - { - "name" : "minecraft:cracked_nether_bricks", - "id" : -303 - }, - { - "name" : "minecraft:cracked_polished_blackstone_bricks", - "id" : -280 - }, - { - "name" : "minecraft:crafting_table", - "id" : 58 - }, - { - "name" : "minecraft:creeper_banner_pattern", - "id" : 582 - }, - { - "name" : "minecraft:creeper_spawn_egg", - "id" : 441 - }, - { - "name" : "minecraft:crimson_button", - "id" : -260 - }, - { - "name" : "minecraft:crimson_door", - "id" : 615 - }, - { - "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_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" : 613 - }, - { - "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" : 575 - }, - { - "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_dye", - "id" : 401 - }, - { - "name" : "minecraft:cyan_glazed_terracotta", - "id" : 229 - }, - { - "name" : "minecraft:dark_oak_boat", - "id" : 380 - }, - { - "name" : "minecraft:dark_oak_button", - "id" : -142 - }, - { - "name" : "minecraft:dark_oak_door", - "id" : 557 - }, - { - "name" : "minecraft:dark_oak_fence_gate", - "id" : 186 - }, - { - "name" : "minecraft:dark_oak_pressure_plate", - "id" : -152 - }, - { - "name" : "minecraft:dark_oak_sign", - "id" : 580 - }, - { - "name" : "minecraft:dark_oak_stairs", - "id" : 164 - }, - { - "name" : "minecraft:dark_oak_trapdoor", - "id" : -147 - }, - { - "name" : "minecraft:dark_prismarine_stairs", - "id" : -3 - }, - { - "name" : "minecraft:darkoak_standing_sign", - "id" : -192 - }, - { - "name" : "minecraft:darkoak_wall_sign", - "id" : -193 - }, - { - "name" : "minecraft:daylight_detector", - "id" : 151 - }, - { - "name" : "minecraft:daylight_detector_inverted", - "id" : 178 - }, - { - "name" : "minecraft:deadbush", - "id" : 32 - }, - { - "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" : 304 - }, - { - "name" : "minecraft:diamond_axe", - "id" : 319 - }, - { - "name" : "minecraft:diamond_block", - "id" : 57 - }, - { - "name" : "minecraft:diamond_boots", - "id" : 350 - }, - { - "name" : "minecraft:diamond_chestplate", - "id" : 348 - }, - { - "name" : "minecraft:diamond_helmet", - "id" : 347 - }, - { - "name" : "minecraft:diamond_hoe", - "id" : 332 - }, - { - "name" : "minecraft:diamond_horse_armor", - "id" : 533 - }, - { - "name" : "minecraft:diamond_leggings", - "id" : 349 - }, - { - "name" : "minecraft:diamond_ore", - "id" : 56 - }, - { - "name" : "minecraft:diamond_pickaxe", - "id" : 318 - }, - { - "name" : "minecraft:diamond_shovel", - "id" : 317 - }, - { - "name" : "minecraft:diamond_sword", - "id" : 316 - }, - { - "name" : "minecraft:diorite_stairs", - "id" : -170 - }, - { - "name" : "minecraft:dirt", - "id" : 3 - }, - { - "name" : "minecraft:dirt_with_roots", - "id" : -318 - }, - { - "name" : "minecraft:dispenser", - "id" : 23 - }, - { - "name" : "minecraft:dolphin_spawn_egg", - "id" : 484 - }, - { - "name" : "minecraft:donkey_spawn_egg", - "id" : 465 - }, - { - "name" : "minecraft:double_cut_copper_slab", - "id" : -368 - }, - { - "name" : "minecraft:double_plant", - "id" : 175 - }, - { - "name" : "minecraft:double_stone_slab", - "id" : 44 - }, - { - "name" : "minecraft:double_stone_slab2", - "id" : 182 - }, - { - "name" : "minecraft:double_stone_slab3", - "id" : -162 - }, - { - "name" : "minecraft:double_stone_slab4", - "id" : -166 - }, - { - "name" : "minecraft:double_wooden_slab", - "id" : 157 - }, - { - "name" : "minecraft:dragon_breath", - "id" : 560 - }, - { - "name" : "minecraft:dragon_egg", - "id" : 122 - }, - { - "name" : "minecraft:dried_kelp", - "id" : 270 - }, - { - "name" : "minecraft:dried_kelp_block", - "id" : -139 - }, - { - "name" : "minecraft:dripstone_block", - "id" : -317 - }, - { - "name" : "minecraft:dropper", - "id" : 125 - }, - { - "name" : "minecraft:drowned_spawn_egg", - "id" : 483 - }, - { - "name" : "minecraft:dye", - "id" : 628 - }, - { - "name" : "minecraft:egg", - "id" : 390 - }, - { - "name" : "minecraft:elder_guardian_spawn_egg", - "id" : 471 - }, - { - "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" : 564 - }, - { - "name" : "minecraft:emerald", - "id" : 512 - }, - { - "name" : "minecraft:emerald_block", - "id" : 133 - }, - { - "name" : "minecraft:emerald_ore", - "id" : 129 - }, - { - "name" : "minecraft:empty_map", - "id" : 515 - }, - { - "name" : "minecraft:enchanted_book", - "id" : 521 - }, - { - "name" : "minecraft:enchanted_golden_apple", - "id" : 259 - }, - { - "name" : "minecraft:enchanting_table", - "id" : 116 - }, - { - "name" : "minecraft:end_brick_stairs", - "id" : -178 - }, - { - "name" : "minecraft:end_bricks", - "id" : 206 - }, - { - "name" : "minecraft:end_crystal", - "id" : 631 - }, - { - "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_eye", - "id" : 433 - }, - { - "name" : "minecraft:ender_pearl", - "id" : 422 - }, - { - "name" : "minecraft:enderman_spawn_egg", - "id" : 442 - }, - { - "name" : "minecraft:endermite_spawn_egg", - "id" : 460 - }, - { - "name" : "minecraft:evoker_spawn_egg", - "id" : 475 - }, - { - "name" : "minecraft:experience_bottle", - "id" : 508 - }, - { - "name" : "minecraft:exposed_copper", - "id" : -341 - }, - { - "name" : "minecraft:exposed_cut_copper", - "id" : -348 - }, - { - "name" : "minecraft:exposed_cut_copper_slab", - "id" : -362 - }, - { - "name" : "minecraft:exposed_cut_copper_stairs", - "id" : -355 - }, - { - "name" : "minecraft:exposed_double_cut_copper_slab", - "id" : -369 - }, - { - "name" : "minecraft:farmland", - "id" : 60 - }, - { - "name" : "minecraft:feather", - "id" : 327 - }, - { - "name" : "minecraft:fence", - "id" : 85 - }, - { - "name" : "minecraft:fence_gate", - "id" : 107 - }, - { - "name" : "minecraft:fermented_spider_eye", - "id" : 428 - }, - { - "name" : "minecraft:field_masoned_banner_pattern", - "id" : 585 - }, - { - "name" : "minecraft:filled_map", - "id" : 420 - }, - { - "name" : "minecraft:fire", - "id" : 51 - }, - { - "name" : "minecraft:fire_charge", - "id" : 509 - }, - { - "name" : "minecraft:firework_rocket", - "id" : 519 - }, - { - "name" : "minecraft:firework_star", - "id" : 520 - }, - { - "name" : "minecraft:fishing_rod", - "id" : 392 - }, - { - "name" : "minecraft:fletching_table", - "id" : -201 - }, - { - "name" : "minecraft:flint", - "id" : 356 - }, - { - "name" : "minecraft:flint_and_steel", - "id" : 299 - }, - { - "name" : "minecraft:flower_banner_pattern", - "id" : 581 - }, - { - "name" : "minecraft:flower_pot", - "id" : 514 - }, - { - "name" : "minecraft:flowering_azalea", - "id" : -338 - }, - { - "name" : "minecraft:flowing_lava", - "id" : 10 - }, - { - "name" : "minecraft:flowing_water", - "id" : 8 - }, - { - "name" : "minecraft:fox_spawn_egg", - "id" : 490 - }, - { - "name" : "minecraft:frame", - "id" : 513 - }, - { - "name" : "minecraft:frosted_ice", - "id" : 207 - }, - { - "name" : "minecraft:furnace", - "id" : 61 - }, - { - "name" : "minecraft:ghast_spawn_egg", - "id" : 454 - }, - { - "name" : "minecraft:ghast_tear", - "id" : 424 - }, - { - "name" : "minecraft:gilded_blackstone", - "id" : -281 - }, - { - "name" : "minecraft:glass", - "id" : 20 - }, - { - "name" : "minecraft:glass_bottle", - "id" : 427 - }, - { - "name" : "minecraft:glass_pane", - "id" : 102 - }, - { - "name" : "minecraft:glistering_melon_slice", - "id" : 434 - }, - { - "name" : "minecraft:glow_berries", - "id" : 632 - }, - { - "name" : "minecraft:glow_frame", - "id" : 622 - }, - { - "name" : "minecraft:glow_ink_sac", - "id" : 503 - }, - { - "name" : "minecraft:glow_lichen", - "id" : -411 - }, - { - "name" : "minecraft:glow_squid_spawn_egg", - "id" : 502 - }, - { - "name" : "minecraft:glow_stick", - "id" : 600 - }, - { - "name" : "minecraft:glowingobsidian", - "id" : 246 - }, - { - "name" : "minecraft:glowstone", - "id" : 89 - }, - { - "name" : "minecraft:glowstone_dust", - "id" : 394 - }, - { - "name" : "minecraft:goat_horn", - "id" : 623 - }, - { - "name" : "minecraft:goat_spawn_egg", - "id" : 501 - }, - { - "name" : "minecraft:gold_block", - "id" : 41 - }, - { - "name" : "minecraft:gold_ingot", - "id" : 306 - }, - { - "name" : "minecraft:gold_nugget", - "id" : 425 - }, - { - "name" : "minecraft:gold_ore", - "id" : 14 - }, - { - "name" : "minecraft:golden_apple", - "id" : 258 - }, - { - "name" : "minecraft:golden_axe", - "id" : 325 - }, - { - "name" : "minecraft:golden_boots", - "id" : 354 - }, - { - "name" : "minecraft:golden_carrot", - "id" : 283 - }, - { - "name" : "minecraft:golden_chestplate", - "id" : 352 - }, - { - "name" : "minecraft:golden_helmet", - "id" : 351 - }, - { - "name" : "minecraft:golden_hoe", - "id" : 333 - }, - { - "name" : "minecraft:golden_horse_armor", - "id" : 532 - }, - { - "name" : "minecraft:golden_leggings", - "id" : 353 - }, - { - "name" : "minecraft:golden_pickaxe", - "id" : 324 - }, - { - "name" : "minecraft:golden_rail", - "id" : 27 - }, - { - "name" : "minecraft:golden_shovel", - "id" : 323 - }, - { - "name" : "minecraft:golden_sword", - "id" : 322 - }, - { - "name" : "minecraft:granite_stairs", - "id" : -169 - }, - { - "name" : "minecraft:grass", - "id" : 2 - }, - { - "name" : "minecraft:grass_path", - "id" : 198 - }, - { - "name" : "minecraft:gravel", - "id" : 13 - }, - { - "name" : "minecraft:gray_candle", - "id" : -420 - }, - { - "name" : "minecraft:gray_candle_cake", - "id" : -437 - }, - { - "name" : "minecraft:gray_dye", - "id" : 403 - }, - { - "name" : "minecraft:gray_glazed_terracotta", - "id" : 227 - }, - { - "name" : "minecraft:green_candle", - "id" : -426 - }, - { - "name" : "minecraft:green_candle_cake", - "id" : -443 - }, - { - "name" : "minecraft:green_dye", - "id" : 397 - }, - { - "name" : "minecraft:green_glazed_terracotta", - "id" : 233 - }, - { - "name" : "minecraft:grindstone", - "id" : -195 - }, - { - "name" : "minecraft:guardian_spawn_egg", - "id" : 461 - }, - { - "name" : "minecraft:gunpowder", - "id" : 328 - }, - { - "name" : "minecraft:hanging_roots", - "id" : -319 - }, - { - "name" : "minecraft:hard_glass", - "id" : 253 - }, - { - "name" : "minecraft:hard_glass_pane", - "id" : 190 - }, - { - "name" : "minecraft:hard_stained_glass", - "id" : 254 - }, - { - "name" : "minecraft:hard_stained_glass_pane", - "id" : 191 - }, - { - "name" : "minecraft:hardened_clay", - "id" : 172 - }, - { - "name" : "minecraft:hay_block", - "id" : 170 - }, - { - "name" : "minecraft:heart_of_the_sea", - "id" : 571 - }, - { - "name" : "minecraft:heavy_weighted_pressure_plate", - "id" : 148 - }, - { - "name" : "minecraft:hoglin_spawn_egg", - "id" : 496 - }, - { - "name" : "minecraft:honey_block", - "id" : -220 - }, - { - "name" : "minecraft:honey_bottle", - "id" : 591 - }, - { - "name" : "minecraft:honeycomb", - "id" : 590 - }, - { - "name" : "minecraft:honeycomb_block", - "id" : -221 - }, - { - "name" : "minecraft:hopper", - "id" : 527 - }, - { - "name" : "minecraft:hopper_minecart", - "id" : 526 - }, - { - "name" : "minecraft:horse_spawn_egg", - "id" : 458 - }, - { - "name" : "minecraft:husk_spawn_egg", - "id" : 463 - }, - { - "name" : "minecraft:ice", - "id" : 79 - }, - { - "name" : "minecraft:ice_bomb", - "id" : 594 - }, - { - "name" : "minecraft:infested_deepslate", - "id" : -454 - }, - { - "name" : "minecraft:info_update", - "id" : 248 - }, - { - "name" : "minecraft:info_update2", - "id" : 249 - }, - { - "name" : "minecraft:ink_sac", - "id" : 413 - }, - { - "name" : "minecraft:invisiblebedrock", - "id" : 95 - }, - { - "name" : "minecraft:iron_axe", - "id" : 298 - }, - { - "name" : "minecraft:iron_bars", - "id" : 101 - }, - { - "name" : "minecraft:iron_block", - "id" : 42 - }, - { - "name" : "minecraft:iron_boots", - "id" : 346 - }, - { - "name" : "minecraft:iron_chestplate", - "id" : 344 - }, - { - "name" : "minecraft:iron_door", - "id" : 372 - }, - { - "name" : "minecraft:iron_helmet", - "id" : 343 - }, - { - "name" : "minecraft:iron_hoe", - "id" : 331 - }, - { - "name" : "minecraft:iron_horse_armor", - "id" : 531 - }, - { - "name" : "minecraft:iron_ingot", - "id" : 305 - }, - { - "name" : "minecraft:iron_leggings", - "id" : 345 - }, - { - "name" : "minecraft:iron_nugget", - "id" : 569 - }, - { - "name" : "minecraft:iron_ore", - "id" : 15 - }, - { - "name" : "minecraft:iron_pickaxe", - "id" : 297 - }, - { - "name" : "minecraft:iron_shovel", - "id" : 296 - }, - { - "name" : "minecraft:iron_sword", - "id" : 307 - }, - { - "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.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.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" : 377 - }, - { - "name" : "minecraft:jungle_button", - "id" : -143 - }, - { - "name" : "minecraft:jungle_door", - "id" : 555 - }, - { - "name" : "minecraft:jungle_fence_gate", - "id" : 185 - }, - { - "name" : "minecraft:jungle_pressure_plate", - "id" : -153 - }, - { - "name" : "minecraft:jungle_sign", - "id" : 578 - }, - { - "name" : "minecraft:jungle_stairs", - "id" : 136 - }, - { - "name" : "minecraft:jungle_standing_sign", - "id" : -188 - }, - { - "name" : "minecraft:jungle_trapdoor", - "id" : -148 - }, - { - "name" : "minecraft:jungle_wall_sign", - "id" : -189 - }, - { - "name" : "minecraft:kelp", - "id" : 382 - }, - { - "name" : "minecraft:ladder", - "id" : 65 - }, - { - "name" : "minecraft:lantern", - "id" : -208 - }, - { - "name" : "minecraft:lapis_block", - "id" : 22 - }, - { - "name" : "minecraft:lapis_lazuli", - "id" : 414 - }, - { - "name" : "minecraft:lapis_ore", - "id" : 21 - }, - { - "name" : "minecraft:large_amethyst_bud", - "id" : -330 - }, - { - "name" : "minecraft:lava", - "id" : 11 - }, - { - "name" : "minecraft:lava_bucket", - "id" : 363 - }, - { - "name" : "minecraft:lava_cauldron", - "id" : -210 - }, - { - "name" : "minecraft:lead", - "id" : 547 - }, - { - "name" : "minecraft:leather", - "id" : 381 - }, - { - "name" : "minecraft:leather_boots", - "id" : 338 - }, - { - "name" : "minecraft:leather_chestplate", - "id" : 336 - }, - { - "name" : "minecraft:leather_helmet", - "id" : 335 - }, - { - "name" : "minecraft:leather_horse_armor", - "id" : 530 - }, - { - "name" : "minecraft:leather_leggings", - "id" : 337 - }, - { - "name" : "minecraft:leaves", - "id" : 18 - }, - { - "name" : "minecraft:leaves2", - "id" : 161 - }, - { - "name" : "minecraft:lectern", - "id" : -194 - }, - { - "name" : "minecraft:lever", - "id" : 69 - }, - { - "name" : "minecraft:light_block", - "id" : -215 - }, - { - "name" : "minecraft:light_blue_candle", - "id" : -416 - }, - { - "name" : "minecraft:light_blue_candle_cake", - "id" : -433 - }, - { - "name" : "minecraft:light_blue_dye", - "id" : 407 - }, - { - "name" : "minecraft:light_blue_glazed_terracotta", - "id" : 223 - }, - { - "name" : "minecraft:light_gray_candle", - "id" : -421 - }, - { - "name" : "minecraft:light_gray_candle_cake", - "id" : -438 - }, - { - "name" : "minecraft:light_gray_dye", - "id" : 402 - }, - { - "name" : "minecraft:light_weighted_pressure_plate", - "id" : 147 - }, - { - "name" : "minecraft:lightning_rod", - "id" : -312 - }, - { - "name" : "minecraft:lime_candle", - "id" : -418 - }, - { - "name" : "minecraft:lime_candle_cake", - "id" : -435 - }, - { - "name" : "minecraft:lime_dye", - "id" : 405 - }, - { - "name" : "minecraft:lime_glazed_terracotta", - "id" : 225 - }, - { - "name" : "minecraft:lingering_potion", - "id" : 562 - }, - { - "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" : 473 - }, - { - "name" : "minecraft:lodestone", - "id" : -222 - }, - { - "name" : "minecraft:lodestone_compass", - "id" : 601 - }, - { - "name" : "minecraft:log", - "id" : 17 - }, - { - "name" : "minecraft:log2", - "id" : 162 - }, - { - "name" : "minecraft:loom", - "id" : -204 - }, - { - "name" : "minecraft:magenta_candle", - "id" : -415 - }, - { - "name" : "minecraft:magenta_candle_cake", - "id" : -432 - }, - { - "name" : "minecraft:magenta_dye", - "id" : 408 - }, - { - "name" : "minecraft:magenta_glazed_terracotta", - "id" : 222 - }, - { - "name" : "minecraft:magma", - "id" : 213 - }, - { - "name" : "minecraft:magma_cream", - "id" : 430 - }, - { - "name" : "minecraft:magma_cube_spawn_egg", - "id" : 455 - }, - { - "name" : "minecraft:medicine", - "id" : 598 - }, - { - "name" : "minecraft:medium_amethyst_bud", - "id" : -331 - }, - { - "name" : "minecraft:melon_block", - "id" : 103 - }, - { - "name" : "minecraft:melon_seeds", - "id" : 293 - }, - { - "name" : "minecraft:melon_slice", - "id" : 272 - }, - { - "name" : "minecraft:melon_stem", - "id" : 105 - }, - { - "name" : "minecraft:milk_bucket", - "id" : 361 - }, - { - "name" : "minecraft:minecart", - "id" : 370 - }, - { - "name" : "minecraft:mob_spawner", - "id" : 52 - }, - { - "name" : "minecraft:mojang_banner_pattern", - "id" : 584 - }, - { - "name" : "minecraft:monster_egg", - "id" : 97 - }, - { - "name" : "minecraft:mooshroom_spawn_egg", - "id" : 440 - }, - { - "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:movingblock", - "id" : 250 - }, - { - "name" : "minecraft:mule_spawn_egg", - "id" : 466 - }, - { - "name" : "minecraft:mushroom_stew", - "id" : 260 - }, - { - "name" : "minecraft:music_disc_11", - "id" : 544 - }, - { - "name" : "minecraft:music_disc_13", - "id" : 534 - }, - { - "name" : "minecraft:music_disc_blocks", - "id" : 536 - }, - { - "name" : "minecraft:music_disc_cat", - "id" : 535 - }, - { - "name" : "minecraft:music_disc_chirp", - "id" : 537 - }, - { - "name" : "minecraft:music_disc_far", - "id" : 538 - }, - { - "name" : "minecraft:music_disc_mall", - "id" : 539 - }, - { - "name" : "minecraft:music_disc_mellohi", - "id" : 540 - }, - { - "name" : "minecraft:music_disc_otherside", - "id" : 626 - }, - { - "name" : "minecraft:music_disc_pigstep", - "id" : 619 - }, - { - "name" : "minecraft:music_disc_stal", - "id" : 541 - }, - { - "name" : "minecraft:music_disc_strad", - "id" : 542 - }, - { - "name" : "minecraft:music_disc_wait", - "id" : 545 - }, - { - "name" : "minecraft:music_disc_ward", - "id" : 543 - }, - { - "name" : "minecraft:mutton", - "id" : 550 - }, - { - "name" : "minecraft:mycelium", - "id" : 110 - }, - { - "name" : "minecraft:mysterious_frame", - "id" : -466 - }, - { - "name" : "minecraft:mysterious_frame_slot", - "id" : -467 - }, - { - "name" : "minecraft:name_tag", - "id" : 548 - }, - { - "name" : "minecraft:nautilus_shell", - "id" : 570 - }, - { - "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" : 620 - }, - { - "name" : "minecraft:nether_star", - "id" : 518 - }, - { - "name" : "minecraft:nether_wart", - "id" : 294 - }, - { - "name" : "minecraft:nether_wart_block", - "id" : 214 - }, - { - "name" : "minecraft:netherbrick", - "id" : 523 - }, - { - "name" : "minecraft:netherite_axe", - "id" : 606 - }, - { - "name" : "minecraft:netherite_block", - "id" : -270 - }, - { - "name" : "minecraft:netherite_boots", - "id" : 611 - }, - { - "name" : "minecraft:netherite_chestplate", - "id" : 609 - }, - { - "name" : "minecraft:netherite_helmet", - "id" : 608 - }, - { - "name" : "minecraft:netherite_hoe", - "id" : 607 - }, - { - "name" : "minecraft:netherite_ingot", - "id" : 602 - }, - { - "name" : "minecraft:netherite_leggings", - "id" : 610 - }, - { - "name" : "minecraft:netherite_pickaxe", - "id" : 605 - }, - { - "name" : "minecraft:netherite_scrap", - "id" : 612 - }, - { - "name" : "minecraft:netherite_shovel", - "id" : 604 - }, - { - "name" : "minecraft:netherite_sword", - "id" : 603 - }, - { - "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" : 470 - }, - { - "name" : "minecraft:oak_boat", - "id" : 375 - }, - { - "name" : "minecraft:oak_sign", - "id" : 358 - }, - { - "name" : "minecraft:oak_stairs", - "id" : 53 - }, - { - "name" : "minecraft:observer", - "id" : 251 - }, - { - "name" : "minecraft:obsidian", - "id" : 49 - }, - { - "name" : "minecraft:ocelot_spawn_egg", - "id" : 451 - }, - { - "name" : "minecraft:orange_candle", - "id" : -414 - }, - { - "name" : "minecraft:orange_candle_cake", - "id" : -431 - }, - { - "name" : "minecraft:orange_dye", - "id" : 409 - }, - { - "name" : "minecraft:orange_glazed_terracotta", - "id" : 221 - }, - { - "name" : "minecraft:oxidized_copper", - "id" : -343 - }, - { - "name" : "minecraft:oxidized_cut_copper", - "id" : -350 - }, - { - "name" : "minecraft:oxidized_cut_copper_slab", - "id" : -364 - }, - { - "name" : "minecraft:oxidized_cut_copper_stairs", - "id" : -357 - }, - { - "name" : "minecraft:oxidized_double_cut_copper_slab", - "id" : -371 - }, - { - "name" : "minecraft:packed_ice", - "id" : 174 - }, - { - "name" : "minecraft:painting", - "id" : 357 - }, - { - "name" : "minecraft:panda_spawn_egg", - "id" : 489 - }, - { - "name" : "minecraft:paper", - "id" : 386 - }, - { - "name" : "minecraft:parrot_spawn_egg", - "id" : 478 - }, - { - "name" : "minecraft:phantom_membrane", - "id" : 574 - }, - { - "name" : "minecraft:phantom_spawn_egg", - "id" : 486 - }, - { - "name" : "minecraft:pig_spawn_egg", - "id" : 437 - }, - { - "name" : "minecraft:piglin_banner_pattern", - "id" : 587 - }, - { - "name" : "minecraft:piglin_brute_spawn_egg", - "id" : 499 - }, - { - "name" : "minecraft:piglin_spawn_egg", - "id" : 497 - }, - { - "name" : "minecraft:pillager_spawn_egg", - "id" : 491 - }, - { - "name" : "minecraft:pink_candle", - "id" : -419 - }, - { - "name" : "minecraft:pink_candle_cake", - "id" : -436 - }, - { - "name" : "minecraft:pink_dye", - "id" : 404 - }, - { - "name" : "minecraft:pink_glazed_terracotta", - "id" : 226 - }, - { - "name" : "minecraft:piston", - "id" : 33 - }, - { - "name" : "minecraft:pistonarmcollision", - "id" : 34 - }, - { - "name" : "minecraft:planks", - "id" : 5 - }, - { - "name" : "minecraft:podzol", - "id" : 243 - }, - { - "name" : "minecraft:pointed_dripstone", - "id" : -308 - }, - { - "name" : "minecraft:poisonous_potato", - "id" : 282 - }, - { - "name" : "minecraft:polar_bear_spawn_egg", - "id" : 472 - }, - { - "name" : "minecraft:polished_andesite_stairs", - "id" : -174 - }, - { - "name" : "minecraft:polished_basalt", - "id" : -235 - }, - { - "name" : "minecraft:polished_blackstone", - "id" : -291 - }, - { - "name" : "minecraft:polished_blackstone_brick_double_slab", - "id" : -285 - }, - { - "name" : "minecraft:polished_blackstone_brick_slab", - "id" : -284 - }, - { - "name" : "minecraft:polished_blackstone_brick_stairs", - "id" : -275 - }, - { - "name" : "minecraft:polished_blackstone_brick_wall", - "id" : -278 - }, - { - "name" : "minecraft:polished_blackstone_bricks", - "id" : -274 - }, - { - "name" : "minecraft:polished_blackstone_button", - "id" : -296 - }, - { - "name" : "minecraft:polished_blackstone_double_slab", - "id" : -294 - }, - { - "name" : "minecraft:polished_blackstone_pressure_plate", - "id" : -295 - }, - { - "name" : "minecraft:polished_blackstone_slab", - "id" : -293 - }, - { - "name" : "minecraft:polished_blackstone_stairs", - "id" : -292 - }, - { - "name" : "minecraft:polished_blackstone_wall", - "id" : -297 - }, - { - "name" : "minecraft:polished_deepslate", - "id" : -383 - }, - { - "name" : "minecraft:polished_deepslate_double_slab", - "id" : -397 - }, - { - "name" : "minecraft:polished_deepslate_slab", - "id" : -384 - }, - { - "name" : "minecraft:polished_deepslate_stairs", - "id" : -385 - }, - { - "name" : "minecraft:polished_deepslate_wall", - "id" : -386 - }, - { - "name" : "minecraft:polished_diorite_stairs", - "id" : -173 - }, - { - "name" : "minecraft:polished_granite_stairs", - "id" : -172 - }, - { - "name" : "minecraft:popped_chorus_fruit", - "id" : 559 - }, - { - "name" : "minecraft:porkchop", - "id" : 262 - }, - { - "name" : "minecraft:portal", - "id" : 90 - }, - { - "name" : "minecraft:potato", - "id" : 280 - }, - { - "name" : "minecraft:potatoes", - "id" : 142 - }, - { - "name" : "minecraft:potion", - "id" : 426 - }, - { - "name" : "minecraft:powder_snow", - "id" : -306 - }, - { - "name" : "minecraft:powder_snow_bucket", - "id" : 368 - }, - { - "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" : 549 - }, - { - "name" : "minecraft:prismarine_shard", - "id" : 565 - }, - { - "name" : "minecraft:prismarine_stairs", - "id" : -2 - }, - { - "name" : "minecraft:pufferfish", - "id" : 267 - }, - { - "name" : "minecraft:pufferfish_bucket", - "id" : 367 - }, - { - "name" : "minecraft:pufferfish_spawn_egg", - "id" : 481 - }, - { - "name" : "minecraft:pumpkin", - "id" : 86 - }, - { - "name" : "minecraft:pumpkin_pie", - "id" : 284 - }, - { - "name" : "minecraft:pumpkin_seeds", - "id" : 292 - }, - { - "name" : "minecraft:pumpkin_stem", - "id" : 104 - }, - { - "name" : "minecraft:purple_candle", - "id" : -423 - }, - { - "name" : "minecraft:purple_candle_cake", - "id" : -440 - }, - { - "name" : "minecraft:purple_dye", - "id" : 400 - }, - { - "name" : "minecraft:purple_glazed_terracotta", - "id" : 219 - }, - { - "name" : "minecraft:purpur_block", - "id" : 201 - }, - { - "name" : "minecraft:purpur_stairs", - "id" : 203 - }, - { - "name" : "minecraft:quartz", - "id" : 524 - }, - { - "name" : "minecraft:quartz_block", - "id" : 155 - }, - { - "name" : "minecraft:quartz_bricks", - "id" : -304 - }, - { - "name" : "minecraft:quartz_ore", - "id" : 153 - }, - { - "name" : "minecraft:quartz_stairs", - "id" : 156 - }, - { - "name" : "minecraft:rabbit", - "id" : 288 - }, - { - "name" : "minecraft:rabbit_foot", - "id" : 528 - }, - { - "name" : "minecraft:rabbit_hide", - "id" : 529 - }, - { - "name" : "minecraft:rabbit_spawn_egg", - "id" : 459 - }, - { - "name" : "minecraft:rabbit_stew", - "id" : 290 - }, - { - "name" : "minecraft:rail", - "id" : 66 - }, - { - "name" : "minecraft:rapid_fertilizer", - "id" : 596 - }, - { - "name" : "minecraft:ravager_spawn_egg", - "id" : 493 - }, - { - "name" : "minecraft:raw_copper", - "id" : 507 - }, - { - "name" : "minecraft:raw_copper_block", - "id" : -452 - }, - { - "name" : "minecraft:raw_gold", - "id" : 506 - }, - { - "name" : "minecraft:raw_gold_block", - "id" : -453 - }, - { - "name" : "minecraft:raw_iron", - "id" : 505 - }, - { - "name" : "minecraft:raw_iron_block", - "id" : -451 - }, - { - "name" : "minecraft:real_double_stone_slab", - "id" : 43 - }, - { - "name" : "minecraft:real_double_stone_slab2", - "id" : 181 - }, - { - "name" : "minecraft:real_double_stone_slab3", - "id" : -167 - }, - { - "name" : "minecraft:real_double_stone_slab4", - "id" : -168 - }, - { - "name" : "minecraft:red_candle", - "id" : -427 - }, - { - "name" : "minecraft:red_candle_cake", - "id" : -444 - }, - { - "name" : "minecraft:red_dye", - "id" : 396 - }, - { - "name" : "minecraft:red_flower", - "id" : 38 - }, - { - "name" : "minecraft:red_glazed_terracotta", - "id" : 234 - }, - { - "name" : "minecraft:red_mushroom", - "id" : 40 - }, - { - "name" : "minecraft:red_mushroom_block", - "id" : 100 - }, - { - "name" : "minecraft:red_nether_brick", - "id" : 215 - }, - { - "name" : "minecraft:red_nether_brick_stairs", - "id" : -184 - }, - { - "name" : "minecraft:red_sandstone", - "id" : 179 - }, - { - "name" : "minecraft:red_sandstone_stairs", - "id" : 180 - }, - { - "name" : "minecraft:redstone", - "id" : 373 - }, - { - "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:repeater", - "id" : 419 - }, - { - "name" : "minecraft:repeating_command_block", - "id" : 188 - }, - { - "name" : "minecraft:reserved6", - "id" : 255 - }, - { - "name" : "minecraft:respawn_anchor", - "id" : -272 - }, - { - "name" : "minecraft:rotten_flesh", - "id" : 277 - }, - { - "name" : "minecraft:saddle", - "id" : 371 - }, - { - "name" : "minecraft:salmon", - "id" : 265 - }, - { - "name" : "minecraft:salmon_bucket", - "id" : 365 - }, - { - "name" : "minecraft:salmon_spawn_egg", - "id" : 482 - }, - { - "name" : "minecraft:sand", - "id" : 12 - }, - { - "name" : "minecraft:sandstone", - "id" : 24 - }, - { - "name" : "minecraft:sandstone_stairs", - "id" : 128 - }, - { - "name" : "minecraft:sapling", - "id" : 6 - }, - { - "name" : "minecraft:scaffolding", - "id" : -165 - }, - { - "name" : "minecraft:sculk", - "id" : -458 - }, - { - "name" : "minecraft:sculk_catalyst", - "id" : -460 - }, - { - "name" : "minecraft:sculk_sensor", - "id" : -307 - }, - { - "name" : "minecraft:sculk_shrieker", - "id" : -461 - }, - { - "name" : "minecraft:sculk_vein", - "id" : -459 - }, - { - "name" : "minecraft:scute", - "id" : 572 - }, - { - "name" : "minecraft:sea_pickle", - "id" : -156 - }, - { - "name" : "minecraft:seagrass", - "id" : -130 - }, - { - "name" : "minecraft:sealantern", - "id" : 169 - }, - { - "name" : "minecraft:shears", - "id" : 421 - }, - { - "name" : "minecraft:sheep_spawn_egg", - "id" : 438 - }, - { - "name" : "minecraft:shield", - "id" : 355 - }, - { - "name" : "minecraft:shroomlight", - "id" : -230 - }, - { - "name" : "minecraft:shulker_box", - "id" : 218 - }, - { - "name" : "minecraft:shulker_shell", - "id" : 566 - }, - { - "name" : "minecraft:shulker_spawn_egg", - "id" : 469 - }, - { - "name" : "minecraft:silver_glazed_terracotta", - "id" : 228 - }, - { - "name" : "minecraft:silverfish_spawn_egg", - "id" : 443 - }, - { - "name" : "minecraft:skeleton_horse_spawn_egg", - "id" : 467 - }, - { - "name" : "minecraft:skeleton_spawn_egg", - "id" : 444 - }, - { - "name" : "minecraft:skull", - "id" : 516 - }, - { - "name" : "minecraft:skull_banner_pattern", - "id" : 583 - }, - { - "name" : "minecraft:slime", - "id" : 165 - }, - { - "name" : "minecraft:slime_ball", - "id" : 388 - }, - { - "name" : "minecraft:slime_spawn_egg", - "id" : 445 - }, - { - "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:snow", - "id" : 80 - }, - { - "name" : "minecraft:snow_layer", - "id" : 78 - }, - { - "name" : "minecraft:snowball", - "id" : 374 - }, - { - "name" : "minecraft:soul_campfire", - "id" : 621 - }, - { - "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" : 599 - }, - { - "name" : "minecraft:spawn_egg", - "id" : 630 - }, - { - "name" : "minecraft:spider_eye", - "id" : 278 - }, - { - "name" : "minecraft:spider_spawn_egg", - "id" : 446 - }, - { - "name" : "minecraft:splash_potion", - "id" : 561 - }, - { - "name" : "minecraft:sponge", - "id" : 19 - }, - { - "name" : "minecraft:spore_blossom", - "id" : -321 - }, - { - "name" : "minecraft:spruce_boat", - "id" : 378 - }, - { - "name" : "minecraft:spruce_button", - "id" : -144 - }, - { - "name" : "minecraft:spruce_door", - "id" : 553 - }, - { - "name" : "minecraft:spruce_fence_gate", - "id" : 183 - }, - { - "name" : "minecraft:spruce_pressure_plate", - "id" : -154 - }, - { - "name" : "minecraft:spruce_sign", - "id" : 576 - }, - { - "name" : "minecraft:spruce_stairs", - "id" : 134 - }, - { - "name" : "minecraft:spruce_standing_sign", - "id" : -181 - }, - { - "name" : "minecraft:spruce_trapdoor", - "id" : -149 - }, - { - "name" : "minecraft:spruce_wall_sign", - "id" : -182 - }, - { - "name" : "minecraft:spyglass", - "id" : 625 - }, - { - "name" : "minecraft:squid_spawn_egg", - "id" : 450 - }, - { - "name" : "minecraft:stained_glass", - "id" : 241 - }, - { - "name" : "minecraft:stained_glass_pane", - "id" : 160 - }, - { - "name" : "minecraft:stained_hardened_clay", - "id" : 159 - }, - { - "name" : "minecraft:standing_banner", - "id" : 176 - }, - { - "name" : "minecraft:standing_sign", - "id" : 63 - }, - { - "name" : "minecraft:stick", - "id" : 320 - }, - { - "name" : "minecraft:sticky_piston", - "id" : 29 - }, - { - "name" : "minecraft:stickypistonarmcollision", - "id" : -217 - }, - { - "name" : "minecraft:stone", - "id" : 1 - }, - { - "name" : "minecraft:stone_axe", - "id" : 315 - }, - { - "name" : "minecraft:stone_brick_stairs", - "id" : 109 - }, - { - "name" : "minecraft:stone_button", - "id" : 77 - }, - { - "name" : "minecraft:stone_hoe", - "id" : 330 - }, - { - "name" : "minecraft:stone_pickaxe", - "id" : 314 - }, - { - "name" : "minecraft:stone_pressure_plate", - "id" : 70 - }, - { - "name" : "minecraft:stone_shovel", - "id" : 313 - }, - { - "name" : "minecraft:stone_stairs", - "id" : 67 - }, - { - "name" : "minecraft:stone_sword", - "id" : 312 - }, - { - "name" : "minecraft:stonebrick", - "id" : 98 - }, - { - "name" : "minecraft:stonecutter", - "id" : 245 - }, - { - "name" : "minecraft:stonecutter_block", - "id" : -197 - }, - { - "name" : "minecraft:stray_spawn_egg", - "id" : 462 - }, - { - "name" : "minecraft:strider_spawn_egg", - "id" : 495 - }, - { - "name" : "minecraft:string", - "id" : 326 - }, - { - "name" : "minecraft:stripped_acacia_log", - "id" : -8 - }, - { - "name" : "minecraft:stripped_birch_log", - "id" : -6 - }, - { - "name" : "minecraft:stripped_crimson_hyphae", - "id" : -300 - }, - { - "name" : "minecraft:stripped_crimson_stem", - "id" : -240 - }, - { - "name" : "minecraft:stripped_dark_oak_log", - "id" : -9 - }, - { - "name" : "minecraft:stripped_jungle_log", - "id" : -7 - }, - { - "name" : "minecraft:stripped_oak_log", - "id" : -10 - }, - { - "name" : "minecraft:stripped_spruce_log", - "id" : -5 - }, - { - "name" : "minecraft:stripped_warped_hyphae", - "id" : -301 - }, - { - "name" : "minecraft:stripped_warped_stem", - "id" : -241 - }, - { - "name" : "minecraft:structure_block", - "id" : 252 - }, - { - "name" : "minecraft:structure_void", - "id" : 217 - }, - { - "name" : "minecraft:sugar", - "id" : 416 - }, - { - "name" : "minecraft:sugar_cane", - "id" : 385 - }, - { - "name" : "minecraft:suspicious_stew", - "id" : 589 - }, - { - "name" : "minecraft:sweet_berries", - "id" : 287 - }, - { - "name" : "minecraft:sweet_berry_bush", - "id" : -207 - }, - { - "name" : "minecraft:tallgrass", - "id" : 31 - }, - { - "name" : "minecraft:target", - "id" : -239 - }, - { - "name" : "minecraft:tinted_glass", - "id" : -334 - }, - { - "name" : "minecraft:tnt", - "id" : 46 - }, - { - "name" : "minecraft:tnt_minecart", - "id" : 525 - }, - { - "name" : "minecraft:torch", - "id" : 50 - }, - { - "name" : "minecraft:totem_of_undying", - "id" : 568 - }, - { - "name" : "minecraft:trapdoor", - "id" : 96 - }, - { - "name" : "minecraft:trapped_chest", - "id" : 146 - }, - { - "name" : "minecraft:trident", - "id" : 546 - }, - { - "name" : "minecraft:tripwire", - "id" : 132 - }, - { - "name" : "minecraft:tripwire_hook", - "id" : 131 - }, - { - "name" : "minecraft:tropical_fish", - "id" : 266 - }, - { - "name" : "minecraft:tropical_fish_bucket", - "id" : 366 - }, - { - "name" : "minecraft:tropical_fish_spawn_egg", - "id" : 479 - }, - { - "name" : "minecraft:tuff", - "id" : -333 - }, - { - "name" : "minecraft:turtle_egg", - "id" : -159 - }, - { - "name" : "minecraft:turtle_helmet", - "id" : 573 - }, - { - "name" : "minecraft:turtle_spawn_egg", - "id" : 485 - }, - { - "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:vex_spawn_egg", - "id" : 476 - }, - { - "name" : "minecraft:villager_spawn_egg", - "id" : 449 - }, - { - "name" : "minecraft:vindicator_spawn_egg", - "id" : 474 - }, - { - "name" : "minecraft:vine", - "id" : 106 - }, - { - "name" : "minecraft:wall_banner", - "id" : 177 - }, - { - "name" : "minecraft:wall_sign", - "id" : 68 - }, - { - "name" : "minecraft:wandering_trader_spawn_egg", - "id" : 492 - }, - { - "name" : "minecraft:warped_button", - "id" : -261 - }, - { - "name" : "minecraft:warped_door", - "id" : 616 - }, - { - "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" : 617 - }, - { - "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" : 614 - }, - { - "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" : 362 - }, - { - "name" : "minecraft:waterlily", - "id" : 111 - }, - { - "name" : "minecraft:waxed_copper", - "id" : -344 - }, - { - "name" : "minecraft:waxed_cut_copper", - "id" : -351 - }, - { - "name" : "minecraft:waxed_cut_copper_slab", - "id" : -365 - }, - { - "name" : "minecraft:waxed_cut_copper_stairs", - "id" : -358 - }, - { - "name" : "minecraft:waxed_double_cut_copper_slab", - "id" : -372 - }, - { - "name" : "minecraft:waxed_exposed_copper", - "id" : -345 - }, - { - "name" : "minecraft:waxed_exposed_cut_copper", - "id" : -352 - }, - { - "name" : "minecraft:waxed_exposed_cut_copper_slab", - "id" : -366 - }, - { - "name" : "minecraft:waxed_exposed_cut_copper_stairs", - "id" : -359 - }, - { - "name" : "minecraft:waxed_exposed_double_cut_copper_slab", - "id" : -373 - }, - { - "name" : "minecraft:waxed_oxidized_copper", - "id" : -446 - }, - { - "name" : "minecraft:waxed_oxidized_cut_copper", - "id" : -447 - }, - { - "name" : "minecraft:waxed_oxidized_cut_copper_slab", - "id" : -449 - }, - { - "name" : "minecraft:waxed_oxidized_cut_copper_stairs", - "id" : -448 - }, - { - "name" : "minecraft:waxed_oxidized_double_cut_copper_slab", - "id" : -450 - }, - { - "name" : "minecraft:waxed_weathered_copper", - "id" : -346 - }, - { - "name" : "minecraft:waxed_weathered_cut_copper", - "id" : -353 - }, - { - "name" : "minecraft:waxed_weathered_cut_copper_slab", - "id" : -367 - }, - { - "name" : "minecraft:waxed_weathered_cut_copper_stairs", - "id" : -360 - }, - { - "name" : "minecraft:waxed_weathered_double_cut_copper_slab", - "id" : -374 - }, - { - "name" : "minecraft:weathered_copper", - "id" : -342 - }, - { - "name" : "minecraft:weathered_cut_copper", - "id" : -349 - }, - { - "name" : "minecraft:weathered_cut_copper_slab", - "id" : -363 - }, - { - "name" : "minecraft:weathered_cut_copper_stairs", - "id" : -356 - }, - { - "name" : "minecraft:weathered_double_cut_copper_slab", - "id" : -370 - }, - { - "name" : "minecraft:web", - "id" : 30 - }, - { - "name" : "minecraft:weeping_vines", - "id" : -231 - }, - { - "name" : "minecraft:wheat", - "id" : 334 - }, - { - "name" : "minecraft:wheat_seeds", - "id" : 291 - }, - { - "name" : "minecraft:white_candle", - "id" : -413 - }, - { - "name" : "minecraft:white_candle_cake", - "id" : -430 - }, - { - "name" : "minecraft:white_dye", - "id" : 410 - }, - { - "name" : "minecraft:white_glazed_terracotta", - "id" : 220 - }, - { - "name" : "minecraft:witch_spawn_egg", - "id" : 452 - }, - { - "name" : "minecraft:wither_rose", - "id" : -216 - }, - { - "name" : "minecraft:wither_skeleton_spawn_egg", - "id" : 464 - }, - { - "name" : "minecraft:wolf_spawn_egg", - "id" : 439 - }, - { - "name" : "minecraft:wood", - "id" : -212 - }, - { - "name" : "minecraft:wooden_axe", - "id" : 311 - }, - { - "name" : "minecraft:wooden_button", - "id" : 143 - }, - { - "name" : "minecraft:wooden_door", - "id" : 359 - }, - { - "name" : "minecraft:wooden_hoe", - "id" : 329 - }, - { - "name" : "minecraft:wooden_pickaxe", - "id" : 310 - }, - { - "name" : "minecraft:wooden_pressure_plate", - "id" : 72 - }, - { - "name" : "minecraft:wooden_shovel", - "id" : 309 - }, - { - "name" : "minecraft:wooden_slab", - "id" : 158 - }, - { - "name" : "minecraft:wooden_sword", - "id" : 308 - }, - { - "name" : "minecraft:wool", - "id" : 35 - }, - { - "name" : "minecraft:writable_book", - "id" : 510 - }, - { - "name" : "minecraft:written_book", - "id" : 511 - }, - { - "name" : "minecraft:yellow_candle", - "id" : -417 - }, - { - "name" : "minecraft:yellow_candle_cake", - "id" : -434 - }, - { - "name" : "minecraft:yellow_dye", - "id" : 406 - }, - { - "name" : "minecraft:yellow_flower", - "id" : 37 - }, - { - "name" : "minecraft:yellow_glazed_terracotta", - "id" : 224 - }, - { - "name" : "minecraft:zoglin_spawn_egg", - "id" : 498 - }, - { - "name" : "minecraft:zombie_horse_spawn_egg", - "id" : 468 - }, - { - "name" : "minecraft:zombie_pigman_spawn_egg", - "id" : 448 - }, - { - "name" : "minecraft:zombie_spawn_egg", - "id" : 447 - }, - { - "name" : "minecraft:zombie_villager_spawn_egg", - "id" : 477 - } -] \ No newline at end of file diff --git a/core/src/main/resources/bedrock/runtime_item_states.1_18_10.json b/core/src/main/resources/bedrock/runtime_item_states.1_18_10.json deleted file mode 100644 index 5bebcaf99..000000000 --- a/core/src/main/resources/bedrock/runtime_item_states.1_18_10.json +++ /dev/null @@ -1,4362 +0,0 @@ -[ - { - "name" : "minecraft:acacia_boat", - "id" : 379 - }, - { - "name" : "minecraft:acacia_button", - "id" : -140 - }, - { - "name" : "minecraft:acacia_door", - "id" : 556 - }, - { - "name" : "minecraft:acacia_fence_gate", - "id" : 187 - }, - { - "name" : "minecraft:acacia_pressure_plate", - "id" : -150 - }, - { - "name" : "minecraft:acacia_sign", - "id" : 579 - }, - { - "name" : "minecraft:acacia_stairs", - "id" : 163 - }, - { - "name" : "minecraft:acacia_standing_sign", - "id" : -190 - }, - { - "name" : "minecraft:acacia_trapdoor", - "id" : -145 - }, - { - "name" : "minecraft:acacia_wall_sign", - "id" : -191 - }, - { - "name" : "minecraft:activator_rail", - "id" : 126 - }, - { - "name" : "minecraft:agent_spawn_egg", - "id" : 487 - }, - { - "name" : "minecraft:air", - "id" : -158 - }, - { - "name" : "minecraft:allay_spawn_egg", - "id" : 631 - }, - { - "name" : "minecraft:allow", - "id" : 210 - }, - { - "name" : "minecraft:amethyst_block", - "id" : -327 - }, - { - "name" : "minecraft:amethyst_cluster", - "id" : -329 - }, - { - "name" : "minecraft:amethyst_shard", - "id" : 625 - }, - { - "name" : "minecraft:ancient_debris", - "id" : -271 - }, - { - "name" : "minecraft:andesite_stairs", - "id" : -171 - }, - { - "name" : "minecraft:anvil", - "id" : 145 - }, - { - "name" : "minecraft:apple", - "id" : 257 - }, - { - "name" : "minecraft:armor_stand", - "id" : 552 - }, - { - "name" : "minecraft:arrow", - "id" : 301 - }, - { - "name" : "minecraft:axolotl_bucket", - "id" : 369 - }, - { - "name" : "minecraft:axolotl_spawn_egg", - "id" : 500 - }, - { - "name" : "minecraft:azalea", - "id" : -337 - }, - { - "name" : "minecraft:azalea_leaves", - "id" : -324 - }, - { - "name" : "minecraft:azalea_leaves_flowered", - "id" : -325 - }, - { - "name" : "minecraft:baked_potato", - "id" : 281 - }, - { - "name" : "minecraft:balloon", - "id" : 598 - }, - { - "name" : "minecraft:bamboo", - "id" : -163 - }, - { - "name" : "minecraft:bamboo_sapling", - "id" : -164 - }, - { - "name" : "minecraft:banner", - "id" : 567 - }, - { - "name" : "minecraft:banner_pattern", - "id" : 635 - }, - { - "name" : "minecraft:barrel", - "id" : -203 - }, - { - "name" : "minecraft:barrier", - "id" : -161 - }, - { - "name" : "minecraft:basalt", - "id" : -234 - }, - { - "name" : "minecraft:bat_spawn_egg", - "id" : 453 - }, - { - "name" : "minecraft:beacon", - "id" : 138 - }, - { - "name" : "minecraft:bed", - "id" : 418 - }, - { - "name" : "minecraft:bedrock", - "id" : 7 - }, - { - "name" : "minecraft:bee_nest", - "id" : -218 - }, - { - "name" : "minecraft:bee_spawn_egg", - "id" : 494 - }, - { - "name" : "minecraft:beef", - "id" : 273 - }, - { - "name" : "minecraft:beehive", - "id" : -219 - }, - { - "name" : "minecraft:beetroot", - "id" : 285 - }, - { - "name" : "minecraft:beetroot_seeds", - "id" : 295 - }, - { - "name" : "minecraft:beetroot_soup", - "id" : 286 - }, - { - "name" : "minecraft:bell", - "id" : -206 - }, - { - "name" : "minecraft:big_dripleaf", - "id" : -323 - }, - { - "name" : "minecraft:birch_boat", - "id" : 376 - }, - { - "name" : "minecraft:birch_button", - "id" : -141 - }, - { - "name" : "minecraft:birch_door", - "id" : 554 - }, - { - "name" : "minecraft:birch_fence_gate", - "id" : 184 - }, - { - "name" : "minecraft:birch_pressure_plate", - "id" : -151 - }, - { - "name" : "minecraft:birch_sign", - "id" : 577 - }, - { - "name" : "minecraft:birch_stairs", - "id" : 135 - }, - { - "name" : "minecraft:birch_standing_sign", - "id" : -186 - }, - { - "name" : "minecraft:birch_trapdoor", - "id" : -146 - }, - { - "name" : "minecraft:birch_wall_sign", - "id" : -187 - }, - { - "name" : "minecraft:black_candle", - "id" : -428 - }, - { - "name" : "minecraft:black_candle_cake", - "id" : -445 - }, - { - "name" : "minecraft:black_dye", - "id" : 395 - }, - { - "name" : "minecraft:black_glazed_terracotta", - "id" : 235 - }, - { - "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:blast_furnace", - "id" : -196 - }, - { - "name" : "minecraft:blaze_powder", - "id" : 429 - }, - { - "name" : "minecraft:blaze_rod", - "id" : 423 - }, - { - "name" : "minecraft:blaze_spawn_egg", - "id" : 456 - }, - { - "name" : "minecraft:bleach", - "id" : 596 - }, - { - "name" : "minecraft:blue_candle", - "id" : -424 - }, - { - "name" : "minecraft:blue_candle_cake", - "id" : -441 - }, - { - "name" : "minecraft:blue_dye", - "id" : 399 - }, - { - "name" : "minecraft:blue_glazed_terracotta", - "id" : 231 - }, - { - "name" : "minecraft:blue_ice", - "id" : -11 - }, - { - "name" : "minecraft:boat", - "id" : 633 - }, - { - "name" : "minecraft:bone", - "id" : 415 - }, - { - "name" : "minecraft:bone_block", - "id" : 216 - }, - { - "name" : "minecraft:bone_meal", - "id" : 411 - }, - { - "name" : "minecraft:book", - "id" : 387 - }, - { - "name" : "minecraft:bookshelf", - "id" : 47 - }, - { - "name" : "minecraft:border_block", - "id" : 212 - }, - { - "name" : "minecraft:bordure_indented_banner_pattern", - "id" : 586 - }, - { - "name" : "minecraft:bow", - "id" : 300 - }, - { - "name" : "minecraft:bowl", - "id" : 321 - }, - { - "name" : "minecraft:bread", - "id" : 261 - }, - { - "name" : "minecraft:brewing_stand", - "id" : 431 - }, - { - "name" : "minecraft:brewingstandblock", - "id" : 117 - }, - { - "name" : "minecraft:brick", - "id" : 383 - }, - { - "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_dye", - "id" : 398 - }, - { - "name" : "minecraft:brown_glazed_terracotta", - "id" : 232 - }, - { - "name" : "minecraft:brown_mushroom", - "id" : 39 - }, - { - "name" : "minecraft:brown_mushroom_block", - "id" : 99 - }, - { - "name" : "minecraft:bubble_column", - "id" : -160 - }, - { - "name" : "minecraft:bucket", - "id" : 360 - }, - { - "name" : "minecraft:budding_amethyst", - "id" : -328 - }, - { - "name" : "minecraft:cactus", - "id" : 81 - }, - { - "name" : "minecraft:cake", - "id" : 417 - }, - { - "name" : "minecraft:calcite", - "id" : -326 - }, - { - "name" : "minecraft:camera", - "id" : 593 - }, - { - "name" : "minecraft:campfire", - "id" : 589 - }, - { - "name" : "minecraft:candle", - "id" : -412 - }, - { - "name" : "minecraft:candle_cake", - "id" : -429 - }, - { - "name" : "minecraft:carpet", - "id" : 171 - }, - { - "name" : "minecraft:carrot", - "id" : 279 - }, - { - "name" : "minecraft:carrot_on_a_stick", - "id" : 517 - }, - { - "name" : "minecraft:carrots", - "id" : 141 - }, - { - "name" : "minecraft:cartography_table", - "id" : -200 - }, - { - "name" : "minecraft:carved_pumpkin", - "id" : -155 - }, - { - "name" : "minecraft:cat_spawn_egg", - "id" : 488 - }, - { - "name" : "minecraft:cauldron", - "id" : 432 - }, - { - "name" : "minecraft:cave_spider_spawn_egg", - "id" : 457 - }, - { - "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" : 619 - }, - { - "name" : "minecraft:chain_command_block", - "id" : 189 - }, - { - "name" : "minecraft:chainmail_boots", - "id" : 342 - }, - { - "name" : "minecraft:chainmail_chestplate", - "id" : 340 - }, - { - "name" : "minecraft:chainmail_helmet", - "id" : 339 - }, - { - "name" : "minecraft:chainmail_leggings", - "id" : 341 - }, - { - "name" : "minecraft:charcoal", - "id" : 303 - }, - { - "name" : "minecraft:chemical_heat", - "id" : 192 - }, - { - "name" : "minecraft:chemistry_table", - "id" : 238 - }, - { - "name" : "minecraft:chest", - "id" : 54 - }, - { - "name" : "minecraft:chest_minecart", - "id" : 389 - }, - { - "name" : "minecraft:chicken", - "id" : 275 - }, - { - "name" : "minecraft:chicken_spawn_egg", - "id" : 435 - }, - { - "name" : "minecraft:chiseled_deepslate", - "id" : -395 - }, - { - "name" : "minecraft:chiseled_nether_bricks", - "id" : -302 - }, - { - "name" : "minecraft:chiseled_polished_blackstone", - "id" : -279 - }, - { - "name" : "minecraft:chorus_flower", - "id" : 200 - }, - { - "name" : "minecraft:chorus_fruit", - "id" : 558 - }, - { - "name" : "minecraft:chorus_plant", - "id" : 240 - }, - { - "name" : "minecraft:clay", - "id" : 82 - }, - { - "name" : "minecraft:clay_ball", - "id" : 384 - }, - { - "name" : "minecraft:client_request_placeholder_block", - "id" : -465 - }, - { - "name" : "minecraft:clock", - "id" : 393 - }, - { - "name" : "minecraft:coal", - "id" : 302 - }, - { - "name" : "minecraft:coal_block", - "id" : 173 - }, - { - "name" : "minecraft:coal_ore", - "id" : 16 - }, - { - "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" : 412 - }, - { - "name" : "minecraft:cod", - "id" : 264 - }, - { - "name" : "minecraft:cod_bucket", - "id" : 364 - }, - { - "name" : "minecraft:cod_spawn_egg", - "id" : 480 - }, - { - "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" : 563 - }, - { - "name" : "minecraft:comparator", - "id" : 522 - }, - { - "name" : "minecraft:compass", - "id" : 391 - }, - { - "name" : "minecraft:composter", - "id" : -213 - }, - { - "name" : "minecraft:compound", - "id" : 594 - }, - { - "name" : "minecraft:concrete", - "id" : 236 - }, - { - "name" : "minecraft:concrete_powder", - "id" : 237 - }, - { - "name" : "minecraft:conduit", - "id" : -157 - }, - { - "name" : "minecraft:cooked_beef", - "id" : 274 - }, - { - "name" : "minecraft:cooked_chicken", - "id" : 276 - }, - { - "name" : "minecraft:cooked_cod", - "id" : 268 - }, - { - "name" : "minecraft:cooked_mutton", - "id" : 551 - }, - { - "name" : "minecraft:cooked_porkchop", - "id" : 263 - }, - { - "name" : "minecraft:cooked_rabbit", - "id" : 289 - }, - { - "name" : "minecraft:cooked_salmon", - "id" : 269 - }, - { - "name" : "minecraft:cookie", - "id" : 271 - }, - { - "name" : "minecraft:copper_block", - "id" : -340 - }, - { - "name" : "minecraft:copper_ingot", - "id" : 504 - }, - { - "name" : "minecraft:copper_ore", - "id" : -311 - }, - { - "name" : "minecraft:coral", - "id" : -131 - }, - { - "name" : "minecraft:coral_block", - "id" : -132 - }, - { - "name" : "minecraft:coral_fan", - "id" : -133 - }, - { - "name" : "minecraft:coral_fan_dead", - "id" : -134 - }, - { - "name" : "minecraft:coral_fan_hang", - "id" : -135 - }, - { - "name" : "minecraft:coral_fan_hang2", - "id" : -136 - }, - { - "name" : "minecraft:coral_fan_hang3", - "id" : -137 - }, - { - "name" : "minecraft:cow_spawn_egg", - "id" : 436 - }, - { - "name" : "minecraft:cracked_deepslate_bricks", - "id" : -410 - }, - { - "name" : "minecraft:cracked_deepslate_tiles", - "id" : -409 - }, - { - "name" : "minecraft:cracked_nether_bricks", - "id" : -303 - }, - { - "name" : "minecraft:cracked_polished_blackstone_bricks", - "id" : -280 - }, - { - "name" : "minecraft:crafting_table", - "id" : 58 - }, - { - "name" : "minecraft:creeper_banner_pattern", - "id" : 582 - }, - { - "name" : "minecraft:creeper_spawn_egg", - "id" : 441 - }, - { - "name" : "minecraft:crimson_button", - "id" : -260 - }, - { - "name" : "minecraft:crimson_door", - "id" : 616 - }, - { - "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_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" : 614 - }, - { - "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" : 575 - }, - { - "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_dye", - "id" : 401 - }, - { - "name" : "minecraft:cyan_glazed_terracotta", - "id" : 229 - }, - { - "name" : "minecraft:dark_oak_boat", - "id" : 380 - }, - { - "name" : "minecraft:dark_oak_button", - "id" : -142 - }, - { - "name" : "minecraft:dark_oak_door", - "id" : 557 - }, - { - "name" : "minecraft:dark_oak_fence_gate", - "id" : 186 - }, - { - "name" : "minecraft:dark_oak_pressure_plate", - "id" : -152 - }, - { - "name" : "minecraft:dark_oak_sign", - "id" : 580 - }, - { - "name" : "minecraft:dark_oak_stairs", - "id" : 164 - }, - { - "name" : "minecraft:dark_oak_trapdoor", - "id" : -147 - }, - { - "name" : "minecraft:dark_prismarine_stairs", - "id" : -3 - }, - { - "name" : "minecraft:darkoak_standing_sign", - "id" : -192 - }, - { - "name" : "minecraft:darkoak_wall_sign", - "id" : -193 - }, - { - "name" : "minecraft:daylight_detector", - "id" : 151 - }, - { - "name" : "minecraft:daylight_detector_inverted", - "id" : 178 - }, - { - "name" : "minecraft:deadbush", - "id" : 32 - }, - { - "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" : 304 - }, - { - "name" : "minecraft:diamond_axe", - "id" : 319 - }, - { - "name" : "minecraft:diamond_block", - "id" : 57 - }, - { - "name" : "minecraft:diamond_boots", - "id" : 350 - }, - { - "name" : "minecraft:diamond_chestplate", - "id" : 348 - }, - { - "name" : "minecraft:diamond_helmet", - "id" : 347 - }, - { - "name" : "minecraft:diamond_hoe", - "id" : 332 - }, - { - "name" : "minecraft:diamond_horse_armor", - "id" : 533 - }, - { - "name" : "minecraft:diamond_leggings", - "id" : 349 - }, - { - "name" : "minecraft:diamond_ore", - "id" : 56 - }, - { - "name" : "minecraft:diamond_pickaxe", - "id" : 318 - }, - { - "name" : "minecraft:diamond_shovel", - "id" : 317 - }, - { - "name" : "minecraft:diamond_sword", - "id" : 316 - }, - { - "name" : "minecraft:diorite_stairs", - "id" : -170 - }, - { - "name" : "minecraft:dirt", - "id" : 3 - }, - { - "name" : "minecraft:dirt_with_roots", - "id" : -318 - }, - { - "name" : "minecraft:dispenser", - "id" : 23 - }, - { - "name" : "minecraft:dolphin_spawn_egg", - "id" : 484 - }, - { - "name" : "minecraft:donkey_spawn_egg", - "id" : 465 - }, - { - "name" : "minecraft:double_cut_copper_slab", - "id" : -368 - }, - { - "name" : "minecraft:double_plant", - "id" : 175 - }, - { - "name" : "minecraft:double_stone_slab", - "id" : 44 - }, - { - "name" : "minecraft:double_stone_slab2", - "id" : 182 - }, - { - "name" : "minecraft:double_stone_slab3", - "id" : -162 - }, - { - "name" : "minecraft:double_stone_slab4", - "id" : -166 - }, - { - "name" : "minecraft:double_wooden_slab", - "id" : 157 - }, - { - "name" : "minecraft:dragon_breath", - "id" : 560 - }, - { - "name" : "minecraft:dragon_egg", - "id" : 122 - }, - { - "name" : "minecraft:dried_kelp", - "id" : 270 - }, - { - "name" : "minecraft:dried_kelp_block", - "id" : -139 - }, - { - "name" : "minecraft:dripstone_block", - "id" : -317 - }, - { - "name" : "minecraft:dropper", - "id" : 125 - }, - { - "name" : "minecraft:drowned_spawn_egg", - "id" : 483 - }, - { - "name" : "minecraft:dye", - "id" : 634 - }, - { - "name" : "minecraft:egg", - "id" : 390 - }, - { - "name" : "minecraft:elder_guardian_spawn_egg", - "id" : 471 - }, - { - "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" : 564 - }, - { - "name" : "minecraft:emerald", - "id" : 512 - }, - { - "name" : "minecraft:emerald_block", - "id" : 133 - }, - { - "name" : "minecraft:emerald_ore", - "id" : 129 - }, - { - "name" : "minecraft:empty_map", - "id" : 515 - }, - { - "name" : "minecraft:enchanted_book", - "id" : 521 - }, - { - "name" : "minecraft:enchanted_golden_apple", - "id" : 259 - }, - { - "name" : "minecraft:enchanting_table", - "id" : 116 - }, - { - "name" : "minecraft:end_brick_stairs", - "id" : -178 - }, - { - "name" : "minecraft:end_bricks", - "id" : 206 - }, - { - "name" : "minecraft:end_crystal", - "id" : 637 - }, - { - "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_eye", - "id" : 433 - }, - { - "name" : "minecraft:ender_pearl", - "id" : 422 - }, - { - "name" : "minecraft:enderman_spawn_egg", - "id" : 442 - }, - { - "name" : "minecraft:endermite_spawn_egg", - "id" : 460 - }, - { - "name" : "minecraft:evoker_spawn_egg", - "id" : 475 - }, - { - "name" : "minecraft:experience_bottle", - "id" : 508 - }, - { - "name" : "minecraft:exposed_copper", - "id" : -341 - }, - { - "name" : "minecraft:exposed_cut_copper", - "id" : -348 - }, - { - "name" : "minecraft:exposed_cut_copper_slab", - "id" : -362 - }, - { - "name" : "minecraft:exposed_cut_copper_stairs", - "id" : -355 - }, - { - "name" : "minecraft:exposed_double_cut_copper_slab", - "id" : -369 - }, - { - "name" : "minecraft:farmland", - "id" : 60 - }, - { - "name" : "minecraft:feather", - "id" : 327 - }, - { - "name" : "minecraft:fence", - "id" : 85 - }, - { - "name" : "minecraft:fence_gate", - "id" : 107 - }, - { - "name" : "minecraft:fermented_spider_eye", - "id" : 428 - }, - { - "name" : "minecraft:field_masoned_banner_pattern", - "id" : 585 - }, - { - "name" : "minecraft:filled_map", - "id" : 420 - }, - { - "name" : "minecraft:fire", - "id" : 51 - }, - { - "name" : "minecraft:fire_charge", - "id" : 509 - }, - { - "name" : "minecraft:firefly_spawn_egg", - "id" : 632 - }, - { - "name" : "minecraft:firework_rocket", - "id" : 519 - }, - { - "name" : "minecraft:firework_star", - "id" : 520 - }, - { - "name" : "minecraft:fishing_rod", - "id" : 392 - }, - { - "name" : "minecraft:fletching_table", - "id" : -201 - }, - { - "name" : "minecraft:flint", - "id" : 356 - }, - { - "name" : "minecraft:flint_and_steel", - "id" : 299 - }, - { - "name" : "minecraft:flower_banner_pattern", - "id" : 581 - }, - { - "name" : "minecraft:flower_pot", - "id" : 514 - }, - { - "name" : "minecraft:flowering_azalea", - "id" : -338 - }, - { - "name" : "minecraft:flowing_lava", - "id" : 10 - }, - { - "name" : "minecraft:flowing_water", - "id" : 8 - }, - { - "name" : "minecraft:fox_spawn_egg", - "id" : 490 - }, - { - "name" : "minecraft:frame", - "id" : 513 - }, - { - "name" : "minecraft:frog_egg", - "id" : -468 - }, - { - "name" : "minecraft:frog_spawn_egg", - "id" : 628 - }, - { - "name" : "minecraft:frosted_ice", - "id" : 207 - }, - { - "name" : "minecraft:furnace", - "id" : 61 - }, - { - "name" : "minecraft:ghast_spawn_egg", - "id" : 454 - }, - { - "name" : "minecraft:ghast_tear", - "id" : 424 - }, - { - "name" : "minecraft:gilded_blackstone", - "id" : -281 - }, - { - "name" : "minecraft:glass", - "id" : 20 - }, - { - "name" : "minecraft:glass_bottle", - "id" : 427 - }, - { - "name" : "minecraft:glass_pane", - "id" : 102 - }, - { - "name" : "minecraft:glistering_melon_slice", - "id" : 434 - }, - { - "name" : "minecraft:globe_banner_pattern", - "id" : 588 - }, - { - "name" : "minecraft:glow_berries", - "id" : 638 - }, - { - "name" : "minecraft:glow_frame", - "id" : 623 - }, - { - "name" : "minecraft:glow_ink_sac", - "id" : 503 - }, - { - "name" : "minecraft:glow_lichen", - "id" : -411 - }, - { - "name" : "minecraft:glow_squid_spawn_egg", - "id" : 502 - }, - { - "name" : "minecraft:glow_stick", - "id" : 601 - }, - { - "name" : "minecraft:glowingobsidian", - "id" : 246 - }, - { - "name" : "minecraft:glowstone", - "id" : 89 - }, - { - "name" : "minecraft:glowstone_dust", - "id" : 394 - }, - { - "name" : "minecraft:goat_horn", - "id" : 624 - }, - { - "name" : "minecraft:goat_spawn_egg", - "id" : 501 - }, - { - "name" : "minecraft:gold_block", - "id" : 41 - }, - { - "name" : "minecraft:gold_ingot", - "id" : 306 - }, - { - "name" : "minecraft:gold_nugget", - "id" : 425 - }, - { - "name" : "minecraft:gold_ore", - "id" : 14 - }, - { - "name" : "minecraft:golden_apple", - "id" : 258 - }, - { - "name" : "minecraft:golden_axe", - "id" : 325 - }, - { - "name" : "minecraft:golden_boots", - "id" : 354 - }, - { - "name" : "minecraft:golden_carrot", - "id" : 283 - }, - { - "name" : "minecraft:golden_chestplate", - "id" : 352 - }, - { - "name" : "minecraft:golden_helmet", - "id" : 351 - }, - { - "name" : "minecraft:golden_hoe", - "id" : 333 - }, - { - "name" : "minecraft:golden_horse_armor", - "id" : 532 - }, - { - "name" : "minecraft:golden_leggings", - "id" : 353 - }, - { - "name" : "minecraft:golden_pickaxe", - "id" : 324 - }, - { - "name" : "minecraft:golden_rail", - "id" : 27 - }, - { - "name" : "minecraft:golden_shovel", - "id" : 323 - }, - { - "name" : "minecraft:golden_sword", - "id" : 322 - }, - { - "name" : "minecraft:granite_stairs", - "id" : -169 - }, - { - "name" : "minecraft:grass", - "id" : 2 - }, - { - "name" : "minecraft:grass_path", - "id" : 198 - }, - { - "name" : "minecraft:gravel", - "id" : 13 - }, - { - "name" : "minecraft:gray_candle", - "id" : -420 - }, - { - "name" : "minecraft:gray_candle_cake", - "id" : -437 - }, - { - "name" : "minecraft:gray_dye", - "id" : 403 - }, - { - "name" : "minecraft:gray_glazed_terracotta", - "id" : 227 - }, - { - "name" : "minecraft:green_candle", - "id" : -426 - }, - { - "name" : "minecraft:green_candle_cake", - "id" : -443 - }, - { - "name" : "minecraft:green_dye", - "id" : 397 - }, - { - "name" : "minecraft:green_glazed_terracotta", - "id" : 233 - }, - { - "name" : "minecraft:grindstone", - "id" : -195 - }, - { - "name" : "minecraft:guardian_spawn_egg", - "id" : 461 - }, - { - "name" : "minecraft:gunpowder", - "id" : 328 - }, - { - "name" : "minecraft:hanging_roots", - "id" : -319 - }, - { - "name" : "minecraft:hard_glass", - "id" : 253 - }, - { - "name" : "minecraft:hard_glass_pane", - "id" : 190 - }, - { - "name" : "minecraft:hard_stained_glass", - "id" : 254 - }, - { - "name" : "minecraft:hard_stained_glass_pane", - "id" : 191 - }, - { - "name" : "minecraft:hardened_clay", - "id" : 172 - }, - { - "name" : "minecraft:hay_block", - "id" : 170 - }, - { - "name" : "minecraft:heart_of_the_sea", - "id" : 571 - }, - { - "name" : "minecraft:heavy_weighted_pressure_plate", - "id" : 148 - }, - { - "name" : "minecraft:hoglin_spawn_egg", - "id" : 496 - }, - { - "name" : "minecraft:honey_block", - "id" : -220 - }, - { - "name" : "minecraft:honey_bottle", - "id" : 592 - }, - { - "name" : "minecraft:honeycomb", - "id" : 591 - }, - { - "name" : "minecraft:honeycomb_block", - "id" : -221 - }, - { - "name" : "minecraft:hopper", - "id" : 527 - }, - { - "name" : "minecraft:hopper_minecart", - "id" : 526 - }, - { - "name" : "minecraft:horse_spawn_egg", - "id" : 458 - }, - { - "name" : "minecraft:husk_spawn_egg", - "id" : 463 - }, - { - "name" : "minecraft:ice", - "id" : 79 - }, - { - "name" : "minecraft:ice_bomb", - "id" : 595 - }, - { - "name" : "minecraft:infested_deepslate", - "id" : -454 - }, - { - "name" : "minecraft:info_update", - "id" : 248 - }, - { - "name" : "minecraft:info_update2", - "id" : 249 - }, - { - "name" : "minecraft:ink_sac", - "id" : 413 - }, - { - "name" : "minecraft:invisiblebedrock", - "id" : 95 - }, - { - "name" : "minecraft:iron_axe", - "id" : 298 - }, - { - "name" : "minecraft:iron_bars", - "id" : 101 - }, - { - "name" : "minecraft:iron_block", - "id" : 42 - }, - { - "name" : "minecraft:iron_boots", - "id" : 346 - }, - { - "name" : "minecraft:iron_chestplate", - "id" : 344 - }, - { - "name" : "minecraft:iron_door", - "id" : 372 - }, - { - "name" : "minecraft:iron_helmet", - "id" : 343 - }, - { - "name" : "minecraft:iron_hoe", - "id" : 331 - }, - { - "name" : "minecraft:iron_horse_armor", - "id" : 531 - }, - { - "name" : "minecraft:iron_ingot", - "id" : 305 - }, - { - "name" : "minecraft:iron_leggings", - "id" : 345 - }, - { - "name" : "minecraft:iron_nugget", - "id" : 569 - }, - { - "name" : "minecraft:iron_ore", - "id" : 15 - }, - { - "name" : "minecraft:iron_pickaxe", - "id" : 297 - }, - { - "name" : "minecraft:iron_shovel", - "id" : 296 - }, - { - "name" : "minecraft:iron_sword", - "id" : 307 - }, - { - "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.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.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" : 377 - }, - { - "name" : "minecraft:jungle_button", - "id" : -143 - }, - { - "name" : "minecraft:jungle_door", - "id" : 555 - }, - { - "name" : "minecraft:jungle_fence_gate", - "id" : 185 - }, - { - "name" : "minecraft:jungle_pressure_plate", - "id" : -153 - }, - { - "name" : "minecraft:jungle_sign", - "id" : 578 - }, - { - "name" : "minecraft:jungle_stairs", - "id" : 136 - }, - { - "name" : "minecraft:jungle_standing_sign", - "id" : -188 - }, - { - "name" : "minecraft:jungle_trapdoor", - "id" : -148 - }, - { - "name" : "minecraft:jungle_wall_sign", - "id" : -189 - }, - { - "name" : "minecraft:kelp", - "id" : 382 - }, - { - "name" : "minecraft:ladder", - "id" : 65 - }, - { - "name" : "minecraft:lantern", - "id" : -208 - }, - { - "name" : "minecraft:lapis_block", - "id" : 22 - }, - { - "name" : "minecraft:lapis_lazuli", - "id" : 414 - }, - { - "name" : "minecraft:lapis_ore", - "id" : 21 - }, - { - "name" : "minecraft:large_amethyst_bud", - "id" : -330 - }, - { - "name" : "minecraft:lava", - "id" : 11 - }, - { - "name" : "minecraft:lava_bucket", - "id" : 363 - }, - { - "name" : "minecraft:lava_cauldron", - "id" : -210 - }, - { - "name" : "minecraft:lead", - "id" : 547 - }, - { - "name" : "minecraft:leather", - "id" : 381 - }, - { - "name" : "minecraft:leather_boots", - "id" : 338 - }, - { - "name" : "minecraft:leather_chestplate", - "id" : 336 - }, - { - "name" : "minecraft:leather_helmet", - "id" : 335 - }, - { - "name" : "minecraft:leather_horse_armor", - "id" : 530 - }, - { - "name" : "minecraft:leather_leggings", - "id" : 337 - }, - { - "name" : "minecraft:leaves", - "id" : 18 - }, - { - "name" : "minecraft:leaves2", - "id" : 161 - }, - { - "name" : "minecraft:lectern", - "id" : -194 - }, - { - "name" : "minecraft:lever", - "id" : 69 - }, - { - "name" : "minecraft:light_block", - "id" : -215 - }, - { - "name" : "minecraft:light_blue_candle", - "id" : -416 - }, - { - "name" : "minecraft:light_blue_candle_cake", - "id" : -433 - }, - { - "name" : "minecraft:light_blue_dye", - "id" : 407 - }, - { - "name" : "minecraft:light_blue_glazed_terracotta", - "id" : 223 - }, - { - "name" : "minecraft:light_gray_candle", - "id" : -421 - }, - { - "name" : "minecraft:light_gray_candle_cake", - "id" : -438 - }, - { - "name" : "minecraft:light_gray_dye", - "id" : 402 - }, - { - "name" : "minecraft:light_weighted_pressure_plate", - "id" : 147 - }, - { - "name" : "minecraft:lightning_rod", - "id" : -312 - }, - { - "name" : "minecraft:lime_candle", - "id" : -418 - }, - { - "name" : "minecraft:lime_candle_cake", - "id" : -435 - }, - { - "name" : "minecraft:lime_dye", - "id" : 405 - }, - { - "name" : "minecraft:lime_glazed_terracotta", - "id" : 225 - }, - { - "name" : "minecraft:lingering_potion", - "id" : 562 - }, - { - "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" : 473 - }, - { - "name" : "minecraft:lodestone", - "id" : -222 - }, - { - "name" : "minecraft:lodestone_compass", - "id" : 602 - }, - { - "name" : "minecraft:log", - "id" : 17 - }, - { - "name" : "minecraft:log2", - "id" : 162 - }, - { - "name" : "minecraft:loom", - "id" : -204 - }, - { - "name" : "minecraft:magenta_candle", - "id" : -415 - }, - { - "name" : "minecraft:magenta_candle_cake", - "id" : -432 - }, - { - "name" : "minecraft:magenta_dye", - "id" : 408 - }, - { - "name" : "minecraft:magenta_glazed_terracotta", - "id" : 222 - }, - { - "name" : "minecraft:magma", - "id" : 213 - }, - { - "name" : "minecraft:magma_cream", - "id" : 430 - }, - { - "name" : "minecraft:magma_cube_spawn_egg", - "id" : 455 - }, - { - "name" : "minecraft:medicine", - "id" : 599 - }, - { - "name" : "minecraft:medium_amethyst_bud", - "id" : -331 - }, - { - "name" : "minecraft:melon_block", - "id" : 103 - }, - { - "name" : "minecraft:melon_seeds", - "id" : 293 - }, - { - "name" : "minecraft:melon_slice", - "id" : 272 - }, - { - "name" : "minecraft:melon_stem", - "id" : 105 - }, - { - "name" : "minecraft:milk_bucket", - "id" : 361 - }, - { - "name" : "minecraft:minecart", - "id" : 370 - }, - { - "name" : "minecraft:mob_spawner", - "id" : 52 - }, - { - "name" : "minecraft:mojang_banner_pattern", - "id" : 584 - }, - { - "name" : "minecraft:monster_egg", - "id" : 97 - }, - { - "name" : "minecraft:mooshroom_spawn_egg", - "id" : 440 - }, - { - "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:movingblock", - "id" : 250 - }, - { - "name" : "minecraft:mule_spawn_egg", - "id" : 466 - }, - { - "name" : "minecraft:mushroom_stew", - "id" : 260 - }, - { - "name" : "minecraft:music_disc_11", - "id" : 544 - }, - { - "name" : "minecraft:music_disc_13", - "id" : 534 - }, - { - "name" : "minecraft:music_disc_blocks", - "id" : 536 - }, - { - "name" : "minecraft:music_disc_cat", - "id" : 535 - }, - { - "name" : "minecraft:music_disc_chirp", - "id" : 537 - }, - { - "name" : "minecraft:music_disc_far", - "id" : 538 - }, - { - "name" : "minecraft:music_disc_mall", - "id" : 539 - }, - { - "name" : "minecraft:music_disc_mellohi", - "id" : 540 - }, - { - "name" : "minecraft:music_disc_otherside", - "id" : 627 - }, - { - "name" : "minecraft:music_disc_pigstep", - "id" : 620 - }, - { - "name" : "minecraft:music_disc_stal", - "id" : 541 - }, - { - "name" : "minecraft:music_disc_strad", - "id" : 542 - }, - { - "name" : "minecraft:music_disc_wait", - "id" : 545 - }, - { - "name" : "minecraft:music_disc_ward", - "id" : 543 - }, - { - "name" : "minecraft:mutton", - "id" : 550 - }, - { - "name" : "minecraft:mycelium", - "id" : 110 - }, - { - "name" : "minecraft:mysterious_frame", - "id" : -466 - }, - { - "name" : "minecraft:mysterious_frame_slot", - "id" : -467 - }, - { - "name" : "minecraft:name_tag", - "id" : 548 - }, - { - "name" : "minecraft:nautilus_shell", - "id" : 570 - }, - { - "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" : 621 - }, - { - "name" : "minecraft:nether_star", - "id" : 518 - }, - { - "name" : "minecraft:nether_wart", - "id" : 294 - }, - { - "name" : "minecraft:nether_wart_block", - "id" : 214 - }, - { - "name" : "minecraft:netherbrick", - "id" : 523 - }, - { - "name" : "minecraft:netherite_axe", - "id" : 607 - }, - { - "name" : "minecraft:netherite_block", - "id" : -270 - }, - { - "name" : "minecraft:netherite_boots", - "id" : 612 - }, - { - "name" : "minecraft:netherite_chestplate", - "id" : 610 - }, - { - "name" : "minecraft:netherite_helmet", - "id" : 609 - }, - { - "name" : "minecraft:netherite_hoe", - "id" : 608 - }, - { - "name" : "minecraft:netherite_ingot", - "id" : 603 - }, - { - "name" : "minecraft:netherite_leggings", - "id" : 611 - }, - { - "name" : "minecraft:netherite_pickaxe", - "id" : 606 - }, - { - "name" : "minecraft:netherite_scrap", - "id" : 613 - }, - { - "name" : "minecraft:netherite_shovel", - "id" : 605 - }, - { - "name" : "minecraft:netherite_sword", - "id" : 604 - }, - { - "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" : 470 - }, - { - "name" : "minecraft:oak_boat", - "id" : 375 - }, - { - "name" : "minecraft:oak_sign", - "id" : 358 - }, - { - "name" : "minecraft:oak_stairs", - "id" : 53 - }, - { - "name" : "minecraft:observer", - "id" : 251 - }, - { - "name" : "minecraft:obsidian", - "id" : 49 - }, - { - "name" : "minecraft:ocelot_spawn_egg", - "id" : 451 - }, - { - "name" : "minecraft:ochre_froglight", - "id" : -471 - }, - { - "name" : "minecraft:orange_candle", - "id" : -414 - }, - { - "name" : "minecraft:orange_candle_cake", - "id" : -431 - }, - { - "name" : "minecraft:orange_dye", - "id" : 409 - }, - { - "name" : "minecraft:orange_glazed_terracotta", - "id" : 221 - }, - { - "name" : "minecraft:oxidized_copper", - "id" : -343 - }, - { - "name" : "minecraft:oxidized_cut_copper", - "id" : -350 - }, - { - "name" : "minecraft:oxidized_cut_copper_slab", - "id" : -364 - }, - { - "name" : "minecraft:oxidized_cut_copper_stairs", - "id" : -357 - }, - { - "name" : "minecraft:oxidized_double_cut_copper_slab", - "id" : -371 - }, - { - "name" : "minecraft:packed_ice", - "id" : 174 - }, - { - "name" : "minecraft:painting", - "id" : 357 - }, - { - "name" : "minecraft:panda_spawn_egg", - "id" : 489 - }, - { - "name" : "minecraft:paper", - "id" : 386 - }, - { - "name" : "minecraft:parrot_spawn_egg", - "id" : 478 - }, - { - "name" : "minecraft:pearlescent_froglight", - "id" : -469 - }, - { - "name" : "minecraft:phantom_membrane", - "id" : 574 - }, - { - "name" : "minecraft:phantom_spawn_egg", - "id" : 486 - }, - { - "name" : "minecraft:pig_spawn_egg", - "id" : 437 - }, - { - "name" : "minecraft:piglin_banner_pattern", - "id" : 587 - }, - { - "name" : "minecraft:piglin_brute_spawn_egg", - "id" : 499 - }, - { - "name" : "minecraft:piglin_spawn_egg", - "id" : 497 - }, - { - "name" : "minecraft:pillager_spawn_egg", - "id" : 491 - }, - { - "name" : "minecraft:pink_candle", - "id" : -419 - }, - { - "name" : "minecraft:pink_candle_cake", - "id" : -436 - }, - { - "name" : "minecraft:pink_dye", - "id" : 404 - }, - { - "name" : "minecraft:pink_glazed_terracotta", - "id" : 226 - }, - { - "name" : "minecraft:piston", - "id" : 33 - }, - { - "name" : "minecraft:pistonarmcollision", - "id" : 34 - }, - { - "name" : "minecraft:planks", - "id" : 5 - }, - { - "name" : "minecraft:podzol", - "id" : 243 - }, - { - "name" : "minecraft:pointed_dripstone", - "id" : -308 - }, - { - "name" : "minecraft:poisonous_potato", - "id" : 282 - }, - { - "name" : "minecraft:polar_bear_spawn_egg", - "id" : 472 - }, - { - "name" : "minecraft:polished_andesite_stairs", - "id" : -174 - }, - { - "name" : "minecraft:polished_basalt", - "id" : -235 - }, - { - "name" : "minecraft:polished_blackstone", - "id" : -291 - }, - { - "name" : "minecraft:polished_blackstone_brick_double_slab", - "id" : -285 - }, - { - "name" : "minecraft:polished_blackstone_brick_slab", - "id" : -284 - }, - { - "name" : "minecraft:polished_blackstone_brick_stairs", - "id" : -275 - }, - { - "name" : "minecraft:polished_blackstone_brick_wall", - "id" : -278 - }, - { - "name" : "minecraft:polished_blackstone_bricks", - "id" : -274 - }, - { - "name" : "minecraft:polished_blackstone_button", - "id" : -296 - }, - { - "name" : "minecraft:polished_blackstone_double_slab", - "id" : -294 - }, - { - "name" : "minecraft:polished_blackstone_pressure_plate", - "id" : -295 - }, - { - "name" : "minecraft:polished_blackstone_slab", - "id" : -293 - }, - { - "name" : "minecraft:polished_blackstone_stairs", - "id" : -292 - }, - { - "name" : "minecraft:polished_blackstone_wall", - "id" : -297 - }, - { - "name" : "minecraft:polished_deepslate", - "id" : -383 - }, - { - "name" : "minecraft:polished_deepslate_double_slab", - "id" : -397 - }, - { - "name" : "minecraft:polished_deepslate_slab", - "id" : -384 - }, - { - "name" : "minecraft:polished_deepslate_stairs", - "id" : -385 - }, - { - "name" : "minecraft:polished_deepslate_wall", - "id" : -386 - }, - { - "name" : "minecraft:polished_diorite_stairs", - "id" : -173 - }, - { - "name" : "minecraft:polished_granite_stairs", - "id" : -172 - }, - { - "name" : "minecraft:popped_chorus_fruit", - "id" : 559 - }, - { - "name" : "minecraft:porkchop", - "id" : 262 - }, - { - "name" : "minecraft:portal", - "id" : 90 - }, - { - "name" : "minecraft:potato", - "id" : 280 - }, - { - "name" : "minecraft:potatoes", - "id" : 142 - }, - { - "name" : "minecraft:potion", - "id" : 426 - }, - { - "name" : "minecraft:powder_snow", - "id" : -306 - }, - { - "name" : "minecraft:powder_snow_bucket", - "id" : 368 - }, - { - "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" : 549 - }, - { - "name" : "minecraft:prismarine_shard", - "id" : 565 - }, - { - "name" : "minecraft:prismarine_stairs", - "id" : -2 - }, - { - "name" : "minecraft:pufferfish", - "id" : 267 - }, - { - "name" : "minecraft:pufferfish_bucket", - "id" : 367 - }, - { - "name" : "minecraft:pufferfish_spawn_egg", - "id" : 481 - }, - { - "name" : "minecraft:pumpkin", - "id" : 86 - }, - { - "name" : "minecraft:pumpkin_pie", - "id" : 284 - }, - { - "name" : "minecraft:pumpkin_seeds", - "id" : 292 - }, - { - "name" : "minecraft:pumpkin_stem", - "id" : 104 - }, - { - "name" : "minecraft:purple_candle", - "id" : -423 - }, - { - "name" : "minecraft:purple_candle_cake", - "id" : -440 - }, - { - "name" : "minecraft:purple_dye", - "id" : 400 - }, - { - "name" : "minecraft:purple_glazed_terracotta", - "id" : 219 - }, - { - "name" : "minecraft:purpur_block", - "id" : 201 - }, - { - "name" : "minecraft:purpur_stairs", - "id" : 203 - }, - { - "name" : "minecraft:quartz", - "id" : 524 - }, - { - "name" : "minecraft:quartz_block", - "id" : 155 - }, - { - "name" : "minecraft:quartz_bricks", - "id" : -304 - }, - { - "name" : "minecraft:quartz_ore", - "id" : 153 - }, - { - "name" : "minecraft:quartz_stairs", - "id" : 156 - }, - { - "name" : "minecraft:rabbit", - "id" : 288 - }, - { - "name" : "minecraft:rabbit_foot", - "id" : 528 - }, - { - "name" : "minecraft:rabbit_hide", - "id" : 529 - }, - { - "name" : "minecraft:rabbit_spawn_egg", - "id" : 459 - }, - { - "name" : "minecraft:rabbit_stew", - "id" : 290 - }, - { - "name" : "minecraft:rail", - "id" : 66 - }, - { - "name" : "minecraft:rapid_fertilizer", - "id" : 597 - }, - { - "name" : "minecraft:ravager_spawn_egg", - "id" : 493 - }, - { - "name" : "minecraft:raw_copper", - "id" : 507 - }, - { - "name" : "minecraft:raw_copper_block", - "id" : -452 - }, - { - "name" : "minecraft:raw_gold", - "id" : 506 - }, - { - "name" : "minecraft:raw_gold_block", - "id" : -453 - }, - { - "name" : "minecraft:raw_iron", - "id" : 505 - }, - { - "name" : "minecraft:raw_iron_block", - "id" : -451 - }, - { - "name" : "minecraft:real_double_stone_slab", - "id" : 43 - }, - { - "name" : "minecraft:real_double_stone_slab2", - "id" : 181 - }, - { - "name" : "minecraft:real_double_stone_slab3", - "id" : -167 - }, - { - "name" : "minecraft:real_double_stone_slab4", - "id" : -168 - }, - { - "name" : "minecraft:red_candle", - "id" : -427 - }, - { - "name" : "minecraft:red_candle_cake", - "id" : -444 - }, - { - "name" : "minecraft:red_dye", - "id" : 396 - }, - { - "name" : "minecraft:red_flower", - "id" : 38 - }, - { - "name" : "minecraft:red_glazed_terracotta", - "id" : 234 - }, - { - "name" : "minecraft:red_mushroom", - "id" : 40 - }, - { - "name" : "minecraft:red_mushroom_block", - "id" : 100 - }, - { - "name" : "minecraft:red_nether_brick", - "id" : 215 - }, - { - "name" : "minecraft:red_nether_brick_stairs", - "id" : -184 - }, - { - "name" : "minecraft:red_sandstone", - "id" : 179 - }, - { - "name" : "minecraft:red_sandstone_stairs", - "id" : 180 - }, - { - "name" : "minecraft:redstone", - "id" : 373 - }, - { - "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:repeater", - "id" : 419 - }, - { - "name" : "minecraft:repeating_command_block", - "id" : 188 - }, - { - "name" : "minecraft:reserved6", - "id" : 255 - }, - { - "name" : "minecraft:respawn_anchor", - "id" : -272 - }, - { - "name" : "minecraft:rotten_flesh", - "id" : 277 - }, - { - "name" : "minecraft:saddle", - "id" : 371 - }, - { - "name" : "minecraft:salmon", - "id" : 265 - }, - { - "name" : "minecraft:salmon_bucket", - "id" : 365 - }, - { - "name" : "minecraft:salmon_spawn_egg", - "id" : 482 - }, - { - "name" : "minecraft:sand", - "id" : 12 - }, - { - "name" : "minecraft:sandstone", - "id" : 24 - }, - { - "name" : "minecraft:sandstone_stairs", - "id" : 128 - }, - { - "name" : "minecraft:sapling", - "id" : 6 - }, - { - "name" : "minecraft:scaffolding", - "id" : -165 - }, - { - "name" : "minecraft:sculk", - "id" : -458 - }, - { - "name" : "minecraft:sculk_catalyst", - "id" : -460 - }, - { - "name" : "minecraft:sculk_sensor", - "id" : -307 - }, - { - "name" : "minecraft:sculk_shrieker", - "id" : -461 - }, - { - "name" : "minecraft:sculk_vein", - "id" : -459 - }, - { - "name" : "minecraft:scute", - "id" : 572 - }, - { - "name" : "minecraft:sea_pickle", - "id" : -156 - }, - { - "name" : "minecraft:seagrass", - "id" : -130 - }, - { - "name" : "minecraft:sealantern", - "id" : 169 - }, - { - "name" : "minecraft:shears", - "id" : 421 - }, - { - "name" : "minecraft:sheep_spawn_egg", - "id" : 438 - }, - { - "name" : "minecraft:shield", - "id" : 355 - }, - { - "name" : "minecraft:shroomlight", - "id" : -230 - }, - { - "name" : "minecraft:shulker_box", - "id" : 218 - }, - { - "name" : "minecraft:shulker_shell", - "id" : 566 - }, - { - "name" : "minecraft:shulker_spawn_egg", - "id" : 469 - }, - { - "name" : "minecraft:silver_glazed_terracotta", - "id" : 228 - }, - { - "name" : "minecraft:silverfish_spawn_egg", - "id" : 443 - }, - { - "name" : "minecraft:skeleton_horse_spawn_egg", - "id" : 467 - }, - { - "name" : "minecraft:skeleton_spawn_egg", - "id" : 444 - }, - { - "name" : "minecraft:skull", - "id" : 516 - }, - { - "name" : "minecraft:skull_banner_pattern", - "id" : 583 - }, - { - "name" : "minecraft:slime", - "id" : 165 - }, - { - "name" : "minecraft:slime_ball", - "id" : 388 - }, - { - "name" : "minecraft:slime_spawn_egg", - "id" : 445 - }, - { - "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:snow", - "id" : 80 - }, - { - "name" : "minecraft:snow_layer", - "id" : 78 - }, - { - "name" : "minecraft:snowball", - "id" : 374 - }, - { - "name" : "minecraft:soul_campfire", - "id" : 622 - }, - { - "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" : 600 - }, - { - "name" : "minecraft:spawn_egg", - "id" : 636 - }, - { - "name" : "minecraft:spider_eye", - "id" : 278 - }, - { - "name" : "minecraft:spider_spawn_egg", - "id" : 446 - }, - { - "name" : "minecraft:splash_potion", - "id" : 561 - }, - { - "name" : "minecraft:sponge", - "id" : 19 - }, - { - "name" : "minecraft:spore_blossom", - "id" : -321 - }, - { - "name" : "minecraft:spruce_boat", - "id" : 378 - }, - { - "name" : "minecraft:spruce_button", - "id" : -144 - }, - { - "name" : "minecraft:spruce_door", - "id" : 553 - }, - { - "name" : "minecraft:spruce_fence_gate", - "id" : 183 - }, - { - "name" : "minecraft:spruce_pressure_plate", - "id" : -154 - }, - { - "name" : "minecraft:spruce_sign", - "id" : 576 - }, - { - "name" : "minecraft:spruce_stairs", - "id" : 134 - }, - { - "name" : "minecraft:spruce_standing_sign", - "id" : -181 - }, - { - "name" : "minecraft:spruce_trapdoor", - "id" : -149 - }, - { - "name" : "minecraft:spruce_wall_sign", - "id" : -182 - }, - { - "name" : "minecraft:spyglass", - "id" : 626 - }, - { - "name" : "minecraft:squid_spawn_egg", - "id" : 450 - }, - { - "name" : "minecraft:stained_glass", - "id" : 241 - }, - { - "name" : "minecraft:stained_glass_pane", - "id" : 160 - }, - { - "name" : "minecraft:stained_hardened_clay", - "id" : 159 - }, - { - "name" : "minecraft:standing_banner", - "id" : 176 - }, - { - "name" : "minecraft:standing_sign", - "id" : 63 - }, - { - "name" : "minecraft:stick", - "id" : 320 - }, - { - "name" : "minecraft:sticky_piston", - "id" : 29 - }, - { - "name" : "minecraft:stickypistonarmcollision", - "id" : -217 - }, - { - "name" : "minecraft:stone", - "id" : 1 - }, - { - "name" : "minecraft:stone_axe", - "id" : 315 - }, - { - "name" : "minecraft:stone_brick_stairs", - "id" : 109 - }, - { - "name" : "minecraft:stone_button", - "id" : 77 - }, - { - "name" : "minecraft:stone_hoe", - "id" : 330 - }, - { - "name" : "minecraft:stone_pickaxe", - "id" : 314 - }, - { - "name" : "minecraft:stone_pressure_plate", - "id" : 70 - }, - { - "name" : "minecraft:stone_shovel", - "id" : 313 - }, - { - "name" : "minecraft:stone_stairs", - "id" : 67 - }, - { - "name" : "minecraft:stone_sword", - "id" : 312 - }, - { - "name" : "minecraft:stonebrick", - "id" : 98 - }, - { - "name" : "minecraft:stonecutter", - "id" : 245 - }, - { - "name" : "minecraft:stonecutter_block", - "id" : -197 - }, - { - "name" : "minecraft:stray_spawn_egg", - "id" : 462 - }, - { - "name" : "minecraft:strider_spawn_egg", - "id" : 495 - }, - { - "name" : "minecraft:string", - "id" : 326 - }, - { - "name" : "minecraft:stripped_acacia_log", - "id" : -8 - }, - { - "name" : "minecraft:stripped_birch_log", - "id" : -6 - }, - { - "name" : "minecraft:stripped_crimson_hyphae", - "id" : -300 - }, - { - "name" : "minecraft:stripped_crimson_stem", - "id" : -240 - }, - { - "name" : "minecraft:stripped_dark_oak_log", - "id" : -9 - }, - { - "name" : "minecraft:stripped_jungle_log", - "id" : -7 - }, - { - "name" : "minecraft:stripped_oak_log", - "id" : -10 - }, - { - "name" : "minecraft:stripped_spruce_log", - "id" : -5 - }, - { - "name" : "minecraft:stripped_warped_hyphae", - "id" : -301 - }, - { - "name" : "minecraft:stripped_warped_stem", - "id" : -241 - }, - { - "name" : "minecraft:structure_block", - "id" : 252 - }, - { - "name" : "minecraft:structure_void", - "id" : 217 - }, - { - "name" : "minecraft:sugar", - "id" : 416 - }, - { - "name" : "minecraft:sugar_cane", - "id" : 385 - }, - { - "name" : "minecraft:suspicious_stew", - "id" : 590 - }, - { - "name" : "minecraft:sweet_berries", - "id" : 287 - }, - { - "name" : "minecraft:sweet_berry_bush", - "id" : -207 - }, - { - "name" : "minecraft:tadpole_bucket", - "id" : 630 - }, - { - "name" : "minecraft:tadpole_spawn_egg", - "id" : 629 - }, - { - "name" : "minecraft:tallgrass", - "id" : 31 - }, - { - "name" : "minecraft:target", - "id" : -239 - }, - { - "name" : "minecraft:tinted_glass", - "id" : -334 - }, - { - "name" : "minecraft:tnt", - "id" : 46 - }, - { - "name" : "minecraft:tnt_minecart", - "id" : 525 - }, - { - "name" : "minecraft:torch", - "id" : 50 - }, - { - "name" : "minecraft:totem_of_undying", - "id" : 568 - }, - { - "name" : "minecraft:trapdoor", - "id" : 96 - }, - { - "name" : "minecraft:trapped_chest", - "id" : 146 - }, - { - "name" : "minecraft:trident", - "id" : 546 - }, - { - "name" : "minecraft:tripwire", - "id" : 132 - }, - { - "name" : "minecraft:tripwire_hook", - "id" : 131 - }, - { - "name" : "minecraft:tropical_fish", - "id" : 266 - }, - { - "name" : "minecraft:tropical_fish_bucket", - "id" : 366 - }, - { - "name" : "minecraft:tropical_fish_spawn_egg", - "id" : 479 - }, - { - "name" : "minecraft:tuff", - "id" : -333 - }, - { - "name" : "minecraft:turtle_egg", - "id" : -159 - }, - { - "name" : "minecraft:turtle_helmet", - "id" : 573 - }, - { - "name" : "minecraft:turtle_spawn_egg", - "id" : 485 - }, - { - "name" : "minecraft:twisting_vines", - "id" : -287 - }, - { - "name" : "minecraft:underwater_torch", - "id" : 239 - }, - { - "name" : "minecraft:undyed_shulker_box", - "id" : 205 - }, - { - "name" : "minecraft:unknown", - "id" : -305 - }, - { - "name" : "minecraft:unlit_redstone_torch", - "id" : 75 - }, - { - "name" : "minecraft:unpowered_comparator", - "id" : 149 - }, - { - "name" : "minecraft:unpowered_repeater", - "id" : 93 - }, - { - "name" : "minecraft:verdant_froglight", - "id" : -470 - }, - { - "name" : "minecraft:vex_spawn_egg", - "id" : 476 - }, - { - "name" : "minecraft:villager_spawn_egg", - "id" : 449 - }, - { - "name" : "minecraft:vindicator_spawn_egg", - "id" : 474 - }, - { - "name" : "minecraft:vine", - "id" : 106 - }, - { - "name" : "minecraft:wall_banner", - "id" : 177 - }, - { - "name" : "minecraft:wall_sign", - "id" : 68 - }, - { - "name" : "minecraft:wandering_trader_spawn_egg", - "id" : 492 - }, - { - "name" : "minecraft:warped_button", - "id" : -261 - }, - { - "name" : "minecraft:warped_door", - "id" : 617 - }, - { - "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" : 618 - }, - { - "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" : 615 - }, - { - "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" : 362 - }, - { - "name" : "minecraft:waterlily", - "id" : 111 - }, - { - "name" : "minecraft:waxed_copper", - "id" : -344 - }, - { - "name" : "minecraft:waxed_cut_copper", - "id" : -351 - }, - { - "name" : "minecraft:waxed_cut_copper_slab", - "id" : -365 - }, - { - "name" : "minecraft:waxed_cut_copper_stairs", - "id" : -358 - }, - { - "name" : "minecraft:waxed_double_cut_copper_slab", - "id" : -372 - }, - { - "name" : "minecraft:waxed_exposed_copper", - "id" : -345 - }, - { - "name" : "minecraft:waxed_exposed_cut_copper", - "id" : -352 - }, - { - "name" : "minecraft:waxed_exposed_cut_copper_slab", - "id" : -366 - }, - { - "name" : "minecraft:waxed_exposed_cut_copper_stairs", - "id" : -359 - }, - { - "name" : "minecraft:waxed_exposed_double_cut_copper_slab", - "id" : -373 - }, - { - "name" : "minecraft:waxed_oxidized_copper", - "id" : -446 - }, - { - "name" : "minecraft:waxed_oxidized_cut_copper", - "id" : -447 - }, - { - "name" : "minecraft:waxed_oxidized_cut_copper_slab", - "id" : -449 - }, - { - "name" : "minecraft:waxed_oxidized_cut_copper_stairs", - "id" : -448 - }, - { - "name" : "minecraft:waxed_oxidized_double_cut_copper_slab", - "id" : -450 - }, - { - "name" : "minecraft:waxed_weathered_copper", - "id" : -346 - }, - { - "name" : "minecraft:waxed_weathered_cut_copper", - "id" : -353 - }, - { - "name" : "minecraft:waxed_weathered_cut_copper_slab", - "id" : -367 - }, - { - "name" : "minecraft:waxed_weathered_cut_copper_stairs", - "id" : -360 - }, - { - "name" : "minecraft:waxed_weathered_double_cut_copper_slab", - "id" : -374 - }, - { - "name" : "minecraft:weathered_copper", - "id" : -342 - }, - { - "name" : "minecraft:weathered_cut_copper", - "id" : -349 - }, - { - "name" : "minecraft:weathered_cut_copper_slab", - "id" : -363 - }, - { - "name" : "minecraft:weathered_cut_copper_stairs", - "id" : -356 - }, - { - "name" : "minecraft:weathered_double_cut_copper_slab", - "id" : -370 - }, - { - "name" : "minecraft:web", - "id" : 30 - }, - { - "name" : "minecraft:weeping_vines", - "id" : -231 - }, - { - "name" : "minecraft:wheat", - "id" : 334 - }, - { - "name" : "minecraft:wheat_seeds", - "id" : 291 - }, - { - "name" : "minecraft:white_candle", - "id" : -413 - }, - { - "name" : "minecraft:white_candle_cake", - "id" : -430 - }, - { - "name" : "minecraft:white_dye", - "id" : 410 - }, - { - "name" : "minecraft:white_glazed_terracotta", - "id" : 220 - }, - { - "name" : "minecraft:witch_spawn_egg", - "id" : 452 - }, - { - "name" : "minecraft:wither_rose", - "id" : -216 - }, - { - "name" : "minecraft:wither_skeleton_spawn_egg", - "id" : 464 - }, - { - "name" : "minecraft:wolf_spawn_egg", - "id" : 439 - }, - { - "name" : "minecraft:wood", - "id" : -212 - }, - { - "name" : "minecraft:wooden_axe", - "id" : 311 - }, - { - "name" : "minecraft:wooden_button", - "id" : 143 - }, - { - "name" : "minecraft:wooden_door", - "id" : 359 - }, - { - "name" : "minecraft:wooden_hoe", - "id" : 329 - }, - { - "name" : "minecraft:wooden_pickaxe", - "id" : 310 - }, - { - "name" : "minecraft:wooden_pressure_plate", - "id" : 72 - }, - { - "name" : "minecraft:wooden_shovel", - "id" : 309 - }, - { - "name" : "minecraft:wooden_slab", - "id" : 158 - }, - { - "name" : "minecraft:wooden_sword", - "id" : 308 - }, - { - "name" : "minecraft:wool", - "id" : 35 - }, - { - "name" : "minecraft:writable_book", - "id" : 510 - }, - { - "name" : "minecraft:written_book", - "id" : 511 - }, - { - "name" : "minecraft:yellow_candle", - "id" : -417 - }, - { - "name" : "minecraft:yellow_candle_cake", - "id" : -434 - }, - { - "name" : "minecraft:yellow_dye", - "id" : 406 - }, - { - "name" : "minecraft:yellow_flower", - "id" : 37 - }, - { - "name" : "minecraft:yellow_glazed_terracotta", - "id" : 224 - }, - { - "name" : "minecraft:zoglin_spawn_egg", - "id" : 498 - }, - { - "name" : "minecraft:zombie_horse_spawn_egg", - "id" : 468 - }, - { - "name" : "minecraft:zombie_pigman_spawn_egg", - "id" : 448 - }, - { - "name" : "minecraft:zombie_spawn_egg", - "id" : 447 - }, - { - "name" : "minecraft:zombie_villager_spawn_egg", - "id" : 477 - } -] \ No newline at end of file diff --git a/core/src/main/resources/bedrock/runtime_item_states.1_18_30.json b/core/src/main/resources/bedrock/runtime_item_states.1_19_0.json similarity index 97% rename from core/src/main/resources/bedrock/runtime_item_states.1_18_30.json rename to core/src/main/resources/bedrock/runtime_item_states.1_19_0.json index 4e609c7c0..b1ffe6353 100644 --- a/core/src/main/resources/bedrock/runtime_item_states.1_18_30.json +++ b/core/src/main/resources/bedrock/runtime_item_states.1_19_0.json @@ -9,7 +9,7 @@ }, { "name" : "minecraft:acacia_chest_boat", - "id" : 637 + "id" : 643 }, { "name" : "minecraft:acacia_door", @@ -57,7 +57,7 @@ }, { "name" : "minecraft:allay_spawn_egg", - "id" : 630 + "id" : 631 }, { "name" : "minecraft:allow", @@ -141,7 +141,7 @@ }, { "name" : "minecraft:banner_pattern", - "id" : 642 + "id" : 651 }, { "name" : "minecraft:barrel", @@ -217,7 +217,7 @@ }, { "name" : "minecraft:birch_chest_boat", - "id" : 634 + "id" : 640 }, { "name" : "minecraft:birch_door", @@ -329,7 +329,7 @@ }, { "name" : "minecraft:boat", - "id" : 640 + "id" : 649 }, { "name" : "minecraft:bone", @@ -541,7 +541,7 @@ }, { "name" : "minecraft:chest_boat", - "id" : 639 + "id" : 646 }, { "name" : "minecraft:chest_minecart", @@ -921,7 +921,7 @@ }, { "name" : "minecraft:dark_oak_chest_boat", - "id" : 638 + "id" : 644 }, { "name" : "minecraft:dark_oak_door", @@ -1119,6 +1119,10 @@ "name" : "minecraft:dirt_with_roots", "id" : -318 }, + { + "name" : "minecraft:disc_fragment_5", + "id" : 638 + }, { "name" : "minecraft:dispenser", "id" : 23 @@ -1140,20 +1144,20 @@ "id" : 175 }, { - "name" : "minecraft:double_stone_slab", - "id" : 44 + "name" : "minecraft:double_stone_block_slab", + "id" : 43 }, { - "name" : "minecraft:double_stone_slab2", - "id" : 182 + "name" : "minecraft:double_stone_block_slab2", + "id" : 181 }, { - "name" : "minecraft:double_stone_slab3", - "id" : -162 + "name" : "minecraft:double_stone_block_slab3", + "id" : -167 }, { - "name" : "minecraft:double_stone_slab4", - "id" : -166 + "name" : "minecraft:double_stone_block_slab4", + "id" : -168 }, { "name" : "minecraft:double_wooden_slab", @@ -1189,7 +1193,11 @@ }, { "name" : "minecraft:dye", - "id" : 641 + "id" : 650 + }, + { + "name" : "minecraft:echo_shard", + "id" : 648 }, { "name" : "minecraft:egg", @@ -1717,7 +1725,7 @@ }, { "name" : "minecraft:end_crystal", - "id" : 644 + "id" : 653 }, { "name" : "minecraft:end_gateway", @@ -1825,7 +1833,7 @@ }, { "name" : "minecraft:firefly_spawn_egg", - "id" : 632 + "id" : 633 }, { "name" : "minecraft:firework_rocket", @@ -1885,7 +1893,7 @@ }, { "name" : "minecraft:frog_spawn_egg", - "id" : 627 + "id" : 628 }, { "name" : "minecraft:frosted_ice", @@ -1929,7 +1937,7 @@ }, { "name" : "minecraft:glow_berries", - "id" : 645 + "id" : 654 }, { "name" : "minecraft:glow_frame", @@ -1963,6 +1971,10 @@ "name" : "minecraft:glowstone_dust", "id" : 394 }, + { + "name" : "minecraft:goat_horn", + "id" : 627 + }, { "name" : "minecraft:goat_spawn_egg", "id" : 501 @@ -2339,6 +2351,10 @@ "name" : "minecraft:item.kelp", "id" : -138 }, + { + "name" : "minecraft:item.mangrove_door", + "id" : -493 + }, { "name" : "minecraft:item.nether_sprouts", "id" : -238 @@ -2393,7 +2409,7 @@ }, { "name" : "minecraft:jungle_chest_boat", - "id" : 635 + "id" : 641 }, { "name" : "minecraft:jungle_door", @@ -2651,17 +2667,85 @@ "name" : "minecraft:magma_cube_spawn_egg", "id" : 455 }, + { + "name" : "minecraft:mangrove_boat", + "id" : 636 + }, + { + "name" : "minecraft:mangrove_button", + "id" : -487 + }, + { + "name" : "minecraft:mangrove_chest_boat", + "id" : 645 + }, + { + "name" : "minecraft:mangrove_door", + "id" : 634 + }, + { + "name" : "minecraft:mangrove_double_slab", + "id" : -499 + }, + { + "name" : "minecraft:mangrove_fence", + "id" : -491 + }, + { + "name" : "minecraft:mangrove_fence_gate", + "id" : -492 + }, { "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_propagule_hanging", - "id" : -476 + "name" : "minecraft:mangrove_roots", + "id" : -482 + }, + { + "name" : "minecraft:mangrove_sign", + "id" : 635 + }, + { + "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", @@ -2759,6 +2843,10 @@ "name" : "minecraft:mud_bricks", "id" : -475 }, + { + "name" : "minecraft:muddy_mangrove_roots", + "id" : -483 + }, { "name" : "minecraft:mule_spawn_egg", "id" : 466 @@ -2775,6 +2863,10 @@ "name" : "minecraft:music_disc_13", "id" : 534 }, + { + "name" : "minecraft:music_disc_5", + "id" : 637 + }, { "name" : "minecraft:music_disc_blocks", "id" : 536 @@ -2949,7 +3041,7 @@ }, { "name" : "minecraft:oak_chest_boat", - "id" : 633 + "id" : 639 }, { "name" : "minecraft:oak_sign", @@ -3384,20 +3476,8 @@ "id" : -451 }, { - "name" : "minecraft:real_double_stone_slab", - "id" : 43 - }, - { - "name" : "minecraft:real_double_stone_slab2", - "id" : 181 - }, - { - "name" : "minecraft:real_double_stone_slab3", - "id" : -167 - }, - { - "name" : "minecraft:real_double_stone_slab4", - "id" : -168 + "name" : "minecraft:recovery_compass", + "id" : 647 }, { "name" : "minecraft:red_candle", @@ -3705,7 +3785,7 @@ }, { "name" : "minecraft:spawn_egg", - "id" : 643 + "id" : 652 }, { "name" : "minecraft:spider_eye", @@ -3737,7 +3817,7 @@ }, { "name" : "minecraft:spruce_chest_boat", - "id" : 636 + "id" : 642 }, { "name" : "minecraft:spruce_door", @@ -3819,6 +3899,22 @@ "name" : "minecraft:stone_axe", "id" : 315 }, + { + "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 @@ -3899,6 +3995,14 @@ "name" : "minecraft:stripped_jungle_log", "id" : -7 }, + { + "name" : "minecraft:stripped_mangrove_log", + "id" : -485 + }, + { + "name" : "minecraft:stripped_mangrove_wood", + "id" : -498 + }, { "name" : "minecraft:stripped_oak_log", "id" : -10 @@ -3945,11 +4049,11 @@ }, { "name" : "minecraft:tadpole_bucket", - "id" : 629 + "id" : 630 }, { "name" : "minecraft:tadpole_spawn_egg", - "id" : 628 + "id" : 629 }, { "name" : "minecraft:tallgrass", @@ -4089,7 +4193,7 @@ }, { "name" : "minecraft:warden_spawn_egg", - "id" : 631 + "id" : 632 }, { "name" : "minecraft:warped_button", diff --git a/core/src/main/resources/mappings b/core/src/main/resources/mappings index f73b45844..e13611fd9 160000 --- a/core/src/main/resources/mappings +++ b/core/src/main/resources/mappings @@ -1 +1 @@ -Subproject commit f73b45844f1185c3898db3052ce4ea0d18246168 +Subproject commit e13611fd97b1801d4c4b914cd409351a49d19537